Skip to content

Commit 3e1458f

Browse files
committed
Respect namespaced urls, factories
1 parent bb68780 commit 3e1458f

File tree

8 files changed

+37
-25
lines changed

8 files changed

+37
-25
lines changed

lib/generators/jsonapi/resource_generator.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def generate_spec_payload
8888
end
8989

9090
def generate_strong_resource
91-
code = " strong_resource :#{file_name} do\n"
91+
code = " strong_resource :#{singular_table_name} do\n"
9292
attributes.each do |a|
9393
type = a.type
9494
type = :string if type == :text
@@ -106,6 +106,14 @@ def generate_route
106106
code = " resources :#{type}"
107107
code << ", only: [#{actions.map { |a| ":#{a}" }.join(', ')}]" if actions.length < 5
108108
code << "\n"
109+
110+
unless type == url
111+
code = code.gsub("resources :#{type}", "resources :#{file_name.pluralize}")
112+
url.split('/')[0..-2].reverse.each do |namespace|
113+
code = " namespace :#{namespace} do\n#{indent(code).chomp}\n end\n"
114+
end
115+
end
116+
109117
inject_into_file 'config/routes.rb', after: "scope path: '/v1' do\n" do
110118
code
111119
end
@@ -202,5 +210,9 @@ def model_klass
202210
def type
203211
model_klass.model_name.plural
204212
end
213+
214+
def url
215+
model_klass.model_name.collection
216+
end
205217
end
206218
end

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class <%= model_klass.name.pluralize %>Controller < ApplicationController
1010
# Reference a strong resource payload defined in
1111
# config/initializers/strong_resources.rb
1212
<%- end -%>
13-
strong_resource :<%= file_name %>
13+
strong_resource :<%= singular_table_name %>
1414
<%- end -%>
1515
<%- if actions?('create', 'update') -%>
1616
<%- unless omit_comments? -%>

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

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

3-
RSpec.describe "<%= type %>#create", type: :request do
3+
RSpec.describe "<%= url %>#create", type: :request do
44
subject(:make_request) do
5-
jsonapi_post "/<%= api_namespace %>/v1/<%= type %>", payload
5+
jsonapi_post "/<%= api_namespace %>/v1/<%= url %>", payload
66
end
77

88
describe 'basic create' do

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

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

3-
RSpec.describe "<%= type %>#destroy", type: :request do
3+
RSpec.describe "<%= url %>#destroy", type: :request do
44
subject(:make_request) do
5-
jsonapi_delete "/<%= api_namespace %>/v1/<%= type %>/#{<%= file_name %>.id}"
5+
jsonapi_delete "/<%= api_namespace %>/v1/<%= url %>/#{<%= singular_table_name %>.id}"
66
end
77

88
describe 'basic destroy' do
9-
let!(:<%= file_name %>) { create(:<%= file_name %>) }
9+
let!(:<%= singular_table_name %>) { create(:<%= singular_table_name %>) }
1010

1111
it 'updates the resource' do
1212
expect {
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
require 'rails_helper'
22

3-
RSpec.describe "<%= file_name.pluralize %>#index", type: :request do
3+
RSpec.describe "<%= url %>#index", type: :request do
44
let(:params) { {} }
55

66
subject(:make_request) do
7-
jsonapi_get "/<%= api_namespace %>/v1/<%= file_name.pluralize %>",
7+
jsonapi_get "/<%= api_namespace %>/v1/<%= url %>",
88
params: params
99
end
1010

1111
describe 'basic fetch' do
12-
let!(:<%= file_name %>1) { create(:<%= file_name %>) }
13-
let!(:<%= file_name %>2) { create(:<%= file_name %>) }
12+
let!(:<%= singular_table_name %>1) { create(:<%= singular_table_name %>) }
13+
let!(:<%= singular_table_name %>2) { create(:<%= singular_table_name %>) }
1414

1515
it 'serializes the list correctly' do
1616
make_request
17-
expect(json_ids(true)).to match_array([<%= file_name %>1.id, <%= file_name %>2.id])
18-
assert_payload(:<%= file_name %>, <%= file_name %>1, json_items[0])
19-
assert_payload(:<%= file_name %>, <%= file_name %>2, json_items[1])
17+
expect(json_ids(true)).to match_array([<%= singular_table_name %>1.id, <%= singular_table_name %>2.id])
18+
assert_payload(:<%= singular_table_name %>, <%= singular_table_name %>1, json_items[0])
19+
assert_payload(:<%= singular_table_name %>, <%= singular_table_name %>2, json_items[1])
2020
end
2121
end
2222
end

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
#
3030
# For more information, see https://jsonapi-suite.github.io/jsonapi_spec_helpers/
3131
<%- end -%>
32-
JsonapiSpecHelpers::Payload.register(:<%= file_name %>) do
32+
JsonapiSpecHelpers::Payload.register(:<%= singular_table_name %>) do
3333
<%- attributes.each do |a| -%>
3434
<%- type = a.type == :boolean ? [TrueClass, FalseClass] : a.type.to_s.classify -%>
3535
<%- type = String if a.type == :text -%>
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
require 'rails_helper'
22

3-
RSpec.describe "<%= file_name.pluralize %>#show", type: :request do
3+
RSpec.describe "<%= url %>#show", type: :request do
44
let(:params) { {} }
55

66
subject(:make_request) do
7-
jsonapi_get "/<%= api_namespace %>/v1/<%= file_name.pluralize %>/#{<%= file_name %>.id}",
7+
jsonapi_get "/<%= api_namespace %>/v1/<%= url %>/#{<%= singular_table_name %>.id}",
88
params: params
99
end
1010

1111
describe 'basic fetch' do
12-
let!(:<%= file_name %>) { create(:<%= file_name %>) }
12+
let!(:<%= singular_table_name %>) { create(:<%= singular_table_name %>) }
1313

1414
it 'serializes the resource correctly' do
1515
make_request
16-
assert_payload(:<%= file_name %>, <%= file_name %>, json_item)
16+
assert_payload(:<%= singular_table_name %>, <%= singular_table_name %>, json_item)
1717
end
1818
end
1919
end

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

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

3-
RSpec.describe "<%= type %>#update", type: :request do
3+
RSpec.describe "<%= url %>#update", type: :request do
44
subject(:make_request) do
5-
jsonapi_put "/<%= api_namespace %>/v1/<%= type %>/#{<%= file_name %>.id}", payload
5+
jsonapi_put "/<%= api_namespace %>/v1/<%= url %>/#{<%= singular_table_name %>.id}", payload
66
end
77

88
describe 'basic update' do
9-
let!(:<%= file_name %>) { create(:<%= file_name %>) }
9+
let!(:<%= singular_table_name %>) { create(:<%= singular_table_name %>) }
1010

1111
let(:payload) do
1212
{
1313
data: {
14-
id: <%= file_name %>.id.to_s,
14+
id: <%= singular_table_name %>.id.to_s,
1515
type: '<%= type %>',
1616
attributes: {
1717
# ... your attrs here
@@ -24,8 +24,8 @@ RSpec.describe "<%= type %>#update", type: :request do
2424
xit 'updates the resource' do
2525
expect {
2626
make_request
27-
}.to change { <%= file_name %>.reload.attributes }
28-
assert_payload(:<%= file_name %>, <%= file_name %>, json_item)
27+
}.to change { <%= singular_table_name %>.reload.attributes }
28+
assert_payload(:<%= singular_table_name %>, <%= singular_table_name %>, json_item)
2929

3030
# ... assert updates attributes ...
3131
end

0 commit comments

Comments
 (0)