Module: Mongoid::Extensions::Hash
- Defined in:
- lib/mongoid/extensions/hash.rb
Overview
Adds type-casting behavior to Hash class.
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#__consolidate__(klass) ⇒ Hash
Consolidate the key/values in the hash under an atomic $set.
-
#__evolve_object_id__ ⇒ Hash
Evolves each value in the hash to an object id if it is convertable.
-
#__mongoize_object_id__ ⇒ Hash
Mongoizes each value in the hash to an object id if it is convertable.
-
#_mongoid_unsatisfiable_criteria? ⇒ true | false
(also: #blank_criteria?)
private
Checks whether conditions given in this hash are known to be unsatisfiable, i.e., querying with this hash will always return no documents.
-
#delete_id ⇒ Object
Deletes an id value from the hash.
-
#extract_id ⇒ Object
Get the id attribute from this hash, whether it’s prefixed with an underscore or is a symbol.
-
#mongoize ⇒ Hash | nil
Turn the object from the ruby type we deal with to a Mongo friendly type.
-
#resizable? ⇒ true
Can the size of this object change?.
-
#to_criteria ⇒ Criteria
Convert this hash to a criteria.
Instance Method Details
#__consolidate__(klass) ⇒ Hash
Consolidate the key/values in the hash under an atomic $set.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/mongoid/extensions/hash.rb', line 40 def __consolidate__(klass) consolidated = {} each_pair do |key, value| if key =~ /\$/ value.keys.each do |key2| value2 = value[key2] real_key = klass.database_field_name(key2) value.delete(key2) if real_key != key2 value[real_key] = value_for(key, klass, real_key, value2) end consolidated[key] ||= {} consolidated[key].update(value) else consolidated["$set"] ||= {} consolidated["$set"].update(key => mongoize_for(key, klass, key, value)) end end consolidated end |
#__evolve_object_id__ ⇒ Hash
Evolves each value in the hash to an object id if it is convertable.
16 17 18 |
# File 'lib/mongoid/extensions/hash.rb', line 16 def __evolve_object_id__ transform_values!(&:__evolve_object_id__) end |
#__mongoize_object_id__ ⇒ Hash
Mongoizes each value in the hash to an object id if it is convertable.
26 27 28 29 30 31 32 |
# File 'lib/mongoid/extensions/hash.rb', line 26 def __mongoize_object_id__ if id = self['$oid'] BSON::ObjectId.from_string(id) else transform_values!(&:__mongoize_object_id__) end end |
#_mongoid_unsatisfiable_criteria? ⇒ true | false Also known as: blank_criteria?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Checks whether conditions given in this hash are known to be unsatisfiable, i.e., querying with this hash will always return no documents.
This method only handles condition shapes that Mongoid itself uses when it builds association queries. It does not guarantee that a false return value means the condition can produce a non-empty document set - only that if the return value is true, the condition always produces an empty document set.
86 87 88 89 90 91 92 93 94 |
# File 'lib/mongoid/extensions/hash.rb', line 86 def _mongoid_unsatisfiable_criteria? unsatisfiable_criteria = { "_id" => { "$in" => [] }} return true if self == unsatisfiable_criteria return false unless length == 1 && keys == %w($and) value = values.first value.is_a?(Array) && value.any? do |sub_v| sub_v.is_a?(Hash) && sub_v._mongoid_unsatisfiable_criteria? end end |
#delete_id ⇒ Object
Deletes an id value from the hash.
115 116 117 |
# File 'lib/mongoid/extensions/hash.rb', line 115 def delete_id delete("_id") || delete(:_id) || delete("id") || delete(:id) end |
#extract_id ⇒ Object
Get the id attribute from this hash, whether it’s prefixed with an underscore or is a symbol.
126 127 128 |
# File 'lib/mongoid/extensions/hash.rb', line 126 def extract_id self["_id"] || self[:_id] || self["id"] || self[:id] end |
#mongoize ⇒ Hash | nil
Turn the object from the ruby type we deal with to a Mongo friendly type.
137 138 139 |
# File 'lib/mongoid/extensions/hash.rb', line 137 def mongoize ::Hash.mongoize(self) end |
#resizable? ⇒ true
Can the size of this object change?
147 148 149 |
# File 'lib/mongoid/extensions/hash.rb', line 147 def resizable? true end |
#to_criteria ⇒ Criteria
Convert this hash to a criteria. Will iterate over each keys in the hash which must correspond to method on a criteria object. The hash must also include a “klass” key.
159 160 161 162 163 164 165 |
# File 'lib/mongoid/extensions/hash.rb', line 159 def to_criteria criteria = Criteria.new(delete(:klass) || delete("klass")) each_pair do |method, args| criteria = criteria.__send__(method, args) end criteria end |