apipie-rails 1.1.0 → 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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +12 -48
  3. data/.github/workflows/rubocop-challenger.yml +2 -2
  4. data/.github/workflows/rubocop.yml +2 -4
  5. data/.rubocop.yml +39 -38
  6. data/.rubocop_todo.yml +55 -65
  7. data/.vscode/settings.json +3 -0
  8. data/CHANGELOG.md +19 -2
  9. data/Gemfile +20 -0
  10. data/README.rst +12 -9
  11. data/app/controllers/apipie/apipies_controller.rb +3 -17
  12. data/gemfiles/Gemfile.tools +9 -0
  13. data/lib/apipie/application.rb +18 -7
  14. data/lib/apipie/dsl_definition.rb +6 -5
  15. data/lib/apipie/errors.rb +14 -0
  16. data/lib/apipie/extractor/collector.rb +1 -1
  17. data/lib/apipie/extractor/recorder.rb +1 -1
  18. data/lib/apipie/extractor.rb +6 -3
  19. data/lib/apipie/generator/swagger/config.rb +3 -1
  20. data/lib/apipie/generator/swagger/method_description/api_schema_service.rb +6 -3
  21. data/lib/apipie/generator/swagger/warning.rb +1 -1
  22. data/lib/apipie/resource_description.rb +28 -3
  23. data/lib/apipie/validator.rb +20 -6
  24. data/lib/apipie/version.rb +1 -1
  25. data/spec/controllers/api/v2/architectures_controller_spec.rb +10 -3
  26. data/spec/controllers/api/v2/empty_middle_controller_spec.rb +23 -0
  27. data/spec/controllers/api/v2/nested/resources_controller_spec.rb +16 -0
  28. data/spec/controllers/api/v2/sub/footguns_controller_spec.rb +19 -0
  29. data/spec/controllers/users_controller_spec.rb +10 -0
  30. data/spec/dummy/app/controllers/api/v2/base_controller.rb +6 -0
  31. data/spec/dummy/app/controllers/api/v2/empty_middle_controller.rb +14 -0
  32. data/spec/dummy/app/controllers/api/v2/nested/resources_controller.rb +2 -2
  33. data/spec/dummy/app/controllers/api/v2/sub/footguns_controller.rb +30 -0
  34. data/spec/dummy/app/controllers/users_controller.rb +6 -0
  35. data/spec/dummy/config/routes.rb +1 -0
  36. data/spec/lib/apipie/apipies_controller_spec.rb +63 -19
  37. data/spec/lib/apipie/extractor/collector_spec.rb +57 -0
  38. data/spec/lib/apipie/generator/swagger/method_description/api_schema_service_spec.rb +13 -0
  39. data/spec/test_engine/memes_controller_spec.rb +1 -1
  40. metadata +11 -9
  41. data/gemfiles/Gemfile.rails50 +0 -10
  42. data/gemfiles/Gemfile.rails51 +0 -10
  43. data/gemfiles/Gemfile.rails52 +0 -10
  44. data/gemfiles/Gemfile.rails60 +0 -17
  45. data/gemfiles/Gemfile.rails61 +0 -17
  46. data/gemfiles/Gemfile.rails70 +0 -17
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config --exclude-limit 180`
3
- # on 2023-04-14 04:21:53 UTC using RuboCop version 1.44.1.
3
+ # on 2023-06-09 05:29:05 UTC using RuboCop version 1.52.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -14,10 +14,9 @@ Gemspec/DeprecatedAttributeAssignment:
14
14
  Exclude:
15
15
  - 'apipie-rails.gemspec'
16
16
 
17
- # Offense count: 9
17
+ # Offense count: 11
18
18
  # Configuration parameters: EnforcedStyle, AllowedGems, Include.
19
19
  # SupportedStyles: Gemfile, gems.rb, gemspec
20
- # AllowedGems: bundler
21
20
  # Include: **/*.gemspec, **/Gemfile, **/gems.rb
22
21
  Gemspec/DevelopmentDependencies:
23
22
  Exclude:
@@ -108,7 +107,7 @@ Layout/DotPosition:
108
107
  - 'spec/lib/apipie/generator/swagger/operation_id_spec.rb'
109
108
  - 'spec/lib/apipie/generator/swagger/param_description/type_spec.rb'
110
109
 
111
- # Offense count: 7
110
+ # Offense count: 8
112
111
  # This cop supports safe autocorrection (--autocorrect).
113
112
  Layout/ElseAlignment:
114
113
  Exclude:
@@ -119,7 +118,7 @@ Layout/ElseAlignment:
119
118
  - 'lib/apipie/param_description.rb'
120
119
  - 'lib/apipie/resource_description.rb'
121
120
 
122
- # Offense count: 60
121
+ # Offense count: 58
123
122
  # This cop supports safe autocorrection (--autocorrect).
124
123
  Layout/EmptyLineAfterGuardClause:
125
124
  Exclude:
@@ -155,7 +154,7 @@ Layout/EmptyLineBetweenDefs:
155
154
  - 'spec/dummy/app/controllers/pets_using_auto_views_controller.rb'
156
155
  - 'spec/dummy/app/controllers/pets_using_self_describing_classes_controller.rb'
157
156
 
158
- # Offense count: 57
157
+ # Offense count: 56
159
158
  # This cop supports safe autocorrection (--autocorrect).
160
159
  Layout/EmptyLines:
161
160
  Exclude:
@@ -193,7 +192,7 @@ Layout/EmptyLinesAroundAttributeAccessor:
193
192
  Exclude:
194
193
  - 'lib/apipie/configuration.rb'
195
194
 
196
- # Offense count: 93
195
+ # Offense count: 92
197
196
  # This cop supports safe autocorrection (--autocorrect).
198
197
  # Configuration parameters: EnforcedStyle.
199
198
  # SupportedStyles: empty_lines, no_empty_lines
@@ -202,7 +201,6 @@ Layout/EmptyLinesAroundBlockBody:
202
201
  - 'app/controllers/apipie/apipies_controller.rb'
203
202
  - 'lib/tasks/apipie.rake'
204
203
  - 'spec/controllers/api/v1/architectures_controller_spec.rb'
205
- - 'spec/controllers/api/v2/architectures_controller_spec.rb'
206
204
  - 'spec/controllers/concerns_controller_spec.rb'
207
205
  - 'spec/controllers/extended_controller_spec.rb'
208
206
  - 'spec/controllers/included_param_group_controller_spec.rb'
@@ -288,7 +286,7 @@ Layout/EmptyLinesAroundModuleBody:
288
286
  - 'lib/apipie/tag_list_description.rb'
289
287
  - 'lib/apipie/validator.rb'
290
288
 
291
- # Offense count: 7
289
+ # Offense count: 8
292
290
  # This cop supports safe autocorrection (--autocorrect).
293
291
  # Configuration parameters: EnforcedStyleAlignWith, Severity.
294
292
  # SupportedStylesAlignWith: keyword, variable, start_of_line
@@ -374,9 +372,9 @@ Layout/IndentationConsistency:
374
372
  - 'lib/apipie/generator/swagger/param_description/name.rb'
375
373
  - 'spec/lib/apipie/param_group_spec.rb'
376
374
 
377
- # Offense count: 10
375
+ # Offense count: 14
378
376
  # This cop supports safe autocorrection (--autocorrect).
379
- # Configuration parameters: Width, AllowedPatterns, IgnoredPatterns.
377
+ # Configuration parameters: Width, AllowedPatterns.
380
378
  Layout/IndentationWidth:
381
379
  Exclude:
382
380
  - 'app/controllers/apipie/apipies_controller.rb'
@@ -440,13 +438,12 @@ Layout/MultilineMethodCallIndentation:
440
438
  - 'lib/apipie/generator/swagger/param_description/composite.rb'
441
439
  - 'lib/apipie/generator/swagger/param_description/type.rb'
442
440
 
443
- # Offense count: 5
441
+ # Offense count: 4
444
442
  # This cop supports safe autocorrection (--autocorrect).
445
443
  # Configuration parameters: EnforcedStyle, IndentationWidth.
446
444
  # SupportedStyles: aligned, indented
447
445
  Layout/MultilineOperationIndentation:
448
446
  Exclude:
449
- - 'lib/apipie/application.rb'
450
447
  - 'lib/apipie/generator/swagger/param_description/composite.rb'
451
448
  - 'lib/apipie/param_description.rb'
452
449
  - 'lib/tasks/apipie.rake'
@@ -622,18 +619,17 @@ Layout/TrailingEmptyLines:
622
619
  - 'spec/lib/apipie/generator/swagger/param_description_spec.rb'
623
620
  - 'spec/lib/apipie/param_group_spec.rb'
624
621
 
625
- # Offense count: 16
622
+ # Offense count: 15
626
623
  # This cop supports safe autocorrection (--autocorrect).
627
624
  # Configuration parameters: AllowInHeredoc.
628
625
  Layout/TrailingWhitespace:
629
626
  Exclude:
630
627
  - 'lib/apipie/error_description.rb'
631
- - 'spec/dummy/app/controllers/api/v2/nested/resources_controller.rb'
632
628
  - 'spec/dummy/app/controllers/application_controller.rb'
633
629
  - 'spec/dummy/app/controllers/twitter_example_controller.rb'
634
630
 
635
631
  # Offense count: 10
636
- # This cop supports safe autocorrection (--autocorrect).
632
+ # This cop supports unsafe autocorrection (--autocorrect-all).
637
633
  # Configuration parameters: AllowSafeAssignment.
638
634
  Lint/AssignmentInCondition:
639
635
  Exclude:
@@ -749,12 +745,11 @@ Lint/UnusedBlockArgument:
749
745
  - 'spec/lib/swagger/swagger_dsl_spec.rb'
750
746
  - 'spec/spec_helper.rb'
751
747
 
752
- # Offense count: 26
748
+ # Offense count: 24
753
749
  # This cop supports safe autocorrection (--autocorrect).
754
750
  # Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods.
755
751
  Lint/UnusedMethodArgument:
756
752
  Exclude:
757
- - 'lib/apipie/application.rb'
758
753
  - 'lib/apipie/dsl_definition.rb'
759
754
  - 'lib/apipie/response_description_adapter.rb'
760
755
  - 'lib/apipie/validator.rb'
@@ -762,6 +757,7 @@ Lint/UnusedMethodArgument:
762
757
  - 'spec/support/custom_bool_validator.rb'
763
758
 
764
759
  # Offense count: 5
760
+ # This cop supports unsafe autocorrection (--autocorrect-all).
765
761
  Lint/UselessAssignment:
766
762
  Exclude:
767
763
  - 'lib/apipie/application.rb'
@@ -776,35 +772,42 @@ Lint/UselessMethodDefinition:
776
772
  - 'spec/dummy/app/controllers/overridden_concerns_controller.rb'
777
773
 
778
774
  # Offense count: 3
775
+ # This cop supports safe autocorrection (--autocorrect).
779
776
  # Configuration parameters: CheckForMethodsWithNoSideEffects.
780
777
  Lint/Void:
781
778
  Exclude:
782
779
  - 'spec/controllers/users_controller_spec.rb'
783
780
 
784
781
  # Offense count: 58
785
- # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods, CountRepeatedAttributes.
782
+ # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
786
783
  Metrics/AbcSize:
787
784
  Max: 96
788
785
 
786
+ # Offense count: 1
787
+ # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
788
+ # AllowedMethods: refine
789
+ Metrics/BlockLength:
790
+ Max: 26
791
+
789
792
  # Offense count: 4
790
793
  # Configuration parameters: CountBlocks.
791
794
  Metrics/BlockNesting:
792
795
  Max: 4
793
796
 
794
- # Offense count: 25
795
- # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
797
+ # Offense count: 24
798
+ # Configuration parameters: AllowedMethods, AllowedPatterns.
796
799
  Metrics/CyclomaticComplexity:
797
800
  Max: 24
798
801
 
799
- # Offense count: 77
800
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, AllowedMethods, AllowedPatterns, IgnoredMethods.
802
+ # Offense count: 79
803
+ # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
801
804
  Metrics/MethodLength:
802
805
  Max: 58
803
806
 
804
807
  # Offense count: 1
805
808
  # Configuration parameters: CountComments, CountAsOne.
806
809
  Metrics/ModuleLength:
807
- Max: 119
810
+ Max: 101
808
811
 
809
812
  # Offense count: 4
810
813
  # Configuration parameters: CountKeywordArgs.
@@ -812,8 +815,8 @@ Metrics/ParameterLists:
812
815
  MaxOptionalParameters: 5
813
816
  Max: 6
814
817
 
815
- # Offense count: 21
816
- # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
818
+ # Offense count: 20
819
+ # Configuration parameters: AllowedMethods, AllowedPatterns.
817
820
  Metrics/PerceivedComplexity:
818
821
  Max: 25
819
822
 
@@ -840,15 +843,16 @@ Naming/HeredocDelimiterCase:
840
843
  Exclude:
841
844
  - 'spec/dummy/app/controllers/users_controller.rb'
842
845
 
843
- # Offense count: 6
846
+ # Offense count: 7
844
847
  # Configuration parameters: ForbiddenDelimiters.
845
- # ForbiddenDelimiters: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$))
848
+ # ForbiddenDelimiters: (?i-mx:(^|\s)(EO[A-Z]{1}|END)(\s|$))
846
849
  Naming/HeredocDelimiterNaming:
847
850
  Exclude:
848
851
  - 'spec/dummy/app/controllers/twitter_example_controller.rb'
849
852
  - 'spec/dummy/app/controllers/users_controller.rb'
850
853
 
851
854
  # Offense count: 3
855
+ # This cop supports unsafe autocorrection (--autocorrect-all).
852
856
  # Configuration parameters: EnforcedStyleForLeadingUnderscores.
853
857
  # SupportedStylesForLeadingUnderscores: disallowed, required, optional
854
858
  Naming/MemoizedInstanceVariableName:
@@ -880,7 +884,7 @@ Naming/PredicateName:
880
884
  # Offense count: 1
881
885
  # Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns.
882
886
  # SupportedStyles: snake_case, normalcase, non_integer
883
- # AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339
887
+ # AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339, x86_64
884
888
  Naming/VariableNumber:
885
889
  Exclude:
886
890
  - 'spec/dummy/app/controllers/users_controller.rb'
@@ -906,12 +910,6 @@ Performance/Detect:
906
910
  Exclude:
907
911
  - 'spec/lib/swagger/rake_swagger_spec.rb'
908
912
 
909
- # Offense count: 1
910
- # This cop supports unsafe autocorrection (--autocorrect-all).
911
- Performance/InefficientHashSearch:
912
- Exclude:
913
- - 'lib/apipie/generator/swagger/warning.rb'
914
-
915
913
  # Offense count: 1
916
914
  # This cop supports safe autocorrection (--autocorrect).
917
915
  Performance/RedundantBlockCall:
@@ -940,11 +938,10 @@ Performance/StringIdentifierArgument:
940
938
  - 'lib/apipie/extractor/writer.rb'
941
939
  - 'spec/controllers/users_controller_spec.rb'
942
940
 
943
- # Offense count: 6
941
+ # Offense count: 5
944
942
  # This cop supports safe autocorrection (--autocorrect).
945
943
  Performance/StringReplacement:
946
944
  Exclude:
947
- - 'app/controllers/apipie/apipies_controller.rb'
948
945
  - 'lib/apipie/application.rb'
949
946
  - 'lib/apipie/extractor/writer.rb'
950
947
  - 'lib/apipie/generator/swagger/operation_id.rb'
@@ -984,7 +981,7 @@ RSpec/BeforeAfterAll:
984
981
  Exclude:
985
982
  - 'spec/controllers/users_controller_spec.rb'
986
983
 
987
- # Offense count: 52
984
+ # Offense count: 53
988
985
  # Configuration parameters: Prefixes, AllowedPatterns.
989
986
  # Prefixes: when, with, without
990
987
  RSpec/ContextWording:
@@ -1012,14 +1009,13 @@ RSpec/DescribeClass:
1012
1009
  - 'spec/lib/swagger/rake_swagger_spec.rb'
1013
1010
  - 'spec/lib/swagger/swagger_dsl_spec.rb'
1014
1011
 
1015
- # Offense count: 76
1012
+ # Offense count: 75
1016
1013
  # This cop supports unsafe autocorrection (--autocorrect-all).
1017
1014
  # Configuration parameters: SkipBlocks, EnforcedStyle.
1018
1015
  # SupportedStyles: described_class, explicit
1019
1016
  RSpec/DescribedClass:
1020
1017
  Exclude:
1021
1018
  - 'spec/controllers/api/v1/architectures_controller_spec.rb'
1022
- - 'spec/controllers/api/v2/architectures_controller_spec.rb'
1023
1019
  - 'spec/controllers/api/v2/nested/resources_controller_spec.rb'
1024
1020
  - 'spec/controllers/included_param_group_controller_spec.rb'
1025
1021
  - 'spec/controllers/users_controller_spec.rb'
@@ -1070,7 +1066,6 @@ RSpec/ExampleLength:
1070
1066
  RSpec/ExampleWording:
1071
1067
  Exclude:
1072
1068
  - 'spec/controllers/api/v1/architectures_controller_spec.rb'
1073
- - 'spec/controllers/api/v2/architectures_controller_spec.rb'
1074
1069
  - 'spec/controllers/api/v2/nested/resources_controller_spec.rb'
1075
1070
  - 'spec/controllers/concerns_controller_spec.rb'
1076
1071
  - 'spec/controllers/extended_controller_spec.rb'
@@ -1153,18 +1148,17 @@ RSpec/MessageSpies:
1153
1148
  RSpec/MultipleExpectations:
1154
1149
  Max: 19
1155
1150
 
1156
- # Offense count: 154
1151
+ # Offense count: 156
1157
1152
  # Configuration parameters: AllowSubject.
1158
1153
  RSpec/MultipleMemoizedHelpers:
1159
1154
  Max: 15
1160
1155
 
1161
- # Offense count: 83
1156
+ # Offense count: 82
1162
1157
  # Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
1163
1158
  # SupportedStyles: always, named_only
1164
1159
  RSpec/NamedSubject:
1165
1160
  Exclude:
1166
1161
  - 'spec/controllers/api/v1/architectures_controller_spec.rb'
1167
- - 'spec/controllers/api/v2/architectures_controller_spec.rb'
1168
1162
  - 'spec/controllers/api/v2/nested/resources_controller_spec.rb'
1169
1163
  - 'spec/controllers/users_controller_spec.rb'
1170
1164
  - 'spec/lib/apipie/generator/swagger/param_description/builder_spec.rb'
@@ -1179,18 +1173,17 @@ RSpec/NamedSubject:
1179
1173
  - 'spec/lib/swagger/rake_swagger_spec.rb'
1180
1174
  - 'spec/lib/swagger/swagger_dsl_spec.rb'
1181
1175
 
1182
- # Offense count: 89
1176
+ # Offense count: 94
1183
1177
  # Configuration parameters: AllowedGroups.
1184
1178
  RSpec/NestedGroups:
1185
1179
  Max: 6
1186
1180
 
1187
- # Offense count: 2
1181
+ # Offense count: 1
1188
1182
  # Configuration parameters: AllowedPatterns.
1189
1183
  # AllowedPatterns: ^expect_, ^assert_
1190
1184
  RSpec/NoExpectationExample:
1191
1185
  Exclude:
1192
1186
  - 'spec/controllers/users_controller_spec.rb'
1193
- - 'spec/test_engine/memes_controller_spec.rb'
1194
1187
 
1195
1188
  # Offense count: 2
1196
1189
  # This cop supports safe autocorrection (--autocorrect).
@@ -1297,13 +1290,12 @@ Rails/HttpStatus:
1297
1290
  - 'spec/dummy/app/controllers/pets_controller.rb'
1298
1291
  - 'spec/dummy/app/controllers/users_controller.rb'
1299
1292
 
1300
- # Offense count: 4
1293
+ # Offense count: 3
1301
1294
  # This cop supports unsafe autocorrection (--autocorrect-all).
1302
1295
  Rails/NegateInclude:
1303
1296
  Exclude:
1304
1297
  - 'lib/apipie/extractor/collector.rb'
1305
1298
  - 'lib/apipie/extractor/writer.rb'
1306
- - 'lib/apipie/generator/swagger/warning.rb'
1307
1299
  - 'spec/spec_helper.rb'
1308
1300
 
1309
1301
  # Offense count: 7
@@ -1322,7 +1314,7 @@ Rails/OutputSafety:
1322
1314
  - 'lib/apipie/helpers.rb'
1323
1315
 
1324
1316
  # Offense count: 3
1325
- # This cop supports safe autocorrection (--autocorrect).
1317
+ # This cop supports unsafe autocorrection (--autocorrect-all).
1326
1318
  Rails/Pluck:
1327
1319
  Exclude:
1328
1320
  - 'lib/apipie/extractor/writer.rb'
@@ -1384,9 +1376,9 @@ Style/AndOr:
1384
1376
  Exclude:
1385
1377
  - 'lib/apipie/param_description.rb'
1386
1378
 
1387
- # Offense count: 17
1379
+ # Offense count: 18
1388
1380
  # This cop supports safe autocorrection (--autocorrect).
1389
- # Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, AllowedMethods, AllowedPatterns, IgnoredMethods, AllowBracesOnProceduralOneLiners, BracesRequiredMethods.
1381
+ # Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, AllowedMethods, AllowedPatterns, AllowBracesOnProceduralOneLiners, BracesRequiredMethods.
1390
1382
  # SupportedStyles: line_count_based, semantic, braces_for_chaining, always_braces
1391
1383
  # ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object
1392
1384
  # FunctionalMethods: let, let!, subject, watch
@@ -1463,7 +1455,7 @@ Style/ClassCheck:
1463
1455
 
1464
1456
  # Offense count: 2
1465
1457
  # This cop supports safe autocorrection (--autocorrect).
1466
- # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
1458
+ # Configuration parameters: AllowedMethods, AllowedPatterns.
1467
1459
  # AllowedMethods: ==, equal?, eql?
1468
1460
  Style/ClassEqualityComparison:
1469
1461
  Exclude:
@@ -1497,13 +1489,12 @@ Style/CommentedKeyword:
1497
1489
  - 'lib/apipie/dsl_definition.rb'
1498
1490
  - 'lib/apipie/extractor/recorder.rb'
1499
1491
 
1500
- # Offense count: 9
1492
+ # Offense count: 8
1501
1493
  # This cop supports safe autocorrection (--autocorrect).
1502
1494
  # Configuration parameters: EnforcedStyle, SingleLineConditionsOnly, IncludeTernaryExpressions.
1503
1495
  # SupportedStyles: assign_to_condition, assign_inside_condition
1504
1496
  Style/ConditionalAssignment:
1505
1497
  Exclude:
1506
- - 'app/controllers/apipie/apipies_controller.rb'
1507
1498
  - 'lib/apipie/extractor/writer.rb'
1508
1499
  - 'lib/apipie/param_description.rb'
1509
1500
  - 'lib/apipie/response_description.rb'
@@ -1541,7 +1532,7 @@ Style/EmptyElse:
1541
1532
  - 'lib/apipie/extractor/recorder.rb'
1542
1533
  - 'lib/apipie/extractor/writer.rb'
1543
1534
 
1544
- # Offense count: 26
1535
+ # Offense count: 27
1545
1536
  # This cop supports safe autocorrection (--autocorrect).
1546
1537
  # Configuration parameters: EnforcedStyle.
1547
1538
  # SupportedStyles: compact, expanded
@@ -1594,12 +1585,13 @@ Style/For:
1594
1585
 
1595
1586
  # Offense count: 7
1596
1587
  # This cop supports safe autocorrection (--autocorrect).
1597
- # Configuration parameters: MaxUnannotatedPlaceholdersAllowed, AllowedMethods, AllowedPatterns, IgnoredMethods.
1588
+ # Configuration parameters: MaxUnannotatedPlaceholdersAllowed, AllowedMethods, AllowedPatterns.
1598
1589
  # SupportedStyles: annotated, template, unannotated
1590
+ # AllowedMethods: redirect
1599
1591
  Style/FormatStringToken:
1600
1592
  EnforcedStyle: template
1601
1593
 
1602
- # Offense count: 33
1594
+ # Offense count: 31
1603
1595
  # This cop supports safe autocorrection (--autocorrect).
1604
1596
  # Configuration parameters: MinBodyLength, AllowConsecutiveConditionals.
1605
1597
  Style/GuardClause:
@@ -1664,7 +1656,7 @@ Style/Lambda:
1664
1656
 
1665
1657
  # Offense count: 2
1666
1658
  # This cop supports safe autocorrection (--autocorrect).
1667
- # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
1659
+ # Configuration parameters: AllowedMethods, AllowedPatterns.
1668
1660
  Style/MethodCallWithoutArgsParentheses:
1669
1661
  Exclude:
1670
1662
  - 'lib/apipie/extractor/recorder.rb'
@@ -1783,7 +1775,6 @@ Style/Proc:
1783
1775
  Style/RaiseArgs:
1784
1776
  Exclude:
1785
1777
  - 'lib/apipie/application.rb'
1786
- - 'lib/apipie/dsl_definition.rb'
1787
1778
  - 'lib/apipie/extractor/writer.rb'
1788
1779
  - 'lib/apipie/param_description.rb'
1789
1780
  - 'lib/apipie/see_description.rb'
@@ -1834,7 +1825,7 @@ Style/RedundantPercentQ:
1834
1825
  Exclude:
1835
1826
  - 'apipie-rails.gemspec'
1836
1827
 
1837
- # Offense count: 29
1828
+ # Offense count: 27
1838
1829
  # This cop supports safe autocorrection (--autocorrect).
1839
1830
  # Configuration parameters: AllowMultipleReturnValues.
1840
1831
  Style/RedundantReturn:
@@ -1895,12 +1886,11 @@ Style/Semicolon:
1895
1886
  Exclude:
1896
1887
  - 'lib/apipie/method_description.rb'
1897
1888
 
1898
- # Offense count: 2
1889
+ # Offense count: 1
1899
1890
  # This cop supports safe autocorrection (--autocorrect).
1900
1891
  # Configuration parameters: AllowIfMethodIsEmpty.
1901
1892
  Style/SingleLineMethods:
1902
1893
  Exclude:
1903
- - 'lib/apipie/resource_description.rb'
1904
1894
  - 'lib/apipie/tag_list_description.rb'
1905
1895
 
1906
1896
  # Offense count: 6
@@ -1936,7 +1926,7 @@ Style/StringConcatenation:
1936
1926
  - 'lib/apipie/application.rb'
1937
1927
  - 'lib/apipie/extractor/writer.rb'
1938
1928
 
1939
- # Offense count: 1196
1929
+ # Offense count: 1212
1940
1930
  # This cop supports safe autocorrection (--autocorrect).
1941
1931
  # Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
1942
1932
  # SupportedStyles: single_quotes, double_quotes
@@ -2020,7 +2010,7 @@ Style/StringLiterals:
2020
2010
  - 'spec/support/rake.rb'
2021
2011
  - 'spec/test_engine/memes_controller_spec.rb'
2022
2012
 
2023
- # Offense count: 35
2013
+ # Offense count: 34
2024
2014
  # This cop supports safe autocorrection (--autocorrect).
2025
2015
  # Configuration parameters: MinSize.
2026
2016
  # SupportedStyles: percent, brackets
@@ -0,0 +1,3 @@
1
+ {
2
+ "rubyLsp.bundleGemfile": "gemfiles/Gemfile.tools"
3
+ }
data/CHANGELOG.md CHANGED
@@ -1,8 +1,25 @@
1
1
  Changelog
2
2
  ===========
3
3
 
4
- Also deleted the `Gemfile` that was now a broken symlink.
5
- please use `export BUNDLE_GEMFILE='gemfiles/Gemfile.rails61'; bundle exec rspec` to run the test suite
4
+ ## [v1.2.1](https://github.com/Apipie/apipie-rails/tree/v1.2.1) (2023-06-09)
5
+ [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v1.2.0...v1.2.1)
6
+ * rspec: Fixes deprecated matcher ([#882](https://github.com/Apipie/apipie-rails/pull/882)) (David Wessman)
7
+ * Fix streaming bug ([#677](https://github.com/Apipie/apipie-rails/pull/677)) (Hunter Braun)
8
+ * Update README URLs based on HTTP redirects ([#448](https://github.com/Apipie/apipie-rails/pull/448)) (ReadmeCritic)
9
+ * Swagger: Adds option to skip default tags ([#881](https://github.com/Apipie/apipie-rails/pull/881)) (David Wessman)
10
+ * Parameter validation: Raises error for all missing ([#886](https://github.com/Apipie/apipie-rails/pull/886)) (David Wessman)
11
+
12
+ ## [v1.2.0](https://github.com/Apipie/apipie-rails/tree/v1.2.0) (2023-06-03)
13
+ [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v1.1.0...v1.2.0)
14
+ * Allow resource_name to be inherited ([#872](https://github.com/Apipie/apipie-rails/pull/872)) (Eric Hankins)
15
+ * Fix cache rendering with namespaced resources ([#874](https://github.com/Apipie/apipie-rails/pull/874)) (Eric Hankins)
16
+ * Fix deprecated content_type on Rails >= 6 ([#879](https://github.com/Apipie/apipie-rails/pull/879)) (Eric Hankins)
17
+ * Fix typo in Collector ([#877](https://github.com/Apipie/apipie-rails/pull/877)) (Eric Hankins)
18
+ * Fix error climbing controller hierarchy ([#875](https://github.com/Apipie/apipie-rails/pull/875)) (Eric Hankins)
19
+ * Add Gemfile.tools for IDE usage ([#876](https://github.com/Apipie/apipie-rails/pull/876)) (Eric Hankins)
20
+ * Fix rubocop ([#883](https://github.com/Apipie/apipie-rails/pull/883)) (Mathieu Jobin)
21
+ * Performance/InefficientHashSearch-20230602233137 ([#884](https://github.com/Apipie/apipie-rails/pull/884)) (RuboCop challenger)
22
+ * Redo Github action script to not need individual gemfiles ([#885](https://github.com/Apipie/apipie-rails/pull/885)) (Mathieu Jobin)
6
23
 
7
24
  ## [v1.1.0](https://github.com/Apipie/apipie-rails/tree/v1.1.0) (2023-05-16)
8
25
  [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v1.0.0...v1.1.0)
data/Gemfile ADDED
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec path: '.'
6
+
7
+ # use ENV vars, with default value as fallback for local setup
8
+ ruby(ENV['RUBY_VERSION'] || '3.2.2')
9
+ gem 'actionpack', "~> #{ENV['RAILS_VERSION'] || '7.0'}.0"
10
+ gem 'activesupport', "~> #{ENV['RAILS_VERSION'] || '7.0'}.0"
11
+
12
+ gem 'mime-types' # , '~> 3.0'
13
+ gem 'rails-controller-testing'
14
+ gem 'rspec-rails' # , '~> 5.0'
15
+
16
+ # net-smtp not included by default in Ruby 3.1
17
+ # Will be fixed by https://github.com/mikel/mail/pull/1439
18
+ gem 'net-smtp', require: false if Gem.ruby_version >= Gem::Version.new('3.1.0')
19
+
20
+ gem 'test_engine', path: './spec/dummy/components/test_engine', group: :test
data/README.rst CHANGED
@@ -56,7 +56,7 @@ Run your application and see the result at
56
56
  use ``http://localhost:3000/apipie.json``.
57
57
 
58
58
  For a more comprehensive getting started guide, see
59
- `this demo <https://github.com/iNecas/apipie-demo>`_, which includes
59
+ `this demo <https://github.com/Apipie/apipie-demo>`_, which includes
60
60
  features such as generating documentation from tests, recording examples etc.
