grape-swagger 1.0.0 → 1.3.1
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/.rubocop.yml +94 -1
- data/.rubocop_todo.yml +1 -1
- data/.travis.yml +14 -8
- data/CHANGELOG.md +56 -6
- data/Gemfile +9 -4
- data/README.md +191 -12
- data/UPGRADING.md +34 -0
- data/grape-swagger.gemspec +1 -1
- data/lib/grape-swagger.rb +7 -4
- data/lib/grape-swagger/doc_methods.rb +65 -62
- data/lib/grape-swagger/doc_methods/build_model_definition.rb +53 -2
- data/lib/grape-swagger/doc_methods/data_type.rb +5 -5
- data/lib/grape-swagger/doc_methods/format_data.rb +2 -2
- data/lib/grape-swagger/doc_methods/operation_id.rb +2 -2
- data/lib/grape-swagger/doc_methods/parse_params.rb +19 -4
- data/lib/grape-swagger/endpoint.rb +73 -31
- data/lib/grape-swagger/rake/oapi_tasks.rb +12 -2
- data/lib/grape-swagger/version.rb +1 -1
- data/spec/issues/427_entity_as_string_spec.rb +1 -1
- data/spec/issues/430_entity_definitions_spec.rb +7 -5
- data/spec/issues/537_enum_values_spec.rb +1 -0
- data/spec/issues/776_multiple_presents_spec.rb +56 -0
- data/spec/issues/784_extensions_on_params_spec.rb +38 -0
- data/spec/issues/809_utf8_routes_spec.rb +55 -0
- data/spec/lib/data_type_spec.rb +12 -0
- data/spec/lib/move_params_spec.rb +2 -2
- data/spec/lib/oapi_tasks_spec.rb +15 -5
- data/spec/support/empty_model_parser.rb +1 -2
- data/spec/support/mock_parser.rb +1 -2
- data/spec/support/model_parsers/entity_parser.rb +8 -8
- data/spec/support/model_parsers/mock_parser.rb +8 -8
- data/spec/support/model_parsers/representable_parser.rb +8 -8
- data/spec/support/namespace_tags.rb +1 -0
- data/spec/swagger_v2/api_swagger_v2_hide_param_spec.rb +1 -1
- data/spec/swagger_v2/api_swagger_v2_mounted_spec.rb +1 -0
- data/spec/swagger_v2/api_swagger_v2_param_type_body_spec.rb +2 -2
- data/spec/swagger_v2/api_swagger_v2_response_with_models_spec.rb +53 -0
- data/spec/swagger_v2/api_swagger_v2_spec.rb +1 -0
- data/spec/swagger_v2/boolean_params_spec.rb +1 -0
- data/spec/swagger_v2/float_api_spec.rb +1 -0
- data/spec/swagger_v2/inheritance_and_discriminator_spec.rb +56 -0
- data/spec/swagger_v2/namespace_tags_prefix_spec.rb +1 -0
- data/spec/swagger_v2/param_multi_type_spec.rb +2 -0
- data/spec/swagger_v2/param_type_spec.rb +3 -0
- data/spec/swagger_v2/param_values_spec.rb +6 -0
- data/spec/swagger_v2/reference_entity_spec.rb +74 -29
- data/spec/swagger_v2/security_requirement_spec.rb +2 -2
- data/spec/swagger_v2/simple_mounted_api_spec.rb +1 -0
- metadata +19 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d9d2fa1309701cf2c24f0993db15660df9be1c437861529a321e6344390fc90
|
4
|
+
data.tar.gz: 8e74a44fddb127a89ec914da70de6118a86fe17318fb16e4f68d2761cd69dc1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79db26518f7697a7347ad92749eaa14722310e41e395177e839d04bfc5e490026989a687158f89f34ea52a62a390482430d79067aa887f4ef90e95bf991315d7
|
7
|
+
data.tar.gz: 95e85e0b5d337b53bd4ed260aed3fcaae2acae613fcf337552afe0b4be280da89587351008f1f2054440b61e868804c1710340214d2ad80ca4950439af3f5fbe
|
data/.rubocop.yml
CHANGED
@@ -4,11 +4,17 @@ AllCops:
|
|
4
4
|
Exclude:
|
5
5
|
- vendor/**/*
|
6
6
|
- example/**/*
|
7
|
+
NewCops: enable
|
7
8
|
TargetRubyVersion: 2.7
|
8
9
|
|
10
|
+
# Layout stuff
|
11
|
+
#
|
9
12
|
Layout/EmptyLinesAroundArguments:
|
10
13
|
Enabled: false
|
11
14
|
|
15
|
+
Layout/EmptyLinesAroundAttributeAccessor:
|
16
|
+
Enabled: true
|
17
|
+
|
12
18
|
Layout/FirstHashElementIndentation:
|
13
19
|
EnforcedStyle: consistent
|
14
20
|
|
@@ -17,19 +23,106 @@ Layout/LineLength:
|
|
17
23
|
Exclude:
|
18
24
|
- spec/**/*
|
19
25
|
|
26
|
+
Layout/SpaceAroundMethodCallOperator:
|
27
|
+
Enabled: true
|
28
|
+
|
29
|
+
# Lint stuff
|
30
|
+
#
|
31
|
+
Lint/ConstantDefinitionInBlock:
|
32
|
+
Exclude:
|
33
|
+
- spec/**/*
|
34
|
+
|
35
|
+
Lint/DeprecatedOpenSSLConstant:
|
36
|
+
Enabled: true
|
37
|
+
|
38
|
+
Lint/DuplicateElsifCondition:
|
39
|
+
Enabled: true
|
40
|
+
|
41
|
+
Lint/MixedRegexpCaptureTypes:
|
42
|
+
Enabled: true
|
43
|
+
|
44
|
+
Lint/RaiseException:
|
45
|
+
Enabled: true
|
46
|
+
|
47
|
+
Lint/StructNewOverride:
|
48
|
+
Enabled: true
|
49
|
+
|
50
|
+
# Metrics stuff
|
51
|
+
#
|
20
52
|
Metrics/BlockLength:
|
21
53
|
Exclude:
|
22
54
|
- spec/**/*
|
23
55
|
|
24
56
|
Metrics/ClassLength:
|
25
|
-
Max:
|
57
|
+
Max: 350
|
58
|
+
|
59
|
+
Metrics/CyclomaticComplexity:
|
60
|
+
Max: 17
|
26
61
|
|
27
62
|
Metrics/MethodLength:
|
28
63
|
Exclude:
|
29
64
|
- spec/**/*
|
30
65
|
|
66
|
+
# Naming stuff
|
67
|
+
#
|
31
68
|
Naming:
|
32
69
|
Enabled: false
|
33
70
|
|
71
|
+
# Style stuff
|
72
|
+
#
|
73
|
+
Style/AccessorGrouping:
|
74
|
+
Enabled: true
|
75
|
+
|
76
|
+
Style/AsciiComments:
|
77
|
+
Enabled: false
|
78
|
+
|
79
|
+
Style/ArrayCoercion:
|
80
|
+
Enabled: true
|
81
|
+
|
82
|
+
Style/BisectedAttrAccessor:
|
83
|
+
Enabled: true
|
84
|
+
|
85
|
+
Style/CaseLikeIf:
|
86
|
+
Enabled: true
|
87
|
+
|
88
|
+
Style/ExponentialNotation:
|
89
|
+
Enabled: true
|
90
|
+
|
91
|
+
Style/ExplicitBlockArgument:
|
92
|
+
Enabled: false
|
93
|
+
|
94
|
+
Style/HashAsLastArrayItem:
|
95
|
+
Enabled: true
|
96
|
+
|
97
|
+
Style/HashEachMethods:
|
98
|
+
Enabled: true
|
99
|
+
|
100
|
+
Style/HashLikeCase:
|
101
|
+
Enabled: true
|
102
|
+
|
103
|
+
Style/HashTransformKeys:
|
104
|
+
Enabled: true
|
105
|
+
|
106
|
+
Style/HashTransformValues:
|
107
|
+
Enabled: true
|
108
|
+
|
34
109
|
Style/RegexpLiteral:
|
35
110
|
Enabled: false
|
111
|
+
|
112
|
+
Style/RedundantAssignment:
|
113
|
+
Enabled: true
|
114
|
+
|
115
|
+
Style/RedundantFetchBlock:
|
116
|
+
Enabled: true
|
117
|
+
|
118
|
+
Style/RedundantFileExtensionInRequire:
|
119
|
+
Enabled: true
|
120
|
+
|
121
|
+
Style/RedundantRegexpCharacterClass:
|
122
|
+
Enabled: true
|
123
|
+
|
124
|
+
Style/RedundantRegexpEscape:
|
125
|
+
Enabled: true
|
126
|
+
|
127
|
+
Style/SlicingWithRange:
|
128
|
+
Enabled: false
|
data/.rubocop_todo.yml
CHANGED
data/.travis.yml
CHANGED
@@ -9,27 +9,33 @@ after_success:
|
|
9
9
|
- bundle exec danger
|
10
10
|
|
11
11
|
rvm:
|
12
|
-
- 2.5.
|
13
|
-
- 2.6.
|
14
|
-
- 2.7.
|
12
|
+
- 2.5.8
|
13
|
+
- 2.6.6
|
14
|
+
- 2.7.2
|
15
15
|
env:
|
16
|
-
- GRAPE_VERSION=1.3.
|
17
|
-
- GRAPE_VERSION=1.
|
18
|
-
- GRAPE_VERSION=1.
|
16
|
+
- GRAPE_VERSION=1.3.3
|
17
|
+
- GRAPE_VERSION=1.4.0
|
18
|
+
- GRAPE_VERSION=1.5.0 MODEL_PARSER=grape-swagger-entity
|
19
|
+
- GRAPE_VERSION=1.5.0 MODEL_PARSER=grape-swagger-representable
|
20
|
+
- GRAPE_VERSION=1.5.0
|
19
21
|
- GRAPE_VERSION=HEAD
|
20
22
|
|
21
23
|
jobs:
|
22
24
|
fast_finish: true
|
23
25
|
|
24
26
|
include:
|
25
|
-
- rvm: 2.4.
|
27
|
+
- rvm: 2.4.10
|
26
28
|
env:
|
27
29
|
- rvm: ruby-head
|
28
30
|
env:
|
29
31
|
- rvm: jruby-head
|
30
32
|
env:
|
33
|
+
- rvm: truffleruby-head
|
34
|
+
env:
|
35
|
+
script: bundle exec rake spec
|
31
36
|
|
32
37
|
allow_failures:
|
33
|
-
- rvm: 2.4.
|
38
|
+
- rvm: 2.4.10
|
34
39
|
- rvm: ruby-head
|
35
40
|
- rvm: jruby-head
|
41
|
+
- rvm: truffleruby-head
|
data/CHANGELOG.md
CHANGED
@@ -3,13 +3,67 @@
|
|
3
3
|
#### Features
|
4
4
|
|
5
5
|
* Your contribution here.
|
6
|
-
* [#777](https://github.com/ruby-grape/grape-swagger/pull/777): Make usage of grape >= 1.3, rack >= 2.1 - [@LeFnord](https://github.com/LeFnord).
|
7
|
-
* [#775](https://github.com/ruby-grape/grape-swagger/pull/775): Add in token_owner support to param hidden procs - [@urkle](https://github.com/urkle).
|
8
6
|
|
9
7
|
#### Fixes
|
10
8
|
|
11
9
|
* Your contribution here.
|
12
10
|
|
11
|
+
|
12
|
+
### 1.3.1 (November 1, 2020)
|
13
|
+
|
14
|
+
#### Features
|
15
|
+
|
16
|
+
* [#813](https://github.com/ruby-grape/grape-swagger/pull/813): Handle multiple presents - [@AntoineGuestin](https://github.com/AntoineGuestin).
|
17
|
+
|
18
|
+
#### Fixes
|
19
|
+
|
20
|
+
* [#811](https://github.com/ruby-grape/grape-swagger/pull/811): Fixes #809: supports utf8 route names - [@LeFnord](https://github.com/LeFnord).
|
21
|
+
|
22
|
+
|
23
|
+
### 1.3.0 (September 3, 2020)
|
24
|
+
|
25
|
+
#### Features
|
26
|
+
|
27
|
+
* [#804](https://github.com/ruby-grape/grape-swagger/pull/804): Don't overwrite model description with the route description - [@Bhacaz](https://github.com/Bhacaz).
|
28
|
+
|
29
|
+
|
30
|
+
### 1.2.1 (July 15, 2020)
|
31
|
+
|
32
|
+
#### Fixes
|
33
|
+
|
34
|
+
* [#801](https://github.com/ruby-grape/grape-swagger/pull/801): Fixes behaviour after grape upgrade to 1.4.0 - [@LeFnord](https://github.com/LeFnord).
|
35
|
+
|
36
|
+
|
37
|
+
### 1.2.0 (July 1, 2020)
|
38
|
+
|
39
|
+
#### Features
|
40
|
+
|
41
|
+
* [#794](https://github.com/ruby-grape/grape-swagger/pull/794): Allow `entity_name` to be inherited, fixes issue #659 - [@urkle](https://github.com/urkle).
|
42
|
+
* [#793](https://github.com/ruby-grape/grape-swagger/pull/793): Features/inheritance and discriminator - [@MaximeRDY](https://github.com/MaximeRDY).
|
43
|
+
|
44
|
+
#### Fixes
|
45
|
+
|
46
|
+
* [#798](https://github.com/ruby-grape/grape-swagger/pull/798): Modify full entity name separator - [@GarrettB71](https://github.com/GarrettB71).
|
47
|
+
* [#796](https://github.com/ruby-grape/grape-swagger/pull/796): Support grape 1.4.0 - [@thedanielhanke](https://github.com/thedanielhanke).
|
48
|
+
|
49
|
+
|
50
|
+
### 1.1.0 (April 20, 2020)
|
51
|
+
|
52
|
+
#### Features
|
53
|
+
|
54
|
+
* [#785](https://github.com/ruby-grape/grape-swagger/pull/785): Add extensions for params - [@MaximeRDY](https://github.com/MaximeRDY).
|
55
|
+
* [#782](https://github.com/ruby-grape/grape-swagger/pull/782): Allow passing class name as string for rake task initializer - [@misdoro](https://github.com/misdoro).
|
56
|
+
* [#786](https://github.com/ruby-grape/grape-swagger/pull/786): Use full entity name as a default - [@mrexox](https://github.com/mrexox).
|
57
|
+
|
58
|
+
|
59
|
+
### 1.0.0 (February 10, 2020)
|
60
|
+
|
61
|
+
#### Features
|
62
|
+
|
63
|
+
* [#777](https://github.com/ruby-grape/grape-swagger/pull/777): Make usage of grape >= 1.3, rack >= 2.1 - [@LeFnord](https://github.com/LeFnord).
|
64
|
+
* [#775](https://github.com/ruby-grape/grape-swagger/pull/775): Add in token_owner support to param hidden procs - [@urkle](https://github.com/urkle).
|
65
|
+
|
66
|
+
|
13
67
|
### 0.34.2 (January 20, 2020)
|
14
68
|
|
15
69
|
#### Fixes
|
@@ -42,10 +96,6 @@
|
|
42
96
|
* [#743](https://github.com/ruby-grape/grape-swagger/pull/743): CI: use 2.4.6, 2.5.5 - [@olleolleolle](https://github.com/olleolleolle).
|
43
97
|
* [#737](https://github.com/ruby-grape/grape-swagger/pull/737): Add swagger endpoint guard to both doc endpoints - [@urkle](https://github.com/urkle).
|
44
98
|
|
45
|
-
#### Changes
|
46
|
-
|
47
|
-
* [#749](https://github.com/ruby-grape/grape-swagger/pull/749) Drop support for Ruby 2.3 and below - [@LeFnord](https://github.com/LeFnord).
|
48
|
-
|
49
99
|
|
50
100
|
### 0.32.1 (December 7, 2018)
|
51
101
|
|
data/Gemfile
CHANGED
@@ -6,7 +6,7 @@ ruby RUBY_VERSION
|
|
6
6
|
|
7
7
|
gemspec
|
8
8
|
|
9
|
-
gem 'grape', case version = ENV['GRAPE_VERSION'] || '>= 1.
|
9
|
+
gem 'grape', case version = ENV['GRAPE_VERSION'] || '>= 1.5.0'
|
10
10
|
when 'HEAD'
|
11
11
|
{ git: 'https://github.com/ruby-grape/grape' }
|
12
12
|
else
|
@@ -14,24 +14,29 @@ gem 'grape', case version = ENV['GRAPE_VERSION'] || '>= 1.3.0'
|
|
14
14
|
end
|
15
15
|
|
16
16
|
gem ENV['MODEL_PARSER'] if ENV.key?('MODEL_PARSER')
|
17
|
+
|
17
18
|
group :development, :test do
|
18
19
|
gem 'bundler'
|
19
20
|
gem 'grape-entity'
|
20
21
|
gem 'pry', platforms: [:mri]
|
21
22
|
gem 'pry-byebug', platforms: [:mri]
|
22
23
|
|
23
|
-
gem 'rack', '~> 2.
|
24
|
+
gem 'rack', '~> 2.2'
|
24
25
|
gem 'rack-cors'
|
25
26
|
gem 'rack-test'
|
26
27
|
gem 'rake'
|
27
28
|
gem 'rdoc'
|
28
29
|
gem 'rspec', '~> 3.9'
|
29
|
-
gem 'rubocop', '~> 0
|
30
|
+
gem 'rubocop', '~> 1.0', require: false
|
30
31
|
end
|
31
32
|
|
32
33
|
group :test do
|
33
34
|
gem 'coveralls_reborn', require: false
|
34
|
-
|
35
|
+
|
35
36
|
gem 'ruby-grape-danger', '~> 0.1.1', require: false
|
36
37
|
gem 'simplecov', require: false
|
38
|
+
|
39
|
+
unless ENV['MODEL_PARSER'] == 'grape-swagger-entity'
|
40
|
+
gem 'grape-swagger-entity', git: 'https://github.com/ruby-grape/grape-swagger-entity'
|
41
|
+
end
|
37
42
|
end
|
data/README.md
CHANGED
@@ -43,16 +43,16 @@ This screenshot is based on the [Hussars](https://github.com/LeFnord/hussars) sa
|
|
43
43
|
|
44
44
|
The following versions of grape, grape-entity and grape-swagger can currently be used together.
|
45
45
|
|
46
|
-
grape-swagger | swagger spec | grape | grape-entity | representable |
|
47
|
-
|
48
|
-
0.10.5 |
|
49
|
-
0.11.0 |
|
50
|
-
0.25.2 |
|
51
|
-
0.26.0 |
|
52
|
-
0.27.0 |
|
53
|
-
0.32.0 |
|
54
|
-
0.34.0 |
|
55
|
-
1.0.0
|
46
|
+
| grape-swagger | swagger spec | grape | grape-entity | representable |
|
47
|
+
| ------------- | ------------ | ----------------------- | ------------ | ------------- |
|
48
|
+
| 0.10.5 | 1.2 | >= 0.10.0 ... <= 0.14.0 | < 0.5.0 | n/a |
|
49
|
+
| 0.11.0 | 1.2 | >= 0.16.2 | < 0.5.0 | n/a |
|
50
|
+
| 0.25.2 | 2.0 | >= 0.14.0 ... <= 0.18.0 | <= 0.6.0 | >= 2.4.1 |
|
51
|
+
| 0.26.0 | 2.0 | >= 0.16.2 ... <= 1.1.0 | <= 0.6.1 | >= 2.4.1 |
|
52
|
+
| 0.27.0 | 2.0 | >= 0.16.2 ... <= 1.1.0 | >= 0.5.0 | >= 2.4.1 |
|
53
|
+
| 0.32.0 | 2.0 | >= 0.16.2 | >= 0.5.0 | >= 2.4.1 |
|
54
|
+
| 0.34.0 | 2.0 | >= 0.16.2 ... < 1.3.0 | >= 0.5.0 | >= 2.4.1 |
|
55
|
+
| >= 1.0.0 | 2.0 | >= 1.3.0 | >= 0.5.0 | >= 2.4.1 |
|
56
56
|
|
57
57
|
|
58
58
|
## Swagger-Spec <a name="swagger-spec"></a>
|
@@ -458,6 +458,7 @@ add_swagger_documentation \
|
|
458
458
|
* [Response examples documentation](#response-examples)
|
459
459
|
* [Response headers documentation](#response-headers)
|
460
460
|
* [Adding root element to responses](#response-root)
|
461
|
+
* [Multiple present Response](#multiple-response)
|
461
462
|
|
462
463
|
#### Swagger Header Parameters <a name="headers"></a>
|
463
464
|
|
@@ -859,10 +860,11 @@ get '/thing', failure: [
|
|
859
860
|
end
|
860
861
|
```
|
861
862
|
|
862
|
-
By adding a `model` key, e.g. this would be taken.
|
863
|
+
By adding a `model` key, e.g. this would be taken. Setting an empty string will act like an empty body.
|
863
864
|
```ruby
|
864
865
|
get '/thing', failure: [
|
865
866
|
{ code: 400, message: 'General error' },
|
867
|
+
{ code: 403, message: 'Forbidden error', model: '' },
|
866
868
|
{ code: 422, message: 'Invalid parameter entry', model: Entities::ApiError }
|
867
869
|
] do
|
868
870
|
# ...
|
@@ -1084,6 +1086,20 @@ or, for more definitions:
|
|
1084
1086
|
route_setting :x_def, [{ for: 422, other: 'stuff' }, { for: 200, some: 'stuff' }]
|
1085
1087
|
```
|
1086
1088
|
|
1089
|
+
- `params` extension, add a `x` key to the `documentation` hash :
|
1090
|
+
```ruby
|
1091
|
+
requires :foo, type: String, documentation: { x: { some: 'stuff' } }
|
1092
|
+
```
|
1093
|
+
this would generate:
|
1094
|
+
```json
|
1095
|
+
{
|
1096
|
+
"in": "formData",
|
1097
|
+
"name": "foo",
|
1098
|
+
"type": "string",
|
1099
|
+
"required": true,
|
1100
|
+
"x-some": "stuff"
|
1101
|
+
}
|
1102
|
+
```
|
1087
1103
|
|
1088
1104
|
#### Response examples documentation <a name="response-examples"></a>
|
1089
1105
|
|
@@ -1247,6 +1263,75 @@ The result will look like following:
|
|
1247
1263
|
}
|
1248
1264
|
}
|
1249
1265
|
```
|
1266
|
+
#### Multiple present Response <a name="multiple-response"></a>
|
1267
|
+
|
1268
|
+
You can specify a custom multiple response by using the `as` key:
|
1269
|
+
```ruby
|
1270
|
+
desc 'Multiple response',
|
1271
|
+
success: [
|
1272
|
+
{ model: Entities::EnumValues, as: :gender },
|
1273
|
+
{ model: Entities::Something, as: :somethings }
|
1274
|
+
]
|
1275
|
+
end
|
1276
|
+
|
1277
|
+
get '/things' do
|
1278
|
+
...
|
1279
|
+
end
|
1280
|
+
```
|
1281
|
+
The result will look like following:
|
1282
|
+
```
|
1283
|
+
"responses": {
|
1284
|
+
"200": {
|
1285
|
+
"description": "Multiple response",
|
1286
|
+
"schema":{
|
1287
|
+
"type":"object",
|
1288
|
+
"properties":{
|
1289
|
+
"gender":{
|
1290
|
+
"$ref":"#/definitions/EnumValues"
|
1291
|
+
},
|
1292
|
+
"somethings":{
|
1293
|
+
"$ref":"#/definitions/Something"
|
1294
|
+
}
|
1295
|
+
}
|
1296
|
+
}
|
1297
|
+
}
|
1298
|
+
}
|
1299
|
+
```
|
1300
|
+
You can also specify if the response is an array, with the `is_array` key:
|
1301
|
+
```ruby
|
1302
|
+
desc 'Multiple response with array',
|
1303
|
+
success: [
|
1304
|
+
{ model: Entities::EnumValues, as: :gender },
|
1305
|
+
{ model: Entities::Something, as: :somethings, is_array: true }
|
1306
|
+
]
|
1307
|
+
end
|
1308
|
+
|
1309
|
+
get '/things' do
|
1310
|
+
...
|
1311
|
+
end
|
1312
|
+
```
|
1313
|
+
The result will look like following:
|
1314
|
+
```
|
1315
|
+
"responses": {
|
1316
|
+
"200": {
|
1317
|
+
"description": "Multiple response with array",
|
1318
|
+
"schema":{
|
1319
|
+
"type":"object",
|
1320
|
+
"properties":{
|
1321
|
+
"gender":{
|
1322
|
+
"$ref":"#/definitions/EnumValues"
|
1323
|
+
},
|
1324
|
+
"somethings":{
|
1325
|
+
"type":"array",
|
1326
|
+
"items":{
|
1327
|
+
"$ref":"#/definitions/Something"
|
1328
|
+
}
|
1329
|
+
}
|
1330
|
+
}
|
1331
|
+
}
|
1332
|
+
}
|
1333
|
+
}
|
1334
|
+
```
|
1250
1335
|
|
1251
1336
|
## Using Grape Entities <a name="grape-entity"></a>
|
1252
1337
|
|
@@ -1367,6 +1452,94 @@ module API
|
|
1367
1452
|
end
|
1368
1453
|
```
|
1369
1454
|
|
1455
|
+
#### Inheritance with allOf and discriminator
|
1456
|
+
```ruby
|
1457
|
+
module Entities
|
1458
|
+
class Pet < Grape::Entity
|
1459
|
+
expose :type, documentation: {
|
1460
|
+
type: 'string',
|
1461
|
+
is_discriminator: true,
|
1462
|
+
required: true
|
1463
|
+
}
|
1464
|
+
expose :name, documentation: {
|
1465
|
+
type: 'string',
|
1466
|
+
required: true
|
1467
|
+
}
|
1468
|
+
end
|
1469
|
+
|
1470
|
+
class Cat < Pet
|
1471
|
+
expose :huntingSkill, documentation: {
|
1472
|
+
type: 'string',
|
1473
|
+
description: 'The measured skill for hunting',
|
1474
|
+
default: 'lazy',
|
1475
|
+
values: %w[
|
1476
|
+
clueless
|
1477
|
+
lazy
|
1478
|
+
adventurous
|
1479
|
+
aggressive
|
1480
|
+
]
|
1481
|
+
}
|
1482
|
+
end
|
1483
|
+
end
|
1484
|
+
```
|
1485
|
+
|
1486
|
+
Should generate this definitions:
|
1487
|
+
```JSON
|
1488
|
+
{
|
1489
|
+
"definitions": {
|
1490
|
+
"Pet": {
|
1491
|
+
"type": "object",
|
1492
|
+
"discriminator": "petType",
|
1493
|
+
"properties": {
|
1494
|
+
"name": {
|
1495
|
+
"type": "string"
|
1496
|
+
},
|
1497
|
+
"petType": {
|
1498
|
+
"type": "string"
|
1499
|
+
}
|
1500
|
+
},
|
1501
|
+
"required": [
|
1502
|
+
"name",
|
1503
|
+
"petType"
|
1504
|
+
]
|
1505
|
+
},
|
1506
|
+
"Cat": {
|
1507
|
+
"description": "A representation of a cat",
|
1508
|
+
"allOf": [
|
1509
|
+
{
|
1510
|
+
"$ref": "#/definitions/Pet"
|
1511
|
+
},
|
1512
|
+
{
|
1513
|
+
"type": "object",
|
1514
|
+
"properties": {
|
1515
|
+
"huntingSkill": {
|
1516
|
+
"type": "string",
|
1517
|
+
"description": "The measured skill for hunting",
|
1518
|
+
"default": "lazy",
|
1519
|
+
"enum": [
|
1520
|
+
"clueless",
|
1521
|
+
"lazy",
|
1522
|
+
"adventurous",
|
1523
|
+
"aggressive"
|
1524
|
+
]
|
1525
|
+
},
|
1526
|
+
"petType": {
|
1527
|
+
"type": "string",
|
1528
|
+
"enum": ["Cat"]
|
1529
|
+
}
|
1530
|
+
},
|
1531
|
+
"required": [
|
1532
|
+
"huntingSkill",
|
1533
|
+
"petType"
|
1534
|
+
]
|
1535
|
+
}
|
1536
|
+
]
|
1537
|
+
}
|
1538
|
+
}
|
1539
|
+
}
|
1540
|
+
```
|
1541
|
+
|
1542
|
+
|
1370
1543
|
|
1371
1544
|
|
1372
1545
|
## Securing the Swagger UI <a name="oauth"></a>
|
@@ -1486,13 +1659,19 @@ end
|
|
1486
1659
|
|
1487
1660
|
## Rake Tasks <a name="rake"></a>
|
1488
1661
|
|
1489
|
-
Add these lines to your Rakefile, and initialize the Task class with your Api class
|
1662
|
+
Add these lines to your Rakefile, and initialize the Task class with your Api class.
|
1490
1663
|
|
1491
1664
|
```ruby
|
1492
1665
|
require 'grape-swagger/rake/oapi_tasks'
|
1493
1666
|
GrapeSwagger::Rake::OapiTasks.new(::Api::Base)
|
1494
1667
|
```
|
1495
1668
|
|
1669
|
+
You may initialize with the class name as a string if the class is not yet loaded at the time Rakefile is parsed:
|
1670
|
+
```ruby
|
1671
|
+
require 'grape-swagger/rake/oapi_tasks'
|
1672
|
+
GrapeSwagger::Rake::OapiTasks.new('::Api::Base')
|
1673
|
+
```
|
1674
|
+
|
1496
1675
|
#### OpenApi/Swagger Documentation
|
1497
1676
|
|
1498
1677
|
```
|