grape-swagger 0.34.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +86 -0
  3. data/.travis.yml +19 -12
  4. data/CHANGELOG.md +47 -4
  5. data/Gemfile +9 -3
  6. data/README.md +125 -12
  7. data/UPGRADING.md +34 -0
  8. data/grape-swagger.gemspec +1 -2
  9. data/lib/grape-swagger.rb +2 -2
  10. data/lib/grape-swagger/doc_methods.rb +65 -62
  11. data/lib/grape-swagger/doc_methods/build_model_definition.rb +53 -2
  12. data/lib/grape-swagger/doc_methods/data_type.rb +6 -6
  13. data/lib/grape-swagger/doc_methods/format_data.rb +2 -2
  14. data/lib/grape-swagger/doc_methods/operation_id.rb +2 -2
  15. data/lib/grape-swagger/doc_methods/parse_params.rb +19 -4
  16. data/lib/grape-swagger/endpoint.rb +37 -26
  17. data/lib/grape-swagger/endpoint/params_parser.rb +12 -5
  18. data/lib/grape-swagger/rake/oapi_tasks.rb +12 -2
  19. data/lib/grape-swagger/version.rb +1 -1
  20. data/spec/issues/427_entity_as_string_spec.rb +1 -1
  21. data/spec/issues/430_entity_definitions_spec.rb +7 -5
  22. data/spec/issues/784_extensions_on_params_spec.rb +38 -0
  23. data/spec/lib/data_type_spec.rb +14 -2
  24. data/spec/lib/endpoint/params_parser_spec.rb +2 -1
  25. data/spec/lib/endpoint_spec.rb +1 -1
  26. data/spec/lib/move_params_spec.rb +2 -2
  27. data/spec/lib/oapi_tasks_spec.rb +15 -5
  28. data/spec/support/empty_model_parser.rb +1 -2
  29. data/spec/support/mock_parser.rb +1 -2
  30. data/spec/support/model_parsers/entity_parser.rb +9 -9
  31. data/spec/support/model_parsers/mock_parser.rb +8 -8
  32. data/spec/support/model_parsers/representable_parser.rb +9 -9
  33. data/spec/swagger_v2/api_swagger_v2_hide_param_spec.rb +14 -3
  34. data/spec/swagger_v2/api_swagger_v2_param_type_body_spec.rb +2 -2
  35. data/spec/swagger_v2/api_swagger_v2_response_with_models_spec.rb +53 -0
  36. data/spec/swagger_v2/boolean_params_spec.rb +1 -1
  37. data/spec/swagger_v2/inheritance_and_discriminator_spec.rb +56 -0
  38. data/spec/swagger_v2/reference_entity_spec.rb +74 -29
  39. data/spec/swagger_v2/security_requirement_spec.rb +2 -2
  40. metadata +17 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1adc600f72fbf0b270ca597d538fc692ab1b06d96aec051dd5aac93b0d9541e4
4
- data.tar.gz: 90b38eef4b8736e686c57b9ae3a0a047c3be752076a3c51fe81a2b2ace4534d7
3
+ metadata.gz: 7a3f65f49a31d6affe69a657daff3867582070436163992acb47f1166dde1cc6
4
+ data.tar.gz: da9f13e2efd7e2b23dc92eea5b9deeaf4d9b8a860b13bae2b7f928b31d996be3
5
5
  SHA512:
6
- metadata.gz: becc52b89b55eaf20b8e17c39b2a2d53592fbe6a92feb1c50d6f1b80d4ee0b14edb16dbcb5e6168a5d7830b80f8d412af19c78fc0a645aabd1ca3570ed3e34fb
7
- data.tar.gz: c6da9f8e4818368d67f525898d69b9d15fe46d429cb4223fb44ff1f4d2c52aefff99f8487cf8ecdf702153d1a3d7dbaed93756a0967bbdadd871fdc26f8af229
6
+ metadata.gz: 0d51d5cde5ff558fefcbf8b4503d290bc535c48f22d1ee3c2662ad406c548b7ef72d196b36598b2d3ea68d6ebef8e6ce43e3dec8dab6f371df9d12aaadd34567
7
+ data.tar.gz: b22301456da8cd150767fd614434bfad161959eb0836b028b4ff8d15893fd128c53513e87ab8180a6442b8fda9ec41a6e6648b67cb32a46b692d2b117e229ec1
@@ -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,6 +23,28 @@ Layout/LineLength:
17
23
  Exclude:
18
24
  - spec/**/*
