class Mongoid::Criteria::Queryable::Smash

This is a smart hash for use with options and selectors.

Attributes

aliases[R]

@attribute [r] aliases The aliases. @attribute [r] serializers The serializers.

serializers[R]

@attribute [r] aliases The aliases. @attribute [r] serializers The serializers.

Public Class Methods

new(aliases = {}, serializers = {}) { |self| ... } click to toggle source

Initialize the new selector.

@example Initialize the new selector.

Queryable::Smash.new(aliases, serializers)

@param [ Hash ] aliases A hash of mappings from aliases to the actual

field names in the database.

@param [ Hash ] serializers An optional hash of objects that are

responsible for serializing values. The keys of the hash must be
strings that match the field name, and the values must respond to
#localized? and #evolve(object).

@since 1.0.0

# File lib/mongoid/criteria/queryable/smash.rb, line 44
def initialize(aliases = {}, serializers = {})
  @aliases, @serializers = aliases, serializers
  yield(self) if block_given?
end

Public Instance Methods

[](key) click to toggle source

Get an item from the smart hash by the provided key.

@example Get an item by the key.

smash["test"]

@param [ String ] key The key.

@return [ Object ] The found object.

@since 2.0.0

Calls superclass method
# File lib/mongoid/criteria/queryable/smash.rb, line 59
def [](key)
  fetch(aliases[key]) { super }
end
__deep_copy__() click to toggle source

Perform a deep copy of the smash.

@example Perform a deep copy.

smash.__deep_copy__

@return [ Smash ] The copied hash.

@since 1.0.0

# File lib/mongoid/criteria/queryable/smash.rb, line 23
def __deep_copy__
  self.class.new(aliases, serializers) do |copy|
    each_pair do |key, value|
      copy.store(key, value.__deep_copy__)
    end
  end
end

Private Instance Methods

localized_key(name, serializer) click to toggle source

Get the localized value for the key if needed. If the field uses localization the current locale will be appended to the key in MongoDB dot notation.

@api private

@example Get the normalized key name.

smash.localized_key("field", serializer)

@param [ String ] name The name of the field. @param [ Object ] serializer The optional field serializer.

@return [ String ] The normalized key.

@since 1.0.0

# File lib/mongoid/criteria/queryable/smash.rb, line 80
def localized_key(name, serializer)
  serializer && serializer.localized? ? "#{name}.#{::I18n.locale}" : name
end
storage_pair(key) click to toggle source

Get the pair of objects needed to store the value in a hash by the provided key. This is the database field name and the serializer.

@api private

@example Get the name and serializer.

smash.storage_pair("id")

@param [ Symbol, String ] key The key provided to the selection.

@return [ Array<String, Object> ] The name of the db field and

serializer.

@since 1.0.0

# File lib/mongoid/criteria/queryable/smash.rb, line 98
def storage_pair(key)
  field = key.to_s
  name = aliases[field] || field
  [ name, serializers[name] ]
end