Skip to content

Commit 55e7637

Browse files
authored
Fix deserialization middleware + generator. (#8)
1 parent 13409dd commit 55e7637

File tree

2 files changed

+8
-13
lines changed

2 files changed

+8
-13
lines changed

lib/generators/jsonapi/deserializable/templates/deserializable.rb.erb

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
11
<% module_namespacing do -%>
22
class Deserializable<%= class_name %> < JSONAPI::Deserializable::Resource
33
id
4-
5-
<% attr_names.each do |attr| -%>
4+
<% attr_names.each do |attr| %>
65
attribute :<%= attr %>
76
<% end -%>
8-
9-
<% has_one_rels.each do |reflection| -%>
7+
<% has_one_rels.each do |reflection| %>
108
has_one :<%= reflection.name %> do |rel, id, type|
119
field <%= has_one_id_field_name(reflection.name) %>: id
1210
<% if reflection.polymorphic? -%>
1311
field <%= has_one_type_field_name(reflection.name) %>: type
1412
<% end -%>
1513
end
1614
<% end -%>
17-
<% has_many_rels.each do |reflection| -%>
15+
<% has_many_rels.each do |reflection| %>
1816
has_many :<%= reflection.name %> do |rel, ids, types|
1917
field <%= has_many_id_field_name(reflection.name) %>: ids
2018
<% if reflection.polymorphic? -%>

lib/jsonapi/rails/action_controller.rb

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ def deserializable_relationship(key, *args, &block)
3131
end
3232

3333
class DeserializationMiddleware
34-
JSONAPI_KEYS = %w(data meta links jsonapi).freeze
34+
REQUEST_PARAMETERS_KEY =
35+
'action_dispatch.request.request_parameters'.freeze
3536
def initialize(app, key, klass)
3637
@app = app
3738
@deserializable_key = key
@@ -40,16 +41,12 @@ def initialize(app, key, klass)
4041

4142
def call(env)
4243
request = Rack::Request.new(env)
43-
body = request.params.slice(*JSONAPI_KEYS)
44+
body = JSON.parse(request.body.read)
4445
parser.parse!(body)
4546
deserialized_hash = @deserializable_class.call(body)
46-
jsonapi = {}
47-
JSONAPI_KEYS.each do |key|
48-
next unless request.params.key?(key)
49-
jsonapi[key.to_sym] = request.delete_param(key)
47+
(env[REQUEST_PARAMETERS_KEY] ||= {}).tap do |request_parameters|
48+
request_parameters[@deserializable_key] = deserialized_hash
5049
end
51-
request.update_param(:_jsonapi, jsonapi)
52-
request.update_param(@deserializable_key, deserialized_hash)
5350

5451
@app.call(env)
5552
end

0 commit comments

Comments
 (0)