grape-swagger-entity 0.4.0 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9cbc9a4f5350f907024319ec60d6bebcf58c1d9a9fbe0a87157eb521f5d90c27
4
- data.tar.gz: d70650e560a98a5c8e6299136146796d87bb8e124944c2b09603ddcab415085a
3
+ metadata.gz: c52f57bfdcfb52cd362e65afc3a53ac2a442eada913a5323866d1b9b485e4f56
4
+ data.tar.gz: 6e0e4d87db0738dcaf8e5e5d51a6db8863449dc468dfcc482e8b833e1ef4e27d
5
5
  SHA512:
6
- metadata.gz: 4fffce9cc2ae49583807c9e02a5ed6d0c6fdbd1e3acc2f4816868b292fb8ae0e77161bd4736dcb2d91e30633a814cd8fd31c2f21af9fec12cc4cec8243bb5ce1
7
- data.tar.gz: 2c5cdf2184fefbd92fda6b7f65d95d31f0c331e225be2439b5fa2f6d711a7754890271b7a41b06cdd36c44d3bcace9b836cd727c93b21892e6ae9651badb712a
6
+ metadata.gz: 58121f8454551c748d77754e93ebc54522aeb71f8811dd5186265cc4b7697f5cb9be6a20dd6dd1b3f14e8a3aaf59a5f73aefaf1fea55d7cd702c9996143ea8b7
7
+ data.tar.gz: 632da40699409c7d9e4d1954b9159fa80b8f1ef2196672706d15d88f5f8fcf6c55c911d83f2d0ba6a06e7fb9158bc77788b120675ab8ea478a6632379659958e
@@ -0,0 +1,21 @@
1
+ name: danger
2
+ on: pull_request
3
+
4
+ jobs:
5
+ danger:
6
+ runs-on: ubuntu-latest
7
+ steps:
8
+ - uses: actions/checkout@v3
9
+ with:
10
+ fetch-depth: 100
11
+ - name: Set up Ruby
12
+ uses: ruby/setup-ruby@v1
13
+ with:
14
+ ruby-version: 2.7
15
+ bundler-cache: true
16
+ rubygems: latest
17
+ - name: Run Danger
18
+ run: |
19
+ # the token is public, has public_repo scope and belongs to the grape-bot user owned by @dblock, this is ok
20
+ TOKEN=$(echo -n Z2hwX2lYb0dPNXNyejYzOFJyaTV3QUxUdkNiS1dtblFwZTFuRXpmMwo= | base64 --decode)
21
+ DANGER_GITHUB_API_TOKEN=$TOKEN bundle exec danger --verbose
@@ -0,0 +1,43 @@
1
+ name: test
2
+
3
+ on: [push, pull_request]
4
+
5
+ permissions:
6
+ contents: read
7
+
8
+ jobs:
9
+ lint:
10
+ name: RuboCop
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v3
14
+
15
+ - name: Set up Ruby
16
+ uses: ruby/setup-ruby@v1
17
+ with:
18
+ ruby-version: 3.2
19
+ bundler-cache: true
20
+ rubygems: latest
21
+
22
+ - name: Run RuboCop
23
+ run: bundle exec rubocop
24
+
25
+ test:
26
+ env:
27
+ GRAPE_ENTITY: 0.8.0
28
+
29
+ runs-on: ubuntu-latest
30
+ strategy:
31
+ fail-fast: false
32
+ matrix:
33
+ ruby-version: ['3.0', '3.1', '3.2']
34
+
35
+ steps:
36
+ - uses: actions/checkout@v3
37
+ - name: Set up Ruby
38
+ uses: ruby/setup-ruby@v1
39
+ with:
40
+ ruby-version: ${{ matrix.ruby-version }}
41
+ bundler-cache: true
42
+ - name: Run tests
43
+ run: bundle exec rake spec
data/.gitignore CHANGED
@@ -8,4 +8,5 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  .ruby-gemset
11
- .ruby-version
11
+ .ruby-version
12
+ /.idea
data/.rubocop.yml CHANGED
@@ -1,25 +1,43 @@
1
1
  AllCops:
2
+ NewCops: enable
2
3
  Exclude:
3
4
  - vendor/**/*
4
5
  TargetRubyVersion:
5
- 2.2
6
+ 2.7
6
7
 
7
8
  inherit_from: .rubocop_todo.yml
