Sha256: fd242238a9b3077b2cc6969e62d8b660281a148d7c1025c0a05b22054e178a82

Contents?: true

Size: 1.76 KB

Versions: 2

Compression:

Stored size: 1.76 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? # rubocop:disable Style/GuardClause
          @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["REQUEST_METHOD"]
      end

      # Relative URL (path)
      #
      # @return [String]
      #
      # @since 0.7.0
      # @api public
      def path
        @env["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

2 entries across 2 versions & 1 rubygems

Version Path
hanami-router-2.0.0.alpha3 lib/hanami/router/recognized_route.rb
hanami-router-2.0.0.alpha2 lib/hanami/router/recognized_route.rb