swagger-serializer 0.4.1 → 0.5.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/CHANGELOG.md +4 -0
- data/README.md +30 -1
- data/lib/swagger/schema/content.rb +3 -0
- data/lib/swagger/schema/media_type.rb +2 -2
- data/lib/swagger/schema/parameters.rb +2 -2
- data/lib/swagger/schema/parameters/deserializer.rb +10 -4
- data/lib/swagger/serializer/rails_controller.rb +46 -5
- data/lib/swagger/serializer/version.rb +1 -1
- data/swagger-serializer.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '090302a73ed89fdcf82dc462650ecb756b8464ab6f82fce262efbb0b87c681b8'
|
4
|
+
data.tar.gz: db9a3f2a75609e5e6e097a2ee2b7311ab7c573900d8596b8e1f6abd859d2358d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75a5b1ea92348ba3f8edffe81626ac4ca02320bb59ceeed1812b0e4ea64c0de6395457c203695b68682b2850c280e66b17958a0d92640727f42909dab39d1ef4
|
7
|
+
data.tar.gz: e79b2f75ac6e280adf8e10cab8e6023ad13525f6ab15fdbdb741db5d0d3dea2e39fbfb197ab7a16494f7178ca71f6747b3c9f3e50bb86ee85310974edd690db4
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -52,6 +52,10 @@ class ApplicationController < ActionController::Base
|
|
52
52
|
def render_ok(data)
|
53
53
|
render_as_schema 200, :json, data
|
54
54
|
end
|
55
|
+
|
56
|
+
def render_bad(data)
|
57
|
+
render_as_schema 400, :json, data
|
58
|
+
end
|
55
59
|
end
|
56
60
|
```
|
57
61
|
|
@@ -79,7 +83,32 @@ class UsersController < ApplicationController
|
|
79
83
|
end
|
80
84
|
|
81
85
|
def show
|
82
|
-
render_ok User.find(
|
86
|
+
render_ok User.find(schema_params[:id])
|
87
|
+
end
|
88
|
+
|
89
|
+
swagger :create do
|
90
|
+
body format: [:form, :json] do
|
91
|
+
user :object do
|
92
|
+
name :string
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
render 200 do
|
97
|
+
cref! UserSerializer
|
98
|
+
end
|
99
|
+
render 400 do
|
100
|
+
additionalProperties! do
|
101
|
+
array! { string! }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
def create
|
106
|
+
@user = User.new(schema_params[:user])
|
107
|
+
if @user.save
|
108
|
+
render_ok @user
|
109
|
+
else
|
110
|
+
render_bad @user.errors
|
111
|
+
end
|
83
112
|
end
|
84
113
|
end
|
85
114
|
```
|
@@ -5,18 +5,24 @@ module Swagger
|
|
5
5
|
class Schema
|
6
6
|
class Parameters < Array
|
7
7
|
class Deserializer
|
8
|
-
def initialize(parameters)
|
8
|
+
def initialize(parameters, options = {})
|
9
9
|
@parameters = parameters
|
10
|
+
@options = options
|
10
11
|
end
|
11
12
|
|
12
13
|
def data(data)
|
13
|
-
DataDeserializer.new(@parameters, @
|
14
|
+
DataDeserializer.new(@parameters, data, @options)
|
14
15
|
end
|
15
16
|
|
16
17
|
class DataDeserializer
|
17
|
-
def initialize(parameters, data)
|
18
|
+
def initialize(parameters, data, options)
|
18
19
|
@parameters = parameters
|
19
20
|
@data = data
|
21
|
+
@options = options
|
22
|
+
end
|
23
|
+
|
24
|
+
def deserialize
|
25
|
+
JSON::Schema::Serializer.new(@parameters.to_json_schema, @options).serialize(@data)
|
20
26
|
end
|
21
27
|
|
22
28
|
def [](name)
|
@@ -24,7 +30,7 @@ module Swagger
|
|
24
30
|
value = Util.try_hash(data, name)
|
25
31
|
return nil if value.nil? && !parameter.required && !parameter.path?
|
26
32
|
|
27
|
-
JSON::Schema::Serializer.new(parameter.to_json_schema).serialize(value)
|
33
|
+
JSON::Schema::Serializer.new(parameter.to_json_schema, @options).serialize(value)
|
28
34
|
end
|
29
35
|
end
|
30
36
|
end
|
@@ -1,18 +1,59 @@
|
|
1
1
|
module Swagger::Serializer::RailsController
|
2
2
|
private
|
3
3
|
|
4
|
+
# render
|
5
|
+
|
4
6
|
def render_as_schema(code, format, data)
|
7
|
+
render format => render_serializer(code, format).serialize(data)
|
8
|
+
end
|
9
|
+
|
10
|
+
def render_serializer(code, format)
|
11
|
+
response_obj = swagger_operation.responses[code]
|
12
|
+
response_obj.content.send(format).serializer(Swagger::Serializer::Store.current.serializer_options)
|
13
|
+
end
|
14
|
+
|
15
|
+
def swagger_operation
|
16
|
+
return @swagger_operation if @swagger_operation
|
17
|
+
|
5
18
|
route = swagger_schema_route_from_request
|
6
|
-
|
7
|
-
response_obj = operation.responses[code]
|
8
|
-
serializer = response_obj.content.send(format).serializer(Swagger::Serializer::Store.current.serializer_options)
|
9
|
-
render format => serializer.serialize(data)
|
19
|
+
@swagger_operation = Swagger::Schema.current.path(route[:path]).send(route[:method])
|
10
20
|
end
|
11
21
|
|
12
22
|
def swagger_schema_route_from_request
|
23
|
+
return @swagger_schema_route_from_request if @swagger_schema_route_from_request
|
24
|
+
|
13
25
|
Rails.application.routes.router.recognize(request) do |route|
|
14
26
|
path = route.path.spec.to_s.sub("(.:format)", "").gsub(/:(\w+)/, "{\\1}")
|
15
|
-
|
27
|
+
@swagger_schema_route_from_request = { path: path, method: request.method.underscore }
|
28
|
+
return @swagger_schema_route_from_request
|
16
29
|
end
|
17
30
|
end
|
31
|
+
|
32
|
+
# params
|
33
|
+
|
34
|
+
def parameter_params
|
35
|
+
@parameter_params ||= parameter_deserializer.data(params.permit!.to_h).deserialize.with_indifferent_access
|
36
|
+
end
|
37
|
+
|
38
|
+
def parameter_deserializer
|
39
|
+
@parameter_deserializer ||=
|
40
|
+
swagger_operation.parameters.deserializer(Swagger::Serializer::Store.current.serializer_options)
|
41
|
+
end
|
42
|
+
|
43
|
+
def body_params
|
44
|
+
@body_params ||= body_deserializer ? body_deserializer.deserialize(params.permit!.to_h).with_indifferent_access : {}
|
45
|
+
end
|
46
|
+
|
47
|
+
def body_deserializer
|
48
|
+
@body_deserializer ||=
|
49
|
+
if request.content_type
|
50
|
+
swagger_operation.request_body.content[request.content_type].deserializer(
|
51
|
+
Swagger::Serializer::Store.current.serializer_options,
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def schema_params
|
57
|
+
@schema_params ||= parameter_params.merge(body_params)
|
58
|
+
end
|
18
59
|
end
|
data/swagger-serializer.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
28
|
spec.require_paths = %w[lib]
|
29
29
|
|
30
|
-
spec.add_dependency "json-schema-serializer", "~> 1.
|
30
|
+
spec.add_dependency "json-schema-serializer", "~> 1.4"
|
31
31
|
spec.add_dependency "snake_camel", "~> 1.1"
|
32
32
|
spec.add_development_dependency "bundler", "~> 2"
|
33
33
|
spec.add_development_dependency "rake", "~> 10.5"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swagger-serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Narazaka
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.4'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.4'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: snake_camel
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -234,7 +234,7 @@ metadata:
|
|
234
234
|
homepage_uri: https://github.com/Narazaka/swagger-serializer
|
235
235
|
source_code_uri: https://github.com/Narazaka/swagger-serializer.git
|
236
236
|
changelog_uri: https://github.com/Narazaka/swagger-serializer/blob/master/CHANGELOG.md
|
237
|
-
documentation_uri: https://www.rubydoc.info/gems/swagger-serializer/0.
|
237
|
+
documentation_uri: https://www.rubydoc.info/gems/swagger-serializer/0.5.0
|
238
238
|
post_install_message:
|
239
239
|
rdoc_options: []
|
240
240
|
require_paths:
|