Module: Mongoid::Fields::ClassMethods
- Defined in:
- lib/mongoid/fields.rb,
lib/mongoid/fields.rb
Instance Method Summary collapse
-
#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
private
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 Document For each field that is defined, a getter and setter will be added as an instance method to the Document.
-
#id_fields ⇒ Array<Symbol | String>
private
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
private
Traverse down the association tree and search for the field for the given key.
-
#using_object_ids? ⇒ true | false
Convenience method for determining if we are using
BSON::ObjectIds
as our id.
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.
448 449 450 |
# File 'lib/mongoid/fields.rb', line 448 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
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/mongoid/fields.rb', line 95 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 tr = fn.match(/(.*)_translations\z/)&.captures&.first key = tr 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.
458 459 460 |
# File 'lib/mongoid/fields.rb', line 458 def database_field_name(name) Fields.database_field_name(name, relations, aliased_fields, aliased_associations) end |
#extract_id_field(attributes) ⇒ Object
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.
Extracts the id field from the specified attributes hash based on aliases defined in this class.
78 79 80 81 82 83 84 85 |
# File 'lib/mongoid/fields.rb', line 78 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 Document For each field that is defined, a getter and setter will be added as an instance method to the Document.
477 478 479 480 481 482 483 484 485 |
# File 'lib/mongoid/fields.rb', line 477 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>
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.
Returns the list of id fields for this model class, as both strings and symbols.
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/mongoid/fields.rb', line 59 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.
496 497 498 499 |
# File 'lib/mongoid/fields.rb', line 496 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
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.
Traverse down the association tree and search for the field for the given key.
527 528 529 |
# File 'lib/mongoid/fields.rb', line 527 def traverse_association_tree(key, &block) Fields.traverse_association_tree(key, fields, relations, aliased_associations, &block) end |
#using_object_ids? ⇒ true | false
Convenience method for determining if we are using BSON::ObjectIds
as our id.
508 509 510 |
# File 'lib/mongoid/fields.rb', line 508 def using_object_ids? fields["_id"].object_id_field? end |