Class: ActiveRecord::MessagePack::Encoder
- Defined in:
- activerecord/lib/active_record/message_pack.rb
Instance Attribute Summary collapse
- 
  
    
      #entries  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute entries. 
Instance Method Summary collapse
- #add_cached_associations(record, entry) ⇒ Object
- #build_entry(record) ⇒ Object
- #encode(input) ⇒ Object
- #encode_record(record) ⇒ Object
- 
  
    
      #initialize  ⇒ Encoder 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of Encoder. 
Constructor Details
#initialize ⇒ Encoder
Returns a new instance of Encoder.
| 48 49 50 51 | # File 'activerecord/lib/active_record/message_pack.rb', line 48 def initialize @entries = [] @refs = {}.compare_by_identity end | 
Instance Attribute Details
#entries ⇒ Object (readonly)
Returns the value of attribute entries.
| 46 47 48 | # File 'activerecord/lib/active_record/message_pack.rb', line 46 def entries @entries end | 
Instance Method Details
#add_cached_associations(record, entry) ⇒ Object
| 81 82 83 84 85 86 87 | # File 'activerecord/lib/active_record/message_pack.rb', line 81 def add_cached_associations(record, entry) record.class.normalized_reflections.each_value do |reflection| if record.association_cached?(reflection.name) && record.association(reflection.name).loaded? entry << reflection.name << encode(record.association(reflection.name).target) end end end | 
#build_entry(record) ⇒ Object
| 73 74 75 76 77 78 79 | # File 'activerecord/lib/active_record/message_pack.rb', line 73 def build_entry(record) [ ActiveSupport::MessagePack::Extensions.dump_class(record.class), record.attributes_for_database, record.new_record? ] end | 
#encode(input) ⇒ Object
| 53 54 55 56 57 58 59 | # File 'activerecord/lib/active_record/message_pack.rb', line 53 def encode(input) if input.is_a?(Array) input.map { |record| encode_record(record) } elsif input encode_record(input) end end | 
#encode_record(record) ⇒ Object
| 61 62 63 64 65 66 67 68 69 70 71 | # File 'activerecord/lib/active_record/message_pack.rb', line 61 def encode_record(record) ref = @refs[record] if !ref ref = @refs[record] = @entries.size @entries << build_entry(record) add_cached_associations(record, @entries.last) end ref end |