Sha256: 7fde306838574e547f58da209b02d43449612413bc4d8085304f8b56ea02c65a

Contents?: true

Size: 1.34 KB

Versions: 15

Compression:

Stored size: 1.34 KB

Contents

module Shogun
  class Dispatch
    PATH_KEY = "REQUEST_PATH"
    METHOD_KEY = "REQUEST_METHOD"
    NO_MATCH = -> { // }

    require_relative "dispatch/route"
    require_relative "dispatch/payload"
    require_relative "dispatch/lookup"

    attr_reader :routes
    private :routes

    attr_reader :payload
    private :payload

    attr_reader :lookup
    private :lookup

    attr_reader :route
    private :route

    def initialize(logger:)
      @routes = {}
      @logger = logger
      yield(self)
    end

    def call(state)
      @state = state

      lookup = Lookup.new(routes: routes, verb: state[METHOD_KEY], path: state[PATH_KEY])

      payload = Payload.new(state: state, lookup: lookup)

      route = lookup.to_route

      control = route.control.new(payload: payload)

      @logger.debug(self.class) do
        "Request `#{lookup.request}` handled by `#{route.control}`"
      end

      control.to_a.tap do |response|
        @logger.debug(self.class) do
          "Response `#{response[0]}` with `#{response[2]}`"
        end
      end
    end

    def push(route:)
      routes[route.as_key] = route
    end

    private def stack
      @stack
    end

    private def state
      @state
    end

    private def headers
      @headers
    end

    private def status
      @status
    end

    private def body
      @body
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

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