19
25
 
26
+ Layout/SpaceAroundMethodCallOperator:
27
+ Enabled: true
28
+
29
+ # Lint stuff
30
+ #
31
+ Lint/DeprecatedOpenSSLConstant:
32
+ Enabled: true
33
+
34
+ Lint/DuplicateElsifCondition:
35
+ Enabled: true
36
+
37
+ Lint/MixedRegexpCaptureTypes:
38
+ Enabled: true
39
+
40
+ Lint/RaiseException:
41
+ Enabled: true
42
+
43
+ Lint/StructNewOverride:
44
+ Enabled: true
45
+
46
+ # Metrics stuff
47
+ #
20
48
  Metrics/BlockLength:
21
49
  Exclude:
22
50
  - spec/**/*
@@ -24,12 +52,70 @@ Metrics/BlockLength:
24
52
  Metrics/ClassLength:
25
53
  Max: 300
26
54
 
55
+ Metrics/CyclomaticComplexity:
56
+ Max: 17
57
+
27
58
  Metrics/MethodLength:
28
59
  Exclude:
29
60
  - spec/**/*
30
61
 
62
+ # Naming stuff
63
+ #
31
64
  Naming:
32
65
  Enabled: false
33
66
 
67
+ # Style stuff
68
+ #
69
+ Style/AccessorGrouping:
70
+ Enabled: true
71
+
72
+ Style/ArrayCoercion:
73
+ Enabled: true
74
+
75
+ Style/BisectedAttrAccessor:
76
+ Enabled: true
77
+
78
+ Style/CaseLikeIf:
79
+ Enabled: true
80
+
81
+ Style/ExponentialNotation:
82
+ Enabled: true
83
+
84
+ Style/ExplicitBlockArgument:
85
+ Enabled: false
86
+
87
+ Style/HashAsLastArrayItem:
88
+ Enabled: true
89
+
90
+ Style/HashEachMethods:
91
+ Enabled: true
92
+
93
+ Style/HashLikeCase:
94
+ Enabled: true
95
+
96
+ Style/HashTransformKeys:
97
+ Enabled: true
98
+
99
+ Style/HashTransformValues:
100
+ Enabled: true
101
+
34
102
  Style/RegexpLiteral:
35
103
  Enabled: false
104
+
105
+ Style/RedundantAssignment:
106
+ Enabled: true
107
+
108
+ Style/RedundantFetchBlock:
109
+ Enabled: true
110
+
111
+ Style/RedundantFileExtensionInRequire:
112
+ Enabled: true
113
+
114
+ Style/RedundantRegexpCharacterClass:
115
+ Enabled: true
116
+
117
+ Style/RedundantRegexpEscape:
118
+ Enabled: true
119
+
120
+ Style/SlicingWithRange:
121
+ Enabled: false
@@ -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,32 @@ after_success:
7
9
  - bundle exec danger
8
10
 
9
11
  rvm:
10
- - 2.5.7
11
- - 2.6.5
12
- - 2.7.0
12
+ - 2.5.8
13
+ - 2.6.6
14
+ - 2.7.1
13
15
  env:
14
- - GRAPE_VERSION=1.2.5 MODEL_PARSER=grape-swagger-entity
15
- - GRAPE_VERSION=1.2.5 MODEL_PARSER=grape-swagger-representable
16
- - GRAPE_VERSION=1.0.3
17
- - GRAPE_VERSION=1.2.5
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
- matrix:
22
+ jobs:
20
23
  fast_finish: true
21
24
 
22
25
  include:
23
- - rvm: 2.4.9
24
- env: GRAPE_VERSION=1.2.5
26
+ - rvm: 2.4.10
27
+ env:
25
28
  - rvm: ruby-head
26
- env: GRAPE_VERSION=HEAD
29
+ env:
27
30
  - rvm: jruby-head
28
31
  env:
32
+ - rvm: truffleruby-head
33
+ env:
34
+ script: bundle exec rake spec
29
35
 
30
36
  allow_failures:
31
- - rvm: 2.4.9
37
+ - rvm: 2.4.10
32
38
  - rvm: ruby-head
33
39
  - rvm: jruby-head
40
+ - rvm: truffleruby-head
@@ -6,6 +6,53 @@
6
6
 
7
7
  #### Fixes
8
8
 
