class Chickadee::Application

Public Class Methods

new(request: Rack::Request, response: Rack::Response, builder: Rack::Builder, container: Container) click to toggle source
# File lib/chickadee/application.rb, line 8
def initialize(request: Rack::Request, response: Rack::Response, builder: Rack::Builder, container: Container)
  @request_class = request
  @response_class = response
  @container_class = container
  @builder_class = builder
  @use_cache = []
  @register_cache = []
end

Public Instance Methods

register(*args, &block) click to toggle source
# File lib/chickadee/application.rb, line 17
def register(*args, &block)
  @register_cache << [args, block]
end
service(name) click to toggle source
# File lib/chickadee/application.rb, line 25
def service(name)
  builder = @builder_class.new
  @use_cache.each { |use| builder.use(*use[0], &use[1]) }
  builder.run(service_app(name))
  builder
end
use(*args, &block) click to toggle source
# File lib/chickadee/application.rb, line 21
def use(*args, &block)
  @use_cache << [args, block]
end

Private Instance Methods

service_app(name) click to toggle source
# File lib/chickadee/application.rb, line 34
def service_app(name)
  Proc.new do |env|
    request = @request_class.new(env)
    response = @response_class.new
    container = @container_class.new
    @register_cache.each{ |r| container.register(*r[0], &r[1]) }
    container.resolve(name).call(request, response)
  end
end