Module: Mongoid::Fields::ClassMethods
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Extended In:
| |
Defined in: | lib/mongoid/fields.rb, lib/mongoid/fields.rb |
Instance Attribute Summary
-
#using_object_ids? ⇒ true | false
readonly
Convenience method for determining if we are using
BSON::ObjectIds
as our id.
Instance Method Summary
-
#attribute_names ⇒ Array<String>
Returns an array of names for the attributes available on this object.
-
#cleanse_localized_field_names(name) ⇒ Field
Removes the _translations from the given field name.
-
#database_field_name(name) ⇒ String
Get the name of the provided field as it is stored in the database.
-
#extract_id_field(attributes) ⇒ Object
Internal use only
Internal use only
Extracts the id field from the specified attributes hash based on aliases defined in this class.
-
#field(name, options = {}) ⇒ Field
Defines all the fields that are accessible on the
::Mongoid::Document
For each field that is defined, a getter and setter will be added as an instance method to the::Mongoid::Document
. -
#id_fields ⇒ Array<Symbol | String>
Internal use only
Internal use only
Returns the list of id fields for this model class, as both strings and symbols.
-
#replace_field(name, type) ⇒ Serializable
Replace a field with a new type.
-
#traverse_association_tree(key) {|The, The, Whether| ... } ⇒ Field
Internal use only
Internal use only
Traverse down the association tree and search for the field for the given key.
Instance Attribute Details
#using_object_ids? ⇒ true
| false
(readonly)
Convenience method for determining if we are using BSON::ObjectIds
as our id.
# File 'lib/mongoid/fields.rb', line 514
def using_object_ids? fields["_id"].object_id_field? end
Instance Method Details
#attribute_names ⇒ Array<String>
Returns an array of names for the attributes available on this object.
Provides the field names in an ORM-agnostic way. ::Rails
v3.1+ uses this method to automatically wrap params in JSON requests.
# File 'lib/mongoid/fields.rb', line 454
def attribute_names fields.keys end
#cleanse_localized_field_names(name) ⇒ Field
Removes the _translations from the given field name. This is done only when there doesn’t already exist a field name or relation with the same name (i.e. with the _translations suffix). This check for an existing field is done recursively
# File 'lib/mongoid/fields.rb', line 100
def cleanse_localized_field_names(name) name = database_field_name(name.to_s) klass = self [].tap do |res| ar = name.split('.') ar.each_with_index do |fn, i| key = fn unless klass.fields.key?(fn) || klass.relations.key?(fn) if fn.end_with?(TRANSLATIONS_SFX) key = fn.delete_suffix(TRANSLATIONS_SFX) else key = fn end end res.push(key) if klass.fields.key?(fn) res.push(ar.drop(i+1).join('.')) unless i == ar.length - 1 break elsif klass.relations.key?(fn) klass = klass.relations[key].klass end end end.join('.') end
#database_field_name(name) ⇒ String
Get the name of the provided field as it is stored in the database. Used in determining if the field is aliased or not.
# File 'lib/mongoid/fields.rb', line 464
def database_field_name(name) Fields.database_field_name(name, relations, aliased_fields, aliased_associations) end
#extract_id_field(attributes) ⇒ Object
Extracts the id field from the specified attributes hash based on aliases defined in this class.
# File 'lib/mongoid/fields.rb', line 83
def extract_id_field(attributes) id_fields.each do |k| if v = attributes[k] return v end end nil end
#field(name, options = {}) ⇒ Field
Defines all the fields that are accessible on the ::Mongoid::Document
For each field that is defined, a getter and setter will be added as an instance method to the ::Mongoid::Document
.
# File 'lib/mongoid/fields.rb', line 483
def field(name, = {}) named = name.to_s Validators::Macro.validate(self, name, ) added = add_field(named, ) descendants.each do |subclass| subclass.add_field(named, ) end added end
#id_fields ⇒ Array<Symbol | String>
Returns the list of id fields for this model class, as both strings and symbols.
# File 'lib/mongoid/fields.rb', line 64
def id_fields IDS.dup.tap do |id_fields| aliased_fields.each do |k, v| if v == '_id' id_fields << k.to_sym id_fields << k end end end end
#replace_field(name, type) ⇒ Serializable
Replace a field with a new type.
# File 'lib/mongoid/fields.rb', line 502
def replace_field(name, type) remove_defaults(name) add_field(name, fields[name]. .merge(type: type)) end
#traverse_association_tree(key) {|The, The, Whether| ... } ⇒ Field
Traverse down the association tree and search for the field for the given key.
# File 'lib/mongoid/fields.rb', line 533
def traverse_association_tree(key, &block) Fields.traverse_association_tree(key, fields, relations, aliased_associations, &block) end