lib/tipi/config_dsl.rb in tipi-0.43 vs lib/tipi/config_dsl.rb in tipi-0.45
- old
+ new
@@ -2,43 +2,43 @@
module Tipi
module Configuration
class Interpreter
# make_blank_slate
-
+
def initialize(assembler)
@assembler = assembler
end
-
+
def gzip_response
@assembler.emit 'req = Tipi::GZip.wrap(req)'
end
-
+
def log(out)
@assembler.wrap_current_frame 'logger.log_request(req) do |req|'
end
-
+
def error(&block)
assembler.emit_exception_handler &block
end
-
+
def match(pattern, &block)
@assembler.emit_conditional "if req.path =~ #{pattern.inspect}", &block
end
end
-
+
class Assembler
def self.from_source(code)
new.from_source code
end
def from_source(code)
@stack = [new_frame]
@app_procs = {}
@interpreter = Interpreter.new self
@interpreter.instance_eval code
-
+
loop do
frame = @stack.pop
return assemble_app_proc(frame).join("\n") if @stack.empty?
@stack.last[:body] << assemble_frame(frame)
@@ -49,11 +49,11 @@
{
prelude: [],
body: []
}
end
-
+
def add_frame(&block)
@stack.push new_frame
yield
ensure
frame = @stack.pop
@@ -65,24 +65,24 @@
wrapper = new_frame
wrapper[:body] << head
@stack.push wrapper
@stack.push frame
end
-
+
def emit(code)
@stack.last[:body] << code
end
-
+
def emit_prelude(code)
@stack.last[:prelude] << code
end
-
+
def emit_exception_handler(&block)
proc_id = add_app_proc block
@stack.last[:rescue_proc_id] = proc_id
end
-
+
def emit_block(conditional, &block)
proc_id = add_app_proc block
@stack.last[:branched] = true
emit conditional
add_frame &block
@@ -91,10 +91,10 @@
def add_app_proc(proc)
id = :"proc#{@app_procs.size}"
@app_procs[id] = proc
id
end
-
+
def assemble_frame(frame)
indent = 0
lines = []
emit_code lines, frame[:prelude], indent
if frame[:rescue_proc_id]