class MarkMapper::Plugins::Associations::InArrayProxy

Public Instance Methods

<<(*docs) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 81
def <<(*docs)
  flatten_deeper(docs).each do |doc|
    doc.save unless doc.persisted?
    unless ids.include?(doc.id)
      ids << doc.id
    end
  end
  reset
end
Also aliased as: push, concat
all(options={}) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 21
def all(options={})
  return [] if ids.blank?
  query(options).all
end
concat(*docs)
Alias for: <<
count(options={}) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 36
def count(options={})
  return 0 if ids.blank?
  options.blank? ? ids.size : query(options).count
end
create(attrs={}) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 61
def create(attrs={})
  doc = klass.create(attrs)
  if doc.persisted?
    ids << doc.id
    proxy_owner.save
    reset
  end
  doc
end
create!(attrs={}) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 71
def create!(attrs={})
  doc = klass.create!(attrs)
  if doc.persisted?
    ids << doc.id
    proxy_owner.save
    reset
  end
  doc
end
delete_all(options={}) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 49
def delete_all(options={})
  docs = query(options).fields(:_id).all
  docs.each { |doc| ids.delete(doc.id) }
  klass.delete(docs.map { |d| d.id })
  reset
end
destroy_all(options={}) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 41
def destroy_all(options={})
  all(options).each do |doc|
    ids.delete(doc.id)
    doc.destroy
  end
  reset
end
find(*args) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 8
def find(*args)
  query.find(*scoped_ids(args))
end
find!(*args) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 12
def find!(*args)
  query.find!(*scoped_ids(args))
end
first(options={}) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 26
def first(options={})
  return nil if ids.blank?
  query(options).first
end
last(options={}) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 31
def last(options={})
  return nil if ids.blank?
  query(options).last
end
nullify() click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 56
def nullify
  replace([])
  reset
end
paginate(options) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 16
def paginate(options)
  return [] if ids.blank?
  query.paginate(options)
end
push(*docs)
Alias for: <<
replace(docs) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 93
def replace(docs)
  doc_ids = docs.map do |doc|
    doc.save unless doc.persisted?
    doc.id
  end
  ids.replace(doc_ids.uniq)
  reset
end

Private Instance Methods

criteria() click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 110
def criteria
  {:_id => ids}
end
find_target() click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 122
def find_target
  return [] if ids.blank?
  all
end
ids() click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 127
def ids
  proxy_owner[options[:in]]
end
query(options={}) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 103
def query(options={})
  klass.
    query(association.query_options).
    amend(options).
    amend(criteria)
end
scoped_ids(args) click to toggle source
# File lib/mark_mapper/plugins/associations/in_array_proxy.rb, line 114
def scoped_ids(args)
  valid = args.flatten.select do |id|
    id = ObjectId.to_marklogic(id) if klass.using_object_id?
    ids.include?(id)
  end
  valid.empty? ? nil : valid
end