Class: Stacko::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/stacko/builder.rb

Instance Method Summary collapse

Constructor Details

#initialize(default_app = nil, &block) ⇒ Builder

Returns a new instance of Builder.



3
4
5
6
7
8
# File 'lib/stacko/builder.rb', line 3

def initialize(default_app = nil, &block)
  @run = default_app
  @use = []
  @map = nil
  instance_eval(&block) if block_given?
end

Instance Method Details

#call(env) ⇒ Object



35
36
37
# File 'lib/stacko/builder.rb', line 35

def call(env)
  to_app.call(env)
end

#map(method_name, &block) ⇒ Object



23
24
25
26
# File 'lib/stacko/builder.rb', line 23

def map(method_name, &block)
  @map ||= {}
  @map[method_name] = block
end

#run(app) ⇒ Object



19
20
21
# File 'lib/stacko/builder.rb', line 19

def run(app)
  @run = app
end

#to_appObject



28
29
30
31
32
33
# File 'lib/stacko/builder.rb', line 28

def to_app
  app = @map ? generate_map(@run, @map) : @run
  fail "missing run or map statement" unless app
  app = @use.reverse.inject(app) { |a,e| e[a] }
  app
end

#use(middleware, *args, &block) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/stacko/builder.rb', line 10

def use(middleware, *args, &block)
  if @map
    mapping = @map
    @map = nil
    @use << proc { |app| generate_map(app, mapping) }
  end
  @use << proc { |app| middleware.new(app, *args, &block) }
end