grape-swagger 0.34.1 → 1.2.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 +83 -0
- data/.travis.yml +15 -12
- data/CHANGELOG.md +44 -4
- data/Gemfile +9 -4
- data/README.md +123 -11
- data/UPGRADING.md +30 -0
- data/grape-swagger.gemspec +1 -1
- data/lib/grape-swagger.rb +2 -2
- data/lib/grape-swagger/doc_methods/build_model_definition.rb +53 -2
- data/lib/grape-swagger/doc_methods/data_type.rb +6 -6
- 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 +28 -18
- data/lib/grape-swagger/endpoint/params_parser.rb +12 -5
- data/lib/grape-swagger/rake/oapi_tasks.rb +10 -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/784_extensions_on_params_spec.rb +38 -0
- data/spec/lib/data_type_spec.rb +14 -2
- data/spec/lib/endpoint/params_parser_spec.rb +2 -1
- data/spec/lib/endpoint_spec.rb +1 -1
- 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 +1 -1
- data/spec/support/model_parsers/representable_parser.rb +1 -1
- data/spec/swagger_v2/api_swagger_v2_hide_param_spec.rb +14 -3
- data/spec/swagger_v2/api_swagger_v2_param_type_body_spec.rb +2 -2
- data/spec/swagger_v2/boolean_params_spec.rb +1 -1
- data/spec/swagger_v2/inheritance_and_discriminator_spec.rb +56 -0
- data/spec/swagger_v2/reference_entity_spec.rb +74 -29
- data/spec/swagger_v2/security_requirement_spec.rb +2 -2
- metadata +15 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ced0e59624b64b14e517815c13c6761c970da13cfd7e6d5c82493b1bb49c815
|
4
|
+
data.tar.gz: a5891f3a10dc5e3ae96bb1f295dcf1978f0758175160b1681ba5f85f0b7cc206
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61c9297050672b095bf2ab8a6648420b6226fa5ecaa2b1b2df07e99c271dba4f1fe9547a77eae5dc4e1b5d0b29035f823e389957b57149f4fb79cf3187597ee9
|
7
|
+
data.tar.gz: 55f926c09f83bfe6e0ab15caeac329acf6f6d623d9c579b89c872fdd2f11f5ddece4e0a74259f921688bcf8e2255fecd908fce3f2eb4b2b58ed449803d3c2900
|
data/.rubocop.yml
CHANGED
@@ -6,9 +6,14 @@ AllCops:
|
|
6
6
|
- example/**/*
|
7
7
|
TargetRubyVersion: 2.7
|
8
8
|
|
9
|
+
# Layout stuff
|
10
|
+
#
|
9
11
|
Layout/EmptyLinesAroundArguments:
|
10
12
|
Enabled: false
|
11
13
|
|
14
|
+
Layout/EmptyLinesAroundAttributeAccessor:
|
15
|
+
Enabled: true
|
16
|
+
|
12
17
|
Layout/FirstHashElementIndentation:
|
13
18
|
EnforcedStyle: consistent
|
14
19
|
|
@@ -17,6 +22,28 @@ Layout/LineLength:
|
|
17
22
|
Exclude:
|
18
23
|
- spec/**/*
|
19
24
|
|
25
|
+
Layout/SpaceAroundMethodCallOperator:
|
26
|
+
Enabled: true
|
27
|
+
|
28
|
+
# Lint stuff
|
29
|
+
#
|
30
|
+
Lint/DeprecatedOpenSSLConstant:
|
31
|
+
Enabled: true
|
32
|
+
|
33
|
+
Lint/DuplicateElsifCondition:
|
34
|
+
Enabled: true
|
35
|
+
|
36
|
+
Lint/MixedRegexpCaptureTypes:
|
37
|
+
Enabled: true
|
38
|
+
|
39
|
+
Lint/RaiseException:
|
40
|
+
Enabled: true
|
41
|
+
|
42
|
+
Lint/StructNewOverride:
|
43
|
+
Enabled: true
|
44
|
+
|
45
|
+
# Metrics stuff
|
46
|
+
#
|
20
47
|
Metrics/BlockLength:
|
21
48
|
Exclude:
|
22
49
|
- spec/**/*
|
@@ -24,12 +51,68 @@ Metrics/BlockLength:
|
|
24
51
|
Metrics/ClassLength:
|
25
52
|
Max: 300
|
26
53
|
|
54
|
+
Metrics/CyclomaticComplexity:
|
55
|
+
Max: 17
|
56
|
+
|
27
57
|
Metrics/MethodLength:
|
28
58
|
Exclude:
|
29
59
|
- spec/**/*
|
30
60
|
|
61
|
+
# Naming stuff
|
62
|
+
#
|
31
63
|
Naming:
|
32
64
|
Enabled: false
|
33
65
|
|
66
|
+
# Style stuff
|
67
|
+
#
|
68
|
+
Style/AccessorGrouping:
|
69
|
+
Enabled: true
|
70
|
+
|
71
|
+
Style/ArrayCoercion:
|
72
|
+
Enabled: true
|
73
|
+
|
74
|
+
Style/BisectedAttrAccessor:
|
75
|
+
Enabled: true
|
76
|
+
|
77
|
+
Style/CaseLikeIf:
|
78
|
+
Enabled: true
|
79
|
+
|
80
|
+
Style/ExponentialNotation:
|
81
|
+
Enabled: true
|
82
|
+
|
83
|
+
Style/HashAsLastArrayItem:
|
84
|
+
Enabled: true
|
85
|
+
Style/HashEachMethods:
|
86
|
+
Enabled: true
|
87
|
+
|
88
|
+
Style/HashLikeCase:
|
89
|
+
Enabled: true
|
90
|
+
|
91
|
+
Style/HashTransformKeys:
|
92
|
+
Enabled: true
|
93
|
+
|
94
|
+
Style/HashTransformValues:
|
95
|
+
Enabled: true
|
96
|
+
|
34
97
|
Style/RegexpLiteral:
|
35
98
|
Enabled: false
|
99
|
+
|
100
|
+
Style/RedundantAssignment:
|
101
|
+
Enabled: true
|
102
|
+
|
103
|
+
Style/RedundantFetchBlock:
|
104
|
+
Enabled: true
|
105
|
+
|
106
|
+
Style/RedundantFileExtensionInRequire:
|
107
|
+
Enabled: true
|
108
|
+
|
109
|
+
Style/RedundantRegexpCharacterClass:
|
110
|
+
Enabled: true
|
111
|
+
|
112
|
+
Style/RedundantRegexpEscape:
|
113
|
+
Enabled: true
|
114
|
+
|
115
|
+
Style/SlicingWithRange:
|
116
|
+
Enabled: false
|
117
|
+
|
118
|
+
|
data/.travis.yml
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
language: ruby
|
2
2
|
|
3
|
+
os: linux
|
4
|
+
|
3
5
|
before_install:
|
4
6
|
- gem install bundler
|
5
7
|
|
@@ -7,27 +9,28 @@ after_success:
|
|
7
9
|
- bundle exec danger
|
8
10
|
|
9
11
|
rvm:
|
10
|
-
- 2.5.
|
11
|
-
- 2.6.
|
12
|
-
- 2.7.
|
12
|
+
- 2.5.8
|
13
|
+
- 2.6.6
|
14
|
+
- 2.7.1
|
13
15
|
env:
|
14
|
-
- GRAPE_VERSION=1.
|
15
|
-
- GRAPE_VERSION=1.
|
16
|
-
- GRAPE_VERSION=1.0
|
17
|
-
- GRAPE_VERSION=1.
|
16
|
+
- GRAPE_VERSION=1.3.3
|
17
|
+
- GRAPE_VERSION=1.4.0 MODEL_PARSER=grape-swagger-entity
|
18
|
+
- GRAPE_VERSION=1.4.0 MODEL_PARSER=grape-swagger-representable
|
19
|
+
- GRAPE_VERSION=1.4.0
|
20
|
+
- GRAPE_VERSION=HEAD
|
18
21
|
|
19
|
-
|
22
|
+
jobs:
|
20
23
|
fast_finish: true
|
21
24
|
|
22
25
|
include:
|
23
|
-
- rvm: 2.4.
|
24
|
-
env:
|
26
|
+
- rvm: 2.4.10
|
27
|
+
env:
|
25
28
|
- rvm: ruby-head
|
26
|
-
env:
|
29
|
+
env:
|
27
30
|
- rvm: jruby-head
|
28
31
|
env:
|
29
32
|
|
30
33
|
allow_failures:
|
31
|
-
- rvm: 2.4.
|
34
|
+
- rvm: 2.4.10
|
32
35
|
- rvm: ruby-head
|
33
36
|
- rvm: jruby-head
|
data/CHANGELOG.md
CHANGED
@@ -9,6 +9,50 @@
|
|
9
9
|
* Your contribution here.
|
10
10
|
|
11
11
|
|
12
|
+
### 1.2.1 (July 15, 2020)
|
13
|
+
|
14
|
+
#### Fixes
|
15
|
+
|
16
|
+
* [#801](https://github.com/ruby-grape/grape-swagger/pull/801): Fixes behaviour after grape upgrade to 1.4.0 - [@LeFnord](https://github.com/LeFnord).
|
17
|
+
|
18
|
+
|
19
|
+
### 1.2.0 (July 1, 2020)
|
20
|
+
|
21
|
+
#### Features
|
22
|
+
|
23
|
+
* [#794](https://github.com/ruby-grape/grape-swagger/pull/794): Allow `entity_name` to be inherited, fixes issue #659 - [@urkle](https://github.com/urkle).
|
24
|
+
* [#793](https://github.com/ruby-grape/grape-swagger/pull/793): Features/inheritance and discriminator - [@MaximeRDY](https://github.com/MaximeRDY).
|
25
|
+
|
26
|
+
#### Fixes
|
27
|
+
|
28
|
+
* [#798](https://github.com/ruby-grape/grape-swagger/pull/798): Modify full entity name separator - [@GarrettB71](https://github.com/GarrettB71).
|
29
|
+
* [#796](https://github.com/ruby-grape/grape-swagger/pull/796): Support grape 1.4.0 - [@thedanielhanke](https://github.com/thedanielhanke).
|
30
|
+
|
31
|
+
|
32
|
+
### 1.1.0 (April 20, 2020)
|
33
|
+
|
34
|
+
#### Features
|
35
|
+
|
36
|
+
* [#785](https://github.com/ruby-grape/grape-swagger/pull/785): Add extensions for params - [@MaximeRDY](https://github.com/MaximeRDY).
|
37
|
+
* [#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).
|
38
|
+
* [#786](https://github.com/ruby-grape/grape-swagger/pull/786): Use full entity name as a default - [@mrexox](https://github.com/mrexox).
|
39
|
+
|
40
|
+
|
41
|
+
### 1.0.0 (February 10, 2020)
|
42
|
+
|
43
|
+
#### Features
|
44
|
+
|
45
|
+
* [#777](https://github.com/ruby-grape/grape-swagger/pull/777): Make usage of grape >= 1.3, rack >= 2.1 - [@LeFnord](https://github.com/LeFnord).
|
46
|
+
* [#775](https://github.com/ruby-grape/grape-swagger/pull/775): Add in token_owner support to param hidden procs - [@urkle](https://github.com/urkle).
|
47
|
+
|
48
|
+
|
49
|
+
### 0.34.2 (January 20, 2020)
|
50
|
+
|
51
|
+
#### Fixes
|
52
|
+
|
53
|
+
* [#773](https://github.com/ruby-grape/grape-swagger/pull/773): Freeze rack version to 2.0.8 - [@LeFnord](https://github.com/LeFnord).
|
54
|
+
|
55
|
+
|
12
56
|
### 0.34.0 (January 11, 2020)
|
13
57
|
|
14
58
|
#### Features
|
@@ -34,10 +78,6 @@
|
|
34
78
|
* [#743](https://github.com/ruby-grape/grape-swagger/pull/743): CI: use 2.4.6, 2.5.5 - [@olleolleolle](https://github.com/olleolleolle).
|
35
79
|
* [#737](https://github.com/ruby-grape/grape-swagger/pull/737): Add swagger endpoint guard to both doc endpoints - [@urkle](https://github.com/urkle).
|
36
80
|
|
37
|
-
#### Changes
|
38
|
-
|
39
|
-
* [#749](https://github.com/ruby-grape/grape-swagger/pull/749) Drop support for Ruby 2.3 and below - [@LeFnord](https://github.com/LeFnord).
|
40
|
-
|
41
81
|
|
42
82
|
### 0.32.1 (December 7, 2018)
|
43
83
|
|
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'] || '
|
9
|
+
gem 'grape', case version = ENV['GRAPE_VERSION'] || '>= 1.4.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', '~> 0.88', 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,15 +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 |
|
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 |
|
55
56
|
|
56
57
|
|
57
58
|
## Swagger-Spec <a name="swagger-spec"></a>
|
@@ -743,9 +744,12 @@ end
|
|
743
744
|
Exclude single optional parameter from the documentation
|
744
745
|
|
745
746
|
```ruby
|
747
|
+
not_admins = lambda { |token_owner = nil| token_owner.nil? || !token_owner.admin? }
|
748
|
+
|
746
749
|
params do
|
747
750
|
optional :one, documentation: { hidden: true }
|
748
|
-
optional :two, documentation: { hidden: -> { true } }
|
751
|
+
optional :two, documentation: { hidden: -> { |t=nil| true } }
|
752
|
+
optional :three, documentation: { hidden: not_admins }
|
749
753
|
end
|
750
754
|
post :act do
|
751
755
|
...
|
@@ -1080,6 +1084,20 @@ or, for more definitions:
|
|
1080
1084
|
route_setting :x_def, [{ for: 422, other: 'stuff' }, { for: 200, some: 'stuff' }]
|
1081
1085
|
```
|
1082
1086
|
|
1087
|
+
- `params` extension, add a `x` key to the `documentation` hash :
|
1088
|
+
```ruby
|
1089
|
+
requires :foo, type: String, documentation: { x: { some: 'stuff' } }
|
1090
|
+
```
|
1091
|
+
this would generate:
|
1092
|
+
```json
|
1093
|
+
{
|
1094
|
+
"in": "formData",
|
1095
|
+
"name": "foo",
|
1096
|
+
"type": "string",
|
1097
|
+
"required": true,
|
1098
|
+
"x-some": "stuff"
|
1099
|
+
}
|
1100
|
+
```
|
1083
1101
|
|
1084
1102
|
#### Response examples documentation <a name="response-examples"></a>
|
1085
1103
|
|
@@ -1363,6 +1381,94 @@ module API
|
|
1363
1381
|
end
|
1364
1382
|
```
|
1365
1383
|
|
1384
|
+
#### Inheritance with allOf and discriminator
|
1385
|
+
```ruby
|
1386
|
+
module Entities
|
1387
|
+
class Pet < Grape::Entity
|
1388
|
+
expose :type, documentation: {
|
1389
|
+
type: 'string',
|
1390
|
+
is_discriminator: true,
|
1391
|
+
required: true
|
1392
|
+
}
|
1393
|
+
expose :name, documentation: {
|
1394
|
+
type: 'string',
|
1395
|
+
required: true
|
1396
|
+
}
|
1397
|
+
end
|
1398
|
+
|
1399
|
+
class Cat < Pet
|
1400
|
+
expose :huntingSkill, documentation: {
|
1401
|
+
type: 'string',
|
1402
|
+
description: 'The measured skill for hunting',
|
1403
|
+
default: 'lazy',
|
1404
|
+
values: %w[
|
1405
|
+
clueless
|
1406
|
+
lazy
|
1407
|
+
adventurous
|
1408
|
+
aggressive
|
1409
|
+
]
|
1410
|
+
}
|
1411
|
+
end
|
1412
|
+
end
|
1413
|
+
```
|
1414
|
+
|
1415
|
+
Should generate this definitions:
|
1416
|
+
```JSON
|
1417
|
+
{
|
1418
|
+
"definitions": {
|
1419
|
+
"Pet": {
|
1420
|
+
"type": "object",
|
1421
|
+
"discriminator": "petType",
|
1422
|
+
"properties": {
|
1423
|
+
"name": {
|
1424
|
+
"type": "string"
|
1425
|
+
},
|
1426
|
+
"petType": {
|
1427
|
+
"type": "string"
|
1428
|
+
}
|
1429
|
+
},
|
1430
|
+
"required": [
|
1431
|
+
"name",
|
1432
|
+
"petType"
|
1433
|
+
]
|
1434
|
+
},
|
1435
|
+
"Cat": {
|
1436
|
+
"description": "A representation of a cat",
|
1437
|
+
"allOf": [
|
1438
|
+
{
|
1439
|
+
"$ref": "#/definitions/Pet"
|
1440
|
+
},
|
1441
|
+
{
|
1442
|
+
"type": "object",
|
1443
|
+
"properties": {
|
1444
|
+
"huntingSkill": {
|
1445
|
+
"type": "string",
|
1446
|
+
"description": "The measured skill for hunting",
|
1447
|
+
"default": "lazy",
|
1448
|
+
"enum": [
|
1449
|
+
"clueless",
|
1450
|
+
"lazy",
|
1451
|
+
"adventurous",
|
1452
|
+
"aggressive"
|
1453
|
+
]
|
1454
|
+
},
|
1455
|
+
"petType": {
|
1456
|
+
"type": "string",
|
1457
|
+
"enum": ["Cat"]
|
1458
|
+
}
|
1459
|
+
},
|
1460
|
+
"required": [
|
1461
|
+
"huntingSkill",
|
1462
|
+
"petType"
|
1463
|
+
]
|
1464
|
+
}
|
1465
|
+
]
|
1466
|
+
}
|
1467
|
+
}
|
1468
|
+
}
|
1469
|
+
```
|
1470
|
+
|
1471
|
+
|
1366
1472
|
|
1367
1473
|
|
1368
1474
|
## Securing the Swagger UI <a name="oauth"></a>
|
@@ -1482,13 +1588,19 @@ end
|
|
1482
1588
|
|
1483
1589
|
## Rake Tasks <a name="rake"></a>
|
1484
1590
|
|
1485
|
-
Add these lines to your Rakefile, and initialize the Task class with your Api class
|
1591
|
+
Add these lines to your Rakefile, and initialize the Task class with your Api class.
|
1486
1592
|
|
1487
1593
|
```ruby
|
1488
1594
|
require 'grape-swagger/rake/oapi_tasks'
|
1489
1595
|
GrapeSwagger::Rake::OapiTasks.new(::Api::Base)
|
1490
1596
|
```
|
1491
1597
|
|
1598
|
+
You may initialize with the class name as a string if the class is not yet loaded at the time Rakefile is parsed:
|
1599
|
+
```ruby
|
1600
|
+
require 'grape-swagger/rake/oapi_tasks'
|
1601
|
+
GrapeSwagger::Rake::OapiTasks.new('::Api::Base')
|
1602
|
+
```
|
1603
|
+
|
1492
1604
|
#### OpenApi/Swagger Documentation
|
1493
1605
|
|
1494
1606
|
```
|