Module: OData::Model::Associations::ClassMethods

Defined in:
lib/odata/model/associations.rb

Instance Method Summary collapse

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, options = {})
  validate_association(association_name)
  register_association(association_name, options)
  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_associationsHash

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.

Returns:

  • (Hash)


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, options)
  odata_associations[association_name] = options
end

#validate_association(association_name) ⇒ Object

Raises:

  • (ArgumentError)


33
34
35
# File 'lib/odata/model/associations.rb', line 33

def validate_association(association_name)
  raise ArgumentError unless odata_service.navigation_properties[odata_entity_set.type][association_name]
end