class Apiphobic::Responses::TransformJsonApi

Attributes

body[RW]
headers[RW]
status[RW]

Public Class Methods

new(status, headers, body) click to toggle source
# File lib/apiphobic/responses/transform_json_api.rb, line 10
def initialize(status, headers, body)
  self.status  = status
  self.headers = headers
  self.body    = body
end

Public Instance Methods

transform() click to toggle source
# File lib/apiphobic/responses/transform_json_api.rb, line 16
def transform
  [
    status,
    transformed_headers,
    body,
  ]
end

Private Instance Methods

request_body() click to toggle source
# File lib/apiphobic/responses/transform_json_api.rb, line 49
def request_body
  @request_body ||= headers['rack.input']&.read.to_s
ensure
  headers['rack.input']&.rewind
end
request_hash() click to toggle source
# File lib/apiphobic/responses/transform_json_api.rb, line 45
def request_hash
  @request_hash ||= JSON.parse(request_body)
end
transformed_headers() click to toggle source
# File lib/apiphobic/responses/transform_json_api.rb, line 26
def transformed_headers
  headers['rack.input'] = StringIO.new(transformed_json_body)

  headers
end
transformed_json_body() click to toggle source
# File lib/apiphobic/responses/transform_json_api.rb, line 32
def transformed_json_body
  return request_body if request_body == '' || request_body.nil?

  relationships = request_hash.dig('data', 'relationships') || {}

  relationships.dup.each do |relationship_name, data|
    relationships.delete(relationship_name)
    relationships[relationship_name.tr('_', '-')] = data
  end

  JSON.dump(request_hash)
end