9
+ * Your contribution here.
10
+
11
+
12
+ ### 1.3.0 (September 3, 2020)
13
+
14
+ #### Features
15
+
16
+ * [#804](https://github.com/ruby-grape/grape-swagger/pull/804): Don't overwrite model description with the route description - [@Bhacaz](https://github.com/Bhacaz).
17
+
18
+
19
+ ### 1.2.1 (July 15, 2020)
20
+
21
+ #### Fixes
22
+
23
+ * [#801](https://github.com/ruby-grape/grape-swagger/pull/801): Fixes behaviour after grape upgrade to 1.4.0 - [@LeFnord](https://github.com/LeFnord).
24
+
25
+
26
+ ### 1.2.0 (July 1, 2020)
27
+
28
+ #### Features
29
+
30
+ * [#794](https://github.com/ruby-grape/grape-swagger/pull/794): Allow `entity_name` to be inherited, fixes issue #659 - [@urkle](https://github.com/urkle).
31
+ * [#793](https://github.com/ruby-grape/grape-swagger/pull/793): Features/inheritance and discriminator - [@MaximeRDY](https://github.com/MaximeRDY).
32
+
33
+ #### Fixes
34
+
35
+ * [#798](https://github.com/ruby-grape/grape-swagger/pull/798): Modify full entity name separator - [@GarrettB71](https://github.com/GarrettB71).
36
+ * [#796](https://github.com/ruby-grape/grape-swagger/pull/796): Support grape 1.4.0 - [@thedanielhanke](https://github.com/thedanielhanke).
37
+
38
+
39
+ ### 1.1.0 (April 20, 2020)
40
+
41
+ #### Features
42
+
43
+ * [#785](https://github.com/ruby-grape/grape-swagger/pull/785): Add extensions for params - [@MaximeRDY](https://github.com/MaximeRDY).
44
+ * [#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).
45
+ * [#786](https://github.com/ruby-grape/grape-swagger/pull/786): Use full entity name as a default - [@mrexox](https://github.com/mrexox).
46
+
47
+
48
+ ### 1.0.0 (February 10, 2020)
49
+
50
+ #### Features
51
+
52
+ * [#777](https://github.com/ruby-grape/grape-swagger/pull/777): Make usage of grape >= 1.3, rack >= 2.1 - [@LeFnord](https://github.com/LeFnord).
53
+ * [#775](https://github.com/ruby-grape/grape-swagger/pull/775): Add in token_owner support to param hidden procs - [@urkle](https://github.com/urkle).
54
+
55
+
9
56
  ### 0.34.2 (January 20, 2020)
10
57
 
11
58
  #### Fixes
@@ -38,10 +85,6 @@
38
85
  * [#743](https://github.com/ruby-grape/grape-swagger/pull/743): CI: use 2.4.6, 2.5.5 - [@olleolleolle](https://github.com/olleolleolle).
39
86
  * [#737](https://github.com/ruby-grape/grape-swagger/pull/737): Add swagger endpoint guard to both doc endpoints - [@urkle](https://github.com/urkle).
40
87
 
41
- #### Changes
42
-
43
- * [#749](https://github.com/ruby-grape/grape-swagger/pull/749) Drop support for Ruby 2.3 and below - [@LeFnord](https://github.com/LeFnord).
44
-
45
88
 
46
89
  ### 0.32.1 (December 7, 2018)
47
90
 
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.3.0'
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,23 +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
 
24
+ gem 'rack', '~> 2.2'
23
25
  gem 'rack-cors'
24
26
  gem 'rack-test'
25
27
  gem 'rake'
26
28
  gem 'rdoc'
27
29
  gem 'rspec', '~> 3.9'
28
- gem 'rubocop', '~> 0.75', require: false
30
+ gem 'rubocop', '~> 0.90', require: false
29
31
  end
30
32
 
31
33
  group :test do
32
34
  gem 'coveralls_reborn', require: false
33
- gem 'grape-swagger-entity'
35
+
34
36
  gem 'ruby-grape-danger', '~> 0.1.1', require: false
35
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
36
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 | 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 |
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
  ...
@@ -855,10 +859,11 @@ get '/thing', failure: [
855
859
  end
856
860
  ```
857
861
 
858
- By adding a `model` key, e.g. this would be taken.
862
+ By adding a `model` key, e.g. this would be taken. Setting an empty string will act like an empty body.
859
863
  ```ruby
860
864
  get '/thing', failure: [
861
865
  { code: 400, message: 'General error' },
866
+ { code: 403, message: 'Forbidden error', model: '' },
862
867
  { code: 422, message: 'Invalid parameter entry', model: Entities::ApiError }
863
868
  ] do
864
869
  # ...
@@ -1080,6 +1085,20 @@ or, for more definitions:
1080
1085
  route_setting :x_def, [{ for: 422, other: 'stuff' }, { for: 200, some: 'stuff' }]
1081
1086
  ```
1082
1087
 
1088
+ - `params` extension, add a `x` key to the `documentation` hash :
1089
+ ```ruby
1090
+ requires :foo, type: String, documentation: { x: { some: 'stuff' } }
1091
+ ```
1092
+ this would generate:
1093
+ ```json
1094
+ {
1095
+ "in": "formData",
1096
+ "name": "foo",
1097
+ "type": "string",
1098
+ "required": true,
1099
+ "x-some": "stuff"
1100
+ }
1101
+ ```
1083
1102
 
1084
1103
  #### Response examples documentation <a name="response-examples"></a>
1085
1104
 
@@ -1363,6 +1382,94 @@ module API
1363
1382
  end
1364
1383
  ```
1365
1384
 
1385
+ #### Inheritance with allOf and discriminator
1386
+ ```ruby
1387
+ module Entities
1388
+ class Pet < Grape::Entity
1389
+ expose :type, documentation: {
1390
+ type: 'string',
1391
+ is_discriminator: true,
1392
+ required: true
1393
+ }
1394
+ expose :name, documentation: {
1395
+ type: 'string',
1396
+ required: true
1397
+ }
1398
+ end
1399
+
1400
+ class Cat < Pet
1401
+ expose :huntingSkill, documentation: {
1402
+ type: 'string',
1403
+ description: 'The measured skill for hunting',
1404
+ default: 'lazy',
1405
+ values: %w[
1406
+ clueless
1407
+ lazy
1408
+ adventurous
1409
+ aggressive
1410
+ ]
1411
+ }
1412
+ end
1413
+ end
1414
+ ```
1415
+
1416
+ Should generate this definitions:
1417
+ ```JSON
1418
+ {
1419
+ "definitions": {
1420
+ "Pet": {
1421
+ "type": "object",
1422
+ "discriminator": "petType",
1423
+ "properties": {
1424
+ "name": {
1425
+ "type": "string"
1426
+ },
1427
+ "petType": {
1428
+ "type": "string"
1429
+ }
1430
+ },
1431
+ "required": [
1432
+ "name",
1433
+ "petType"
1434
+ ]
1435
+ },
1436
+ "Cat": {
1437
+ "description": "A representation of a cat",
1438
+ "allOf": [
1439
+ {
1440
+ "$ref": "#/definitions/Pet"
1441
+ },
1442
+ {
1443
+ "type": "object",
1444
+ "properties": {
1445
+ "huntingSkill": {
1446
+ "type": "string",
1447
+ "description": "The measured skill for hunting",
1448
+ "default": "lazy",
1449
+ "enum": [
1450
+ "clueless",
1451
+ "lazy",
1452
+ "adventurous",
1453
+ "aggressive"
1454
+ ]
1455
+ },
1456
+ "petType": {
1457
+ "type": "string",
1458
+ "enum": ["Cat"]
1459
+ }
1460
+ },
1461
+ "required": [
1462
+ "huntingSkill",
1463
+ "petType"
1464
+ ]
1465
+ }
1466
+ ]
1467
+ }
1468
+ }
1469
+ }
1470
+ ```
1471
+
1472
+
1366
1473
 
1367
1474
 
1368
1475
  ## Securing the Swagger UI <a name="oauth"></a>
@@ -1482,13 +1589,19 @@ end
1482
1589
 
1483
1590
  ## Rake Tasks <a name="rake"></a>
1484
1591
 
1485
- Add these lines to your Rakefile, and initialize the Task class with your Api class – be sure your Api class is available.
1592
+ Add these lines to your Rakefile, and initialize the Task class with your Api class.
1486
1593
 
1487
1594
  ```ruby
1488
1595
  require 'grape-swagger/rake/oapi_tasks'
1489
1596
  GrapeSwagger::Rake::OapiTasks.new(::Api::Base)
1490
1597
  ```
1491
1598
 
1599
+ You may initialize with the class name as a string if the class is not yet loaded at the time Rakefile is parsed:
1600
+ ```ruby
1601
+ require 'grape-swagger/rake/oapi_tasks'
1602
+ GrapeSwagger::Rake::OapiTasks.new('::Api::Base')
1603
+ ```
1604
+
1492
1605
  #### OpenApi/Swagger Documentation
1493
1606
 
1494
1607
  ```