grape-swagger-entity 0.4.0 → 0.5.2

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 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