8
9
 
9
- Metrics/BlockLength:
10
- Exclude:
11
- - spec/**/*
12
-
13
- Metrics/LineLength:
14
- Exclude:
15
- - spec/**/*
16
-
17
- Metrics/MethodLength:
18
- Exclude:
19
- - spec/**/*
20
-
21
10
  Naming/FileName:
22
11
  Enabled: false
23
12
 
24
- Layout/IndentFirstHashElement:
13
+ Layout/FirstHashElementIndentation:
25
14
  EnforcedStyle: consistent
15
+
16
+ Layout/EmptyLinesAroundAttributeAccessor:
17
+ Enabled: true
18
+ Layout/SpaceAroundMethodCallOperator:
19
+ Enabled: true
20
+ Lint/DeprecatedOpenSSLConstant:
21
+ Enabled: true
22
+ Lint/MixedRegexpCaptureTypes:
23
+ Enabled: true
24
+ Lint/RaiseException:
25
+ Enabled: true
26
+ Lint/StructNewOverride:
27
+ Enabled: true
28
+ Style/ExponentialNotation:
29
+ Enabled: true
30
+ Style/HashEachMethods:
31
+ Enabled: true
32
+ Style/HashTransformKeys:
33
+ Enabled: true
34
+ Style/HashTransformValues:
35
+ Enabled: true
36
+ Style/RedundantFetchBlock:
37
+ Enabled: true
38
+ Style/RedundantRegexpCharacterClass:
39
+ Enabled: true
40
+ Style/RedundantRegexpEscape:
41
+ Enabled: true
42
+ Style/SlicingWithRange:
43
+ Enabled: true
data/.rubocop_todo.yml CHANGED
@@ -1,49 +1,106 @@
1
1
  # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2017-07-03 22:59:40 +0300 using RuboCop version 0.49.1.
2
+ # `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 5000`
3
+ # on 2023-07-06 20:16:40 UTC using RuboCop version 1.42.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
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 2
10
- Metrics/AbcSize:
11
- Max: 40
9
+ # Offense count: 1
10
+ # Configuration parameters: Severity, Include.
11
+ # Include: **/*.gemspec
12
+ Gemspec/RequiredRubyVersion:
13
+ Exclude:
14
+ - 'grape-swagger-entity.gemspec'
15
+
16
+ # Offense count: 3
17
+ # Configuration parameters: AllowedMethods.
18
+ # AllowedMethods: enums
19
+ Lint/ConstantDefinitionInBlock:
20
+ Exclude:
21
+ - 'spec/grape-swagger/entities/response_model_spec.rb'
22
+ - 'spec/support/shared_contexts/inheritance_api.rb'
23
+ - 'spec/support/shared_contexts/this_api.rb'
24
+
25
+ # Offense count: 1
26
+ # Configuration parameters: AllowComments, AllowEmptyLambdas.
27
+ Lint/EmptyBlock:
28
+ Exclude:
29
+ - 'spec/grape-swagger/entity/attribute_parser_spec.rb'
12
30
 
13
31
  # Offense count: 1
14
- # Configuration parameters: CountComments, ExcludedMethods.
32
+ # This cop supports unsafe autocorrection (--autocorrect-all).
33
+ # Configuration parameters: AllowedMethods.
34
+ # AllowedMethods: instance_of?, kind_of?, is_a?, eql?, respond_to?, equal?
35
+ Lint/RedundantSafeNavigation:
36
+ Exclude:
37
+ - 'lib/grape-swagger/entity/attribute_parser.rb'
38
+
39
+ # Offense count: 4
40
+ # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods, CountRepeatedAttributes, Max.
41
+ Metrics/AbcSize:
42
+ Exclude:
43
+ - 'lib/grape-swagger/entity/attribute_parser.rb'
44
+ - 'lib/grape-swagger/entity/parser.rb'
45
+
46
+ # Offense count: 13
47
+ # Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, AllowedMethods, AllowedPatterns, IgnoredMethods.
48
+ # AllowedMethods: refine
15
49
  Metrics/BlockLength:
16
- Max: 27
50
+ Exclude:
51
+ - '**/*.gemspec'
52
+ - 'spec/grape-swagger/entities/response_model_spec.rb'
53
+ - 'spec/grape-swagger/entity/attribute_parser_spec.rb'
54
+ - 'spec/grape-swagger/entity/parser_spec.rb'
55
+ - 'spec/support/shared_contexts/this_api.rb'
17
56
 
