Parent

Class Index [+]

Quicksearch

Rack::Builder

Rack::Builder implements a small DSL to iteratively construct Rack applications.

Example:

 app = Rack::Builder.new {
   use Rack::CommonLogger
   use Rack::ShowExceptions
   map "/lobster" do
     use Rack::Lint
     run Rack::Lobster.new
   end
 }

Or

 app = Rack::Builder.app do
   use Rack::CommonLogger
   lambda { |env| [200, {'Content-Type' => 'text/plain'}, 'OK'] }
 end

use adds a middleware to the stack, run dispatches to an application. You can use map to construct a Rack::URLMap in a convenient way.

Public Class Methods

app(&block) click to toggle source

(Not documented)

    # File lib/rack/builder.rb, line 32
32:     def self.app(&block)
33:       self.new(&block).to_app
34:     end
new(&block) click to toggle source

(Not documented)

    # File lib/rack/builder.rb, line 27
27:     def initialize(&block)
28:       @ins = []
29:       instance_eval(&block) if block_given?
30:     end

Public Instance Methods

call(env) click to toggle source

(Not documented)

    # File lib/rack/builder.rb, line 59
59:     def call(env)
60:       to_app.call(env)
61:     end
map(path, &block) click to toggle source

(Not documented)

    # File lib/rack/builder.rb, line 44
44:     def map(path, &block)
45:       if @ins.last.kind_of? Hash
46:         @ins.last[path] = self.class.new(&block).to_app
47:       else
48:         @ins << {}
49:         map(path, &block)
50:       end
51:     end
run(app) click to toggle source

(Not documented)

    # File lib/rack/builder.rb, line 40
40:     def run(app)
41:       @ins << app #lambda { |nothing| app }
42:     end
to_app() click to toggle source

(Not documented)

    # File lib/rack/builder.rb, line 53
53:     def to_app
54:       @ins[-1] = Rack::URLMap.new(@ins.last)  if Hash === @ins.last
55:       inner_app = @ins.last
56:       @ins[0...-1].reverse.inject(inner_app) { |a, e| e.call(a) }
57:     end
use(middleware, *args, &block) click to toggle source

(Not documented)

    # File lib/rack/builder.rb, line 36
36:     def use(middleware, *args, &block)
37:       @ins << lambda { |app| middleware.new(app, *args, &block) }
38:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.