Class/Module Index [+]

Quicksearch

DataMapper::Associations::OneToMany::Relationship

Public Class Methods

new(name, target_model, source_model, options = {}) click to toggle source

@api semipublic

# File lib/dm-core/associations/one_to_many.rb, line 127
def initialize(name, target_model, source_model, options = {})
  target_model ||= DataMapper::Inflector.camelize(DataMapper::Inflector.singularize(name.to_s))
  options        = { :min => 0, :max => source_model.n }.update(options)
  super
end

Public Instance Methods

child_key() click to toggle source

@api semipublic

# File lib/dm-core/associations/one_to_many.rb, line 21
def child_key
  inverse.child_key
end
Also aliased as: target_key
collection_for(source, other_query = nil) click to toggle source

Returns a Collection for this relationship with a given source

@param [Resource] source

A Resource to scope the collection with

@param [Query] other_query (optional)

A Query to further scope the collection with

@return [Collection]

The collection scoped to the relationship, source and query

@api private

# File lib/dm-core/associations/one_to_many.rb, line 39
def collection_for(source, other_query = nil)
  query = query_for(source, other_query)

  collection = collection_class.new(query)
  collection.relationship = self
  collection.source       = source

  # make the collection empty if the source is new
  collection.replace([]) if source.new?

  collection
end
default_for(source) click to toggle source

@api semipublic

# File lib/dm-core/associations/one_to_many.rb, line 120
def default_for(source)
  collection_for(source).replace(Array(super))
end
finalize() click to toggle source

initialize the inverse “many to one” relationships explicitly before initializing other relationships. This makes sure that foreign key properties always appear in the order they were declared.

@api public

# File lib/dm-core/associations/one_to_many.rb, line 108
def finalize
  child_model.relationships.each do |relationship|
    # TODO: should this check #inverse?
    #   relationship.child_key if inverse?(relationship)
    if relationship.kind_of?(Associations::ManyToOne::Relationship)
      relationship.finalize
    end
  end
  inverse.finalize
end
get(source, query = nil) click to toggle source

Loads and returns association targets (ex.: articles) for given source resource (ex.: author)

@api semipublic

# File lib/dm-core/associations/one_to_many.rb, line 56
def get(source, query = nil)
  lazy_load(source)
  collection = get_collection(source)
  query ? collection.all(query) : collection
end
get_collection(source) click to toggle source

@api private

# File lib/dm-core/associations/one_to_many.rb, line 63
def get_collection(source)
  get!(source)
end
lazy_load(source) click to toggle source

Loads association targets and sets resulting value on given source resource

@param [Resource] source

the source resource for the association

@return [undefined]

@api private

# File lib/dm-core/associations/one_to_many.rb, line 90
def lazy_load(source)
  return if loaded?(source)

  # SEL: load all related resources in the source collection
  if source.saved? && (collection = source.collection).size > 1
    eager_load(collection)
  end

  unless loaded?(source)
    set!(source, collection_for(source))
  end
end
set(source, targets) click to toggle source

Sets value of association targets (ex.: paragraphs) for given source resource (ex.: article)

@api semipublic

# File lib/dm-core/associations/one_to_many.rb, line 71
def set(source, targets)
  lazy_load(source)
  get!(source).replace(targets)
end
set_collection(source, target) click to toggle source

@api private

# File lib/dm-core/associations/one_to_many.rb, line 77
def set_collection(source, target)
  set!(source, target)
end
target_key() click to toggle source

@api semipublic

Alias for: child_key

[Validate]

Generated with the Darkfish Rdoc Generator 2.