Class: JSONAPI::Realizer::Action::Update

Inherits:
JSONAPI::Realizer::Action show all
Defined in:
lib/jsonapi/realizer/action/update.rb

Instance Attribute Summary collapse

Attributes inherited from JSONAPI::Realizer::Action

#headers, #payload

Instance Method Summary collapse

Methods inherited from JSONAPI::Realizer::Action

#fields, #includes

Constructor Details

#initialize(payload:, headers:, scope: nil) ⇒ Update

Returns a new instance of Update.



7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/jsonapi/realizer/action/update.rb', line 7

def initialize(payload:, headers:, scope: nil)
  raise Error::MissingContentTypeHeader unless headers.key?("Content-Type")
  raise Error::InvalidContentTypeHeader unless headers.fetch("Content-Type") == JSONAPI::MEDIA_TYPE

  super(payload: payload, headers: headers, scope: scope)

  @resource = resource_class.new(adapter.find_via_call(relation, id))

  raise Error::MissingRootProperty unless @payload.key?("data") || @payload.key?("errors") || @payload.key?("meta")
  raise Error::MissingTypeResourceProperty if @payload.key?("data") && data.kind_of?(Hash) && !data.key?("type")
  raise Error::MissingTypeResourceProperty if @payload.key?("data") && data.kind_of?(Array) && !data.all? {|resource| resource.key?("type")}
end

Instance Attribute Details

#resourceObject

Returns the value of attribute resource.



5
6
7
# File 'lib/jsonapi/realizer/action/update.rb', line 5

def resource
  @resource
end

Instance Method Details

#callObject



20
21
22
23
# File 'lib/jsonapi/realizer/action/update.rb', line 20

def call
  adapter.assign_attributes_via_call(resource.model, attributes)
  adapter.assign_relationships_via_call(resource.model, relationships)
end

#modelObject



25
26
27
# File 'lib/jsonapi/realizer/action/update.rb', line 25

def model
  resource.model
end