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.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/mongoid/extensions/hash.rb', line 37 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.
13 14 15 |
# File 'lib/mongoid/extensions/hash.rb', line 13 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.
23 24 25 26 27 28 29 |
# File 'lib/mongoid/extensions/hash.rb', line 23 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.
131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/mongoid/extensions/hash.rb', line 131 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.
79 80 81 82 83 84 85 86 87 |
# File 'lib/mongoid/extensions/hash.rb', line 79 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.
108 109 110 |
# File 'lib/mongoid/extensions/hash.rb', line 108 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.
119 120 121 |
# File 'lib/mongoid/extensions/hash.rb', line 119 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.
152 153 154 |
# File 'lib/mongoid/extensions/hash.rb', line 152 def mongoize ::Hash.mongoize(self) end |
#resizable? ⇒ true
Can the size of this object change?
162 163 164 |
# File 'lib/mongoid/extensions/hash.rb', line 162 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.
174 175 176 177 178 179 180 |
# File 'lib/mongoid/extensions/hash.rb', line 174 def to_criteria criteria = Criteria.new(delete(:klass) || delete("klass")) each_pair do |method, args| criteria = criteria.__send__(method, args) end criteria end |