Skip to content

Commit ee3acf6

Browse files
smaximovbeauby
authored andcommitted
Fix the shortcut form of #render (#25)
* Provide :_reverse_mapping in the renderer proc * Directly extend ActionController with class methods * Add a note stating that the proc is evaluated in the controller context
1 parent 3f36093 commit ee3acf6

File tree

3 files changed

+5
-12
lines changed

3 files changed

+5
-12
lines changed

lib/jsonapi/rails/action_controller.rb

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,6 @@ module Rails
66
module ActionController
77
REVERSE_MAPPING_KEY = 'jsonapi_deserializable.reverse_mapping'.freeze
88

9-
def self.prepended(base)
10-
base.class_eval do
11-
extend ClassMethods
12-
end
13-
end
14-
15-
def render(options = {})
16-
reverse_mapping = request.env[REVERSE_MAPPING_KEY]
17-
super(options.merge(_reverse_mapping: reverse_mapping))
18-
end
19-
209
module ClassMethods
2110
def deserializable_resource(key, options = {}, &block)
2211
_deserializable(key, options,

lib/jsonapi/rails/railtie.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class Railtie < ::Rails::Railtie
1717
initializer 'jsonapi-rails.action_controller' do
1818
ActiveSupport.on_load(:action_controller) do
1919
require 'jsonapi/rails/action_controller'
20-
prepend ::JSONAPI::Rails::ActionController
20+
extend ::JSONAPI::Rails::ActionController::ClassMethods
2121

2222
Mime::Type.register MEDIA_TYPE, :jsonapi
2323

lib/jsonapi/rails/renderer.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ def self.render(errors, options)
2828
# @api private
2929
def rails_renderer(renderer)
3030
proc do |json, options|
31+
# Renderer proc is evaluated in the controller context, so it
32+
# has access to the request object.
33+
reverse_mapping = request.env[ActionController::REVERSE_MAPPING_KEY]
34+
options = options.merge(_reverse_mapping: reverse_mapping)
3135
json = renderer.render(json, options) unless json.is_a?(String)
3236
self.content_type ||= Mime[:jsonapi]
3337
self.response_body = json

0 commit comments

Comments
 (0)