18
57
  # Offense count: 1
19
- # Configuration parameters: CountComments.
58
+ # Configuration parameters: CountComments, Max, CountAsOne.
20
59
  Metrics/ClassLength:
21
- Max: 124
60
+ Exclude:
61
+ - 'lib/grape-swagger/entity/parser.rb'
22
62
 
23
- # Offense count: 1
63
+ # Offense count: 2
64
+ # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods, Max.
24
65
  Metrics/CyclomaticComplexity:
25
- Max: 15
26
-
27
- # Offense count: 14
28
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
29
- # URISchemes: http, https
30
- Metrics/LineLength:
31
- Max: 120
66
+ Exclude:
67
+ - 'lib/grape-swagger/entity/attribute_parser.rb'
68
+ - 'lib/grape-swagger/entity/parser.rb'
32
69
 
33
- # Offense count: 3
34
- # Configuration parameters: CountComments.
70
+ # Offense count: 5
71
+ # Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, AllowedMethods, AllowedPatterns, IgnoredMethods.
35
72
  Metrics/MethodLength:
36
- Max: 30
73
+ Exclude:
74
+ - 'lib/grape-swagger/entity/attribute_parser.rb'
75
+ - 'lib/grape-swagger/entity/parser.rb'
37
76
 
38
77
  # Offense count: 2
78
+ # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods, Max.
39
79
  Metrics/PerceivedComplexity:
40
- Max: 16
80
+ Exclude:
81
+ - 'lib/grape-swagger/entity/attribute_parser.rb'
82
+ - 'lib/grape-swagger/entity/parser.rb'
41
83
 
42
84
  # Offense count: 2
85
+ # Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns.
86
+ # SupportedStyles: snake_case, normalcase, non_integer
87
+ # AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339
88
+ Naming/VariableNumber:
89
+ Exclude:
90
+ - 'spec/grape-swagger/entities/response_model_spec.rb'
91
+
92
+ # Offense count: 4
93
+ # Configuration parameters: AllowedConstants.
43
94
  Style/Documentation:
44
95
  Exclude:
45
96
  - 'spec/**/*'
46
97
  - 'test/**/*'
47
98
  - 'lib/grape-swagger/entity.rb'
48
- - 'lib/grape-swagger/entity/parser.rb'
49
99
  - 'lib/grape-swagger/entity/attribute_parser.rb'
100
+ - 'lib/grape-swagger/entity/parser.rb'
101
+
102
+ # Offense count: 4
103
+ Style/OpenStructUse:
104
+ Exclude:
105
+ - 'spec/grape-swagger/entities/response_model_spec.rb'
106
+ - 'spec/support/shared_contexts/this_api.rb'
data/CHANGELOG.md CHANGED
@@ -4,11 +4,25 @@
4
4
 
5
5
  * Your contribution here.
6
6
 
7
- #### Features
7
+ #### Fixes
8
8
 
9
9
  * Your contribution here.
10
10
 
