diff --git a/lib/routing_filter/adapters/rails.rb b/lib/routing_filter/adapters/rails.rb index fafb39c..d227715 100644 --- a/lib/routing_filter/adapters/rails.rb +++ b/lib/routing_filter/adapters/rails.rb @@ -12,7 +12,7 @@ def filter(*args) end end -ActionDispatch::Routing::RouteSet.class_eval do +module ActionDispatchRoutingRouteSetWithFiltering def filters @set.filters if @set end @@ -22,23 +22,24 @@ def add_filters(*names) names.each { |name| filters.unshift(RoutingFilter.build(name, options)) } end - def generate_with_filtering(route_key, options, recall = {}) + def generate(route_key, options, recall = {}) options = options.symbolize_keys # `around_generate` is destructive method and it breaks url. To avoid this, `dup` is required. filters.run(:around_generate, options, &lambda{ - generate_without_filtering(route_key, options, recall).map(&:dup) + super(route_key, options, recall).map(&:dup) }) end - alias_method_chain :generate, :filtering - def clear_with_filtering! + def clear! filters.clear if filters - clear_without_filtering! + super! end - alias_method_chain :clear!, :filtering end +ActionDispatch::Routing::RouteSet.send(:prepend, ActionDispatchRoutingRouteSetWithFiltering) + + ActionDispatch::Journey::Routes.class_eval do def filters @filters || RoutingFilter::Chain.new.tap { |f| @filters = f unless frozen? } diff --git a/lib/routing_filter/adapters/routers/journey.rb b/lib/routing_filter/adapters/routers/journey.rb index 30ae9d5..a700e2b 100644 --- a/lib/routing_filter/adapters/routers/journey.rb +++ b/lib/routing_filter/adapters/routers/journey.rb @@ -4,8 +4,8 @@ def filters end end -ActionDispatch::Journey::Router.class_eval do - def find_routes_with_filtering(env) +module ActionDispatchJourneyRouterWithFiltering + def find_routes(env) path = env.is_a?(Hash) ? env['PATH_INFO'] : env.path_info filter_parameters = {} original_path = path.dup @@ -14,7 +14,7 @@ def find_routes_with_filtering(env) filter_parameters end - find_routes_without_filtering(env).map do |match, parameters, route| + super(env).map do |match, parameters, route| [ match, parameters.merge(filter_parameters), route ] end.tap do |match, parameters, route| # restore the original path @@ -25,5 +25,6 @@ def find_routes_with_filtering(env) end end end - alias_method_chain :find_routes, :filtering end + +ActionDispatch::Journey::Router.send(:prepend, ActionDispatchJourneyRouterWithFiltering) \ No newline at end of file