lib/express_templates/expander.rb in express_templates-0.2.7 vs lib/express_templates/expander.rb in express_templates-0.3.0

- old
+ new

@@ -4,15 +4,20 @@ cattr_accessor :module_search_space attr_accessor :stack, :handlers, :locals - def initialize(template, handlers = {}, locals = {}) + def initialize(*args) + initialize_expander(*args) + end + + def initialize_expander(template, handlers = {}, locals = {}) @template = template @stack = Stack.new @handlers = handlers @locals = locals + self end def expand(source=nil, &block) case when block.nil? && source @@ -45,12 +50,18 @@ # blocks supplied are evaluated and children added to the "stack" # are added as children to the component def self.register_macros_for(*components) components.each do |component| define_method(component.macro_name.to_sym) do |*args, &block| - new_component = component.new(*(args.push(self))) - process_children!(new_component, &block) unless block.nil? + new_component = nil + # this is a code smell here. + if component.ancestors.include?(Components::Capabilities::Building) + new_component = component.new(*(args.push(self)), &block) + else + new_component = component.new(*(args.push(self))) + process_children!(new_component, &block) unless block.nil? + end stack << new_component end end end @@ -66,10 +77,10 @@ def method_missing(name, *args, &block) return locals[name] if locals.keys.include?(name) if handlers.keys.include?(name) - stack << handlers[name].send(name, *args) + stack << handlers[name].send(name, *args, &block) else stack << ExpressTemplates::Markup::Wrapper.new(name.to_s, *args, &block) end nil end \ No newline at end of file