Module: Mongoid::Attributes::Processing
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
| Included In: | |
| Defined in: | lib/mongoid/attributes/processing.rb | 
Overview
This module contains the behavior for processing attributes.
Instance Method Summary
- 
    
      #process_attributes(attrs = nil) {|_self| ... } 
    
    Process the provided attributes casting them to their proper values if a field exists for them on the document. 
- 
    
      #pending_attribute?(key, value)  ⇒ true | false 
    
    private
    If the key provided is the name of an association or a nested attribute, we need to wait until all other attributes are set before processing these. 
- 
    
      #pending_nested  ⇒ Hash 
    
    private
    Get all the pending nested attributes that need to be set. 
- 
    
      #pending_relations  ⇒ Hash 
    
    private
    Get all the pending associations that need to be set. 
- 
    
      #process_attribute(name, value)  
    
    private
    If the attribute is dynamic, add a field for it with a type of object and then either way set the value. 
- 
    
      #process_nested  
    
    private
    Process all the pending nested attributes that needed to wait until ids were set to fire off. 
- 
    
      #process_pending  
    
    private
    Process all the pending items, then clear them out. 
- 
    
      #process_relations  
    
    private
    Process all the pending associations that needed to wait until ids were set to fire off. 
- 
    
      #set_pending_nested(name, aliased, value)  
    
    private
    ::Setvalue of the pending nested attribute.
- 
    
      #set_pending_relation(name, aliased, value)  
    
    private
    ::Setvalue of the pending relation.
Instance Method Details
    #pending_attribute?(key, value)  ⇒ true | false  (private)
  
If the key provided is the name of an association or a nested attribute, we need to wait until all other attributes are set before processing these.
# File 'lib/mongoid/attributes/processing.rb', line 43
def pending_attribute?(key, value) name = key.to_s aliased = if aliased_associations.key?(name) aliased_associations[name] else name end if relations.key?(aliased) set_pending_relation(name, aliased, value) return true end if nested_attributes.key?(aliased) set_pending_nested(name, aliased, value) return true end false end
#pending_nested ⇒ Hash (private)
Get all the pending nested attributes that need to be set.
# File 'lib/mongoid/attributes/processing.rb', line 103
def pending_nested @pending_nested ||= {} end
#pending_relations ⇒ Hash (private)
Get all the pending associations that need to be set.
# File 'lib/mongoid/attributes/processing.rb', line 93
def pending_relations @pending_relations ||= {} end
#process_attribute(name, value) (private)
If the attribute is dynamic, add a field for it with a type of object and then either way set the value.
# File 'lib/mongoid/attributes/processing.rb', line 115
def process_attribute(name, value) if !respond_to?("#{name}=", true) && (store_as = aliased_fields.invert[name.to_s]) name = store_as end responds = respond_to?("#{name}=", true) raise Errors::UnknownAttribute.new(self.class, name) unless responds send("#{name}=", value) end
#process_attributes(attrs = nil) {|_self| ... }
Process the provided attributes casting them to their proper values if a field exists for them on the document. This will be limited to only the attributes provided in the supplied ::Hash so that no extra nil values get put into the document’s attributes.
# File 'lib/mongoid/attributes/processing.rb', line 16
def process_attributes(attrs = nil) attrs ||= {} unless attrs.empty? attrs = sanitize_for_mass_assignment(attrs) attrs.each_pair do |key, value| next if pending_attribute?(key, value) process_attribute(key, value) end end yield self if block_given? process_pending end
#process_nested (private)
Process all the pending nested attributes that needed to wait until ids were set to fire off.
# File 'lib/mongoid/attributes/processing.rb', line 130
def process_nested pending_nested.each_pair do |name, value| send("#{name}=", value) end end
#process_pending (private)
Process all the pending items, then clear them out.
# File 'lib/mongoid/attributes/processing.rb', line 140
def process_pending process_nested and process_relations pending_nested.clear and pending_relations.clear _reset_memoized_descendants! end
#process_relations (private)
Process all the pending associations that needed to wait until ids were set to fire off.
# File 'lib/mongoid/attributes/processing.rb', line 151
def process_relations pending_relations.each_pair do |name, value| association = relations[name] if value.is_a?(Hash) association.nested_builder(value, {}).build(self) else send("#{name}=", value) end end end
#set_pending_nested(name, aliased, value) (private)
::Set value of the pending nested attribute.
# File 'lib/mongoid/attributes/processing.rb', line 79
def set_pending_nested(name, aliased, value) if stored_as_associations.include?(name) pending_nested[aliased] = value else pending_nested[name] = value end end
#set_pending_relation(name, aliased, value) (private)
::Set value of the pending relation.
# File 'lib/mongoid/attributes/processing.rb', line 66
def set_pending_relation(name, aliased, value) if stored_as_associations.include?(name) pending_relations[aliased] = value else pending_relations[name] = value end end