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