swagger-serializer 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|