Skip to content

Commit 55a2b67

Browse files
authored
Merge pull request #16 from superiorlu/opencode/issue14-20260125083700
Fix namespaced model support & typos
2 parents 59b2380 + 49ed954 commit 55a2b67

4 files changed

Lines changed: 64 additions & 61 deletions

File tree

lib/generators/jsonapi/swagger/swagger_generator.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ def model_name
6161
file_name.downcase.singularize
6262
end
6363

64-
def resouces_name
64+
def resources_name
6565
model_class_name.pluralize
6666
end
6767

68-
def route_resouces
69-
resouces_name.tableize
68+
def route_resources
69+
resources_name.tableize
7070
end
7171

7272
def model_class_name
@@ -82,7 +82,7 @@ def ori_sortable_fields_desc
8282
end
8383

8484
def model_klass
85-
file_name.camelize.safe_constantize
85+
model_class_name.safe_constantize
8686
end
8787

8888
def resource_klass

lib/generators/jsonapi/swagger/templates/swagger.json.erb

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
filters.each do |filter_attr, filter_config|
1717
parameters << { name: :"filter[#{filter_attr}]", in: :query, type: :string, description: tt(:filter_field), required: false}
1818
end
19-
parameters << { name: :"fields[#{route_resouces}]", in: :query, type: :string, description: tt(:display_field), required: false }
19+
parameters << { name: :"fields[#{route_resources}]", in: :query, type: :string, description: tt(:display_field), required: false }
2020
relationships.each_value do |relation|
2121
parameters << { name: :"fields[#{relation_table_name(relation)}]", in: :query, type: :string, description: tt(:display_field), required: false }
2222
end
@@ -29,7 +29,7 @@
2929
if relationships.present?
3030
parameters << { name: :include, in: :query, type: :string, description: tt(:include_related_data), required: false }
3131
end
32-
parameters << { name: :"fields[#{route_resouces}]", in: :query, type: :string, description: tt(:display_field), required: false }
32+
parameters << { name: :"fields[#{route_resources}]", in: :query, type: :string, description: tt(:display_field), required: false }
3333
relationships.each_value do |relation|
3434
parameters << { name: :"fields[#{relation_table_name(relation)}]", in: :query, type: :string, description: tt(:display_field), required: false }
3535
end
@@ -45,7 +45,7 @@
4545
data: {
4646
type: :object,
4747
properties: {
48-
type: { type: :string, default: route_resouces },
48+
type: { type: :string, default: route_resources },
4949
attributes: {
5050
type: :object,
5151
properties: properties(attrs: creatable_fields)
@@ -257,62 +257,62 @@
257257
}
258258
end
259259

260-
doc['paths']["/#{route_resouces}"] = {
260+
doc['paths']["/#{route_resources}"] = {
261261
get: {
262-
summary: "#{route_resouces} #{tt(:list)}",
263-
tags: [route_resouces],
262+
summary: "#{route_resources} #{tt(:list)}",
263+
tags: [route_resources],
264264
produces: ['application/vnd.api+json'],
265265
parameters: list_resource_parameters,
266266
responses: list_resource_responses
267267
}
268268
}
269269

270-
doc['paths']["/#{route_resouces}/{id}"] = {
270+
doc['paths']["/#{route_resources}/{id}"] = {
271271
get: {
272-
summary: "#{route_resouces} #{tt(:detail)}",
273-
tags: [route_resouces],
272+
summary: "#{route_resources} #{tt(:detail)}",
273+
tags: [route_resources],
274274
produces: ['application/vnd.api+json'],
275275
parameters: show_resource_parameters,
276276
responses: show_resource_responses
277277
}
278278
}
279279

280280
if mutable?
281-
doc['paths']["/#{route_resouces}"].merge!({
281+
doc['paths']["/#{route_resources}"].merge!({
282282
post: {
283-
summary: "#{route_resouces} #{tt(:create)}",
284-
tags: [route_resouces],
283+
summary: "#{route_resources} #{tt(:create)}",
284+
tags: [route_resources],
285285
consumes: ['application/vnd.api+json'],
286286
produces: ['application/vnd.api+json'],
287287
parameters: [create_resource_parameters],
288288
responses: create_resource_responses
289289
}
290290
})
291291

292-
doc['paths']["/#{route_resouces}/{id}"].merge!({
292+
doc['paths']["/#{route_resources}/{id}"].merge!({
293293
patch: {
294-
summary: "#{route_resouces} #{tt(:patch)}",
295-
tags: [route_resouces],
294+
summary: "#{route_resources} #{tt(:patch)}",
295+
tags: [route_resources],
296296
consumes: ['application/vnd.api+json'],
297297
produces: ['application/vnd.api+json'],
298298
parameters: patch_resource_parameters,
299299
responses: show_resource_responses
300300
}
301301
})
302302

303-
doc['paths']["/#{route_resouces}/{id}"].merge!({
303+
doc['paths']["/#{route_resources}/{id}"].merge!({
304304
delete: {
305-
summary: "#{route_resouces} #{tt(:delete)}",
306-
tags: [route_resouces],
305+
summary: "#{route_resources} #{tt(:delete)}",
306+
tags: [route_resources],
307307
produces: ['application/vnd.api+json'],
308308
parameters: delete_resource_parameters,
309309
responses: delete_resource_responses
310310
}
311311
})
312312
else
313-
doc['paths']["/#{route_resouces}"].delete(:post)
314-
doc['paths']["/#{route_resouces}/{id}"].delete(:patch)
315-
doc['paths']["/#{route_resouces}/{id}"].delete(:delete)
313+
doc['paths']["/#{route_resources}"].delete(:post)
314+
doc['paths']["/#{route_resources}/{id}"].delete(:patch)
315+
doc['paths']["/#{route_resources}/{id}"].delete(:delete)
316316
end
317317
-%>
318318
"paths": <%= JSON.pretty_generate(doc['paths'] ) %>

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

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
require 'swagger_helper'
2-
RSpec.describe '<%= resouces_name %>', type: :request do
2+
RSpec.describe '<%= resources_name %>', type: :request do
33
let(:include) {''} #see https://github.com/domaindrivendev/rswag/issues/188
44

55
before(:each) do
@@ -10,9 +10,9 @@ RSpec.describe '<%= resouces_name %>', type: :request do
1010
<% end -%>
1111
end
1212

13-
path '/<%= route_resouces %>' do
14-
get '<%= route_resouces %> <%= t(:list) %>' do
15-
tags '<%= route_resouces %>'
13+
path '/<%= route_resources %>' do
14+
get '<%= route_resources %> <%= t(:list) %>' do
15+
tags '<%= route_resources %>'
1616
produces 'application/vnd.api+json'
1717
parameter name: :'page[number]', in: :query, type: :string, description: '<%= t(:page_num) %>', required: false
1818
<% if sortable_fields.present? -%>
@@ -24,7 +24,7 @@ RSpec.describe '<%= resouces_name %>', type: :request do
2424
<% filters.each do |filter_attr, filter_config| -%>
2525
parameter name: :'filter[<%= filter_attr %>]', in: :query, type: :string, description: '<%= t(:filter_field) %>', <% if filter_config[:default] -%>default: '<%= safe_encode(filter_config[:default]) %>',<% end %>required: false
2626
<% end -%>
27-
parameter name: :'fields[<%= route_resouces %>]', in: :query, type: :string, description: '<%= t(:display_field) %>', required: false
27+
parameter name: :'fields[<%= route_resources %>]', in: :query, type: :string, description: '<%= t(:display_field) %>', required: false
2828
<% relationships.each_value do |relation| -%>
2929
parameter name: :'fields[<%= relation_table_name(relation) %>]', in: :query, type: :string, description: '<%= t(:display_field) %>', required: false
3030
<% end -%>
@@ -103,15 +103,15 @@ RSpec.describe '<%= resouces_name %>', type: :request do
103103
end
104104
end
105105

106-
path '/<%= route_resouces %>/{id}' do
107-
get '<%= route_resouces %> <%= t(:detail) %>' do
108-
tags '<%= route_resouces %>'
106+
path '/<%= route_resources %>/{id}' do
107+
get '<%= route_resources %> <%= t(:detail) %>' do
108+
tags '<%= route_resources %>'
109109
produces 'application/vnd.api+json'
110110
parameter name: :id, in: :path, type: :integer, description: 'ID', required: true
111111
<% if relationships.present? -%>
112112
parameter name: :include, in: :query, type: :string, description: '<%= t(:include_related_data) %>', required: false
113113
<% end -%>
114-
parameter name: :'fields[<%= route_resouces %>]', in: :query, type: :string, description: '<%= t(:display_field) %>', required: false
114+
parameter name: :'fields[<%= route_resources %>]', in: :query, type: :string, description: '<%= t(:display_field) %>', required: false
115115
<% relationships.each_value do |relation| -%>
116116
parameter name: :'fields[<%= relation_table_name(relation) %>]', in: :query, type: :string, description: '<%= t(:display_field) %>', required: false
117117
<% end -%>
@@ -174,9 +174,9 @@ RSpec.describe '<%= resouces_name %>', type: :request do
174174
end
175175

176176
<% if mutable? -%>
177-
path '/<%= route_resouces %>' do
178-
post '<%= route_resouces %> <%= t(:create) %>' do
179-
tags '<%= route_resouces %>'
177+
path '/<%= route_resources %>' do
178+
post '<%= route_resources %> <%= t(:create) %>' do
179+
tags '<%= route_resources %>'
180180
consumes 'application/vnd.api+json'
181181
produces 'application/vnd.api+json'
182182
parameter name: :data,
@@ -186,7 +186,7 @@ RSpec.describe '<%= resouces_name %>', type: :request do
186186
data: {
187187
type: :object,
188188
properties: {
189-
type: { type: :string, default: '<%= route_resouces %>' },
189+
type: { type: :string, default: '<%= route_resources %>' },
190190
attributes: {
191191
type: :object,
192192
properties: {
@@ -295,9 +295,9 @@ RSpec.describe '<%= resouces_name %>', type: :request do
295295
end
296296
end
297297

298-
path '/<%= route_resouces %>/{id}' do
299-
patch '<%= route_resouces %> <%= t(:patch) %>' do
300-
tags '<%= route_resouces %>'
298+
path '/<%= route_resources %>/{id}' do
299+
patch '<%= route_resources %> <%= t(:patch) %>' do
300+
tags '<%= route_resources %>'
301301
consumes 'application/vnd.api+json'
302302
produces 'application/vnd.api+json'
303303
parameter name: :id, in: :path, type: :integer, description: 'ID', required: true
@@ -308,7 +308,7 @@ path '/<%= route_resouces %>/{id}' do
308308
data: {
309309
type: :object,
310310
properties: {
311-
type: { type: :string, default: '<%= route_resouces %>' },
311+
type: { type: :string, default: '<%= route_resources %>' },
312312
id: { type: :string },
313313
attributes: {
314314
type: :object,
@@ -419,9 +419,9 @@ path '/<%= route_resouces %>/{id}' do
419419
end
420420
end
421421

422-
path '/<%= route_resouces %>/{id}' do
423-
delete '<%= route_resouces %> <%= t(:delete) %>' do
424-
tags '<%= route_resouces %>'
422+
path '/<%= route_resources %>/{id}' do
423+
delete '<%= route_resources %> <%= t(:delete) %>' do
424+
tags '<%= route_resources %>'
425425
produces 'application/vnd.api+json'
426426
parameter name: :id, in: :path, type: :integer, description: 'ID', required: true
427427

lib/jsonapi/swagger/resource.rb

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,34 @@ module Jsonapi
33
module Swagger
44
class Resource
55
def self.with(model_class_name)
6-
if Object.const_defined?("#{model_class_name}Resource")
7-
@resource_class = "#{model_class_name}Resource".safe_constantize
8-
unless @resource_class < JSONAPI::Resource
9-
raise Jsonapi::Swagger::Error, "#{@resource_class.class} is not Subclass of JSONAPI::Resource!"
6+
if (resource_class = "#{model_class_name}Resource".safe_constantize)
7+
unless resource_class < JSONAPI::Resource
8+
raise Jsonapi::Swagger::Error, "#{resource_class} is not Subclass of JSONAPI::Resource!"
109
end
1110
require 'jsonapi/swagger/resources/jsonapi_resource'
12-
return Jsonapi::Swagger::JsonapiResource.new(@resource_class)
13-
elsif Object.const_defined?("Serializable#{model_class_name}")
14-
@resource_class = "Serializable#{model_class_name}".safe_constantize
15-
unless @resource_class < JSONAPI::Serializable::Resource
16-
raise Jsonapi::Swagger::Error, "#{@resource_class.class} is not Subclass of JSONAPI::Serializable::Resource!"
11+
return Jsonapi::Swagger::JsonapiResource.new(resource_class)
12+
elsif (resource_class = serializable_class_name(model_class_name).safe_constantize)
13+
unless resource_class < JSONAPI::Serializable::Resource
14+
raise Jsonapi::Swagger::Error, "#{resource_class} is not Subclass of JSONAPI::Serializable::Resource!"
1715
end
1816
require 'jsonapi/swagger/resources/serializable_resource'
19-
return Jsonapi::Swagger::SerializableResource.new(@resource_class)
20-
elsif Object.const_defined?("#{model_class_name}Serializer")
21-
@resource_class = "#{model_class_name}Serializer".safe_constantize
22-
unless @resource_class < FastJsonapi::ObjectSerializer
23-
raise Jsonapi::Swagger::Error, "#{@resource_class.class} is not Subclass of FastJsonapi::ObjectSerializer!"
17+
return Jsonapi::Swagger::SerializableResource.new(resource_class)
18+
elsif (resource_class = "#{model_class_name}Serializer".safe_constantize)
19+
unless resource_class < FastJsonapi::ObjectSerializer
20+
raise Jsonapi::Swagger::Error, "#{resource_class} is not Subclass of FastJsonapi::ObjectSerializer!"
2421
end
2522
require 'jsonapi/swagger/resources/fast_jsonapi_resource'
26-
return Jsonapi::Swagger::FastJsonapiResource.new(@resource_class)
23+
return Jsonapi::Swagger::FastJsonapiResource.new(resource_class)
2724
else
2825
raise Jsonapi::Swagger::Error, "#{model_class_name} not support!"
2926
end
3027
end
28+
29+
def self.serializable_class_name(model_class_name)
30+
parts = model_class_name.split('::')
31+
parts[-1] = "Serializable#{parts[-1]}"
32+
parts.join('::')
33+
end
3134
end
3235
end
33-
end
36+
end

0 commit comments

Comments
 (0)