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