Class: JSONAPIHelpers::Serializers::Model

Inherits:
Object
  • Object
show all
Defined in:
lib/jsonapi_helpers/serializers/model.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model_scope, included: [], fields: {}, current_user: nil, current_language: nil, meta: {}, request: nil, key_transform: JSONAPIHelpers.config.key_transform) ⇒ Model

private



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/jsonapi_helpers/serializers/model.rb', line 16

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

Instance Attribute Details

#current_languageObject (readonly)

rubocop:disable Metrics/LineLength



8
9
10
# File 'lib/jsonapi_helpers/serializers/model.rb', line 8

def current_language
  @current_language
end

#current_userObject (readonly)

rubocop:disable Metrics/LineLength



8
9
10
# File 'lib/jsonapi_helpers/serializers/model.rb', line 8

def current_user
  @current_user
end

#fieldsObject (readonly)

rubocop:disable Metrics/LineLength



8
9
10
# File 'lib/jsonapi_helpers/serializers/model.rb', line 8

def fields
  @fields
end

#includedObject (readonly)

rubocop:disable Metrics/LineLength



8
9
10
# File 'lib/jsonapi_helpers/serializers/model.rb', line 8

def included
  @included
end

#key_transformObject (readonly)

rubocop:disable Metrics/LineLength



8
9
10
# File 'lib/jsonapi_helpers/serializers/model.rb', line 8

def key_transform
  @key_transform
end

#metaObject (readonly)

rubocop:disable Metrics/LineLength



8
9
10
# File 'lib/jsonapi_helpers/serializers/model.rb', line 8

def meta
  @meta
end

#model_scopeObject (readonly)

rubocop:disable Metrics/LineLength



8
9
10
# File 'lib/jsonapi_helpers/serializers/model.rb', line 8

def model_scope
  @model_scope
end

#requestObject (readonly)

rubocop:disable Metrics/LineLength



8
9
10
# File 'lib/jsonapi_helpers/serializers/model.rb', line 8

def request
  @request
end

#serializerObject (readonly)

rubocop:disable Metrics/LineLength



8
9
10
# File 'lib/jsonapi_helpers/serializers/model.rb', line 8

def serializer
  @serializer
end

Class Method Details

.serialize(*args) ⇒ Object



10
11
12
# File 'lib/jsonapi_helpers/serializers/model.rb', line 10

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

Instance Method Details

#serializeObject



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/jsonapi_helpers/serializers/model.rb', line 54

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

#serializer_instanceObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/jsonapi_helpers/serializers/model.rb', line 38

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