Skip to content

Commit 3fe4bad

Browse files
committed
Introduce jsonapi_class controller method.
1 parent 4e4490a commit 3fe4bad

File tree

3 files changed

+14
-11
lines changed

3 files changed

+14
-11
lines changed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ source 'https://rubygems.org'
22

33
# TODO(beauby): Remove before merging.
44
gem 'jsonapi-renderer', github: 'jsonapi-rb/jsonapi-renderer'
5-
gem 'jsonapi-serializable', github: 'jsonapi-rb/jsonapi-serializable', branch: 'refactor-errors-renderer'
5+
gem 'jsonapi-serializable', github: 'jsonapi-rb/jsonapi-serializable'
66

77
gemspec

lib/jsonapi/rails/controller.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,21 @@ def deserializable_resource(key, options = {}, &block)
4646
end
4747
end
4848

49+
def jsonapi_class
50+
# TODO(lucas): Make this configurable
51+
Hash.new do |h, k|
52+
names = k.to_s.split('::')
53+
klass = names.pop
54+
h[k] = [*names, "Serializable#{klass}"].join('::').safe_constantize
55+
end
56+
end
57+
4958
def jsonapi_object
5059
nil
5160
end
5261

5362
def jsonapi_expose
63+
# TODO(lucas): Make this configurable
5464
{
5565
url_helpers: ::Rails.application.routes.url_helpers
5666
}

lib/jsonapi/rails/renderer.rb

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,6 @@
44

55
module JSONAPI
66
module Rails
7-
DEFAULT_INFERRER = Hash.new do |h, k|
8-
names = k.to_s.split('::')
9-
klass = names.pop
10-
h[k] = [*names, "Serializable#{klass}"].join('::').safe_constantize
11-
end
12-
137
class SuccessRenderer
148
def initialize(renderer = JSONAPI::Serializable::Renderer.new)
159
@renderer = renderer
@@ -28,12 +22,12 @@ def render(resources, options, controller)
2822
# @api private
2923
def default_options(options, controller, resources)
3024
options.dup.tap do |opts|
31-
opts[:class] ||= DEFAULT_INFERRER
25+
opts[:class] ||= controller.jsonapi_class
3226
if (pagination_links = controller.jsonapi_pagination(resources))
3327
(opts[:links] ||= {}).merge!(pagination_links)
3428
end
3529
opts[:expose] = controller.jsonapi_expose.merge!(opts[:expose] || {})
36-
opts[:jsonapi] = opts[:jsonapi_object] || controller.jsonapi_object
30+
opts[:jsonapi] = opts.delete(:jsonapi_object) || controller.jsonapi_object
3731
end
3832
end
3933
end
@@ -58,8 +52,7 @@ def render(errors, options, controller)
5852
# @api private
5953
def default_options(options, controller)
6054
options.dup.tap do |opts|
61-
# TODO(lucas): Make this configurable.
62-
opts[:class] ||= DEFAULT_INFERRER
55+
opts[:class] ||= controller.jsonapi_class
6356
unless opts[:class].key?(:'ActiveModel::Errors')
6457
opts[:class][:'ActiveModel::Errors'] =
6558
JSONAPI::Rails::SerializableActiveModelErrors

0 commit comments

Comments
 (0)