/
app.rb
50 lines (40 loc) · 1.01 KB
/
app.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 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