Sha256: eb40da01e74e47c4151523fa93e7011b9065f1d3b6fabecf80522b7ed9bc2c54

Contents?: true

Size: 1.02 KB

Versions: 20

Compression:

Stored size: 1.02 KB

Contents

module Shogun
  class Dispatch
    class Lookup
      include Adamantium

      attr_reader :routes
      private :routes

      def initialize(routes:, verb:, path:)
        @routes = routes
        @verb = verb
        @path = path
      end

      def request
        "#{@verb} #{@path}"
      end
      memoize :request

      def payload
        if match.captures.any?
          match.names.zip(match.captures).to_h
        else
          {}
        end
      end
      memoize :payload

      def to_route
        regular || regexp || Route::Null.new
      end
      memoize :to_route

      private def regexp
        routes[pattern]
      end
      memoize :regexp

      private def regular
        routes[request]
      end
      memoize :regular

      private def match
        request.match(pattern)
      end
      memoize :match

      private def pattern
        routes.keys.detect(NO_MATCH) do |key|
          if key.is_a?(Regexp) then request =~ key else next end
        end
      end
      memoize :pattern
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
shogun-6.4.2 lib/shogun/dispatch/lookup.rb
shogun-6.4.1 lib/shogun/dispatch/lookup.rb
shogun-6.4.0 lib/shogun/dispatch/lookup.rb
shogun-6.3.0 lib/shogun/dispatch/lookup.rb
shogun-6.2.3 lib/shogun/dispatch/lookup.rb
shogun-6.2.2 lib/shogun/dispatch/lookup.rb
shogun-6.2.1 lib/shogun/dispatch/lookup.rb
shogun-6.2.0 lib/shogun/dispatch/lookup.rb
shogun-6.1.0 lib/shogun/dispatch/lookup.rb
shogun-6.0.0 lib/shogun/dispatch/lookup.rb
shogun-4.0.1 lib/shogun/dispatch/lookup.rb
shogun-4.0.0 lib/shogun/dispatch/lookup.rb
shogun-3.4.0 lib/shogun/dispatch/lookup.rb
shogun-3.2.0 lib/shogun/dispatch/lookup.rb
shogun-3.1.0 lib/shogun/dispatch/lookup.rb
shogun-3.0.0 lib/shogun/dispatch/lookup.rb
shogun-2.1.1 lib/shogun/dispatch/lookup.rb
shogun-2.1.0 lib/shogun/dispatch/lookup.rb
shogun-2.0.0 lib/shogun/dispatch/lookup.rb
shogun-1.0.0 lib/shogun/dispatch/lookup.rb