Class: Orthoses::Builder

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

Overview

Middleware builder like the Rack

Builder.new do
  use Orthoses::CreateFileByName
  use Orthoses::Constant
  use Orthoses::Mixin
  use Orthoses::Walk,
    root: "Foo"
  run ->() { require 'foo' }
end

Defined Under Namespace

Modules: CallLogable

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ Builder

Returns a new instance of Builder.



14
15
16
17
18
# File 'lib/orthoses/builder.rb', line 14

def initialize(&block)
  @use = []
  @runner = nil
  instance_eval(&block) if block
end

Instance Method Details

#callObject



56
57
58
# File 'lib/orthoses/builder.rb', line 56

def call
  to_loader.call
end

#reset_runner(loader) ⇒ Object



43
44
45
46
47
48
49
50
# File 'lib/orthoses/builder.rb', line 43

def reset_runner(loader)
  @runner = proc do
    Orthoses.logger.info("[loader].call start")
    loader.call.tap do
      Orthoses.logger.info("[loader].call end")
    end
  end
end

#run(loader) ⇒ Object



38
39
40
41
# File 'lib/orthoses/builder.rb', line 38

def run(loader)
  use Store
  reset_runner(loader)
end

#to_loaderObject



52
53
54
# File 'lib/orthoses/builder.rb', line 52

def to_loader
  @use.reverse.inject(@runner) { |current, next_proc| next_proc[current] }
end

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



29
30
31
32
33
34
35
36
# File 'lib/orthoses/builder.rb', line 29

def use(middleware, *args, **key, &block)
  Orthoses.logger.debug("use #{middleware}")
  @use << proc do |loader|
    middleware.new(loader, *args, **key, &block).tap do |m|
      m.extend CallLogable
    end
  end
end