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