class JSONAPI::Hanami::Deserialization::DeserializationMiddleware

Constants

JSONAPI_KEYS
ROUTER_PARAMS
ROUTER_PARSED_BODY

Public Class Methods

new(app, key, klass) click to toggle source
# File lib/jsonapi/hanami/deserialization.rb, line 33
def initialize(app, key, klass)
  @app = app
  @deserializable_key = key
  @deserializable_class = klass
end

Public Instance Methods

call(env) click to toggle source
# File lib/jsonapi/hanami/deserialization.rb, line 39
def call(env)
  body = env[ROUTER_PARSED_BODY]
  deserialized_hash = @deserializable_class.call(body)
  params = env[ROUTER_PARAMS]
  # TODO(beauby): Actually replace the request body upstream instead
  #   of hacking it here.
  params[:_jsonapi] = {}
  JSONAPI_KEYS.each do |key|
    params[:_jsonapi][key] = params.delete(key) if params.key?(key)
  end
  params[@deserializable_key] = deserialized_hash

  @app.call(env)
end