jsonapi-swagger 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/generators/jsonapi/swagger/swagger_generator.rb +7 -3
- data/lib/generators/jsonapi/swagger/templates/swagger.json.erb +2 -2
- data/lib/generators/jsonapi/swagger/templates/swagger.rb.erb +2 -2
- data/lib/jsonapi/swagger.rb +1 -0
- data/lib/jsonapi/swagger/resource.rb +26 -0
- data/lib/jsonapi/swagger/resources/jsonapi_resource.rb +18 -0
- data/lib/jsonapi/swagger/resources/serializable_resource.rb +45 -0
- data/lib/jsonapi/swagger/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 672b181b285eb30f45c6c065d501ff38ae81eec6e99f9e2af9769c96aec13310
|
4
|
+
data.tar.gz: e1505e3fb17b074cf995e3205afebd1e780f99aa0834fdd96e8b1b8e99ff9057
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a02dfefbeac1694c3a2e01082278c3f09f1d84df9491453015dc1e4e8f571fbfdb18ef325d82f9b5332a0d05396d10d047e039b7cfbdaf8743ea99c622fba1c6
|
7
|
+
data.tar.gz: 41555cee548db4afd52714266f291bb8281ea35ed04f2b4266db30b0edf991f9dc596b5dc8dcfc55942dd7463f48e06cd6ba818fac9dc0394feb3e08fa7a16a7
|
data/README.md
CHANGED
@@ -86,15 +86,15 @@ module Jsonapi
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def resource_klass
|
89
|
-
|
89
|
+
@resource_klass ||= Jsonapi::Swagger::Resource.with(model_class_name)
|
90
90
|
end
|
91
91
|
|
92
92
|
def attributes
|
93
|
-
resource_klass.
|
93
|
+
resource_klass.attributes.except(:id)
|
94
94
|
end
|
95
95
|
|
96
96
|
def relationships
|
97
|
-
resource_klass.
|
97
|
+
resource_klass.relationships
|
98
98
|
end
|
99
99
|
|
100
100
|
def sortable_fields
|
@@ -113,6 +113,10 @@ module Jsonapi
|
|
113
113
|
resource_klass.filters
|
114
114
|
end
|
115
115
|
|
116
|
+
def mutable?
|
117
|
+
resource_klass.mutable?
|
118
|
+
end
|
119
|
+
|
116
120
|
def columns_with_comment(need_encoding: true)
|
117
121
|
@columns_with_comment ||= {}.tap do |clos|
|
118
122
|
model_klass.columns.each do |col|
|
@@ -128,7 +128,7 @@
|
|
128
128
|
},
|
129
129
|
description: tt(:related_ids, model: relation_name_camelize)
|
130
130
|
}
|
131
|
-
if relation.belongs_to?
|
131
|
+
if relation.try(:belongs_to?)
|
132
132
|
relat_props[relation_name][:properties][:data] = {
|
133
133
|
type: :object,
|
134
134
|
properties: {
|
@@ -277,7 +277,7 @@
|
|
277
277
|
}
|
278
278
|
}
|
279
279
|
|
280
|
-
if
|
280
|
+
if mutable?
|
281
281
|
doc['paths']["/#{route_resouces}"].merge!({
|
282
282
|
post: {
|
283
283
|
summary: "#{route_resouces} #{tt(:create)}",
|
@@ -173,7 +173,7 @@ RSpec.describe '<%= resouces_name %>', type: :request do
|
|
173
173
|
end
|
174
174
|
end
|
175
175
|
|
176
|
-
<% if
|
176
|
+
<% if mutable? -%>
|
177
177
|
path '/<%= route_resouces %>' do
|
178
178
|
post '<%= route_resouces %> <%= t(:create) %>' do
|
179
179
|
tags '<%= route_resouces %>'
|
@@ -204,7 +204,7 @@ RSpec.describe '<%= resouces_name %>', type: :request do
|
|
204
204
|
<%= relation_name %>: {
|
205
205
|
type: :object,
|
206
206
|
properties: {
|
207
|
-
<% if relation.belongs_to? -%>
|
207
|
+
<% if relation.try(:belongs_to?) -%>
|
208
208
|
data: {
|
209
209
|
type: :object,
|
210
210
|
properties: {
|
data/lib/jsonapi/swagger.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
module Jsonapi
|
3
|
+
module Swagger
|
4
|
+
class Resource
|
5
|
+
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!"
|
10
|
+
end
|
11
|
+
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!"
|
17
|
+
end
|
18
|
+
require 'jsonapi/swagger/resources/serializable_resource'
|
19
|
+
return Jsonapi::Swagger::SerializableResource.new(@resource_class)
|
20
|
+
else
|
21
|
+
raise Jsonapi::Swagger::Error, "#{model_class_name} not support!"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
module Jsonapi
|
3
|
+
module Swagger
|
4
|
+
class JsonapiResource
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
def_delegators :@jr, :_attributes, :_relationships, :sortable_fields,
|
8
|
+
:creatable_fields, :updatable_fields, :filters, :mutable?
|
9
|
+
|
10
|
+
def initialize(jr)
|
11
|
+
@jr = jr
|
12
|
+
end
|
13
|
+
|
14
|
+
alias attributes _attributes
|
15
|
+
alias relationships _relationships
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
module Jsonapi
|
3
|
+
module Swagger
|
4
|
+
class SerializableResource
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
def_delegators :@sr, :type_val, :attribute_blocks, :relationship_blocks, :link_blocks
|
8
|
+
|
9
|
+
def initialize(sr)
|
10
|
+
@sr = sr
|
11
|
+
end
|
12
|
+
|
13
|
+
alias attributes attribute_blocks
|
14
|
+
|
15
|
+
def relationships
|
16
|
+
{}.tap do |relations|
|
17
|
+
relationship_blocks.each do |rel, block|
|
18
|
+
relations[rel] = OpenStruct.new(class_name: rel.to_s)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# TODO: from jsonapi serializable resource
|
24
|
+
def sortable_fields
|
25
|
+
[]
|
26
|
+
end
|
27
|
+
|
28
|
+
def creatable_fields
|
29
|
+
[]
|
30
|
+
end
|
31
|
+
|
32
|
+
def updatable_fields
|
33
|
+
[]
|
34
|
+
end
|
35
|
+
|
36
|
+
def filters
|
37
|
+
[]
|
38
|
+
end
|
39
|
+
|
40
|
+
def mutable?
|
41
|
+
false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonapi-swagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YingRui Lu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -83,6 +83,9 @@ files:
|
|
83
83
|
- lib/jsonapi/swagger.rb
|
84
84
|
- lib/jsonapi/swagger/json.rb
|
85
85
|
- lib/jsonapi/swagger/railtie.rb
|
86
|
+
- lib/jsonapi/swagger/resource.rb
|
87
|
+
- lib/jsonapi/swagger/resources/jsonapi_resource.rb
|
88
|
+
- lib/jsonapi/swagger/resources/serializable_resource.rb
|
86
89
|
- lib/jsonapi/swagger/version.rb
|
87
90
|
homepage: https://github.com/superiorlu/jsonapi-swagger
|
88
91
|
licenses:
|