Module: OData::Model::Associations::ClassMethods
- Defined in:
- lib/odata/model/associations.rb
Instance Method Summary collapse
- #associated_with(association_name, options = {}) ⇒ Object
- #create_association_accessors(association_name) ⇒ Object
-
#odata_associations ⇒ Hash
private
Returns the configuration for working with OData associations.
- #register_association(association_name, options) ⇒ Object
- #validate_association(association_name) ⇒ Object
Instance Method Details
#associated_with(association_name, options = {}) ⇒ Object
14 15 16 17 18 19 |
# File 'lib/odata/model/associations.rb', line 14 def associated_with(association_name, = {}) validate_association(association_name) register_association(association_name, ) create_association_accessors(association_name) nil end |
#create_association_accessors(association_name) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/odata/model/associations.rb', line 41 def create_association_accessors(association_name) accessor_name = odata_associations[association_name][:as] || association_name.downcase.to_sym class_eval do define_method(accessor_name) do association_entities = odata_entity.associations[association_name] klass = self.class.odata_associations[association_name][:class_name] model_klass = klass.is_a?(Class) ? klass : klass.to_s.constantize model = model_klass.new if association_entities.is_a?(Enumerable) association_entities.collect do |entity| model.instance_variable_set(:@odata_entity, entity) model end else return nil if association_entities.nil? model.instance_variable_set(:@odata_entity, association_entities) model end end #define_method("#{attribute_name}=") do |value| # unless entity[property_map[attribute_name]] == value # send("#{attribute_name}_will_change!") if defined?(::ActiveModel) # end # # odata_entity[property_map[attribute_name]] = value #end end end |
#odata_associations ⇒ Hash
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the configuration for working with OData associations.
24 25 26 27 28 29 30 31 |
# File 'lib/odata/model/associations.rb', line 24 def odata_associations if class_variable_defined?(:@@odata_associations) class_variable_get(:@@odata_associations) else class_variable_set(:@@odata_associations, {}) class_variable_get(:@@odata_associations) end end |
#register_association(association_name, options) ⇒ Object
37 38 39 |
# File 'lib/odata/model/associations.rb', line 37 def register_association(association_name, ) odata_associations[association_name] = end |
#validate_association(association_name) ⇒ Object
33 34 35 |
# File 'lib/odata/model/associations.rb', line 33 def validate_association(association_name) raise ArgumentError unless odata_service.[odata_entity_set.type][association_name] end |