Methods

Class Public methods

new(entries)

📝 Source code
# File activerecord/lib/active_record/message_pack.rb, line 91
      def initialize(entries)
        @records = entries.map { |entry| build_record(entry) }
        @records.zip(entries) { |record, entry| resolve_cached_associations(record, entry) }
      end
🔎 See on GitHub

Instance Public methods

build_record(entry)

📝 Source code
# File activerecord/lib/active_record/message_pack.rb, line 104
      def build_record(entry)
        class_name, attributes_hash, is_new_record, * = entry
        klass = ActiveSupport::MessagePack::Extensions.load_class(class_name)
        attributes = klass.attributes_builder.build_from_database(attributes_hash)
        klass.allocate.init_with_attributes(attributes, is_new_record)
      end
🔎 See on GitHub

decode(ref)

📝 Source code
# File activerecord/lib/active_record/message_pack.rb, line 96
      def decode(ref)
        if ref.is_a?(Array)
          ref.map { |r| @records[r] }
        elsif ref
          @records[ref]
        end
      end
🔎 See on GitHub

resolve_cached_associations(record, entry)

📝 Source code
# File activerecord/lib/active_record/message_pack.rb, line 111
      def resolve_cached_associations(record, entry)
        i = 3 # entry == [class_name, attributes_hash, is_new_record, *associations]
        while i < entry.length
          begin
            record.association(entry[i]).target = decode(entry[i + 1])
          rescue ActiveRecord::AssociationNotFoundError
            # The association no longer exists, so just skip it.
          end
          i += 2
        end
      end
🔎 See on GitHub