class ActiveMongoid::FinderProxy

Attributes

__target[RW]
__target_class[RW]

Public Class Methods

new(target) click to toggle source
# File lib/active_mongoid/finder_proxy.rb, line 11
def initialize(target)
  @__target = target
  @__target_class = target.respond_to?(:klass) ? target.klass : target
end

Public Instance Methods

__am_primary_key() click to toggle source
# File lib/active_mongoid/finder_proxy.rb, line 57
def __am_primary_key
  if __target_class.respond_to?(:__am_primary_key) && __target_class.__am_primary_key
    __target_class.__am_primary_key
  else
    :_id
  end
end
find(*args) click to toggle source
# File lib/active_mongoid/finder_proxy.rb, line 16
def find(*args)
  key = args.flatten.first
  if !key.is_a?(Fixnum) && (key.is_a?(::ActiveMongoid::BSON::ObjectId) || ::ActiveMongoid::BSON::ObjectId.legal?(key))
    where({__am_primary_key => key.to_s}).first.tap do |obj|
      raise ActiveRecord::RecordNotFound unless obj
    end
  else
    FinderProxy.new(__target.send(:find, *args))
  end
end
method_missing(name, *args, &block) click to toggle source
# File lib/active_mongoid/finder_proxy.rb, line 48
def method_missing(name, *args, &block)
  resp = __target.send(name, *args, &block)
  if resp == __target_class || (resp.is_a?(ActiveRecord::Relation) && resp.klass == __target_class)
    FinderProxy.new(resp)
  else
    resp
  end
end
where(opts = :chain, *rest) click to toggle source
# File lib/active_mongoid/finder_proxy.rb, line 27
def where(opts = :chain, *rest)
  if opts && opts.is_a?(Hash)
    bson_opts = opts.select{|k,v| v.is_a?(::ActiveMongoid::BSON::ObjectId)}

    if bson_opts[:id] && __am_primary_key != :id
      opts.delete(:id)
      bson_opts[:_id] = bson_opts.delete(:id)
    elsif bson_opts[:_id] && __am_primary_key == :id
      opts.delete(:_id)
      bson_opts[:id] = bson_opts.delete(:_id)
    end

    bson_opts.each do |k,v|
      bson_opts[k] = v.to_s
    end

    opts.merge!(bson_opts)
  end
  FinderProxy.new(__target.send(:where, opts, *rest))
end