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 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: