class ActiveRecord::MessagePack::Encoder
Attributes
[R] | entries |
Public class methods
Source code GitHub
# File activerecord/lib/active_record/message_pack.rb, line 48
def initialize
@entries = []
@refs = {}.compare_by_identity
end
Public instance methods
Source code 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
Source code 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
Source code 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
Source code 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