routing-filter
routing-filter copied to clipboard
make compatible with rails 7.1 (most likely will break for previous v…
This seems to work fine in our project for filters to work again with rails >= 7.1.
Maybe I'll have the time to properly implement this with backwards compatibility.
For now this might help others :)
Should address this issue https://github.com/svenfuchs/routing-filter/issues/83
I confirm this fixes the issue. @svenfuchs can you please merge and release this as a new major version? I think it's fine to drop support for pre-Rails 7.1 as users can just use older versions of this gem which is very stable.
@simi can you handle this?
Can also confirm this helps.
As the project support seams to be dead at this point, I recommend using a monkey patch in the meantime by adding a file lib/ext/routing_filter/adapters/routers/journey.rb
if Gem.loaded_specs['routing-filter'].version > Gem::Version.new('0.7')
raise 'Check if PR https://github.com/svenfuchs/routing-filter/pull/87 has been merged and released. If yes, delete this monkey patch.'
end
# We cannot prepend a custom extension module here because we call `super` in this method which should call the Rails
# #find_routes-method and not the routing_filter's #find_routes-method which is broken.
# Instead, we override the whole module definition to fix it.
module ActionDispatchJourneyRouterWithFiltering
def find_routes(env)
path = env.is_a?(Hash) ? env['PATH_INFO'] : env.path_info
filter_parameters = {}
original_path = path.dup
@routes.filters.run(:around_recognize, path, env) do
filter_parameters
end
super(env) do |match, parameters, route|
parameters = parameters.merge(filter_parameters)
if env.is_a?(Hash)
env['PATH_INFO'] = original_path
else
env.path_info = original_path
end
yield [match, parameters, route]
end
end
end
This opens the module and overwrites the libary's current implementation within your application. Then add an initializer config/initializers/ext.rb and require the directory contents:
Dir.glob(Rails.root.join('lib/ext/**/*.rb')).sort.each do |filename|
require filename
end
See also: https://makandracards.com/makandra/40730-how-to-organize-monkey-patches-in-ruby-on-rails-projects
You cannot use prepend for monkey patching the module as it calls super itself and we need to exchange the complete implementation.
Thanks for this fix @nduitz ! It works for me on Rails 7.1.4 - I really hope somebody is able to merge and release this and that the gem has not just become abandonware.
@simi @svenfuchs please merge this and release as a new major version?