61
61
 
62
62
  Screenshots
@@ -78,7 +78,7 @@ See `Contributors page <https://github.com/Apipie/apipie-rails/graphs/contribut
78
78
  License
79
79
  -------
80
80
 
81
- Apipie-rails is released under the `MIT License <http://opensource.org/licenses/MIT>`_
81
+ Apipie-rails is released under the `MIT License <https://opensource.org/licenses/MIT>`_
82
82
 
83
83
  ===============
84
84
  Documentation
@@ -108,6 +108,10 @@ resource_id
108
108
  name
109
109
  Human readable name of resource. By default ``class.name.humanize`` is used.
110
110
 
111
+ - Can be specified as a proc, which will receive the controller class as an argument.
112
+ - Can be a symbol, which will be sent to the controller class to get the name.
113
+ - Can be a string, which will be used as is.
114
+
111
115
  short (also short_description)
112
116
  Short description of the resource (it's shown on both the list of resources, and resource details)
113
117
 
@@ -1180,7 +1184,7 @@ Here is an example of how to rescue and process a +ParamMissing+ or
1180
1184
  +ParamInvalid+ error from within the ApplicationController.
1181
1185
 
1182
1186
  .. code:: ruby
1183
-
1187
+
1184
1188
  class ApplicationController < ActionController::Base
1185
1189
 
1186
1190
  # ParamError is superclass of ParamMissing, ParamInvalid
@@ -1726,6 +1730,9 @@ There are several configuration parameters that determine the structure of the g
1726
1730
  See [https://swagger.io/docs/specification/2-0/authentication/] for details of what values can be specified
1727
1731
  By default, no security is defined.
1728
1732
 
1733
+ ``config.generator.swagger.skip_default_tags``
1734
+ By setting ``false`` (default): The resource name for e.g. ``/pets/{petId}`` will automatically be added as a tag ``pets``.
1735
+ By setting ``true``: The tags needs to be explicitly added to the resource using the DSL.
1729
1736
 
1730
1737
  Known limitations of the current implementation
1731
1738
  -------------------------------------------------
@@ -1925,14 +1932,10 @@ And if you write one on your own, don't hesitate to share it with us!
1925
1932
  Contributing
1926
1933
  ====================
1927
1934
 
1928
- Since this gem does not have a Gemfile, you need to specify it in your shell with:
1929
-
1930
- .. code:: shell
1931
- BUNDLE_GEMFILE='gemfiles/Gemfile.rails61'
1932
-
1933
1935
  Then, you can install dependencies and run the test suite:
1934
1936
 
1935
1937
  .. code:: shell
1938
+
1936
1939
  > bundle install
1937
1940
  > bundle exec rspec
1938
1941
 
@@ -1940,7 +1943,7 @@ Then, you can install dependencies and run the test suite:
1940
1943
  Disqus Integration
1941
1944
  ====================
1942
1945
 
1943
- You can setup `Disqus <http://www.disqus.com>`_ discussion within
1946
+ You can setup `Disqus <https://disqus.com/>`_ discussion within
1944
1947
  your documentation. Just set the credentials in the Apipie
1945
1948
  configuration:
1946
1949
 
@@ -154,26 +154,12 @@ module Apipie
154
154
 
155
155
  def render_from_cache
156
156
  path = Apipie.configuration.doc_base_url.dup
157
- # some params can contain dot, but only one in row
158
- if [:resource, :method, :format, :version].any? { |p| params[p].to_s.gsub(".", "") =~ /\W/ || params[p].to_s.include?('..') }
159
- head :bad_request and return
160
- end
161
-
162
157
  path << "/" << params[:version] if params[:version].present?
163
158
  path << "/" << params[:resource] if params[:resource].present?
164
159
  path << "/" << params[:method] if params[:method].present?
165
- if params[:format].present?
166
- path << ".#{params[:format]}"
167
- else
168
- path << ".html"
169
- end
170
-
171
- # we sanitize the params before so in ideal case, this condition
172
- # will be never satisfied. It's here for cases somebody adds new
173
- # param into the path later and forgets about sanitation.
174
- if path.include?('..')
175
- head :bad_request and return
176
- end
160
+ # Sanitize path against directory traversal attacks (e.g. ../../foo)
161
+ # by turning path into an absolute path before appending it to the cache dir
162
+ path = File.expand_path("#{path}.#{request.format.symbol}", '/')
177
163
 
178
164
  cache_file = File.join(Apipie.configuration.cache_dir, path)
179
165
  if File.exist?(cache_file)
@@ -0,0 +1,9 @@
1
+ # This Gemfile is used for IDEs like VS Code that need specific gems installed
2
+ # for their tools to work properly. It is not used for the application itself.
3
+
4
+ source 'https://rubygems.org'
5
+
6
+ gem 'rubocop-rails'
7
+ gem 'rubocop-rspec'
8
+ gem 'rubocop-performance'
9
+ gem 'ruby-lsp', '~> 0.5.1'
@@ -122,15 +122,26 @@ module Apipie
122
122
  # resource_description? It's used to derivate the default value of
123
123
  # versions for methods.
124
124
  def controller_versions(controller)
125
- ret = @controller_versions[controller.to_s]
126
- return ret unless ret.empty?
127
- if controller == ActionController::Base || controller.nil?
128
- return [Apipie.configuration.default_version]
129
- else
130
- return controller_versions(controller.to_s.constantize.superclass)
125
+ value_from_parents(controller, default: [Apipie.configuration.default_version]) do |c|
126
+ ret = @controller_versions[c.to_s]
127
+ ret unless ret.empty?
131
128
  end
132
129
  end
133
130
 
131
+ # Recursively walks up the controller hierarchy looking for a value
132
+ # from the block.
133
+ # Stops at ActionController::Base.
134
+ # @param [Class] controller controller to start from
135
+ # @param [Array] args arguments passed to the block
136
+ # @param [Object] default default value to return if no value is found
137
+ # @param [Proc] block block to call with controller and args
138
+ def value_from_parents(controller, *args, default: nil, &block)
139
+ return default if controller == ActionController::Base || controller == AbstractController::Base || controller.nil?
140
+
141
+ thing = yield(controller, *args)
142
+ thing || value_from_parents(controller.superclass, *args, default: default, &block)
143
+ end
144
+
134
145
  def set_controller_versions(controller, versions)
135
146
  @controller_versions[controller.to_s] = versions
136
147
  end
@@ -443,7 +454,7 @@ module Apipie
443
454
  end
444
455
 
445
456
  def version_prefix(klass)
446
- version = controller_versions(klass.to_s).first
457
+ version = controller_versions(klass).first
447
458
  base_url = get_base_url(version)
448
459
  return "/" if base_url.blank?
449
460
  base_url[1..-1] + "/"