11
- ### 0.4.0 (May 30, 2020)
11
+ ### 0.5.2 (2023/07/07)
12
+
13
+ #### Fixes
14
+
15
+ * [#60](https://github.com/ruby-grape/grape-swagger-entity/pull/60): Examples on arrays should be directly on the property, not on the item - [@collinsauve](https://github.com/collinsauve).
16
+ * [#61](https://github.com/ruby-grape/grape-swagger-entity/pull/61): Migrate from Travis to GHA for CI - [@mscrivo](https://github.com/mscrivo).
17
+ * Your contribution here.
18
+
19
+ ### 0.5.1 (2020/06/30)
20
+
21
+ #### Features
22
+
23
+ * [#50](https://github.com/ruby-grape/grape-swagger-entity/pull/50): Features/inheritance and discriminator - [@MaximeRDY](https://github.com/MaximeRDY).
24
+
25
+ ### 0.4.0 (2020/05/30)
12
26
 
13
27
  #### Features
14
28
 
@@ -19,81 +33,81 @@
19
33
 
20
34
  * [#46](https://github.com/ruby-grape/grape-swagger-entity/pull/46): Fixed issue where a boolean example value of false would not display in swagger file - [@drewnichols](https://github.com/drewnichols).
21
35
 
22
- ### 0.3.4 (January 9, 2020)
36
+ ### 0.3.4 (2020/01/09)
23
37
 
24
38
  #### Features
25
39
 
26
40
  * [#40](https://github.com/ruby-grape/grape-swagger-entity/pull/40): Add support for minLength and maxLength - [@fotos](https://github.com/fotos).
27
41
 
28
- ### 0.3.3 (Fabruary 22, 2019)
42
+ ### 0.3.3 (2019/02/22)
29
43
 
30
44
  #### Features
31
45
 
32
46
  * [#39](https://github.com/ruby-grape/grape-swagger-entity/pull/39): Fix to avoid conflict with polymorphic model - [@kinoppyd](https://github.com/kinoppyd).
33
47
 
34
- ### 0.3.2 (January 15, 2019)
48
+ ### 0.3.2 (2019/01/15)
35
49
 
36
50
  #### Features
37
51
 
38
52
  * [#38](https://github.com/ruby-grape/grape-swagger-entity/pull/38): Added support for hidden option for documentation - [@vitoravelino](https://github.com/vitoravelino).
39
53
 
40
- ### 0.3.1 (November 26, 2018)
54
+ ### 0.3.1 (2018/11/26)
41
55
 
42
56
  #### Features
43
57
 
44
58
  * [#37](https://github.com/ruby-grape/grape-swagger-entity/pull/37): Add support for minItems, maxItems and uniqueItems - [@fotos](https://github.com/fotos).
45
59
 
46
- ### 0.3.0 (August 22, 2018)
60
+ ### 0.3.0 (2018/08/22)
47
61
 
48
62
  #### Features
49
63
 
50
64
  * [#35](https://github.com/ruby-grape/grape-swagger-entity/pull/35): Support for required attributes - [@Bugagazavr](https://github.com/Bugagazavr).
51
65
 
52
- ### 0.2.5 (April 26, 2018)
66
+ ### 0.2.5 (2018/04/26)
53
67
 
54
68
  #### Features
55
69
 
56
70
  * [#33](https://github.com/ruby-grape/grape-swagger-entity/pull/33): Update parser to respect merge option for entities - [@b-boogaard](https://github.com/b-boogaard).
57
71
 
58
- ### 0.2.4 (April 3, 2018)
72
+ ### 0.2.4 (2018/04/03)
59
73
 
60
74
  #### Fixes
61
75
 
62
76
  * [#32](https://github.com/ruby-grape/grape-swagger-entity/pull/32): Fix issue with read_only fields - [@mcfilib](https://github.com/mcfilib).
63
77
 
64
- ### 0.2.3 (November 19, 2017)
78
+ ### 0.2.3 (2017/11/19)
65
79
 
66
80
  #### Fixes
67
81
 
68
82
  * [#30](https://github.com/ruby-grape/grape-swagger-entity/pull/30): Fix nested exposures with an alias - [@Kukunin](https://github.com/Kukunin).
69
83
  * [#31](https://github.com/ruby-grape/grape-swagger-entity/pull/31): Respect `required: true` for nested attributes as well - [@Kukunin](https://github.com/Kukunin).
70
84
 
71
- ### 0.2.2 (November 3, 2017)
85
+ ### 0.2.2 (2017/11/3)
72
86
 
73
87
  #### Features
74
88
 
75
89
  * [#27](https://github.com/ruby-grape/grape-swagger-entity/pull/27): Add support for attribute examples - [@Kukunin](https://github.com/Kukunin).
76
90
 
77
- ### 0.2.1 (Jule 5, 2017)
91
+ ### 0.2.1 (2017/07/05)
78
92
 
79
93
  #### Features
80
94
 
81
95
  * [#26](https://github.com/ruby-grape/grape-swagger-entity/pull/26): Add support for read only field - [@FChaack](https://github.com/FChaack).
82
96
 
83
- ### 0.2.0 (March 2, 2017)
97
+ ### 0.2.0 (2017/03/02)
84
98
 
85
99
  #### Features
86
100
 
87
101
  * [#22](https://github.com/ruby-grape/grape-swagger-entity/pull/22): Nested exposures - [@Bugagazavr](https://github.com/Bugagazavr).
88
102
 
89
- ### 0.1.6 (February 3, 2017)
103
+ ### 0.1.6 (2017/02/03)
90
104
 
91
105
  #### Features
92
106
 
93
107
  * [#21](https://github.com/ruby-grape/grape-swagger-entity/pull/21): Adds support for own format - [@LeFnord](https://github.com/LeFnord).
94
108
  * [#19](https://github.com/ruby-grape/grape-swagger-entity/pull/19): Adds support for default value - [@LeFnord](https://github.com/LeFnord).
95
109
 
96
- ### 0.1.5 (November 21, 2016)
110
+ ### 0.1.5 (2016/11/21)
97
111
 
98
112
  #### Features
99
113
 
@@ -105,7 +119,7 @@
105
119
  * [#8](https://github.com/ruby-grape/grape-swagger-entity/pull/8): Generate enum property if values key is passed in documentation - [@lordnibbler](https://github.com/lordnibbler).
106
120
  * [#15](https://github.com/ruby-grape/grape-swagger-entity/pull/15): Support grape entity 0.6.x and later - [@Bugagazavr](https://github.com/Bugagazavr).
107
121
 
108
- ### 0.1.4 (June 7, 2016)
122
+ ### 0.1.4 (2016/06/07)
109
123
 
110
124
  #### Fixes
111
125
 
data/Dangerfile CHANGED
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  danger.import_dangerfile(gem: 'ruby-grape-danger')
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in grape-swagger-entity.gemspec
@@ -12,14 +14,14 @@ group :development, :test do
12
14
  gem 'rack-test'
13
15
  gem 'rake'
14
16
  gem 'rdoc'
15
- gem 'rspec', '~> 3.0'
16
- gem 'rubocop', '~> 0.68.1'
17
+ gem 'rspec'
18
+ gem 'rubocop'
17
19
  end
18
20
 
19
21
  gem 'grape-swagger', git: 'https://github.com/ruby-grape/grape-swagger.git'
20
22
 
21
23
  group :test do
22
24
  gem 'grape-entity', ENV.fetch('GRAPE_ENTITY', '0.6.1')
23
- gem 'ruby-grape-danger', '~> 0.1.1', require: false
25
+ gem 'ruby-grape-danger', '~> 0.2.0', require: false
24
26
  gem 'simplecov', require: false
25
27
  end
data/README.md CHANGED
@@ -1,4 +1,18 @@
1
- # GrapeSwagger::Entity [![Build Status](https://travis-ci.org/ruby-grape/grape-swagger-entity.svg)](https://travis-ci.org/ruby-grape/grape-swagger-entity)
1
+ # GrapeSwagger::Entity
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/grape-swagger-entity.svg)](https://badge.fury.io/rb/grape-swagger-entity)
4
+ [![Build Status](https://github.com/ruby-grape/grape-swagger-entity/workflows/test/badge.svg?branch=master)](https://github.com/ruby-grape/grape-swagger-entity/actions)
5
+
6
+ ## Table of Contents
7
+
8
+ - [What is grape-swagger-entity?](#what-is-grape-swagger-entity)
9
+ - [Installation](#installation)
10
+ - [Development](#development)
11
+ - [Contributing](#contributing)
12
+ - [License](#license)
13
+
14
+
15
+ ## What is grape-swagger-entity?
2
16
 
3
17
  A simple grape-swagger adapter to allow parse representers as response model
4
18
 
data/RELEASING.md ADDED
@@ -0,0 +1,64 @@
1
+ # Releasing Grape-Swagger-Entity
2
+
3
+ There are no particular rules about when to release Grape-Swagger-Entity. Release bug fixes frequent, features not so frequently and breaking API changes rarely.
4
+
5
+ ### Release
6
+
7
+ Run tests, check that all tests succeed locally.
8
+
9
+ ```
10
+ bundle install
11
+ rake
12
+ ```
13
+
14
+ Check that the last build succeeded in [GitHub Actions](https://github.com/ruby-grape/grape-swagger-entity/actions) for all supported platforms.
15
+
16
+ Increment the version, modify [lib/grape-swagger/entity/version.rb](lib/grape-swagger/entity/version.rb).
17
+
18
+ * Increment the third number if the release has bug fixes and/or very minor features, only (eg. change `0.1.0` to `0.1.1`).
19
+ * Increment the second number if the release contains major features or breaking API changes (eg. change `0.1.0` to `0.2.0`).
20
+
21
+ Change "Next Release" in [CHANGELOG.md](CHANGELOG.md) to the new version.
22
+
23
+ ```
24
+ ### 0.1.1 (February 5, 2015)
25
+ ```
26
+
27
+ Remove the line with "Your contribution here.", since there will be no more contributions to this release.
28
+
29
+ Commit your changes.
30
+
31
+ ```
32
+ git add CHANGELOG.md lib/grape-swagger-entity/version.rb
33
+ git commit -m "Preparing for release, 0.1.1."
34
+ git push origin master
35
+ ```
36
+
37
+ Release.
38
+
39
+ ```
40
+ $ rake release
41
+
42
+ Grape-Swagger-Entity 0.1.1 built to pkg/grape-swagger-entity-0.1.1.gem.
43
+ Tagged v0.1.1.
44
+ Pushed git commits and tags.
45
+ Pushed grape-swagger-entity 0.1.1 to rubygems.org.
46
+ ```
47
+
48
+ ### Prepare for the Next Version
49
+
50
+ Add the next release to [CHANGELOG.md](CHANGELOG.md).
51
+
52
+ ```
53
+ ### Next Release
54
+
55
+ * Your contribution here.
56
+ ```
57
+
58
+ Commit your changes.
59
+
60
+ ```
61
+ git add CHANGELOG.md
62
+ git commit -m "Preparing for next release."
63
+ git push origin master
64
+ ```
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'bundler'
3
5
 
data/bin/pry CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'grape-swagger/entity'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'grape-swagger/entity/version'
@@ -17,7 +19,8 @@ Gem::Specification.new do |s|
17
19
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
20
  s.require_paths = ['lib']
19
21
 
20
- s.required_ruby_version = '>= 2.2.6'
21
- s.add_runtime_dependency 'grape-entity', '>= 0.5.0'
22
- s.add_runtime_dependency 'grape-swagger', '>= 1.0.0'
22
+ s.required_ruby_version = '>= 2.4'
23
+ s.add_runtime_dependency 'grape-entity', '>= 0.6.0'
24
+ s.add_runtime_dependency 'grape-swagger', '>= 1.2.0'
25
+ s.metadata['rubygems_mfa_required'] = 'true'
23
26
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GrapeSwagger
2
4
  module Entity
3
5
  class AttributeParser
@@ -12,7 +14,7 @@ module GrapeSwagger
12
14
  entity_model = model_from(entity_options)
13
15
 
14
16
  if entity_model
15
- name = endpoint.nil? ? entity_model.to_s.demodulize : endpoint.send(:expose_params_from_model, entity_model)
17
+ name = GrapeSwagger::Entity::Helper.model_name(entity_model, endpoint)
16
18
 
17
19
  entity_model_type = entity_model_type(name, entity_options)
18
20
  return entity_model_type unless documentation
@@ -24,11 +26,8 @@ module GrapeSwagger
24
26
  param = data_type_from(entity_options)
25
27
  return param unless documentation
26
28
 
27
- add_attribute_sample(param, documentation, :default)
28
- add_attribute_sample(param, documentation, :example)
29
-
30
- if (values = documentation[:values])
31
- param[:enum] = values if values.is_a?(Array)
29
+ if (values = documentation[:values]) && values.is_a?(Array)
30
+ param[:enum] = values
32
31
  end
33
32
 
34
33
  if documentation[:is_array]
@@ -36,10 +35,13 @@ module GrapeSwagger
36
35
  add_array_documentation(param, documentation)
37
36
  end
38
37
 
38
+ add_attribute_sample(param, documentation, :default)
39
+ add_attribute_sample(param, documentation, :example)
40
+
39
41
  add_attribute_documentation(param, documentation)
40
42
 
41
43
  add_extension_documentation(param, documentation)
42
-
44
+ add_discriminator_extension(param, documentation)
43
45
  param
44
46
  end
45
47
  end
@@ -65,8 +67,7 @@ module GrapeSwagger
65
67
  end
66
68
 
67
69
  def ambiguous_model_type?(type)
68
- type &&
69
- type.is_a?(Class) &&
70
+ type&.is_a?(Class) &&
70
71
  !GrapeSwagger::DocMethods::DataType.primitive?(type.name.downcase) &&
71
72
  !type == Array
72
73
  end
@@ -87,7 +88,7 @@ module GrapeSwagger
87
88
  else
88
89
  { type: data_type }
89
90
  end
90
- type[:format] = documentation[:format] if documentation && documentation.key?(:format)
91
+ type[:format] = documentation[:format] if documentation&.key?(:format)
91
92
 
92
93
  type
93
94
  end
@@ -128,6 +129,10 @@ module GrapeSwagger
128
129
  def add_extension_documentation(param, documentation)
129
130
  GrapeSwagger::DocMethods::Extensions.add_extensions_to_root(documentation, param)
130
131
  end
132
+
133
+ def add_discriminator_extension(param, documentation)
134
+ param[:documentation] = { is_discriminator: true } if documentation.key?(:is_discriminator)
135
+ end
131
136
  end
132
137
  end
133
138
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GrapeSwagger
4
+ module Entity
5
+ # Helper methods for DRY
6
+ class Helper
7
+ class << self
8
+ def model_name(entity_model, endpoint)
9
+ if endpoint.nil?
10
+ entity_model.to_s.demodulize
11
+ else
12
+ endpoint.send(:expose_params_from_model, entity_model)
13
+ end
14
+ end
15
+
16
+ def discriminator(entity_model)
17
+ entity_model.superclass.root_exposures.detect do |value|
18
+ value.documentation&.dig(:is_discriminator)
19
+ end
20
+ end
21
+
22
+ def root_exposures_without_parent(entity_model)
23
+ entity_model.root_exposures.select do |value|
24
+ entity_model.superclass.root_exposures.find_by(value.attribute).nil?
25
+ end
26
+ end
27
+
28
+ def root_exposure_with_discriminator(entity_model)
29
+ if discriminator(entity_model)
30
+ root_exposures_without_parent(entity_model)
31
+ else
32
+ entity_model.root_exposures
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,9 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GrapeSwagger
2
4
  module Entity
3
5
  class Parser
4
- attr_reader :model
5
- attr_reader :endpoint
6
- attr_reader :attribute_parser
6
+ attr_reader :model, :endpoint, :attribute_parser
7
7
 
8
8
  def initialize(model, endpoint)
9
9
  @model = model
@@ -19,6 +19,7 @@ module GrapeSwagger
19
19
 
20
20
  class Alias
21
21
  attr_reader :original, :renamed
22
+
22
23
  def initialize(original, renamed)
23
24
  @original = original
24
25
  @renamed = renamed
@@ -26,7 +27,7 @@ module GrapeSwagger
26
27
  end
27
28
 
28
29
  def extract_params(exposure)
29
- exposure.root_exposures.each_with_object({}) do |value, memo|
30
+ GrapeSwagger::Entity::Helper.root_exposure_with_discriminator(exposure).each_with_object({}) do |value, memo|
30
31
  if value.for_merge && (value.respond_to?(:entity_class) || value.respond_to?(:using_class_name))
31
32
  entity_class = value.respond_to?(:entity_class) ? value.entity_class : value.using_class_name
32
33
 
@@ -64,7 +65,39 @@ module GrapeSwagger
64
65
  memo[final_entity_name][:description] = documentation[:desc] if documentation[:desc]
65
66
  end
66
67
 
67
- [parsed, required_params(params)]
68
+ discriminator = GrapeSwagger::Entity::Helper.discriminator(model)
69
+ if discriminator
70
+ respond_with_all_of(parsed, params, discriminator)
71
+ else
72
+ [parsed, required_params(params)]
73
+ end
74
+ end
75
+
76
+ def respond_with_all_of(parsed, params, discriminator)
77
+ parent_name = GrapeSwagger::Entity::Helper.model_name(model.superclass, endpoint)
78
+
79
+ {
80
+ allOf: [
81
+ {
82
+ '$ref' => "#/definitions/#{parent_name}"
83
+ },
84
+ [
85
+ add_discriminator(parsed, discriminator),
86
+ required_params(params).push(discriminator.attribute)
87
+ ]
88
+ ]
89
+ }
90
+ end
91
+
92
+ def add_discriminator(parsed, discriminator)
93
+ model_name = GrapeSwagger::Entity::Helper.model_name(model, endpoint)
94
+
95
+ parsed.merge(
96
+ discriminator.attribute => {
97
+ type: 'string',
98
+ enum: [model_name]
99
+ }
100
+ )
68
101
  end
69
102
 
70
103
  def parse_nested(entity_name, entity_options, parent_model = nil)
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GrapeSwagger
2
4
  module Entity
3
- VERSION = '0.4.0'.freeze
5
+ VERSION = '0.5.2'
4
6
  end
5
7
  end
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'grape-swagger'
2
4
  require 'grape-entity'
3
5
 
4
6
  require 'grape-swagger/entity/version'
7
+ require 'grape-swagger/entity/helper'
5
8
  require 'grape-swagger/entity/attribute_parser'
6
9
  require 'grape-swagger/entity/parser'
7
10
 
@@ -10,4 +13,4 @@ module GrapeSwagger
10
13
  end
11
14
  end
12
15
 
13
- GrapeSwagger.model_parsers.register(::GrapeSwagger::Entity::Parser, ::Grape::Entity)
16
+ GrapeSwagger.model_parsers.register(GrapeSwagger::Entity::Parser, Grape::Entity)
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'grape-swagger/entity'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-swagger-entity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kirill Zaitsev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-30 00:00:00.000000000 Z
11
+ date: 2023-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape-entity
@@ -16,45 +16,47 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.5.0
19
+ version: 0.6.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.5.0
26
+ version: 0.6.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: grape-swagger
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.0
33
+ version: 1.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.0.0
41
- description:
40
+ version: 1.2.0
41
+ description:
42
42
  email:
43
43
  - kirik910@gmail.com
44
44
  executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
+ - ".github/workflows/danger.yml"
49
+ - ".github/workflows/test.yml"
48
50
  - ".gitignore"
49
51
  - ".rspec"
50
52
  - ".rubocop.yml"
51
53
  - ".rubocop_todo.yml"
52
- - ".travis.yml"
53
54
  - CHANGELOG.md
54
55
  - Dangerfile
55
56
  - Gemfile
56
57
  - LICENSE.txt
57
58
  - README.md
59
+ - RELEASING.md
58
60
  - Rakefile
59
61
  - bin/pry
60
62
  - bin/setup
@@ -62,13 +64,15 @@ files:
62
64
  - lib/grape-swagger-entity.rb
63
65
  - lib/grape-swagger/entity.rb
64
66
  - lib/grape-swagger/entity/attribute_parser.rb
67
+ - lib/grape-swagger/entity/helper.rb
65
68
  - lib/grape-swagger/entity/parser.rb
66
69
  - lib/grape-swagger/entity/version.rb
67
70
  homepage: https://github.com/ruby-grape/grape-swagger-entity
68
71
  licenses:
69
72
  - MIT
70
- metadata: {}
71
- post_install_message:
73
+ metadata:
74
+ rubygems_mfa_required: 'true'
75
+ post_install_message:
72
76
  rdoc_options: []
73
77
  require_paths:
74
78
  - lib
@@ -76,15 +80,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
80
  requirements:
77
81
  - - ">="
78
82
  - !ruby/object:Gem::Version
79
- version: 2.2.6
83
+ version: '2.4'
80
84
  required_rubygems_version: !ruby/object:Gem::Requirement
81
85
  requirements:
82
86
  - - ">="
83
87
  - !ruby/object:Gem::Version
84
88
  version: '0'
85
89
  requirements: []
86
- rubygems_version: 3.0.3
87
- signing_key:
90
+ rubygems_version: 3.4.10
91
+ signing_key:
88
92
  specification_version: 4
89
93
  summary: Grape swagger adapter to support grape-entity object parsing
90
94
  test_files: []
data/.travis.yml DELETED
@@ -1,38 +0,0 @@
1
- language: ruby
2
-
3
- sudo: false
4
-
5
- before_install:
6
- - gem update --system
7
- - gem install bundler
8
-
9
- after_success:
10
- - bundle exec danger
11
-
12
- rvm:
13
- - 2.4.5
14
- - 2.5.3
15
- - 2.6.0
16
-
17
- env:
18
- - GRAPE_ENTITY=0.6.1
19
- - GRAPE_ENTITY=0.7.1
20
-
21
- matrix:
22
- fast_finish: true
23
-
24
- include:
25
- - rvm: 2.3.8
26
- env:
27
- - rvm: ruby-head
28
- env:
29
- - rvm: jruby-head
30
- env:
31
- - rvm: rbx-2
32
- env:
33
-
34
- allow_failures:
35
- - rvm: 2.3.8
36
- - rvm: ruby-head
37
- - rvm: jruby-head
38
- - rvm: rbx-2