lib/mongomapper/finder_options.rb in crnixon-mongomapper-0.2.0 vs lib/mongomapper/finder_options.rb in crnixon-mongomapper-0.3.4
- old
+ new
@@ -1,32 +1,36 @@
module MongoMapper
class FinderOptions
attr_reader :options
- def self.to_mongo_criteria(conditions)
- conditions = conditions.dup
+ def self.to_mongo_criteria(conditions, parent_key=nil)
criteria = {}
conditions.each_pair do |field, value|
case value
when Array
- criteria[field] = {'$in' => value}
+ operator_present = field.to_s =~ /^\$/
+ criteria[field] = if operator_present
+ value
+ else
+ {'$in' => value}
+ end
when Hash
- criteria[field] = to_mongo_criteria(value)
- else
+ criteria[field] = to_mongo_criteria(value, field)
+ else
criteria[field] = value
end
end
criteria
end
-
+
def self.to_mongo_options(options)
options = options.dup
{
:fields => to_mongo_fields(options.delete(:fields) || options.delete(:select)),
:offset => (options.delete(:offset) || 0).to_i,
:limit => (options.delete(:limit) || 0).to_i,
- :sort => to_mongo_sort(options.delete(:order))
+ :sort => options.delete(:sort) || to_mongo_sort(options.delete(:order))
}
end
def initialize(options)
raise ArgumentError, "FinderOptions must be a hash" unless options.is_a?(Hash)
\ No newline at end of file