Class: Malt::Engine::Builder
- Defined in:
- lib/malt/engines/builder.rb
Overview
Builder
http://builder.rubyforge.org/
Instance Attribute Summary
Attributes inherited from Abstract
Instance Method Summary collapse
- #create_engine(params = {}) ⇒ Object
-
#prepare_engine(params = {}, &content) ⇒ Object
Prepare engine for rendering.
- #prepare_engine_prefix(params, &content) ⇒ Object
- #prepare_engine_scope(params, &content) ⇒ Object
- #render(params = {}, &content) ⇒ Object
Methods inherited from Abstract
#cache?, default, #initialize, register, type
Constructor Details
This class inherits a constructor from Malt::Engine::Abstract
Instance Method Details
#create_engine(params = {}) ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/malt/engines/builder.rb', line 41 def create_engine(params={}) opts = (params) #cached(opts) do ::Builder::XmlMarkup.new(opts) #end end |
#prepare_engine(params = {}, &content) ⇒ Object
Prepare engine for rendering.
28 29 30 31 32 33 34 35 36 |
# File 'lib/malt/engines/builder.rb', line 28 def prepare_engine(params={}, &content) prefix = parameters(params, :prefix) if prefix prepare_engine_prefix(params, &content) else prepare_engine_scope(params, &content) end end |
#prepare_engine_prefix(params, &content) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/malt/engines/builder.rb', line 50 def prepare_engine_prefix(params, &content) prefix, text, file, scope, locals = parameters(params, :prefix, :text, :file, :scope, :locals) bind = make_binding(scope, locals, &content) #scope, locals = split_data(data) #scope ||= Object.new #locals ||= {} engine = create_engine(params) code = %{ lambda do |#{prefix}| #{text} end } eval(code, bind, file || '(builder)').call(engine) end |
#prepare_engine_scope(params, &content) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/malt/engines/builder.rb', line 75 def prepare_engine_scope(params, &content) text, file, scope, locals = parameters(params, :text, :file, :scope, :locals) scope, locals = make_external(scope, locals, &content) engine = create_engine locals.each do |k,v| next if k.to_sym == :target engine.instance_eval("@#{k} = v") end unless scope.respond_to?(:to_struct) scope.instance_variables.each do |k| next if k == "@target" v = scope.instance_variable_get(k) engine.instance_eval("#{k} = v") end end engine.instance_eval(text, file || '(builder)') engine.target! end |
#render(params = {}, &content) ⇒ Object
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/malt/engines/builder.rb', line 14 def render(params={}, &content) into = parameters(params, :to) || :html case into when :xml, :html, :xhtml prepare_engine(params, &content) #.target! else super(params, &content) end end |