Open dblock opened 2 years ago
So I had already figured out how to do it on my own prior to looking at this.
In essence all I did was modify config.ru to run SlackRubyBotServer alongside my Grape::API class...
run Rack::Cascade.new [SlackRubyBotServer::Api::Middleware.instance, MyApp::API]
It looks like the recommended way is to mount my Grape API in config/routes.rb for Rails 7. However, when I attempt to do that instead of the above it stops working. The only way I've been able to get both to successfully work together is the Cascade method above.
I like the Rack::Cascade
solution because it's clean and independent, but then it doesn't sit behind other stack items, it's a whole stack of its own (e.g. caching or Rack::Cors
). I think in the end the mot efficient solution is a single middleware stack where the bot API is mounted next to any other API. Would love to see 1) a proper extension point, 2) a working example added to the sample app, 3) documentation, and 4) a Rails sample/version.
Yeah, I'm at the point now where the Cascade isn't working so great. I'm trying to understand better what your monkey-patch above is doing.. to see if I can get it working in my app. Not sure I quite understand what it's doing quite yet though.
Thanks for the guidance so far!
I have been unsuccessful in getting your monkey-patch to work yet.
I tried adding the below to my config.ru. Which I thought was an equivalent to what you posted above.. but it continues to block other routes.
module SlackRubyBotServer
module Api
module Endpoints
class MyEndpoint < Grape::API
mount MyApp::API
end
class RootEndpoint < Grape::API
mount MyEndpoint
end
end
end
end
run SlackRubyBotServer::Api::Middleware.instance
Coming from https://github.com/slack-ruby/slack-ruby-bot-server/issues/150#issuecomment-1293818003, document how to add a RESTful API.
This monkey-patching should work:
We should document, and possibly implement a cleaner way to do this.
It's a bit of a rabbit hole. The root endpoint is https://github.com/slack-ruby/slack-ruby-bot-server/blob/master/lib/slack-ruby-bot-server/api/endpoints/root_endpoint.rb, invoked from https://github.com/slack-ruby/slack-ruby-bot-server/blob/99e91edbc3092dc9f9665fb8c9be3eebff3252f1/lib/slack-ruby-bot-server/api/middleware.rb#L40. It's extended in https://github.com/slack-ruby/slack-ruby-bot-server-events/blob/fb68e18314a58f7d345f98e015243307b24c8f88/lib/slack-ruby-bot-server/api/endpoints.rb#L24 for events. The instance of that middleware (https://github.com/slack-ruby/slack-ruby-bot-server/blob/99e91edbc3092dc9f9665fb8c9be3eebff3252f1/lib/slack-ruby-bot-server/api/middleware.rb#L15) is started in