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