Sha256: 2d0dccd7692f662f6c135f076074fbf36443873cbd8efbd8d1c9cdeb9244a8fc

Contents?: true

Size: 1.73 KB

Versions: 3

Compression:

Stored size: 1.73 KB

Contents

# frozen_string_literal: true

module Hanami
  class Router
    # Represents a result of router path recognition.
    #
    # @since 0.5.0
    #
    # @see Hanami::Router#recognize
    class RecognizedRoute
      def initialize(endpoint, env)
        @endpoint = endpoint
        @env = env
      end

      # Rack protocol compatibility
      #
      # @param env [Hash] Rack env
      #
      # @return [Array] serialized Rack response
      #
      # @raise [Hanami::Router::NotRoutableEndpointError] if not routable
      #
      # @since 0.5.0
      # @api public
      #
      # @see Hanami::Router::RecognizedRoute#routable?
      # @see Hanami::Router::NotRoutableEndpointError
      def call(env)
        if routable?
          @endpoint.call(env)
        else
          raise NotRoutableEndpointError.new(@env)
        end
      end

      # HTTP verb (aka method)
      #
      # @return [String]
      #
      # @since 0.5.0
      # @api public
      def verb
        @env[::Rack::REQUEST_METHOD]
      end

      # Relative URL (path)
      #
      # @return [String]
      #
      # @since 0.7.0
      # @api public
      def path
        @env[::Rack::PATH_INFO]
      end

      # @since 0.7.0
      # @api public
      def params
        @env[Router::PARAMS]
      end

      # @since 0.7.0
      # @api public
      def endpoint
        return nil if redirect?

        @endpoint
      end

      # @since 0.7.0
      # @api public
      def routable?
        !@endpoint.nil?
      end

      # @since 0.7.0
      # @api public
      def redirect?
        @endpoint.is_a?(Redirect)
      end

      # @since 0.7.0
      # @api public
      def redirection_path
        return nil unless redirect?

        @endpoint.destination
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
hanami-router-2.0.0.beta4 lib/hanami/router/recognized_route.rb
hanami-router-2.0.0.beta2 lib/hanami/router/recognized_route.rb
hanami-router-2.0.0.beta1 lib/hanami/router/recognized_route.rb