Sha256: b5500a05a53b93cf1e49e6defdabc5d5777e2933472bbf595ca8ec5591c81597

Contents?: true

Size: 1.12 KB

Versions: 3

Compression:

Stored size: 1.12 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)
    ATTRIBUTES_FOR_DISPLAY = %w[name verb controller action path].freeze

    def initialize(route)
      super(ActionDispatch::Routing::RouteWrapper.new(route))
    end

    class << self
      def attributes_for_display
        ATTRIBUTES_FOR_DISPLAY
      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)
        klass = app_class(route.app)

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

      def app_class(route_app)
        if route_app.class == Class
          route_app
        else
          route_app.try(:app)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
passages-3.0.0 lib/passages/route.rb
passages-2.2.0 lib/passages/route.rb
passages-2.1.0 lib/passages/route.rb