Skip to content

Commit fc35d16

Browse files
authored
Refactor renderer. (#21)
* Fix yarddoc in lib/jsonapi/renderer.rb. * Make JSONAPI::Renderer an actual class. * Make tests use the JSONAPI::Renderer class directly.
1 parent df8965f commit fc35d16

File tree

4 files changed

+38
-31
lines changed

4 files changed

+38
-31
lines changed

lib/jsonapi/renderer.rb

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
11
require 'jsonapi/renderer/document'
22

33
module JSONAPI
4+
class Renderer
5+
# Render a JSON API document.
6+
#
7+
# @param params [Hash]
8+
# @option data [(#jsonapi_id, #jsonapi_type, #jsonapi_related, #as_jsonapi),
9+
# Array<(#jsonapi_id, #jsonapi_type, #jsonapi_related,
10+
# #as_jsonapi)>,
11+
# nil] Primary resource(s) to be rendered.
12+
# @option errors [Array<#jsonapi_id>] Errors to be rendered.
13+
# @option include Relationships to be included. See
14+
# JSONAPI::IncludeDirective.
15+
# @option fields [Hash{Symbol, Array<Symbol>}, Hash{String, Array<String>}]
16+
# List of requested fields for some or all of the resource types.
17+
# @option meta [Hash] Non-standard top-level meta information to be
18+
# included.
19+
# @option links [Hash] Top-level links to be included.
20+
# @option jsonapi_object [Hash] JSON API object.
21+
def render(params)
22+
Document.new(params).to_hash
23+
end
24+
end
25+
426
module_function
527

6-
# Render a JSON API document.
7-
#
8-
# @param [Hash] params
9-
# @option [(#jsonapi_id, #jsonapi_type, #jsonapi_related, #as_jsonapi),
10-
# Array<(#jsonapi_id, #jsonapi_type, #jsonapi_related,
11-
# #as_jsonapi)>,
12-
# nil] data Primary resource(s) to be rendered.
13-
# @option [Array<#jsonapi_id>] errors Errors to be rendered.
14-
# @option include Relationships to be included. See
15-
# JSONAPI::IncludeDirective.
16-
# @option [Hash{Symbol, Array<Symbol>}, Hash{String, Array<String>}] fields
17-
# List of requested fields for some or all of the resource types.
18-
# @option [Hash] meta Non-standard top-level meta information to be
19-
# included.
20-
# @option [Hash] links Top-level links to be included.
21-
# @option [Hash] jsonapi_object JSON API object.
28+
# @see JSONAPI::Renderer#render
2229
def render(params)
23-
Renderer::Document.new(params).to_hash
30+
Renderer.new.render(params)
2431
end
2532
end

lib/jsonapi/renderer/document.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
require 'jsonapi/renderer/resources_processor'
33

44
module JSONAPI
5-
module Renderer
5+
class Renderer
66
class Document
77
def initialize(params = {})
88
@data = params.fetch(:data, :no_data)

lib/jsonapi/renderer/resources_processor.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
require 'set'
22

33
module JSONAPI
4-
module Renderer
4+
class Renderer
55
class ResourcesProcessor
66
def initialize(resources, include, fields)
77
@resources = resources

spec/renderer_spec.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def as_jsonapi(options = {})
119119
end
120120
end
121121

122-
describe JSONAPI, '#render' do
122+
describe JSONAPI::Renderer, '#render' do
123123
before(:all) do
124124
@users = [
125125
UserResource.new(1, 'User 1', '123 Example st.', []),
@@ -137,7 +137,7 @@ def as_jsonapi(options = {})
137137
end
138138

139139
it 'renders nil' do
140-
actual = JSONAPI.render(data: nil)
140+
actual = subject.render(data: nil)
141141
expected = {
142142
data: nil
143143
}
@@ -146,7 +146,7 @@ def as_jsonapi(options = {})
146146
end
147147

148148
it 'renders an empty array' do
149-
actual = JSONAPI.render(data: [])
149+
actual = subject.render(data: [])
150150
expected = {
151151
data: []
152152
}
@@ -155,7 +155,7 @@ def as_jsonapi(options = {})
155155
end
156156

157157
it 'renders a single resource' do
158-
actual = JSONAPI.render(data: @users[0])
158+
actual = subject.render(data: @users[0])
159159
expected = {
160160
data: {
161161
type: 'users',
@@ -193,7 +193,7 @@ def as_jsonapi(options = {})
193193
end
194194

195195
it 'renders a collection of resources' do
196-
actual = JSONAPI.render(data: [@users[0],
196+
actual = subject.render(data: [@users[0],
197197
@users[1]])
198198
expected = {
199199
data: [
@@ -264,7 +264,7 @@ def as_jsonapi(options = {})
264264
end
265265

266266
it 'renders included relationships' do
267-
actual = JSONAPI.render(data: @users[0],
267+
actual = subject.render(data: @users[0],
268268
include: 'posts')
269269
expected = {
270270
data: {
@@ -325,7 +325,7 @@ def as_jsonapi(options = {})
325325
end
326326

327327
it 'filters out fields' do
328-
actual = JSONAPI.render(data: @users[0],
328+
actual = subject.render(data: @users[0],
329329
fields: { users: [:name] })
330330
expected = {
331331
data: {
@@ -347,7 +347,7 @@ def as_jsonapi(options = {})
347347
end
348348

349349
it 'renders a toplevel meta' do
350-
actual = JSONAPI.render(data: nil,
350+
actual = subject.render(data: nil,
351351
meta: { this: 'is_meta' })
352352
expected = {
353353
data: nil,
@@ -358,7 +358,7 @@ def as_jsonapi(options = {})
358358
end
359359

360360
it 'renders toplevel links' do
361-
actual = JSONAPI.render(data: nil,
361+
actual = subject.render(data: nil,
362362
links: { self: 'http://api.example.com/users' })
363363
expected = {
364364
data: nil,
@@ -369,7 +369,7 @@ def as_jsonapi(options = {})
369369
end
370370

371371
it 'renders a toplevel jsonapi object' do
372-
actual = JSONAPI.render(data: nil,
372+
actual = subject.render(data: nil,
373373
jsonapi: {
374374
version: '1.0',
375375
meta: 'For real'
@@ -386,7 +386,7 @@ def as_jsonapi(options = {})
386386
end
387387

388388
it 'renders an empty hash if neither errors nor data provided' do
389-
actual = JSONAPI.render({})
389+
actual = subject.render({})
390390
expected = {}
391391

392392
expect(actual).to eq(expected)
@@ -406,7 +406,7 @@ def as_jsonapi
406406
it 'renders errors' do
407407
errors = [ErrorResource.new('1', 'Not working'),
408408
ErrorResource.new('2', 'Works poorly')]
409-
actual = JSONAPI.render(errors: errors)
409+
actual = subject.render(errors: errors)
410410
expected = {
411411
errors: [{ id: '1', title: 'Not working' },
412412
{ id: '2', title: 'Works poorly' }]

0 commit comments

Comments
 (0)