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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3b95443bcdbd807222b38fe709504b87c73ded014428c3b097e477f798352b1
4
- data.tar.gz: 74dc8b92f4b88bbb6e631e099cb2a5ccc0700386836356e6b222b21d0f247a80
3
+ metadata.gz: '090302a73ed89fdcf82dc462650ecb756b8464ab6f82fce262efbb0b87c681b8'
4
+ data.tar.gz: db9a3f2a75609e5e6e097a2ee2b7311ab7c573900d8596b8e1f6abd859d2358d
5
5
  SHA512:
6
- metadata.gz: 66c21502bb24dafdf67de2b0c8d29204f25c5269fd0025ad0385f6cd04588363edd87d51a08e4c5460ff271bb63dc85a059dd29cc0a30f0d0d3f1e16fc5118d3
7
- data.tar.gz: 7629f949146f38f9065b6401aecd7953b0086bfa4544b1d29b90c1400fd2e7746f81439109f92520c41da7771e83e8db46f28cff6ebc52a08500dc41f7eafe92
6
+ metadata.gz: 75a5b1ea92348ba3f8edffe81626ac4ca02320bb59ceeed1812b0e4ea64c0de6395457c203695b68682b2850c280e66b17958a0d92640727f42909dab39d1ef4
7
+ data.tar.gz: e79b2f75ac6e280adf8e10cab8e6023ad13525f6ab15fdbdb741db5d0d3dea2e39fbfb197ab7a16494f7178ca71f6747b3c9f3e50bb86ee85310974edd690db4
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.5.0
4
+
5
+ - add: params support
6
+
3
7
  ## 0.4.0
4
8
 
5
9
  - change store interface
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(params[:id])
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
  ```
@@ -20,6 +20,9 @@ module Swagger
20
20
  shortcut :json, "application/json"
21
21
  shortcut :xml, "application/xml"
22
22
  shortcut :plain, "text/plain"
23
+ shortcut :html, "text/html"
24
+ shortcut :csv, "text/csv"
25
+ shortcut :form, "application/x-www-form-urlencoded"
23
26
  end
24
27
  end
25
28
  end
@@ -18,8 +18,8 @@ module Swagger
18
18
  JSON::Schema::Serializer.new(schema, options)
19
19
  end
20
20
 
21
- def deserializer
22
- Deserializer.new(schema)
21
+ def deserializer(options = {})
22
+ Deserializer.new(schema, options)
23
23
  end
24
24
 
25
25
  def validator
@@ -61,8 +61,8 @@ module Swagger
61
61
  JSON::Schema::Serializer.new(to_json_schema, options)
62
62
  end
63
63
 
64
- def deserializer
65
- Deserializer.new(self)
64
+ def deserializer(options = {})
65
+ Deserializer.new(self, options)
66
66
  end
67
67
 
68
68
  def validator
@@ -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, @data)
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
- operation = Swagger::Schema.current.path(route[:path]).send(route[:method])
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
- return { path: path, method: request.method.underscore }
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
@@ -1,5 +1,5 @@
1
1
  module Swagger
2
2
  module Serializer
3
- VERSION = "0.4.1".freeze
3
+ VERSION = "0.5.0".freeze
4
4
  end
5
5
  end
@@ -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.2"
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.1
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.2'
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.2'
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.4.1
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: