Class: ActiveRecord::MessagePack::Encoder
Relationships & Source Files | |
Inherits: | Object |
Defined in: | activerecord/lib/active_record/message_pack.rb |
Class Method Summary
- .new ⇒ Encoder constructor
Instance Attribute Summary
- #entries readonly
Instance Method Summary
Constructor Details
.new ⇒ Encoder
# File 'activerecord/lib/active_record/message_pack.rb', line 48
def initialize @entries = [] @refs = {}.compare_by_identity end
Instance Attribute Details
#entries (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/message_pack.rb', line 46
attr_reader :entries
Instance Method Details
#add_cached_associations(record, entry)
[ GitHub ]# 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)
[ GitHub ]# 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)
[ GitHub ]# 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)
[ GitHub ]# 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