Sha256: 3e0802c17149c694b7a32964155365f69d857f2b2f678a79add83160c8975138
Contents?: true
Size: 1.6 KB
Versions: 8
Compression:
Stored size: 1.6 KB
Contents
# encoding: utf-8 module Mongoid #:nodoc: module Criterion #:nodoc: class Selector < Hash attr_reader :klass def initialize(klass) @klass = klass end def []=(key, value) super(key, try_to_typecast(key, value)) end def merge!(other) other.each_pair do |key, value| self[key] = value end self end alias update merge! if RUBY_VERSION < '1.9' def inspect ret = self.keys.inject([]) do |ret, key| ret << "#{key.inspect}=>#{self[key].inspect}" end "{#{ret.sort.join(', ')}}" end end private def try_to_typecast(key, value) access = key.to_s return value unless klass.fields.has_key?(access) field = klass.fields[access] typecast_value_for(field, value) end def typecast_value_for(field, value) return field.set(value) if field.type === value case value when Hash value = value.dup value.each_pair do |k, v| value[k] = typecast_hash_value(field, k, v) end when Array value.map { |v| typecast_value_for(field, v) } when Regexp value else field.type == Array ? value.class.set(value) : field.set(value) end end def typecast_hash_value(field, key, value) case key when "$exists" Boolean.set(value) when "$size" Integer.set(value) else typecast_value_for(field, value) end end end end end
Version data entries
8 entries across 8 versions & 2 rubygems