class Embedson::Model::EmbedsBuilder

Attributes

builder[R]
klass[R]

Public Class Methods

new(builder) click to toggle source
# File lib/embedson/model/embeds_builder.rb, line 6
def initialize(builder)
  @builder = builder
  @klass = builder.klass
end

Public Instance Methods

define() click to toggle source
# File lib/embedson/model/embeds_builder.rb, line 11
def define
  methods_embeds.each do |meth|
    klass.class_exec builder, &self.method(meth)
  end
end

Private Instance Methods

methods_embeds() click to toggle source
# File lib/embedson/model/embeds_builder.rb, line 19
def methods_embeds
  [:writer, :reader, :related_model, :build_related_model, :send_to_related]
end
reader(builder) click to toggle source
# File lib/embedson/model/embeds_builder.rb, line 36
def reader(builder)
  klass.send :define_method, builder.field_name do
    return if read_attribute(builder.column_name).nil?

    send("#{builder.field_name}_build_related_model") if instance_variable_get(builder.instance_var_name).nil?
    instance_variable_get(builder.instance_var_name)
  end
end
writer(builder) click to toggle source
# File lib/embedson/model/embeds_builder.rb, line 23
def writer(builder)
  klass.send :define_method, "#{builder.field_name}=" do |arg|
    send("#{builder.field_name}_verify_arg_klass", arg)
    send("#{builder.field_name}_send_to_related", arg)

    instance_variable_set(builder.instance_var_name, arg)
    val = arg.nil? ? arg : arg.send(builder.hash_method).stringify_keys.merge('_type' => builder.klass.name)
    unless val == read_attribute(builder.column_name)
      write_attribute(builder.column_name, val)
    end
  end
end