module Conglomerate::BuilderSerializer

Attributes

object[RW]

Public Class Methods

new(objects, options = {}) click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 7
def initialize(objects, options = {})
  self.objects = [*objects].compact
  self.context = options.fetch(:context, nil)
  self._builder_name = options.fetch(:name, nil).to_s
end

Public Instance Methods

build(attrs = {}) click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 13
def build(attrs = {})
  internal_build(attrs)
end
serialize() click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 17
def serialize
  Conglomerate.serialize(build)
end

Private Instance Methods

builder_builders() click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 61
def builder_builders
  self.class.instance_variable_get("@_builder_builders")
end
builder_calls() click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 57
def builder_calls
  self.class.instance_variable_get("@_builder_calls")
end
builder_type() click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 49
def builder_type
  self.class.instance_variable_get("@_builder_type")
end
builder_values() click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 53
def builder_values
  self.class.instance_variable_get("@_builder_values")
end
context() click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 74
def context
  instance_variable_get("@context")
end
get_class_value(name) click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 65
def get_class_value(name)
  self.class.instance_variable_get("@#{name}")
end
internal_build(attrs = {}) click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 25
def internal_build(attrs = {})
  builder_values.each do |name|
    value = get_class_value(name)
    value = value_from_proc(value)
    attrs[name.to_sym] = value if attrs[name.to_sym] == nil
  end

  builder_builders.each do |b|
    run_builder_calls(b, attrs)
  end

  self.object = builder_type.new(attrs)

  object
end
run_builder_calls(b, attrs) click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 41
def run_builder_calls(b, attrs)
  calls = builder_calls[b[:command]] || []

  calls.each do |call|
    call.run(context, objects, attrs, b[:name])
  end
end
value_from_proc(value) click to toggle source
# File lib/conglomerate/builder_serializer.rb, line 69
def value_from_proc(value)
  value = context.instance_eval(&value) if value.respond_to?(:call)
  value
end