Sha256: ed0bc1c0a5ba7946c3a52d2bc558986d95fb37d3d0aea8569b48c8d472175e85

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

# frozen_string_literal: true

require 'jsonapi_helpers/action_dispatch_request_wrapper'

module JSONAPIHelpers
  module Serializers
    class Model
      attr_reader :serializer, :included, :fields, :current_user, :current_language, :model_scope, :meta, :request, :key_transform # rubocop:disable Metrics/LineLength

      def self.serialize(*args)
        new(*args).serialize
      end

      # private

      def initialize(
        model_scope,
        included: [],
        fields: {},
        current_user: nil,
        current_language: nil,
        meta: {},
        request: nil,
        key_transform: JSONAPIHelpers.config.key_transform
      )
        @model_scope = model_scope
        @included = included
        @fields = fields
        @meta = meta
        @current_user = current_user
        @current_language = current_language
        @key_transform = key_transform
        # NOTE: ActiveModel::Serializer#serializer_for is from active_model_serializers
        @serializer = ActiveModel::Serializer.serializer_for(model_scope)
        @request = ActionDispatchRequestWrapper.new(request)
      end

      def serializer_instance
        serializer_options = {
          scope: {
            current_user: current_user,
            current_language: current_language,
            current_language_id: current_language&.id
          }
        }

        if @model_scope.respond_to?(:to_ary)
          serializer_options[:each_serializer] = serializer
        end

        serializer.new(@model_scope, serializer_options)
      end

      def serialize
        # NOTE: ActiveModelSerializers::Adapter#create is from active_model_serializers
        ActiveModelSerializers::Adapter.create(
          serializer_instance,
          key_transform: key_transform,
          include: included,
          fields: fields,
          meta: meta,
          serialization_context: request
        )
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jsonapi_helpers-0.2.0 lib/jsonapi_helpers/serializers/model.rb