Module: Mongoid::Extensions::Hash

Defined in:
build/mongoid-7.3/lib/mongoid/extensions/hash.rb

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.

Since:

  • 3.0.0



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'build/mongoid-7.3/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.

Examples:

Convert the hash values.

{ field: id }.__evolve_object_id__

Returns:

  • (Hash)

    The converted hash.

Since:

  • 3.0.0



16
17
18
# File 'build/mongoid-7.3/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.

Examples:

Convert the hash values.

{ field: id }.__mongoize_object_id__

Returns:

  • (Hash)

    The converted hash.

Since:

  • 3.0.0



28
29
30
31
32
33
34
# File 'build/mongoid-7.3/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.

Examples:

Fetch a nested value via dot syntax.

{ "name" => { "en" => "test" }}.__nested__("name.en")

Parameters:

  • string (String)

    the dot syntax string.

Returns:

  • (Object)

    The matching value.

Since:

  • 3.0.15



146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'build/mongoid-7.3/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.

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 'build/mongoid-7.3/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.

Since:

  • 3.0.2



119
120
121
# File 'build/mongoid-7.3/lib/mongoid/extensions/hash.rb', line 119

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.

Since:

  • 2.3.2



132
133
134
# File 'build/mongoid-7.3/lib/mongoid/extensions/hash.rb', line 132

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

#mongoizeHash

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

Examples:

Mongoize the object.

object.mongoize

Returns:

  • (Hash)

    The object.

Since:

  • 3.0.0



169
170
171
# File 'build/mongoid-7.3/lib/mongoid/extensions/hash.rb', line 169

def mongoize
  ::Hash.mongoize(self)
end

#resizable?true

Can the size of this object change?

Examples:

Is the hash resizable?

{}.resizable?

Returns:

  • (true)

    true.

Since:

  • 3.0.0



181
182
183
# File 'build/mongoid-7.3/lib/mongoid/extensions/hash.rb', line 181

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:

Since:

  • 3.0.7



195
196
197
198
199
200
201
# File 'build/mongoid-7.3/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