@@ -13,7 +13,7 @@ def self.included(base)
13
13
:transaction
14
14
end
15
15
16
- attr_reader :response_document
16
+ attr_reader :response_document , :jsonapi_request
17
17
18
18
def index
19
19
process_request
@@ -76,48 +76,54 @@ def get_related_resources
76
76
end
77
77
78
78
def process_request
79
- @response_document = create_response_document
80
-
81
- unless verify_content_type_header && verify_accept_header
82
- render_response_document
83
- return
79
+ begin
80
+ setup_response_document
81
+ verify_content_type_header
82
+ verify_accept_header
83
+ parse_request
84
+ execute_request
85
+ rescue => e
86
+ handle_exceptions ( e )
84
87
end
88
+ render_response_document
89
+ end
85
90
86
- request_parser = JSONAPI ::RequestParser . new (
87
- params ,
88
- context : context ,
89
- key_formatter : key_formatter ,
90
- server_error_callbacks : ( self . class . server_error_callbacks || [ ] ) )
91
-
92
- transactional = request_parser . transactional?
91
+ def setup_response_document
92
+ @response_document = create_response_document
93
+ end
93
94
94
- begin
95
- process_operations ( transactional ) do
96
- run_callbacks :process_operations do
97
- request_parser . each ( response_document ) do |op |
98
- op . options [ :serializer ] = resource_serializer_klass . new (
99
- op . resource_klass ,
100
- include_directives : op . options [ :include_directives ] ,
101
- fields : op . options [ :fields ] ,
102
- base_url : base_url ,
103
- key_formatter : key_formatter ,
104
- route_formatter : route_formatter ,
105
- serialization_options : serialization_options ,
106
- controller : self
107
- )
108
- op . options [ :cache_serializer_output ] = !JSONAPI . configuration . resource_cache . nil?
109
-
110
- process_operation ( op )
111
- end
112
- end
113
- if response_document . has_errors?
114
- raise ActiveRecord ::Rollback
95
+ def parse_request
96
+ @jsonapi_request = JSONAPI ::Request . new (
97
+ params ,
98
+ context : context ,
99
+ key_formatter : key_formatter ,
100
+ server_error_callbacks : ( self . class . server_error_callbacks || [ ] ) )
101
+ fail JSONAPI ::Exceptions ::Errors . new ( @jsonapi_request . errors ) if @jsonapi_request . errors . any?
102
+ end
103
+
104
+ def execute_request
105
+ process_operations ( jsonapi_request . transactional? ) do
106
+ run_callbacks :process_operations do
107
+ jsonapi_request . operations . each do |op |
108
+ op . options [ :serializer ] = resource_serializer_klass . new (
109
+ op . resource_klass ,
110
+ include_directives : op . options [ :include_directives ] ,
111
+ fields : op . options [ :fields ] ,
112
+ base_url : base_url ,
113
+ key_formatter : key_formatter ,
114
+ route_formatter : route_formatter ,
115
+ serialization_options : serialization_options ,
116
+ controller : self
117
+ )
118
+ op . options [ :cache_serializer_output ] = !JSONAPI . configuration . resource_cache . nil?
119
+
120
+ process_operation ( op )
115
121
end
116
122
end
117
- rescue => e
118
- handle_exceptions ( e )
123
+ if response_document . has_errors?
124
+ raise ActiveRecord ::Rollback
125
+ end
119
126
end
120
- render_response_document
121
127
end
122
128
123
129
def process_operations ( transactional )
@@ -165,20 +171,12 @@ def verify_content_type_header
165
171
fail JSONAPI ::Exceptions ::UnsupportedMediaTypeError . new ( request . content_type )
166
172
end
167
173
end
168
- true
169
- rescue => e
170
- handle_exceptions ( e )
171
- false
172
174
end
173
175
174
176
def verify_accept_header
175
177
unless valid_accept_media_type?
176
178
fail JSONAPI ::Exceptions ::NotAcceptableError . new ( request . accept )
177
179
end
178
- true
179
- rescue => e
180
- handle_exceptions ( e )
181
- false
182
180
end
183
181
184
182
def valid_accept_media_type?
0 commit comments