Sha256: ed0d03245ee8f4943f68da092d16e511db9103fbb5d93c42f5b4fafe05d3cd1d

Contents?: true

Size: 1.26 KB

Versions: 38

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

require "active_support/core_ext/module/introspection"

module AbstractController
  module Railties
    module RoutesHelpers
      def self.with(routes, include_path_helpers = true)
        Module.new do
          define_method(:inherited) do |klass|
            super(klass)

            namespace = klass.module_parents.detect { |m| m.respond_to?(:railtie_routes_url_helpers) }
            actual_routes = namespace ? namespace.railtie_routes_url_helpers._routes : routes

            if namespace
              klass.include(namespace.railtie_routes_url_helpers(include_path_helpers))
            else
              klass.include(routes.url_helpers(include_path_helpers))
            end

            # In the case that we have ex.
            #   class A::Foo < ApplicationController
            #   class Bar < A::Foo
            # We will need to redefine _routes because it will not be correct
            # via inheritance.
            unless klass._routes.equal?(actual_routes)
              klass.redefine_singleton_method(:_routes) { actual_routes }
              klass.include(Module.new do
                define_method(:_routes) { @_routes || actual_routes }
              end)
            end
          end
        end
      end
    end
  end
end

Version data entries

38 entries across 36 versions & 4 rubygems

Version Path
actionpack-7.0.8.7 lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.8.6 lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.8.5 lib/abstract_controller/railties/routes_helpers.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/actionpack-7.0.8.4/lib/abstract_controller/railties/routes_helpers.rb
cm-admin-1.5.22 vendor/bundle/ruby/3.3.0/gems/actionpack-7.0.5.1/lib/abstract_controller/railties/routes_helpers.rb
cm-admin-1.5.21 vendor/bundle/ruby/3.3.0/gems/actionpack-7.0.5.1/lib/abstract_controller/railties/routes_helpers.rb
cm-admin-1.5.20 vendor/bundle/ruby/3.3.0/gems/actionpack-7.0.5.1/lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.8.4 lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.8.1 lib/abstract_controller/railties/routes_helpers.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/actionpack-7.0.3.1/lib/abstract_controller/railties/routes_helpers.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/actionpack-7.0.2.3/lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.8 lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.7.2 lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.7.1 lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.7 lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.6 lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.5.1 lib/abstract_controller/railties/routes_helpers.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/actionpack-7.0.2.3/lib/abstract_controller/railties/routes_helpers.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/actionpack-7.0.3.1/lib/abstract_controller/railties/routes_helpers.rb
actionpack-7.0.5 lib/abstract_controller/railties/routes_helpers.rb