grape-swagger 0.34.0 → 1.2.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 +4 -4
- data/.rubocop.yml +55 -0
- data/.travis.yml +14 -10
- data/CHANGELOG.md +37 -4
- data/Gemfile +9 -4
- data/README.md +123 -10
- data/UPGRADING.md +30 -0
- data/grape-swagger.gemspec +1 -1
- data/lib/grape-swagger.rb +1 -0
- 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 +11 -11
- 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/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
- metadata +14 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eae164875a188218b1eb4e0e3a53039f8e661f3dd115b4cc9a6f415b3a92e64b
|
4
|
+
data.tar.gz: 6962782ea370ff7b4f84c62ed77f2fe1e7232332f3a238bce4c5af5b62eb1534
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b56b026ba97a2308579737c43daf0e9f619df0c91c511e424b533f99105faec83f9ddbcb3dd2f3d98866bffdbdecb13e652f302424f54ec4095c4605405319c
|
7
|
+
data.tar.gz: 2e88c630ade44d4c9395a18e690cad717f5a6ba6e6daae81624d0b7e6347f06c9d7d07ce85f16b5eb99ea25c1a716127cd8aac17c1367823ded3bd84151dbc47
|
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,25 @@ 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/MixedRegexpCaptureTypes:
|
34
|
+
Enabled: true
|
35
|
+
|
36
|
+
Lint/RaiseException:
|
37
|
+
Enabled: true
|
38
|
+
|
39
|
+
Lint/StructNewOverride:
|
40
|
+
Enabled: true
|
41
|
+
|
42
|
+
# Metrics stuff
|
43
|
+
#
|
20
44
|
Metrics/BlockLength:
|
21
45
|
Exclude:
|
22
46
|
- spec/**/*
|
@@ -24,12 +48,43 @@ Metrics/BlockLength:
|
|
24
48
|
Metrics/ClassLength:
|
25
49
|
Max: 300
|
26
50
|
|
51
|
+
Metrics/CyclomaticComplexity:
|
52
|
+
Max: 17
|
53
|
+
|
27
54
|
Metrics/MethodLength:
|
28
55
|
Exclude:
|
29
56
|
- spec/**/*
|
30
57
|
|
58
|
+
# Naming stuff
|
59
|
+
#
|
31
60
|
Naming:
|
32
61
|
Enabled: false
|
33
62
|
|
63
|
+
# Style stuff
|
64
|
+
#
|
65
|
+
Style/ExponentialNotation:
|
66
|
+
Enabled: true
|
67
|
+
|
68
|
+
Style/HashEachMethods:
|
69
|
+
Enabled: true
|
70
|
+
|
71
|
+
Style/HashTransformKeys:
|
72
|
+
Enabled: true
|
73
|
+
|
74
|
+
Style/HashTransformValues:
|
75
|
+
Enabled: true
|
76
|
+
|
34
77
|
Style/RegexpLiteral:
|
35
78
|
Enabled: false
|
79
|
+
|
80
|
+
Style/RedundantFetchBlock:
|
81
|
+
Enabled: true
|
82
|
+
|
83
|
+
Style/RedundantRegexpCharacterClass:
|
84
|
+
Enabled: true
|
85
|
+
|
86
|
+
Style/RedundantRegexpEscape:
|
87
|
+
Enabled: true
|
88
|
+
|
89
|
+
Style/SlicingWithRange:
|
90
|
+
Enabled: false
|
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,20 +9,20 @@ 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=
|
16
|
+
- GRAPE_VERSION=1.3.0 MODEL_PARSER=grape-swagger-entity
|
17
|
+
- GRAPE_VERSION=1.3.0 MODEL_PARSER=grape-swagger-representable
|
18
|
+
- GRAPE_VERSION=1.3.0
|
19
|
+
- GRAPE_VERSION=HEAD
|
18
20
|
|
19
|
-
|
21
|
+
jobs:
|
20
22
|
fast_finish: true
|
21
23
|
|
22
24
|
include:
|
23
|
-
- rvm: 2.4.
|
25
|
+
- rvm: 2.4.10
|
24
26
|
env:
|
25
27
|
- rvm: ruby-head
|
26
28
|
env:
|
@@ -28,6 +30,8 @@ matrix:
|
|
28
30
|
env:
|
29
31
|
|
30
32
|
allow_failures:
|
31
|
-
- rvm: 2.4.
|
33
|
+
- rvm: 2.4.10
|
32
34
|
- rvm: ruby-head
|
33
35
|
- rvm: jruby-head
|
36
|
+
|
37
|
+
- env: GRAPE_VERSION=HEAD
|
data/CHANGELOG.md
CHANGED
@@ -9,6 +9,43 @@
|
|
9
9
|
* Your contribution here.
|
10
10
|
|
11
11
|
|
12
|
+
### 1.2.0 (July 1, 2020)
|
13
|
+
|
14
|
+
#### Features
|
15
|
+
|
16
|
+
* [#794](https://github.com/ruby-grape/grape-swagger/pull/794): Allow `entity_name` to be inherited, fixes issue #659 - [@urkle](https://github.com/urkle).
|
17
|
+
* [#793](https://github.com/ruby-grape/grape-swagger/pull/793): Features/inheritance and discriminator - [@MaximeRDY](https://github.com/MaximeRDY).
|
18
|
+
|
19
|
+
#### Fixes
|
20
|
+
|
21
|
+
* [#798](https://github.com/ruby-grape/grape-swagger/pull/798): Modify full entity name separator - [@GarrettB71](https://github.com/GarrettB71).
|
22
|
+
* [#796](https://github.com/ruby-grape/grape-swagger/pull/796): Support grape 1.4.0 - [@thedanielhanke](https://github.com/thedanielhanke).
|
23
|
+
|
24
|
+
|
25
|
+
### 1.1.0 (April 20, 2020)
|
26
|
+
|
27
|
+
#### Features
|
28
|
+
|
29
|
+
* [#785](https://github.com/ruby-grape/grape-swagger/pull/785): Add extensions for params - [@MaximeRDY](https://github.com/MaximeRDY).
|
30
|
+
* [#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).
|
31
|
+
* [#786](https://github.com/ruby-grape/grape-swagger/pull/786): Use full entity name as a default - [@mrexox](https://github.com/mrexox).
|
32
|
+
|
33
|
+
|
34
|
+
### 1.0.0 (February 10, 2020)
|
35
|
+
|
36
|
+
#### Features
|
37
|
+
|
38
|
+
* [#777](https://github.com/ruby-grape/grape-swagger/pull/777): Make usage of grape >= 1.3, rack >= 2.1 - [@LeFnord](https://github.com/LeFnord).
|
39
|
+
* [#775](https://github.com/ruby-grape/grape-swagger/pull/775): Add in token_owner support to param hidden procs - [@urkle](https://github.com/urkle).
|
40
|
+
|
41
|
+
|
42
|
+
### 0.34.2 (January 20, 2020)
|
43
|
+
|
44
|
+
#### Fixes
|
45
|
+
|
46
|
+
* [#773](https://github.com/ruby-grape/grape-swagger/pull/773): Freeze rack version to 2.0.8 - [@LeFnord](https://github.com/LeFnord).
|
47
|
+
|
48
|
+
|
12
49
|
### 0.34.0 (January 11, 2020)
|
13
50
|
|
14
51
|
#### Features
|
@@ -34,10 +71,6 @@
|
|
34
71
|
* [#743](https://github.com/ruby-grape/grape-swagger/pull/743): CI: use 2.4.6, 2.5.5 - [@olleolleolle](https://github.com/olleolleolle).
|
35
72
|
* [#737](https://github.com/ruby-grape/grape-swagger/pull/737): Add swagger endpoint guard to both doc endpoints - [@urkle](https://github.com/urkle).
|
36
73
|
|
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
74
|
|
42
75
|
### 0.32.1 (December 7, 2018)
|
43
76
|
|
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.3.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.2'
|
|
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.85', 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,14 +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 |
|
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 |
|
54
56
|
|
55
57
|
|
56
58
|
## Swagger-Spec <a name="swagger-spec"></a>
|
@@ -742,9 +744,12 @@ end
|
|
742
744
|
Exclude single optional parameter from the documentation
|
743
745
|
|
744
746
|
```ruby
|
747
|
+
not_admins = lambda { |token_owner = nil| token_owner.nil? || !token_owner.admin? }
|
748
|
+
|
745
749
|
params do
|
746
750
|
optional :one, documentation: { hidden: true }
|
747
|
-
optional :two, documentation: { hidden: -> { true } }
|
751
|
+
optional :two, documentation: { hidden: -> { |t=nil| true } }
|
752
|
+
optional :three, documentation: { hidden: not_admins }
|
748
753
|
end
|
749
754
|
post :act do
|
750
755
|
...
|
@@ -1079,6 +1084,20 @@ or, for more definitions:
|
|
1079
1084
|
route_setting :x_def, [{ for: 422, other: 'stuff' }, { for: 200, some: 'stuff' }]
|
1080
1085
|
```
|
1081
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
|
+
```
|
1082
1101
|
|
1083
1102
|
#### Response examples documentation <a name="response-examples"></a>
|
1084
1103
|
|
@@ -1362,6 +1381,94 @@ module API
|
|
1362
1381
|
end
|
1363
1382
|
```
|
1364
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
|
+
|
1365
1472
|
|
1366
1473
|
|
1367
1474
|
## Securing the Swagger UI <a name="oauth"></a>
|
@@ -1481,13 +1588,19 @@ end
|
|
1481
1588
|
|
1482
1589
|
## Rake Tasks <a name="rake"></a>
|
1483
1590
|
|
1484
|
-
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.
|
1485
1592
|
|
1486
1593
|
```ruby
|
1487
1594
|
require 'grape-swagger/rake/oapi_tasks'
|
1488
1595
|
GrapeSwagger::Rake::OapiTasks.new(::Api::Base)
|
1489
1596
|
```
|
1490
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
|
+
|
1491
1604
|
#### OpenApi/Swagger Documentation
|
1492
1605
|
|
1493
1606
|
```
|
data/UPGRADING.md
CHANGED
@@ -1,5 +1,35 @@
|
|
1
1
|
## Upgrading Grape-swagger
|
2
2
|
|
3
|
+
### Upgrading to >= 1.2.0
|
4
|
+
|
5
|
+
- The entity_name class method is now called on parent classes for inherited entities. Now you can do this
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
module Some::Long::Module
|
9
|
+
class Base < Grape::Entity
|
10
|
+
# ... other shared logic
|
11
|
+
def self.entity_name
|
12
|
+
"V2::#{self.to_s.demodulize}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def MyEntity < Base
|
17
|
+
# ....
|
18
|
+
end
|
19
|
+
|
20
|
+
def OtherEntity < Base
|
21
|
+
# revert back to the default behavior by hiding the method
|
22
|
+
private_class_method :entity_name
|
23
|
+
end
|
24
|
+
end
|
25
|
+
```
|
26
|
+
|
27
|
+
- Full class name is modified to use `_` separator (e.g. `A_B_C` instead of `A::B::C`).
|
28
|
+
|
29
|
+
### Upgrading to >= 1.1.0
|
30
|
+
|
31
|
+
Full class name is used for referencing entity by default (e.g. `A::B::C` instead of just `C`). `Entity` and `Entities` suffixes and prefixes are omitted (e.g. if entity name is `Entities::SomeScope::MyFavourite::Entity` only `SomeScope::MyFavourite` will be used).
|
32
|
+
|
3
33
|
### Upgrading to >= 0.26.1
|
4
34
|
|
5
35
|
The format can now be specified,
|