Class: Composition::Compositions::ComposedFrom
- Inherits:
-
Composition
- Object
- Composition
- Composition::Compositions::ComposedFrom
- Defined in:
- lib/composition/compositions/composed_from.rb
Instance Attribute Summary
Attributes inherited from Composition
Instance Method Summary collapse
- #aliases ⇒ Object
-
#attributes(obj) ⇒ Object
TODO: Add documentation.
-
#setter(obj, setter_attr, setter_value) ⇒ Object
For a composition defined like:.
Methods inherited from Composition
#class_name, #initialize, #inverse_of, #klass
Constructor Details
This class inherits a constructor from Composition::Compositions::Composition
Instance Method Details
#aliases ⇒ Object
42 43 44 |
# File 'lib/composition/compositions/composed_from.rb', line 42 def aliases mapping.values end |
#attributes(obj) ⇒ Object
TODO: Add documentation
31 32 33 34 35 36 37 38 39 40 |
# File 'lib/composition/compositions/composed_from.rb', line 31 def attributes(obj) aliases.each_with_object({}) do |attr, memo| value = obj.send(attr) if value.respond_to?(:attributes) memo[attr] = value.send(:attributes) else memo[attr] = value end end end |
#setter(obj, setter_attr, setter_value) ⇒ Object
For a composition defined like:
class User < ActiveRecord::Base
compose :credit_card,
mapping: {
credit_card_name: :name,
credit_card_brand: :brand
}
end
class CreditCard < Composition::Base
composed_from :user
end
The setter method will be in charge of implementing @credit_card.name= and @credit_card.brand=.
If calling @credit_card.name= it will take care of updating the @name instance variable in @credit_card, but also will take care of keeping @user.credit_card_name in sync with it.
24 25 26 27 28 |
# File 'lib/composition/compositions/composed_from.rb', line 24 def setter(obj, setter_attr, setter_value) set_instance_variable(obj, setter_attr, setter_value) set_parent_attribute(obj, setter_attr, setter_value) setter_value end |