Class: JSONAPI::Hanami::Deserialization::DeserializationMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/jsonapi/hanami/deserialization.rb

Constant Summary collapse

ROUTER_PARAMS =
'router.params'.freeze
ROUTER_PARSED_BODY =
'router.parsed_body'.freeze
JSONAPI_KEYS =
[:data, :meta, :links, :jsonapi].freeze

Instance Method Summary collapse

Constructor Details

#initialize(app, key, klass) ⇒ DeserializationMiddleware

Returns a new instance of DeserializationMiddleware.



33
34
35
36
37
# File 'lib/jsonapi/hanami/deserialization.rb', line 33

def initialize(app, key, klass)
  @app = app
  @deserializable_key = key
  @deserializable_class = klass
end

Instance Method Details

#call(env) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 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