class Embedson::Model::MethodBuilder

Attributes

field_name[R]
klass[R]
options[R]

Public Class Methods

new(klass, name, options) click to toggle source
# File lib/embedson/model/method_builder.rb, line 8
def initialize(klass, name, options)
  @klass = klass
  @field_name = name
  @options = options
end

Public Instance Methods

column_name() click to toggle source
# File lib/embedson/model/method_builder.rb, line 28
def column_name
  @column_name ||= options.fetch(:column_name, nil) || field_name
end
embedded() click to toggle source
# File lib/embedson/model/method_builder.rb, line 19
def embedded
  EmbeddedBuilder.new(self).define
  generate_common
end
embeds() click to toggle source
# File lib/embedson/model/method_builder.rb, line 14
def embeds
  EmbedsBuilder.new(self).define
  generate_common
end
hash_method() click to toggle source
# File lib/embedson/model/method_builder.rb, line 24
def hash_method
  @hash_method ||= options.fetch(:hash_method, nil) || :to_h
end
instance_var_name() click to toggle source
# File lib/embedson/model/method_builder.rb, line 36
def instance_var_name
  @instance_var_name ||= "@#{field_name}"
end
inverse_get() click to toggle source
# File lib/embedson/model/method_builder.rb, line 40
def inverse_get
  @inverse_get ||= options.fetch(:inverse_of, nil) || klass.name.demodulize.tableize.singularize
end
inverse_set() click to toggle source
# File lib/embedson/model/method_builder.rb, line 44
def inverse_set
  @inverse_set ||= "#{inverse_get}="
end

Private Instance Methods

generate_common() click to toggle source
# File lib/embedson/model/method_builder.rb, line 50
def generate_common
  methods_for_both.each do |meth|
    klass.class_exec self, &self.method(meth)
  end
end
methods_for_both() click to toggle source
# File lib/embedson/model/method_builder.rb, line 56
def methods_for_both
  [:verify_arg_klass]
end
verify_arg_klass(builder) click to toggle source
# File lib/embedson/model/method_builder.rb, line 60
def verify_arg_klass(builder)
  klass.send(:define_method, "#{field_name}_verify_arg_klass") do |arg|
    unless arg.nil? || arg.is_a?(builder.related_klass_name.constantize)
      raise ClassTypeError.new(arg.class.name, builder.related_klass_name)
    end
  end
  klass.send(:private, "#{field_name}_verify_arg_klass")
end