class Rubhttp::RackBuilder

Constants

LockedError

Attributes

adapter[R]

Public Class Methods

app(&block) click to toggle source
# File lib/rubhttp/rack_builder.rb, line 9
def self.app(&block)
  builder = new
  block.call(builder) if block_given?
  builder.app
end
new() click to toggle source
# File lib/rubhttp/rack_builder.rb, line 15
def initialize
  @adapter = nil
  @middlewares = []
end

Public Instance Methods

app() click to toggle source
# File lib/rubhttp/rack_builder.rb, line 25
def app
  @app ||= begin
    lock!
    to_app
  end
end
use(middleware, *args, &block) click to toggle source
# File lib/rubhttp/rack_builder.rb, line 20
def use(middleware, *args, &block)
  raise_error_if_locked
  @middlewares << proc { |app| middleware.new(app, *args, &block) }
end

Private Instance Methods

default_adapter() click to toggle source
# File lib/rubhttp/rack_builder.rb, line 46
def default_adapter
  Adapters::HTTP.new
end
lock!() click to toggle source
# File lib/rubhttp/rack_builder.rb, line 34
def lock!
  @middlewares.freeze
end
locked?() click to toggle source
# File lib/rubhttp/rack_builder.rb, line 38
def locked?
  @middlewares.frozen?
end
raise_error_if_locked() click to toggle source
# File lib/rubhttp/rack_builder.rb, line 42
def raise_error_if_locked
  raise LockedError, "can't modify middleware stack after app created" if locked?
end
to_app() click to toggle source
# File lib/rubhttp/rack_builder.rb, line 50
def to_app
  @adapter = default_adapter if @adapter.nil?
  @adapter.freeze
  @middlewares.reverse.inject(@adapter) { |a, e| e[a].tap(&:freeze) }
end