Sha256: d20cafd15681422e7a1991eb3ad960dbc0dce7a982d90e518ab8aa8f1c83149e

Contents?: true

Size: 1.3 KB

Versions: 9

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

module Panko
  class ArraySerializer
    attr_accessor :subjects

    def initialize(subjects, options = {})
      @subjects = subjects
      @each_serializer = options[:each_serializer]

      if @each_serializer.nil?
        raise ArgumentError, %{
Please pass valid each_serializer to ArraySerializer, for example:
> Panko::ArraySerializer.new(posts, each_serializer: PostSerializer)
        }
      end

      serializer_options = {
        only: options.fetch(:only, []),
        except: options.fetch(:except, []),
        context: options[:context],
        scope: options[:scope]
      }

      @serialization_context = SerializationContext.create(options)
      @descriptor = Panko::SerializationDescriptor.build(@each_serializer, serializer_options, @serialization_context)
    end

    def to_json
      serialize_to_json @subjects
    end

    def serialize(subjects)
      Oj.load(serialize_to_json(subjects))
    end

    def to_a
      Oj.load(serialize_to_json(@subjects))
    end

    def serialize_to_json(subjects)
      writer = Oj::StringWriter.new(mode: :rails)
      Panko.serialize_subjects(subjects.to_a, writer, @descriptor)
      @descriptor.set_serialization_context(nil) unless @serialization_context.is_a?(EmptySerializerContext)
      writer.to_s
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
panko_serializer-0.5.9 lib/panko/array_serializer.rb
panko_serializer-0.5.8 lib/panko/array_serializer.rb
panko_serializer-0.5.7 lib/panko/array_serializer.rb
panko_serializer-0.5.6 lib/panko/array_serializer.rb
panko_serializer-0.5.5 lib/panko/array_serializer.rb
panko_serializer-0.5.4 lib/panko/array_serializer.rb
panko_serializer-0.5.3 lib/panko/array_serializer.rb
panko_serializer-0.5.2 lib/panko/array_serializer.rb
panko_serializer-0.5.1 lib/panko/array_serializer.rb