module DataBroker::ValueObject::ClassMethods
Public Instance Methods
belongs_to(method)
click to toggle source
# File lib/data_broker/value_object.rb, line 39 def belongs_to(method) mapper = "#{camelize(method.to_s)}Mapper" via = foreign_key(camelize(method.to_s)) define_method(method) do ivar = "@#{method}" instance_variable_get(ivar) || instance_variable_set( ivar, constantize(mapper).find(self.send(via)) ) end end
delegate(method, to: nil, return_on_nil: nil)
click to toggle source
# File lib/data_broker/value_object.rb, line 74 def delegate(method, to: nil, return_on_nil: nil) delegated = "#{to}_#{method}" define_method(delegated) do ivar = "@#{delegated}" instance_variable_get(ivar) || instance_variable_set(ivar, send(to).try(method)) || return_on_nil end end
has_many(method)
click to toggle source
# File lib/data_broker/value_object.rb, line 51 def has_many(method) mapper = "#{classify(method.to_s)}Mapper" via = foreign_key(self.to_s) ids_method = pluralize(foreign_key(classify(method.to_s))) define_method(method) do ivar = "@#{method}" instance_variable_get(ivar) || -> { instance_variable_set("@#{ids_method}", nil) instance_variable_set( ivar, constantize(mapper).where(via.to_sym => self.id) ) }.call end define_method(ids_method) do ivar = "@#{ids_method}" instance_variable_get(ivar) || instance_variable_set( ivar, send(method).map(&:id) ) end end