zero-rails_openapi 2.1.0 → 2.1.5
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/.travis.yml +2 -2
- data/CHANGELOG.md +24 -0
- data/README.md +23 -8
- data/lib/oas_objs/header_obj.rb +1 -2
- data/lib/oas_objs/media_type_obj.rb +8 -7
- data/lib/oas_objs/request_body_obj.rb +1 -1
- data/lib/oas_objs/response_obj.rb +1 -1
- data/lib/oas_objs/schema_obj.rb +7 -5
- data/lib/open_api.rb +1 -1
- data/lib/open_api/config.rb +2 -0
- data/lib/open_api/dsl/api.rb +2 -2
- data/lib/open_api/dsl/helpers.rb +7 -2
- data/lib/open_api/router.rb +5 -1
- data/lib/open_api/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8d4c7ad77acde6b60064c24b5e9526d8182ee3d9580dd720b4781b67d64b8a9
|
4
|
+
data.tar.gz: f0697e6dfe1ce02e4427676f7f604d937685ab1a26876a3d3b2093069d13dc6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0cc748c545feebc6d0888594b99068279e18a17e32cd67297300d1147799319741c7fc8c1bdbefaca73b466f9ecb51b4eec15c0c91b43262e27776393cda0245
|
7
|
+
data.tar.gz: f09fa8f370ca5d7a16baa8c9fc7525ba1e2ecb224f7fe97fbf4233813610242e3f74abc083d2c5a80dba08fa86ad5646ffc9ae08cc9035227ca2d8840deab976
|
data/.travis.yml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
|
-
- 2.
|
5
|
-
before_install: gem install bundler -v 1.
|
4
|
+
- 2.7.1
|
5
|
+
before_install: gem install bundler -v 2.1.4
|
6
6
|
env:
|
7
7
|
global:
|
8
8
|
- CC_TEST_REPORTER_ID=fd0a238819079b92c19e99f5f4d6dcc8a5b5b2baf087fceb3723837604b5b0e9
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,30 @@
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
+
## [2.1.5] - 2020/9/20 - [view diff](https://github.com/zhandao/zero-rails_openapi/compare/v2.1.4...v2.1.5)
|
6
|
+
|
7
|
+
### Fixed
|
8
|
+
|
9
|
+
1. Keyword arguments in Ruby 2.7 [issued by @dandunckelman](https://github.com/zhandao/zero-rails_openapi/issues/66)
|
10
|
+
|
11
|
+
## [2.1.3 - 2.1.4] - 2020/2/10 - [view diff](https://github.com/zhandao/zero-rails_openapi/compare/v2.1.2...v2.1.4)
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
1. Fix response HTTP Status Code's type, restrict to String [issued by @am17torres](https://github.com/zhandao/zero-rails_openapi/issues/60)
|
16
|
+
|
17
|
+
### Added
|
18
|
+
|
19
|
+
1. Configurable additionalProperties's default value of Object type [issued by @remuspoienar](https://github.com/zhandao/zero-rails_openapi/issues/61)
|
20
|
+
|
21
|
+
## [2.1.1 - 2.1.2] - 2019/2/12 - [view diff](https://github.com/zhandao/zero-rails_openapi/compare/v2.1.0...v2.1.2)
|
22
|
+
|
23
|
+
### Fixed
|
24
|
+
|
25
|
+
1. Fix response header schema output [PR #49 by @drjonnicholson](https://github.com/zhandao/zero-rails_openapi/pull/49)
|
26
|
+
2. Fix router formatter in Rails 6 [PR #53 by @rjayroach](https://github.com/zhandao/zero-rails_openapi/pull/53)
|
27
|
+
3. Support for generating `additional_properties: true` [issued by @bopm](https://github.com/zhandao/zero-rails_openapi/issues/55)
|
28
|
+
|
5
29
|
## [2.1.0] - 2019/2/16 - [view diff](https://github.com/zhandao/zero-rails_openapi/compare/v2.0.3...v2.1.0)
|
6
30
|
|
7
31
|
See: [PR #43](https://github.com/zhandao/zero-rails_openapi/pull/43)
|
data/README.md
CHANGED
@@ -121,6 +121,20 @@
|
|
121
121
|
|
122
122
|
### Part 2: config (DSL) for generating OpenApi info
|
123
123
|
|
124
|
+
```ruby
|
125
|
+
# 1. open_api
|
126
|
+
# base_doc_classes should be an array of base classes of the classes you write the OpenApi spec in,
|
127
|
+
# like [ActionController::Base] (if you write spec in controllers).
|
128
|
+
open_api doc_name, base_doc_classes: []
|
129
|
+
|
130
|
+
# 2. info
|
131
|
+
info version:, title:, desc: '', **addition
|
132
|
+
|
133
|
+
# 3. server
|
134
|
+
# 4. security_scheme / base_auth / bearer_auth / api_key
|
135
|
+
# 5. global_security_require
|
136
|
+
```
|
137
|
+
|
124
138
|
See all the DSLs: [config_dsl.rb](lib/open_api/config_dsl.rb)
|
125
139
|
|
126
140
|
## DSL Usage
|
@@ -132,12 +146,12 @@
|
|
132
146
|
### First of all, `include OpenApi::DSL` in your base class (which is for writing spec):
|
133
147
|
|
134
148
|
For example:
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
149
|
+
```ruby
|
150
|
+
# in app/controllers/api/api_controller.rb
|
151
|
+
class ApiController < ActionController::API
|
152
|
+
include OpenApi::DSL
|
153
|
+
end
|
154
|
+
```
|
141
155
|
|
142
156
|
### DSL Usage Example
|
143
157
|
|
@@ -238,7 +252,7 @@
|
|
238
252
|
end
|
239
253
|
```
|
240
254
|
|
241
|
-
And then you should call `dry` method ([detailed info]()) for executing the declared dry blocks:
|
255
|
+
And then you should call `dry` method ([detailed info](#9-dry)) for executing the declared dry blocks:
|
242
256
|
```ruby
|
243
257
|
api :index do
|
244
258
|
dry
|
@@ -452,10 +466,11 @@
|
|
452
466
|
|
453
467
|
```ruby
|
454
468
|
# ** Method Signature
|
455
|
-
response code, desc, media_type = nil, data: { }, **options
|
469
|
+
response code, desc, media_type = nil, headers: { }, data: { }, **options
|
456
470
|
# ** Usage
|
457
471
|
resp 200, 'success', :json, data: { name: 'test' }
|
458
472
|
response 200, 'query result', :pdf, data: File
|
473
|
+
response :success, 'succ', :json, headers: { 'X-Request-Start': String }, data: { }
|
459
474
|
|
460
475
|
# ** Method Signature
|
461
476
|
response_ref code_and_compkey_hash
|
data/lib/oas_objs/header_obj.rb
CHANGED
@@ -7,21 +7,22 @@ module OpenApi
|
|
7
7
|
module DSL
|
8
8
|
# https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.0.md#media-type-object
|
9
9
|
class MediaTypeObj < Hash
|
10
|
-
attr_accessor :media_type, :schema, :examples
|
10
|
+
attr_accessor :media_type, :schema, :examples, :example
|
11
11
|
|
12
|
-
def initialize(media_type,
|
13
|
-
|
14
|
-
exp_params = schema_type.keys if
|
15
|
-
self.examples = ExampleObj.new(
|
12
|
+
def initialize(media_type, example: nil, examples: nil, exp_params: nil, **media_hash)
|
13
|
+
schema_type = media_hash.values_at(:type, :data).compact.first
|
14
|
+
exp_params = schema_type.keys if exp_params == :all
|
15
|
+
self.examples = ExampleObj.new(examples, exp_params, multiple: true) if examples.present?
|
16
|
+
self.example = ExampleObj.new(example) if example.present?
|
16
17
|
self.media_type = media_type_mapping(media_type)
|
17
|
-
self.schema = SchemaObj.new(
|
18
|
-
hash.except(:type, :data))
|
18
|
+
self.schema = SchemaObj.new(schema_type, media_hash.except(:type, :data))
|
19
19
|
end
|
20
20
|
|
21
21
|
def process
|
22
22
|
return { } if media_type.nil?
|
23
23
|
schema_processed = schema.process
|
24
24
|
result = schema_processed.values.join.blank? ? { } : { schema: schema_processed }
|
25
|
+
result[:example] = example.process unless example.nil?
|
25
26
|
result[:examples] = examples.process unless examples.nil?
|
26
27
|
{ media_type => result }
|
27
28
|
end
|
@@ -20,7 +20,7 @@ module OpenApi
|
|
20
20
|
def absorb(desc, media_type, headers: { }, **media_hash)
|
21
21
|
self.processed[:description] = desc if desc.present?
|
22
22
|
self.headers.merge!(headers)
|
23
|
-
media_types << MediaTypeObj.new(media_type, media_hash)
|
23
|
+
media_types << MediaTypeObj.new(media_type, **media_hash)
|
24
24
|
self
|
25
25
|
end
|
26
26
|
|
data/lib/oas_objs/schema_obj.rb
CHANGED
@@ -46,7 +46,7 @@ module OpenApi
|
|
46
46
|
{ type: 'string', format: Config.file_format }
|
47
47
|
elsif t == 'datetime'
|
48
48
|
{ type: 'string', format: 'date-time' }
|
49
|
-
elsif t[
|
49
|
+
elsif t[/{=>.*}/]
|
50
50
|
self[:values_type] = t[3..-2]
|
51
51
|
{ type: 'object' }
|
52
52
|
else # other string
|
@@ -55,10 +55,12 @@ module OpenApi
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def additional_properties
|
58
|
-
return if processed[:type] != 'object'
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
return if processed[:type] != 'object'
|
59
|
+
default = Config.additional_properties_default_value_of_type_object
|
60
|
+
return { additionalProperties: default } if _addProp.nil? && !default.nil?
|
61
|
+
|
62
|
+
value = _addProp.in?([true, false]) ? _addProp : SchemaObj.new(_addProp, { }).process
|
63
|
+
{ additionalProperties: value }
|
62
64
|
end
|
63
65
|
|
64
66
|
def enum
|
data/lib/open_api.rb
CHANGED
@@ -50,7 +50,7 @@ module OpenApi
|
|
50
50
|
def init_hash(doc_name)
|
51
51
|
settings = Config.docs[doc_name]
|
52
52
|
doc = { openapi: '3.0.0', **settings.slice(:info, :servers) }.merge!(
|
53
|
-
security: settings[:global_security], tags: [ ], paths: { },
|
53
|
+
security: settings[:global_security] || [], tags: [ ], paths: { },
|
54
54
|
components: {
|
55
55
|
securitySchemes: settings[:securitySchemes] || { },
|
56
56
|
schemas: { }, parameters: { }, requestBodies: { }
|
data/lib/open_api/config.rb
CHANGED
data/lib/open_api/dsl/api.rb
CHANGED
@@ -96,14 +96,14 @@ module OpenApi
|
|
96
96
|
end
|
97
97
|
|
98
98
|
def response code, desc, media_type = nil, headers: { }, data: { }, **options
|
99
|
-
(self[:responses][code] ||= ResponseObj.new(desc)).absorb(desc, media_type, headers: headers, data: data, **options)
|
99
|
+
(self[:responses][code.to_s] ||= ResponseObj.new(desc)).absorb(desc, media_type, headers: headers, data: data, **options)
|
100
100
|
end
|
101
101
|
|
102
102
|
alias_method :resp, :response
|
103
103
|
alias_method :error, :response
|
104
104
|
|
105
105
|
def response_ref code_and_compkey # = { }
|
106
|
-
code_and_compkey.each { |code, component_key| self[:responses][code] = RefObj.new(:response, component_key) }
|
106
|
+
code_and_compkey.each { |code, component_key| self[:responses][code.to_s] = RefObj.new(:response, component_key) }
|
107
107
|
end
|
108
108
|
|
109
109
|
def security_require scheme_name, scopes: [ ]
|
data/lib/open_api/dsl/helpers.rb
CHANGED
@@ -31,7 +31,7 @@ module OpenApi
|
|
31
31
|
|
32
32
|
def process_schema_input(schema_type, schema, name, model: nil)
|
33
33
|
schema = { type: schema } unless schema.is_a?(Hash)
|
34
|
-
combined_schema = _combined_schema(schema)
|
34
|
+
combined_schema = _combined_schema(**schema)
|
35
35
|
type = schema[:type] ||= schema_type
|
36
36
|
return Tip.param_no_type(name) if type.nil? && combined_schema.nil?
|
37
37
|
combined_schema || SchemaObj.new(type, load_schema(model) || schema)
|
@@ -46,7 +46,12 @@ module OpenApi
|
|
46
46
|
def arrow_writing_support
|
47
47
|
proc do |args, executor|
|
48
48
|
args = (args.size == 1 && args.first.is_a?(Hash)) ? args[0].to_a.flatten : args
|
49
|
-
|
49
|
+
|
50
|
+
if !executor.in?(%w[ _example _security_scheme _base_auth _bearer_auth ]) && args.last.is_a?(Hash)
|
51
|
+
send(executor, *args[0..-2], **args[-1])
|
52
|
+
else
|
53
|
+
send(executor, *args)
|
54
|
+
end
|
50
55
|
end
|
51
56
|
end
|
52
57
|
|
data/lib/open_api/router.rb
CHANGED
@@ -15,7 +15,11 @@ module OpenApi
|
|
15
15
|
all_routes = Rails.application.routes.routes
|
16
16
|
require 'action_dispatch/routing/inspector'
|
17
17
|
inspector = ActionDispatch::Routing::RoutesInspector.new(all_routes)
|
18
|
-
|
18
|
+
if Rails::VERSION::MAJOR < 6
|
19
|
+
inspector.format(ActionDispatch::Routing::ConsoleFormatter.new, nil)
|
20
|
+
else
|
21
|
+
inspector.format(ActionDispatch::Routing::ConsoleFormatter::Sheet.new)
|
22
|
+
end
|
19
23
|
# :nocov:
|
20
24
|
end
|
21
25
|
end
|
data/lib/open_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zero-rails_openapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zhandao
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -188,8 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
188
|
- !ruby/object:Gem::Version
|
189
189
|
version: '0'
|
190
190
|
requirements: []
|
191
|
-
|
192
|
-
rubygems_version: 2.7.3
|
191
|
+
rubygems_version: 3.1.2
|
193
192
|
signing_key:
|
194
193
|
specification_version: 4
|
195
194
|
summary: Concise DSL for generating OpenAPI3 documentation.
|