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