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

Instance Method Details

#__consolidate__(klass) ⇒ Hash

Consolidate the key/values in the hash under an atomic $set.

Examples:

Consolidate the hash.

{ name: "Placebo" }.__consolidate__

Returns:

  • (Hash)

    A new consolidated hash.



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.

Examples:

Convert the hash values.

{ field: id }.__evolve_object_id__

Returns:

  • (Hash)

    The converted hash.



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.

Examples:

Convert the hash values.

{ field: id }.__mongoize_object_id__

Returns:

  • (Hash)

    The converted hash.



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.

Examples:

Unsatisfiable conditions

{'_id' => {'$in' => []}}._mongoid_unsatisfiable_criteria?
# => true

Conditions which could be satisfiable

{'_id' => '123'}._mongoid_unsatisfiable_criteria?
# => false

Conditions which are unsatisfiable that this method does not handle

{'foo' => {'$in' => []}}._mongoid_unsatisfiable_criteria?
# => false

Returns:

  • (true | false)

    Whether hash contains known unsatisfiable conditions.



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_idObject

Deletes an id value from the hash.

Examples:

Delete an id value.

{}.delete_id

Returns:

  • (Object)

    The deleted value, or nil.



115
116
117
# File 'lib/mongoid/extensions/hash.rb', line 115

def delete_id
  delete("_id") || delete(:_id) || delete("id") || delete(:id)
end

#extract_idObject

Get the id attribute from this hash, whether it’s prefixed with an underscore or is a symbol.

Examples:

Extract the id.

{ :_id => 1 }.extract_id

Returns:

  • (Object)

    The value of the id.



126
127
128
# File 'lib/mongoid/extensions/hash.rb', line 126

def extract_id
  self["_id"] || self[:_id] || self["id"] || self[:id]
end

#mongoizeHash | nil

Turn the object from the ruby type we deal with to a Mongo friendly type.

Examples:

Mongoize the object.

object.mongoize

Returns:

  • (Hash | nil)

    The object mongoized or nil.



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?

Examples:

Is the hash resizable?

{}.resizable?

Returns:

  • (true)

    true.



147
148
149
# File 'lib/mongoid/extensions/hash.rb', line 147

def resizable?
  true
end

#to_criteriaCriteria

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.

Examples:

Convert the hash to a criteria.

{ klass: Band, where: { name: "Depeche Mode" }.to_criteria

Returns:



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