class Conglomerate::BuilderCall::BuilderCallInstance
Attributes
attr_name[RW]
attrs[RW]
bc[RW]
context[RW]
objects[RW]
Public Class Methods
new(bc, context, objects, attrs, attr_name)
click to toggle source
# File lib/conglomerate/builder_call.rb, line 30 def initialize(bc, context, objects, attrs, attr_name) self.bc = bc self.context = context self.objects = objects self.attrs = attrs self.attr_name = attr_name end
Public Instance Methods
invoke(item = nil)
click to toggle source
# File lib/conglomerate/builder_call.rb, line 55 def invoke(item = nil) serializer = builder.serializer builder_klass = Class.new do include serializer end if item builder_klass.class_exec(item, &block) if block else builder_klass.class_eval(&block) if block end local_objects = item ? [item] : objects builder = builder_klass.new(local_objects, :name => name, :context => context) local_attrs = {} opts.each do |key, value| local_attrs[key] = value_from_proc(value) end builder.build(local_attrs) end
run()
click to toggle source
# File lib/conglomerate/builder_call.rb, line 38 def run return unless should_run? if iterates attrs[attr_name] ||= [] objects.each do |item| attrs[attr_name] << invoke(item) end elsif array attrs[attr_name] ||= [] attrs[attr_name] << invoke else attrs[attr_name] = invoke end end
value_from_proc(value)
click to toggle source
# File lib/conglomerate/builder_call.rb, line 79 def value_from_proc(value) value = context.instance_eval(&value) if value.respond_to?(:call) value end
Private Instance Methods
should_run?()
click to toggle source
# File lib/conglomerate/builder_call.rb, line 86 def should_run? !opts[:if] || (opts[:if] && opts[:if].call) end