grape-swagger-entity 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of grape-swagger-entity might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -1
- data/Gemfile +1 -1
- data/grape-swagger-entity.gemspec +1 -1
- data/lib/grape-swagger/entity.rb +1 -0
- data/lib/grape-swagger/entity/attribute_parser.rb +6 -2
- data/lib/grape-swagger/entity/helper.rb +36 -0
- data/lib/grape-swagger/entity/parser.rb +34 -2
- data/lib/grape-swagger/entity/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c6aad956f868bcf6563b52eaaf6347b821fe06a63153324e299562857418dc3
|
4
|
+
data.tar.gz: 04ffc54b6c66cb328e7687aac44f9140f0891ab74c3fab05463bda4a43f02f41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4e6cd881f3c194a10beb6489b295ecc0d3168479935c4402922d4e4f9358686c3aa2d3df1023e99114710c14efa9685d8f5b1792558538f680721d77d7b8177
|
7
|
+
data.tar.gz: 5090a6ae14257708c383c10b858b6c89ba21e54fd5a873dfe10dcd1873b1aac125b3d4be4ad0c055778461859b91c18c2505607ecbd4552384c1a0f01ce46033
|
data/CHANGELOG.md
CHANGED
@@ -4,10 +4,16 @@
|
|
4
4
|
|
5
5
|
* Your contribution here.
|
6
6
|
|
7
|
-
####
|
7
|
+
#### Fixes
|
8
8
|
|
9
9
|
* Your contribution here.
|
10
10
|
|
11
|
+
### 0.5.0 (June 29, 2020)
|
12
|
+
|
13
|
+
#### Features
|
14
|
+
|
15
|
+
* [#50](https://github.com/ruby-grape/grape-swagger-entity/pull/50): Features/inheritance and discriminator - [@MaximeRDY](https://github.com/MaximeRDY).
|
16
|
+
|
11
17
|
### 0.4.0 (May 30, 2020)
|
12
18
|
|
13
19
|
#### Features
|
data/Gemfile
CHANGED
@@ -16,7 +16,7 @@ group :development, :test do
|
|
16
16
|
gem 'rubocop', '~> 0.68.1'
|
17
17
|
end
|
18
18
|
|
19
|
-
gem 'grape-swagger',
|
19
|
+
gem 'grape-swagger', path: '../grape-swagger'
|
20
20
|
|
21
21
|
group :test do
|
22
22
|
gem 'grape-entity', ENV.fetch('GRAPE_ENTITY', '0.6.1')
|
data/lib/grape-swagger/entity.rb
CHANGED
@@ -12,7 +12,7 @@ module GrapeSwagger
|
|
12
12
|
entity_model = model_from(entity_options)
|
13
13
|
|
14
14
|
if entity_model
|
15
|
-
name =
|
15
|
+
name = GrapeSwagger::Entity::Helper.model_name(entity_model, endpoint)
|
16
16
|
|
17
17
|
entity_model_type = entity_model_type(name, entity_options)
|
18
18
|
return entity_model_type unless documentation
|
@@ -39,7 +39,7 @@ module GrapeSwagger
|
|
39
39
|
add_attribute_documentation(param, documentation)
|
40
40
|
|
41
41
|
add_extension_documentation(param, documentation)
|
42
|
-
|
42
|
+
add_discriminator_extension(param, documentation)
|
43
43
|
param
|
44
44
|
end
|
45
45
|
end
|
@@ -128,6 +128,10 @@ module GrapeSwagger
|
|
128
128
|
def add_extension_documentation(param, documentation)
|
129
129
|
GrapeSwagger::DocMethods::Extensions.add_extensions_to_root(documentation, param)
|
130
130
|
end
|
131
|
+
|
132
|
+
def add_discriminator_extension(param, documentation)
|
133
|
+
param[:documentation] = { is_discriminator: true } if documentation.key?(:is_discriminator)
|
134
|
+
end
|
131
135
|
end
|
132
136
|
end
|
133
137
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module GrapeSwagger
|
2
|
+
module Entity
|
3
|
+
# Helper methods for DRY
|
4
|
+
class Helper
|
5
|
+
class << self
|
6
|
+
def model_name(entity_model, endpoint)
|
7
|
+
if endpoint.nil?
|
8
|
+
entity_model.to_s.demodulize
|
9
|
+
else
|
10
|
+
endpoint.send(:expose_params_from_model, entity_model)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def discriminator(entity_model)
|
15
|
+
entity_model.superclass.root_exposures.detect do |value|
|
16
|
+
value.documentation.dig(:is_discriminator)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def root_exposures_without_parent(entity_model)
|
21
|
+
entity_model.root_exposures.select do |value|
|
22
|
+
entity_model.superclass.root_exposures.find_by(value.attribute).nil?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def root_exposure_with_discriminator(entity_model)
|
27
|
+
if discriminator(entity_model)
|
28
|
+
root_exposures_without_parent(entity_model)
|
29
|
+
else
|
30
|
+
entity_model.root_exposures
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -26,7 +26,7 @@ module GrapeSwagger
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def extract_params(exposure)
|
29
|
-
exposure.
|
29
|
+
GrapeSwagger::Entity::Helper.root_exposure_with_discriminator(exposure).each_with_object({}) do |value, memo|
|
30
30
|
if value.for_merge && (value.respond_to?(:entity_class) || value.respond_to?(:using_class_name))
|
31
31
|
entity_class = value.respond_to?(:entity_class) ? value.entity_class : value.using_class_name
|
32
32
|
|
@@ -64,7 +64,39 @@ module GrapeSwagger
|
|
64
64
|
memo[final_entity_name][:description] = documentation[:desc] if documentation[:desc]
|
65
65
|
end
|
66
66
|
|
67
|
-
|
67
|
+
discriminator = GrapeSwagger::Entity::Helper.discriminator(model)
|
68
|
+
if discriminator
|
69
|
+
respond_with_all_of(parsed, params, discriminator)
|
70
|
+
else
|
71
|
+
[parsed, required_params(params)]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def respond_with_all_of(parsed, params, discriminator)
|
76
|
+
parent_name = GrapeSwagger::Entity::Helper.model_name(model.superclass, endpoint)
|
77
|
+
|
78
|
+
{
|
79
|
+
allOf: [
|
80
|
+
{
|
81
|
+
'$ref' => "#/definitions/#{parent_name}"
|
82
|
+
},
|
83
|
+
[
|
84
|
+
add_discriminator(parsed, discriminator),
|
85
|
+
required_params(params).push(discriminator.attribute)
|
86
|
+
]
|
87
|
+
]
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
def add_discriminator(parsed, discriminator)
|
92
|
+
model_name = GrapeSwagger::Entity::Helper.model_name(model, endpoint)
|
93
|
+
|
94
|
+
parsed.merge(
|
95
|
+
discriminator.attribute => {
|
96
|
+
type: 'string',
|
97
|
+
enum: [model_name]
|
98
|
+
}
|
99
|
+
)
|
68
100
|
end
|
69
101
|
|
70
102
|
def parse_nested(entity_name, entity_options, parent_model = nil)
|
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
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kirill Zaitsev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grape-entity
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 1.4.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.
|
40
|
+
version: 1.4.0
|
41
41
|
description:
|
42
42
|
email:
|
43
43
|
- kirik910@gmail.com
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- lib/grape-swagger-entity.rb
|
63
63
|
- lib/grape-swagger/entity.rb
|
64
64
|
- lib/grape-swagger/entity/attribute_parser.rb
|
65
|
+
- lib/grape-swagger/entity/helper.rb
|
65
66
|
- lib/grape-swagger/entity/parser.rb
|
66
67
|
- lib/grape-swagger/entity/version.rb
|
67
68
|
homepage: https://github.com/ruby-grape/grape-swagger-entity
|