Sha256: b0291e611364029385ec169b2fb0b2dd42041b7122ac9624ae837f8fef8d76f2

Contents?: true

Size: 1.33 KB

Versions: 2

Compression:

Stored size: 1.33 KB

Contents

require 'action_dispatch'
require 'active_support/core_ext/module/aliasing'
require 'active_support/core_ext/hash/reverse_merge'

mappers = [ActionDispatch::Routing::Mapper]
mappers << ActionDispatch::Routing::DeprecatedMapper if defined?(ActionDispatch::Routing::DeprecatedMapper)
mappers.each do |mapper|
  mapper.class_eval do
    def filter(*args)
      @set.add_filters(*args)
    end
  end
end

ActionDispatch::Routing::RouteSet.class_eval do
  def filters
    @set.filters if @set
  end

  def add_filters(*names)
    options = names.extract_options!
    names.each { |name| filters.unshift(RoutingFilter.build(name, options)) }
  end

  def generate_with_filtering(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)
    })
  end
  alias_method_chain :generate, :filtering

  def clear_with_filtering!
    filters.clear if filters
    clear_without_filtering!
  end
  alias_method_chain :clear!, :filtering
end

ActionDispatch::Journey::Routes.class_eval do
  def filters
    @filters || RoutingFilter::Chain.new.tap { |f| @filters = f unless frozen? }
  end
end

require 'routing_filter/adapters/routers/journey'

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
routing-filter-0.5.1 lib/routing_filter/adapters/rails.rb
routing-filter-0.5.0 lib/routing_filter/adapters/rails.rb