class Jellyfish::Builder

Public Class Methods

app(app=nil, from=nil, to=nil, &block) click to toggle source
# File lib/jellyfish/builder.rb, line 7
def self.app app=nil, from=nil, to=nil, &block
  new(app, &block).to_app(from, to)
end
new(app=nil, &block) click to toggle source
# File lib/jellyfish/builder.rb, line 11
def initialize app=nil, &block
  @use, @map, @run, @warmup = [], nil, app, nil
  instance_eval(&block) if block_given?
end

Public Instance Methods

listen(host, &block) click to toggle source
# File lib/jellyfish/builder.rb, line 37
def listen host, &block
  map('', host: host, &block)
end
map(path, to: nil, host: nil, &block) click to toggle source
# File lib/jellyfish/builder.rb, line 32
def map path, to: nil, host: nil, &block
  key = if host then "http://#{File.join(host, path)}" else path end
  (@map ||= {})[key] = [block, path, to]
end
rewrite(rules, &block) click to toggle source
# File lib/jellyfish/builder.rb, line 41
def rewrite rules, &block
  rules.each do |path, to|
    map(path, :to => to, &block)
  end
end
run(app) click to toggle source
# File lib/jellyfish/builder.rb, line 24
def run app
  @run = app
end
to_app(from=nil, to=nil) click to toggle source
# File lib/jellyfish/builder.rb, line 47
def to_app from=nil, to=nil
  run = if @map then generate_map(@map, @run) else @run end
  fail 'missing run or map statement' unless run
  app = @use.inject(run){ |a, m| m.call(a) }
  result = if to then Rewrite.new(app, from, to) else app end
  @warmup.call(result) if @warmup
  result
end
use(middleware, *args, &block) click to toggle source
# File lib/jellyfish/builder.rb, line 16
def use middleware, *args, &block
  if @map
    current_map, @map = @map, nil
    @use.unshift(lambda{ |app| generate_map(current_map, app) })
  end
  @use.unshift(lambda{ |app| middleware.new(app, *args, &block) })
end
warmup(lam=nil, &block) click to toggle source
# File lib/jellyfish/builder.rb, line 28
def warmup lam=nil, &block
  @warmup = lam || block
end

Private Instance Methods

generate_map(current_map, app) click to toggle source
# File lib/jellyfish/builder.rb, line 57
def generate_map current_map, app
  mapped = if app then {'' => app} else {} end
  current_map.each do |path, (block, from, to)|
    mapped[path] = self.class.app(app, from, to, &block)
  end
  URLMap.new(mapped)
end