Module: DataBroker::ValueObject::ClassMethods
- Includes:
- ActiveSupport::Inflector
- Defined in:
- lib/data_broker/value_object.rb
Instance Method Summary collapse
Instance Method Details
#belongs_to(method) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 |
# 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) ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'lib/data_broker/value_object.rb', line 74 def delegate(method, to: nil) delegated = "#{to}_#{method}" define_method(delegated) do ivar = "@#{delegated}" instance_variable_get(ivar) || instance_variable_set( ivar, send(to).try(method) ) end end |
#has_many(method) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# 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 |