Module: Mongoid::Extensions::Hash
- Defined in:
- lib/mongoid/extensions/hash.rb
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.
-
#__nested__(string) ⇒ Object
Fetch a nested value via dot syntax.
-
#_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
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.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/mongoid/extensions/hash.rb', line 44 def __consolidate__(klass) consolidated = {} each_pair do |key, value| if key =~ /\$/ value.each_pair do |_key, _value| value[_key] = (key == "$rename") ? _value.to_s : mongoize_for(key, klass, _key, _value) 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__ update_values(&:__evolve_object_id__) end |
#__mongoize_object_id__ ⇒ Hash
Mongoizes each value in the hash to an object id if it is convertable.
28 29 30 31 32 33 34 |
# File 'lib/mongoid/extensions/hash.rb', line 28 def __mongoize_object_id__ if id = self['$oid'] BSON::ObjectId.from_string(id) else update_values(&:__mongoize_object_id__) end end |
#__nested__(string) ⇒ Object
Fetch a nested value via dot syntax.
146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/mongoid/extensions/hash.rb', line 146 def __nested__(string) keys = string.split(".") value = self keys.each do |key| return nil if value.nil? value_for_key = value[key] if value_for_key.nil? && key.to_i.to_s == key value_for_key = value[key.to_i] end value = value_for_key end value 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.
119 120 121 |
# File 'lib/mongoid/extensions/hash.rb', line 119 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.
132 133 134 |
# File 'lib/mongoid/extensions/hash.rb', line 132 def extract_id self["_id"] || self["id"] || self[:id] || self[:_id] end |
#mongoize ⇒ Hash
Turn the object from the ruby type we deal with to a Mongo friendly type.
169 170 171 |
# File 'lib/mongoid/extensions/hash.rb', line 169 def mongoize ::Hash.mongoize(self) end |
#resizable? ⇒ true
Can the size of this object change?
181 182 183 |
# File 'lib/mongoid/extensions/hash.rb', line 181 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.
195 196 197 198 199 200 201 |
# File 'lib/mongoid/extensions/hash.rb', line 195 def to_criteria criteria = Criteria.new(delete(:klass) || delete("klass")) each_pair do |method, args| criteria = criteria.__send__(method, args) end criteria end |