Sha256: edf94c094ad72c3f4fbd90fcc00d829e73293016e66219ef869290908afd0f67

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

require 'active_support/core_ext'
require 'action_dispatch/routing/inspector'
require_relative 'mount_route'

module Passages
  # Main DelegateClass used for decoration and discerning if a route is
  #  a "regular" route or a mount route
  class Route < DelegateClass(ActionDispatch::Routing::RouteWrapper)
    def initialize(route)
      super(ActionDispatch::Routing::RouteWrapper.new(route))
    end

    class << self
      def attributes_for_display
        %w(name verb controller action path)
      end

      def from_raw_route(raw_route)
        mount_class = mount_route_class(raw_route)

        if mount_class.nil?
          new(raw_route)
        else
          MountRoute.new(raw_route, mount_class)
        end
      end

      private

      def mount_route_class(route)
        route_app = route.app

        app(route_app) if app(route_app).ancestors.include?(Rails::Engine)
      rescue
        nil
      end

      def app(route_app)
        @app ||= begin
          if route_app.class == Class
            route_app
          else
            route_app.try(:app)
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
passages-1.4.1 lib/passages/route.rb