Sha256: c195ffc260ba47c053d1c6c576dac3d689d2b6a4410c18c0bc77bca8db0592b2

Contents?: true

Size: 1.01 KB

Versions: 5

Compression:

Stored size: 1.01 KB

Contents

# frozen_string_literal: true

require "rack/builder"
require_relative "trie"

module Hanami
  module Middleware
    # Hanami Rack middleware stack

    # @since 2.0.0
    # @api private
    class App
      # @param router [Hanami::Router]
      # @param mapping [Hash]
      #
      # @since 2.0.0
      # @api private
      def initialize(router, mapping)
        @trie = Hanami::Middleware::Trie.new(router)

        mapping.each do |path, stack|
          builder = Rack::Builder.new

          stack.each do |middleware, args, kwargs, blk|
            builder.use(middleware, *args, **kwargs, &blk)
          end

          builder.run(router)

          @trie.add(path, builder.to_app.freeze)
        end

        @trie.freeze
        @inspector = router.inspector.freeze
      end

      # @since 2.0.0
      # @api private
      def call(env)
        @trie.find(env[::Rack::PATH_INFO]).call(env)
      end

      # @since 2.0.0
      # @api private
      def to_inspect
        @inspector&.call.to_s
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
hanami-router-2.2.0 lib/hanami/middleware/app.rb
hanami-router-2.2.0.rc1 lib/hanami/middleware/app.rb
hanami-router-2.2.0.beta2 lib/hanami/middleware/app.rb
hanami-router-2.2.0.beta1 lib/hanami/middleware/app.rb
hanami-router-2.1.0 lib/hanami/middleware/app.rb