grape-swagger 1.0.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
```
|