Skip to content

Commit 5cd4f28

Browse files
authored
Improve generators; add 404 support (#66)
1 parent 27afc52 commit 5cd4f28

File tree

7 files changed

+45
-15
lines changed

7 files changed

+45
-15
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ class <%= model_klass.name.pluralize %>Controller < ApplicationController
3939
<%- end -%>
4040
def show
4141
scope = jsonapi_scope(<%= model_klass %>.where(id: params[:id]))
42-
render_jsonapi(scope.resolve.first, scope: false)
42+
instance = scope.resolve.first
43+
raise JsonapiCompliable::Errors::RecordNotFound unless instance
44+
render_jsonapi(instance, scope: false)
4345
end
4446

4547
<%- end -%>
@@ -86,7 +88,7 @@ class <%= model_klass.name.pluralize %>Controller < ApplicationController
8688
<%= file_name %>, success = jsonapi_destroy.to_a
8789

8890
if success
89-
render_jsonapi(<%= file_name %>, scope: false)
91+
render json: { meta: {} }
9092
else
9193
render_errors_for(<%= file_name %>)
9294
end

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
require 'rails_helper'
22

33
RSpec.describe "<%= type %>#create", type: :request do
4-
context 'basic create' do
4+
subject(:make_request) do
5+
jsonapi_post "/<%= api_namespace %>/v1/<%= type %>", payload
6+
end
7+
8+
describe 'basic create' do
59
let(:payload) do
610
{
711
data: {
@@ -15,7 +19,7 @@ RSpec.describe "<%= type %>#create", type: :request do
1519

1620
it 'creates the resource' do
1721
expect {
18-
jsonapi_post "/<%= api_namespace %>/v1/<%= type %>", payload
22+
make_request
1923
}.to change { <%= model_klass %>.count }.by(1)
2024
<%= file_name %> = <%= model_klass %>.last
2125

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
require 'rails_helper'
22

33
RSpec.describe "<%= type %>#destroy", type: :request do
4-
context 'basic destroy' do
4+
subject(:make_request) do
5+
jsonapi_delete "/<%= api_namespace %>/v1/<%= type %>/#{<%= file_name %>.id}"
6+
end
7+
8+
describe 'basic destroy' do
59
let!(:<%= file_name %>) { create(:<%= file_name %>) }
610

711
it 'updates the resource' do
812
expect {
9-
delete "/<%= api_namespace %>/v1/<%= type %>/#{<%= file_name %>.id}"
13+
make_request
1014
}.to change { <%= model_klass %>.count }.by(-1)
1115

12-
expect(response.status).to eq(204)
16+
expect(response.status).to eq(200)
17+
expect(json).to eq('meta' => {})
1318
end
1419
end
1520
end

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
require 'rails_helper'
22

33
RSpec.describe "<%= file_name.pluralize %>#index", type: :request do
4-
context 'basic fetch' do
4+
let(:params) { {} }
5+
6+
subject(:make_request) do
7+
jsonapi_get "/<%= api_namespace %>/v1/<%= file_name.pluralize %>",
8+
params: params
9+
end
10+
11+
describe 'basic fetch' do
512
let!(:<%= file_name %>1) { create(:<%= file_name %>) }
613
let!(:<%= file_name %>2) { create(:<%= file_name %>) }
714

815
it 'serializes the list correctly' do
9-
jsonapi_get "/<%= api_namespace %>/v1/<%= file_name.pluralize %>"
10-
16+
make_request
1117
expect(json_ids(true)).to match_array([<%= file_name %>1.id, <%= file_name %>2.id])
1218
assert_payload(:<%= file_name %>, <%= file_name %>1, json_items[0])
1319
assert_payload(:<%= file_name %>, <%= file_name %>2, json_items[1])

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
require 'rails_helper'
22

33
RSpec.describe "<%= file_name.pluralize %>#show", type: :request do
4-
context 'basic fetch' do
4+
let(:params) { {} }
5+
6+
subject(:make_request) do
7+
jsonapi_get "/<%= api_namespace %>/v1/<%= file_name.pluralize %>/#{<%= file_name %>.id}",
8+
params: params
9+
end
10+
11+
describe 'basic fetch' do
512
let!(:<%= file_name %>) { create(:<%= file_name %>) }
613

714
it 'serializes the resource correctly' do
8-
jsonapi_get "/<%= api_namespace %>/v1/<%= file_name.pluralize %>/#{<%= file_name %>.id}"
9-
15+
make_request
1016
assert_payload(:<%= file_name %>, <%= file_name %>, json_item)
1117
end
1218
end

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
require 'rails_helper'
22

33
RSpec.describe "<%= type %>#update", type: :request do
4-
context 'basic update' do
4+
subject(:make_request) do
5+
jsonapi_put "/<%= api_namespace %>/v1/<%= type %>/#{<%= file_name %>.id}", payload
6+
end
7+
8+
describe 'basic update' do
59
let!(:<%= file_name %>) { create(:<%= file_name %>) }
610

711
let(:payload) do
@@ -19,7 +23,7 @@ RSpec.describe "<%= type %>#update", type: :request do
1923
# Replace 'xit' with 'it' after adding attributes
2024
xit 'updates the resource' do
2125
expect {
22-
jsonapi_put "/<%= api_namespace %>/v1/<%= type %>/#{<%= file_name %>.id}", payload
26+
make_request
2327
}.to change { <%= file_name %>.reload.attributes }
2428
assert_payload(:<%= file_name %>, <%= file_name %>, json_item)
2529

lib/jsonapi_compliable/errors.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,8 @@ def pretty(input)
4444
end
4545
end
4646
end
47+
48+
class RecordNotFound < StandardError
49+
end
4750
end
4851
end

0 commit comments

Comments
 (0)