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