module OData::Model::Associations::ClassMethods

Public Instance Methods

associated_with(association_name, options = {}) click to toggle source
# 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) click to toggle source
# 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

      if association_entities.is_a?(Enumerable)
        association_entities.collect do |entity|
          model = model_klass.new
          model.instance_variable_set(:@odata_entity, entity)
          model
        end
      else
        return nil if association_entities.nil?
        model = model_klass.new
        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() click to toggle source

Returns the configuration for working with OData associations. @return [Hash] @api private

# 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) click to toggle source
# File lib/odata/model/associations.rb, line 37
def register_association(association_name, options)
  odata_associations[association_name] = options
end
validate_association(association_name) click to toggle source
# 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