class Mandrake::Builder

Mandrake::Builder based on Rack::Builder It adds :if and :unless options to the `use` method, and enables conditional expression builders such as `env` and `request` @example

Mandrake::Builder.new do
  use Rack::Deflater, if:     request.path_info.start_with?("/deflater")
  use Rack::ETag,     unless: request.path_info.end_with?("etag")
  run ->(env){ [200, {'Content-Type' => 'text/plain'}, ["Hello World"]] }
end

Public Instance Methods

generate_map(default_app, mapping) click to toggle source
# File lib/mandrake/builder.rb, line 44
def generate_map(default_app, mapping)
  mapped = default_app ? {'/' => default_app} : {}
  mapping.each { |r,b| mapped[r] = self.class.new(default_app, &b).to_app }
  Rack::URLMap.new(mapped)
end
to_app() click to toggle source

Converts to application by using Mandrake::Translator

# File lib/mandrake/builder.rb, line 20
def to_app
  app = @map ? generate_map(@run, @map) : @run
  fail "missing run or map statement" unless app
  app = translator.translate.reverse.inject(app) do |application, middleware|
    middleware.call(application)
  end
  @warmup.call(app) if @warmup
  app
end
warmup(prc=nil, &block) click to toggle source
# File lib/mandrake/builder.rb, line 40
def warmup(prc=nil, &block)
  @warmup = prc || block
end

Private Instance Methods

translator() click to toggle source

This method is for delegating methods Returns an instance of Mandrake::Translator for use in delegation and to_app @return [Mandrake::Translator]

# File lib/mandrake/builder.rb, line 33
def translator
  @translator ||= Translator.new
end