Module: Mongoid::Attributes
- Extended by:
- ActiveSupport::Concern
- Includes:
- Processing
- Included in:
- Components
- Defined in:
- lib/mongoid/attributes.rb,
lib/mongoid/attributes/processing.rb
Overview
:nodoc:
Defined Under Namespace
Modules: ClassMethods, Processing
Instance Attribute Summary collapse
-
#attributes ⇒ Object
(also: #raw_attributes)
readonly
Returns the value of attribute attributes.
Instance Method Summary collapse
-
#assign_attributes(attrs = nil, options = {}) ⇒ Object
Allows you to set all the attributes for a particular mass-assignment security role by passing in a hash of attributes with keys matching the attribute names (which again matches the column names) and the role name using the :as option.
-
#attribute_present?(name) ⇒ true, false
(also: #has_attribute?)
Determine if an attribute is present.
-
#read_attribute(name) ⇒ Object
(also: #[])
Read a value from the document attributes.
-
#remove_attribute(name) ⇒ Object
Remove a value from the
Document
attributes. -
#respond_to?(*args) ⇒ true, false
Override respond_to? so it responds properly for dynamic attributes.
-
#write_attribute(name, value) ⇒ Object
(also: #[]=)
Write a single attribute to the document attribute hash.
-
#write_attributes(attrs = nil, guard_protected_attributes = true) ⇒ Object
(also: #attributes=)
Writes the supplied attributes hash to the document.
Methods included from Processing
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object (protected)
Used for allowing accessor methods for dynamic attributes.
164 165 166 167 168 169 170 171 172 |
# File 'lib/mongoid/attributes.rb', line 164 def method_missing(name, *args) attr = name.to_s return super unless attributes.has_key?(attr.reader) if attr.writer? write_attribute(attr.reader, (args.size > 1) ? args : args.first) else read_attribute(attr.reader) end end |
Instance Attribute Details
#attributes ⇒ Object (readonly) Also known as: raw_attributes
Returns the value of attribute attributes.
12 13 14 |
# File 'lib/mongoid/attributes.rb', line 12 def attributes @attributes end |
Instance Method Details
#assign_attributes(attrs = nil, options = {}) ⇒ Object
Allows you to set all the attributes for a particular mass-assignment security role by passing in a hash of attributes with keys matching the attribute names (which again matches the column names) and the role name using the :as option. To bypass mass-assignment security you can use the :without_protection => true option.
131 132 133 134 135 136 137 |
# File 'lib/mongoid/attributes.rb', line 131 def assign_attributes(attrs = nil, = {}) _assigning do process(attrs, [:as] || :default, ![:without_protection]) do |document| document.identify if new? && id.blank? end end end |
#attribute_present?(name) ⇒ true, false Also known as: has_attribute?
Determine if an attribute is present.
25 26 27 28 |
# File 'lib/mongoid/attributes.rb', line 25 def attribute_present?(name) attribute = read_attribute(name) ! attribute.blank? || attribute == false end |
#read_attribute(name) ⇒ Object Also known as: []
Read a value from the document attributes. If the value does not exist it will return nil.
45 46 47 |
# File 'lib/mongoid/attributes.rb', line 45 def read_attribute(name) attributes[name.to_s] end |
#remove_attribute(name) ⇒ Object
Remove a value from the Document
attributes. If the value does not exist it will fail gracefully.
59 60 61 62 63 64 65 |
# File 'lib/mongoid/attributes.rb', line 59 def remove_attribute(name) _assigning do access = name.to_s attribute_will_change!(access) attributes.delete(access) end end |
#respond_to?(*args) ⇒ true, false
Override respond_to? so it responds properly for dynamic attributes.
77 78 79 80 81 82 |
# File 'lib/mongoid/attributes.rb', line 77 def respond_to?(*args) (Mongoid.allow_dynamic_fields && attributes && attributes.has_key?(args.first.to_s.reader) ) || super end |
#write_attribute(name, value) ⇒ Object Also known as: []=
Write a single attribute to the document attribute hash. This will also fire the before and after update callbacks, and perform any necessary typecasting.
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/mongoid/attributes.rb', line 98 def write_attribute(name, value) _assigning do access = name.to_s localized = fields[access].try(:localized?) typed_value_for(access, value).tap do |value| unless attributes[access] == value || attribute_changed?(access) attribute_will_change!(access) end if localized (attributes[access] ||= {}).merge!(value) else attributes[access] = value end end end end |
#write_attributes(attrs = nil, guard_protected_attributes = true) ⇒ Object Also known as: attributes=
Writes the supplied attributes hash to the document. This will only overwrite existing attributes if they are present in the new Hash
, all others will be preserved.
153 154 155 |
# File 'lib/mongoid/attributes.rb', line 153 def write_attributes(attrs = nil, guard_protected_attributes = true) assign_attributes(attrs, :without_protection => !guard_protected_attributes) end |