grape-entity 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +21 -63
- data/.rubocop_todo.yml +2 -8
- data/.travis.yml +5 -4
- data/CHANGELOG.md +29 -0
- data/Gemfile +1 -1
- data/UPGRADING.md +31 -2
- data/lib/grape_entity.rb +1 -0
- data/lib/grape_entity/condition/base.rb +1 -1
- data/lib/grape_entity/deprecated.rb +13 -0
- data/lib/grape_entity/entity.rb +8 -1
- data/lib/grape_entity/exposure/base.rb +2 -4
- data/lib/grape_entity/exposure/nesting_exposure.rb +1 -0
- data/lib/grape_entity/exposure/nesting_exposure/nested_exposures.rb +2 -0
- data/lib/grape_entity/exposure/nesting_exposure/output_builder.rb +4 -0
- data/lib/grape_entity/version.rb +1 -1
- data/spec/grape_entity/entity_spec.rb +41 -14
- data/spec/spec_helper.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa38cbc30d489d88e91c10c688c581251392a448330eca12ff79ebe22958bd9c
|
4
|
+
data.tar.gz: a96f1d0ada161d659f71aaca4e44588afc2727f4966e3f46058189483d46aa0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12f8a447cf4f297bb4c07375d08efa41e5d1691a907ccbfdc7cef8c2f394cfc03a041318f76ab2475089b5d1b7438414cd00dca6305105bf616b3c2465b1c000
|
7
|
+
data.tar.gz: 0a7c13fec63e43adb8269d0639c1e4abfef77cba02a3a7b234716588e968116e1875e94bab08f68cdec60e656b65f159d42f308342eeac6f42846a6f5aec9b27
|
data/.rubocop.yml
CHANGED
@@ -5,6 +5,8 @@ AllCops:
|
|
5
5
|
- vendor/**/*
|
6
6
|
- example/**/*
|
7
7
|
TargetRubyVersion: 2.7
|
8
|
+
UseCache: true
|
9
|
+
NewCops: enable
|
8
10
|
|
9
11
|
# Layout stuff
|
10
12
|
#
|
@@ -27,25 +29,18 @@ Layout/SpaceAroundMethodCallOperator:
|
|
27
29
|
|
28
30
|
# Lint stuff
|
29
31
|
#
|
30
|
-
Lint/
|
31
|
-
Enabled: true
|
32
|
-
|
33
|
-
Lint/DuplicateElsifCondition:
|
34
|
-
Enabled: true
|
35
|
-
|
36
|
-
Lint/MixedRegexpCaptureTypes:
|
37
|
-
Enabled: true
|
38
|
-
|
39
|
-
Lint/RaiseException:
|
40
|
-
Enabled: true
|
41
|
-
|
42
|
-
Lint/StructNewOverride:
|
32
|
+
Lint/ConstantDefinitionInBlock:
|
43
33
|
Enabled: true
|
34
|
+
Exclude:
|
35
|
+
- spec/**/*
|
44
36
|
|
45
37
|
# Metrics stuff
|
46
38
|
#
|
47
39
|
Metrics/AbcSize:
|
48
40
|
Max: 25
|
41
|
+
IgnoredMethods:
|
42
|
+
# from lib/grape_entity/exposure/nesting_exposure.rb
|
43
|
+
- 'normalized_exposures'
|
49
44
|
|
50
45
|
Metrics/BlockLength:
|
51
46
|
Exclude:
|
@@ -64,6 +59,12 @@ Metrics/MethodLength:
|
|
64
59
|
|
65
60
|
Metrics/PerceivedComplexity:
|
66
61
|
Max: 11
|
62
|
+
IgnoredMethods:
|
63
|
+
# from lib/grape_entity/entity.rb
|
64
|
+
- 'expose'
|
65
|
+
- 'merge_options'
|
66
|
+
# from lib/grape_entity/exposure/nesting_exposure.rb
|
67
|
+
- 'normalized_exposures'
|
67
68
|
|
68
69
|
# Naming stuff
|
69
70
|
#
|
@@ -73,56 +74,13 @@ Naming:
|
|
73
74
|
|
74
75
|
# Style stuff
|
75
76
|
#
|
76
|
-
Style/AccessorGrouping:
|
77
|
-
Enabled: true
|
78
|
-
|
79
|
-
Style/ArrayCoercion:
|
80
|
-
Enabled: true
|
81
|
-
|
82
|
-
Style/BisectedAttrAccessor:
|
83
|
-
Enabled: true
|
84
|
-
|
85
|
-
Style/CaseLikeIf:
|
86
|
-
Enabled: true
|
87
|
-
|
88
77
|
Style/Documentation:
|
89
78
|
Enabled: false
|
90
79
|
|
91
|
-
Style/
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
Enabled: true
|
99
|
-
|
100
|
-
Style/HashLikeCase:
|
101
|
-
Enabled: true
|
102
|
-
|
103
|
-
Style/HashTransformKeys:
|
104
|
-
Enabled: true
|
105
|
-
|
106
|
-
Style/HashTransformValues:
|
107
|
-
Enabled: true
|
108
|
-
|
109
|
-
Style/RedundantAssignment:
|
110
|
-
Enabled: true
|
111
|
-
|
112
|
-
Style/RedundantFetchBlock:
|
113
|
-
Enabled: true
|
114
|
-
|
115
|
-
Style/RedundantFileExtensionInRequire:
|
116
|
-
Enabled: true
|
117
|
-
|
118
|
-
Style/RedundantRegexpCharacterClass:
|
119
|
-
Enabled: true
|
120
|
-
|
121
|
-
Style/RedundantRegexpEscape:
|
122
|
-
Enabled: true
|
123
|
-
|
124
|
-
Style/RegexpLiteral:
|
125
|
-
Enabled: false
|
126
|
-
|
127
|
-
Style/SlicingWithRange:
|
128
|
-
Enabled: true
|
80
|
+
Style/OptionalBooleanParameter:
|
81
|
+
AllowedMethods:
|
82
|
+
# from lib/grape_entity/condition/base.rb
|
83
|
+
- 'initialize'
|
84
|
+
# form lib/grape_entity/entity.rb
|
85
|
+
- 'entity_class'
|
86
|
+
- 'present_collection'
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2020-
|
3
|
+
# on 2020-11-07 00:01:40 UTC using RuboCop version 1.2.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,17 +14,11 @@ Gemspec/RequiredRubyVersion:
|
|
14
14
|
- 'grape-entity.gemspec'
|
15
15
|
|
16
16
|
# Offense count: 6
|
17
|
+
# Cop supports --auto-correct.
|
17
18
|
Lint/BooleanSymbol:
|
18
19
|
Exclude:
|
19
20
|
- 'spec/grape_entity/exposure_spec.rb'
|
20
21
|
|
21
|
-
# Offense count: 1
|
22
|
-
# Configuration parameters: EnforcedStyle.
|
23
|
-
# SupportedStyles: inline, group
|
24
|
-
Style/AccessModifierDeclarations:
|
25
|
-
Exclude:
|
26
|
-
- 'spec/grape_entity/entity_spec.rb'
|
27
|
-
|
28
22
|
# Offense count: 1
|
29
23
|
# Cop supports --auto-correct.
|
30
24
|
# Configuration parameters: IgnoredMethods.
|
data/.travis.yml
CHANGED
@@ -9,17 +9,18 @@ after_success:
|
|
9
9
|
rvm:
|
10
10
|
- 2.5.8
|
11
11
|
- 2.6.6
|
12
|
-
- 2.7.
|
12
|
+
- 2.7.2
|
13
13
|
- ruby-head
|
14
14
|
- jruby-head
|
15
|
+
- truffleruby-head
|
16
|
+
- 2.4.10
|
17
|
+
|
15
18
|
|
16
19
|
matrix:
|
17
20
|
fast_finish: true
|
18
21
|
|
19
|
-
include:
|
20
|
-
- rvm: 2.4.10
|
21
|
-
|
22
22
|
allow_failures:
|
23
23
|
- rvm: 2.4.10
|
24
24
|
- rvm: ruby-head
|
25
25
|
- rvm: jruby-head
|
26
|
+
- rvm: truffleruby-head
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,15 @@
|
|
8
8
|
|
9
9
|
* Your contribution here.
|
10
10
|
|
11
|
+
|
12
|
+
### 0.8.2 (2020-11-08)
|
13
|
+
|
14
|
+
#### Fixes
|
15
|
+
|
16
|
+
* [#340](https://github.com/ruby-grape/grape-entity/pull/340): Preparations for 3.0 - [@LeFnord](https://github.com/LeFnord).
|
17
|
+
* [#338](https://github.com/ruby-grape/grape-entity/pull/338): Fix ruby 2.7 deprecation warning - [@begotten63](https://github.com/begotten63).
|
18
|
+
|
19
|
+
|
11
20
|
### 0.8.1 (2020-07-15)
|
12
21
|
|
13
22
|
#### Fixes
|
@@ -15,6 +24,7 @@
|
|
15
24
|
* [#336](https://github.com/ruby-grape/grape-entity/pull/336): Pass options to delegators when they accept it - [@dnesteryuk](https://github.com/dnesteryuk).
|
16
25
|
* [#333](https://github.com/ruby-grape/grape-entity/pull/333): Fix typo in CHANGELOG.md - [@eitoball](https://github.com/eitoball).
|
17
26
|
|
27
|
+
|
18
28
|
### 0.8.0 (2020-02-18)
|
19
29
|
|
20
30
|
#### Features
|
@@ -30,12 +40,14 @@
|
|
30
40
|
* [#320](https://github.com/ruby-grape/grape-entity/pull/320): Gemspec: drop eol'd property rubyforge_project - [@olleolleolle](https://github.com/olleolleolle).
|
31
41
|
* [#307](https://github.com/ruby-grape/grape-entity/pull/307): Allow exposures to call methods defined in modules included in an entity - [@robertoz-01](https://github.com/robertoz-01).
|
32
42
|
|
43
|
+
|
33
44
|
### 0.7.1 (2018-01-30)
|
34
45
|
|
35
46
|
#### Features
|
36
47
|
|
37
48
|
* [#297](https://github.com/ruby-grape/grape-entity/pull/297): Introduce `override` option for expose (fixes [#286](https://github.com/ruby-grape/grape-entity/issues/296)) - [@DmitryTsepelev](https://github.com/DmitryTsepelev).
|
38
49
|
|
50
|
+
|
39
51
|
### 0.7.0 (2018-01-25)
|
40
52
|
|
41
53
|
#### Features
|
@@ -54,6 +66,7 @@
|
|
54
66
|
* [#291](https://github.com/ruby-grape/grape-entity/pull/291): Refactor and simplify various classes and modules - [@DmitryTsepelev](https://github.com/DmitryTsepelev).
|
55
67
|
* [#292](https://github.com/ruby-grape/grape-entity/pull/292): Allow replace non-conditional non-nesting exposures in child classes (fixes [#286](https://github.com/ruby-grape/grape-entity/issues/286)) - [@DmitryTsepelev](https://github.com/DmitryTsepelev).
|
56
68
|
|
69
|
+
|
57
70
|
### 0.6.1 (2017-01-09)
|
58
71
|
|
59
72
|
#### Features
|
@@ -64,6 +77,7 @@
|
|
64
77
|
|
65
78
|
* [#251](https://github.com/ruby-grape/grape-entity/pull/251): Avoid noise when code runs with Ruby warnings - [@cpetschnig](https://github.com/cpetschnig).
|
66
79
|
|
80
|
+
|
67
81
|
### 0.6.0 (2016-11-20)
|
68
82
|
|
69
83
|
#### Features
|
@@ -75,6 +89,7 @@
|
|
75
89
|
* [#249](https://github.com/ruby-grape/grape-entity/issues/249): Fix leaking of options and internals in default serialization - [@dblock](https://github.com/dblock), [@KingsleyKelly](https://github.com/KingsleyKelly).
|
76
90
|
* [#248](https://github.com/ruby-grape/grape-entity/pull/248): Fix `nil` values causing errors when `merge` option passed - [@arempe93](https://github.com/arempe93).
|
77
91
|
|
92
|
+
|
78
93
|
### 0.5.2 (2016-11-14)
|
79
94
|
|
80
95
|
#### Features
|
@@ -90,6 +105,7 @@
|
|
90
105
|
* [#219](https://github.com/ruby-grape/grape-entity/pull/219): Double pass options in `serializable_hash` - [@sbatykov](https://github.com/sbatykov).
|
91
106
|
* [#231](https://github.com/ruby-grape/grape-entity/pull/231), [#215](https://github.com/ruby-grape/grape-entity/issues/215): Allow `delegate_attribute` for derived entity - [@sbatykov](https://github.com/sbatykov).
|
92
107
|
|
108
|
+
|
93
109
|
### 0.5.1 (2016-4-4)
|
94
110
|
|
95
111
|
#### Features
|
@@ -101,6 +117,7 @@
|
|
101
117
|
|
102
118
|
* [#202](https://github.com/ruby-grape/grape-entity/pull/202): Reset `@using_class` memoization on `.setup` - [@rngtng](https://github.com/rngtng).
|
103
119
|
|
120
|
+
|
104
121
|
### 0.5.0 (2015-12-07)
|
105
122
|
|
106
123
|
#### Features
|
@@ -121,18 +138,21 @@
|
|
121
138
|
* [#151](https://github.com/ruby-grape/grape-entity/pull/151): Serializing of deeply nested presenter exposures: [#155](https://github.com/ruby-grape/grape-entity/issues/155) - [@marshall-lee](https://github.com/marshall-lee).
|
122
139
|
* [#151](https://github.com/ruby-grape/grape-entity/pull/151): Deep projections (`:only`, `:except`) were unaware of nesting: [#156](https://github.com/ruby-grape/grape-entity/issues/156) - [@marshall-lee](https://github.com/marshall-lee).
|
123
140
|
|
141
|
+
|
124
142
|
### 0.4.8 (2015-08-10)
|
125
143
|
|
126
144
|
#### Features
|
127
145
|
|
128
146
|
* [#167](https://github.com/ruby-grape/grape-entity/pull/167), [#166](https://github.com/ruby-grape/grape-entity/issues/166): Regression with global settings (exposures, formatters) on `Grape::Entity` - [@marshall-lee](https://github.com/marshall-lee).
|
129
147
|
|
148
|
+
|
130
149
|
### 0.4.7 (2015-08-03)
|
131
150
|
|
132
151
|
#### Features
|
133
152
|
|
134
153
|
* [#164](https://github.com/ruby-grape/grape-entity/pull/164): Regression: entity instance methods were exposed with `NoMethodError`: [#163](https://github.com/ruby-grape/grape-entity/issues/163) - [@marshall-lee](https://github.com/marshall-lee).
|
135
154
|
|
155
|
+
|
136
156
|
### 0.4.6 (2015-07-27)
|
137
157
|
|
138
158
|
#### Features
|
@@ -151,6 +171,7 @@
|
|
151
171
|
|
152
172
|
* [#147](https://github.com/ruby-grape/grape-entity/pull/147), [#142](https://github.com/ruby-grape/grape-entity/pull/142): Private method values were not exposed with `safe` option - [@marshall-lee](https://github.com/marshall-lee).
|
153
173
|
|
174
|
+
|
154
175
|
### 0.4.5 (2015-03-10)
|
155
176
|
|
156
177
|
#### Features
|
@@ -165,6 +186,7 @@
|
|
165
186
|
* [#110](https://github.com/ruby-grape/grape-entity/pull/110): Safe exposure when using `Hash` models - [@croeck](https://github.com/croeck).
|
166
187
|
* [#91](https://github.com/ruby-grape/grape-entity/pull/91): OpenStruct serializing - [@etehtsea](https://github.com/etehtsea).
|
167
188
|
|
189
|
+
|
168
190
|
### 0.4.4 (2014-08-17)
|
169
191
|
|
170
192
|
#### Features
|
@@ -172,6 +194,7 @@
|
|
172
194
|
* [#85](https://github.com/ruby-grape/grape-entity/pull/85): Added `present_collection` to indicate that an `Entity` presents an entire Collection - [@dspaeth-faber](https://github.com/dspaeth-faber).
|
173
195
|
* [#85](https://github.com/ruby-grape/grape-entity/pull/85): Hashes can now be passed as object to be presented and the `Hash` keys can be referenced by expose - [@dspaeth-faber](https://github.com/dspaeth-faber).
|
174
196
|
|
197
|
+
|
175
198
|
### 0.4.3 (2014-06-12)
|
176
199
|
|
177
200
|
#### Features
|
@@ -182,6 +205,7 @@
|
|
182
205
|
|
183
206
|
* [#77](https://github.com/ruby-grape/grape-entity/pull/77): Compatibility with Rspec 3 - [@justfalter](https://github.com/justfalter).
|
184
207
|
|
208
|
+
|
185
209
|
### 0.4.2 (2014-04-03)
|
186
210
|
|
187
211
|
#### Features
|
@@ -189,12 +213,14 @@
|
|
189
213
|
* [#60](https://github.com/ruby-grape/grape-entity/issues/59): Performance issues introduced by nested exposures - [@AlexYankee](https://github.com/AlexYankee).
|
190
214
|
* [#60](https://github.com/ruby-grape/grape-entity/issues/57): Nested exposure double-exposes a field - [@AlexYankee](https://github.com/AlexYankee).
|
191
215
|
|
216
|
+
|
192
217
|
### 0.4.1 (2014-02-13)
|
193
218
|
|
194
219
|
#### Fixes
|
195
220
|
|
196
221
|
* [#54](https://github.com/ruby-grape/grape-entity/issues/54): Fix: undefined method `to_set` - [@aj0strow](https://github.com/aj0strow).
|
197
222
|
|
223
|
+
|
198
224
|
### 0.4.0 (2014-01-27)
|
199
225
|
|
200
226
|
#### Features
|
@@ -214,6 +240,7 @@
|
|
214
240
|
* [#51](https://github.com/ruby-grape/grape-entity/pull/51): Raise `ArgumentError` if an unknown option is used with `expose` - [@aj0strow](https://github.com/aj0strow).
|
215
241
|
* [#51](https://github.com/ruby-grape/grape-entity/pull/51): Alias `:with` to `:using`, consistently with the Grape api endpoints - [@aj0strow](https://github.com/aj0strow).
|
216
242
|
|
243
|
+
|
217
244
|
### 0.3.0 (2013-03-29)
|
218
245
|
|
219
246
|
#### Features
|
@@ -222,12 +249,14 @@
|
|
222
249
|
* The `instance.entity` method now optionally accepts `options` - [@mbleigh](https://github.com/mbleigh).
|
223
250
|
* You can pass symbols to `:if` and `:unless` to simply check for truthiness/falsiness of the specified options key - [@mbleigh](https://github.com/mbleigh).
|
224
251
|
|
252
|
+
|
225
253
|
### 0.2.0 (2013-01-11)
|
226
254
|
|
227
255
|
#### Features
|
228
256
|
|
229
257
|
* Moved the namespace back to `Grape::Entity` to preserve compatibility with Grape - [@dblock](https://github.com/dblock).
|
230
258
|
|
259
|
+
|
231
260
|
### 0.1.0 (2013-01-11)
|
232
261
|
|
233
262
|
* Initial public release - [@agileanimal](https://github.com/agileanimal).
|
data/Gemfile
CHANGED
data/UPGRADING.md
CHANGED
@@ -1,5 +1,34 @@
|
|
1
|
-
Upgrading Grape Entity
|
2
|
-
|
1
|
+
# Upgrading Grape Entity
|
2
|
+
|
3
|
+
### Upgrading to >= 0.8.2
|
4
|
+
|
5
|
+
In Ruby 3.0: the block handling will be changed
|
6
|
+
[language-changes point 3, Proc](https://github.com/ruby/ruby/blob/v3_0_0_preview1/NEWS.md#language-changes).
|
7
|
+
This:
|
8
|
+
```ruby
|
9
|
+
expose :that_method_without_args, &:method_without_args
|
10
|
+
```
|
11
|
+
will be deprecated.
|
12
|
+
|
13
|
+
Prefer to use this pattern for simple setting a value
|
14
|
+
```ruby
|
15
|
+
expose :method_without_args, as: :that_method_without_args
|
16
|
+
```
|
17
|
+
|
18
|
+
### Upgrading to >= 0.8.2
|
19
|
+
|
20
|
+
In Ruby 3.0: the block handling will be changed
|
21
|
+
[language-changes point 3, Proc](https://github.com/ruby/ruby/blob/v3_0_0_preview1/NEWS.md#language-changes).
|
22
|
+
This:
|
23
|
+
```ruby
|
24
|
+
expose :that_method_without_args, &:method_without_args
|
25
|
+
```
|
26
|
+
will be deprecated.
|
27
|
+
|
28
|
+
Prefer to use this pattern for simple setting a value
|
29
|
+
```ruby
|
30
|
+
expose :method_without_args, as: :that_method_without_args
|
31
|
+
```
|
3
32
|
|
4
33
|
### Upgrading to >= 0.6.0
|
5
34
|
|
data/lib/grape_entity.rb
CHANGED
data/lib/grape_entity/entity.rb
CHANGED
@@ -139,6 +139,8 @@ module Grape
|
|
139
139
|
def self.inherited(subclass)
|
140
140
|
subclass.root_exposure = root_exposure.dup
|
141
141
|
subclass.formatters = formatters.dup
|
142
|
+
|
143
|
+
super
|
142
144
|
end
|
143
145
|
|
144
146
|
# This method is the primary means by which you will declare what attributes
|
@@ -523,6 +525,11 @@ module Grape
|
|
523
525
|
else
|
524
526
|
instance_exec(object, options, &block)
|
525
527
|
end
|
528
|
+
rescue StandardError => e
|
529
|
+
# it handles: https://github.com/ruby/ruby/blob/v3_0_0_preview1/NEWS.md#language-changes point 3, Proc
|
530
|
+
raise Grape::Entity::Deprecated.new e.message, 'in ruby 3.0' if e.is_a?(ArgumentError)
|
531
|
+
|
532
|
+
raise e.class, e.message
|
526
533
|
end
|
527
534
|
|
528
535
|
def exec_with_attribute(attribute, &block)
|
@@ -537,7 +544,7 @@ module Grape
|
|
537
544
|
if is_defined_in_entity?(attribute)
|
538
545
|
send(attribute)
|
539
546
|
elsif @delegator_accepts_opts
|
540
|
-
delegator.delegate(attribute, self.class.delegation_opts)
|
547
|
+
delegator.delegate(attribute, **self.class.delegation_opts)
|
541
548
|
else
|
542
549
|
delegator.delegate(attribute)
|
543
550
|
end
|
@@ -113,11 +113,9 @@ module Grape
|
|
113
113
|
@key.respond_to?(:call) ? entity.exec_with_object(@options, &@key) : @key
|
114
114
|
end
|
115
115
|
|
116
|
-
def with_attr_path(entity, options)
|
116
|
+
def with_attr_path(entity, options, &block)
|
117
117
|
path_part = attr_path(entity, options)
|
118
|
-
options.with_attr_path(path_part)
|
119
|
-
yield
|
120
|
-
end
|
118
|
+
options.with_attr_path(path_part, &block)
|
121
119
|
end
|
122
120
|
|
123
121
|
def override?
|
@@ -36,6 +36,7 @@ module Grape
|
|
36
36
|
@exposures.clear
|
37
37
|
end
|
38
38
|
|
39
|
+
# rubocop:disable Style/DocumentDynamicEvalDefinition
|
39
40
|
%i[
|
40
41
|
each
|
41
42
|
to_ary to_a
|
@@ -55,6 +56,7 @@ module Grape
|
|
55
56
|
end
|
56
57
|
RUBY
|
57
58
|
end
|
59
|
+
# rubocop:enable Style/DocumentDynamicEvalDefinition
|
58
60
|
|
59
61
|
# Determine if we have any nesting exposures with the same name.
|
60
62
|
def deep_complex_nesting?(entity)
|
@@ -9,6 +9,8 @@ module Grape
|
|
9
9
|
@entity = entity
|
10
10
|
@output_hash = {}
|
11
11
|
@output_collection = []
|
12
|
+
|
13
|
+
super
|
12
14
|
end
|
13
15
|
|
14
16
|
def add(exposure, result)
|
@@ -49,6 +51,7 @@ module Grape
|
|
49
51
|
output
|
50
52
|
end
|
51
53
|
|
54
|
+
# rubocop:disable Lint/EmptyBlock
|
52
55
|
# In case if we want to solve collisions providing lambda to :merge option
|
53
56
|
def merge_strategy(for_merge)
|
54
57
|
if for_merge.respond_to? :call
|
@@ -57,6 +60,7 @@ module Grape
|
|
57
60
|
-> {}
|
58
61
|
end
|
59
62
|
end
|
63
|
+
# rubocop:enable Lint/EmptyBlock
|
60
64
|
end
|
61
65
|
end
|
62
66
|
end
|
data/lib/grape_entity/version.rb
CHANGED
@@ -30,7 +30,9 @@ describe Grape::Entity do
|
|
30
30
|
|
31
31
|
it 'makes sure that :format_with as a proc cannot be used with a block' do
|
32
32
|
# rubocop:disable Style/BlockDelimiters
|
33
|
+
# rubocop:disable Lint/EmptyBlock
|
33
34
|
expect { subject.expose :name, format_with: proc {} do p 'hi' end }.to raise_error ArgumentError
|
35
|
+
# rubocop:enable Lint/EmptyBlock
|
34
36
|
# rubocop:enable Style/BlockDelimiters
|
35
37
|
end
|
36
38
|
|
@@ -260,27 +262,50 @@ describe Grape::Entity do
|
|
260
262
|
end
|
261
263
|
end
|
262
264
|
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
'result'
|
268
|
-
end
|
265
|
+
describe 'blocks' do
|
266
|
+
class SomeObject
|
267
|
+
def method_without_args
|
268
|
+
'result'
|
269
269
|
end
|
270
|
+
end
|
271
|
+
|
272
|
+
describe 'with block passed in' do
|
273
|
+
specify do
|
274
|
+
subject.expose :that_method_without_args do |object|
|
275
|
+
object.method_without_args
|
276
|
+
end
|
277
|
+
|
278
|
+
object = SomeObject.new
|
270
279
|
|
271
|
-
|
272
|
-
|
280
|
+
value = subject.represent(object).value_for(:that_method_without_args)
|
281
|
+
expect(value).to eq('result')
|
273
282
|
end
|
283
|
+
end
|
284
|
+
|
285
|
+
context 'with block passed in via &' do
|
286
|
+
if RUBY_VERSION.start_with?('3')
|
287
|
+
specify do
|
288
|
+
subject.expose :that_method_without_args, &:method_without_args
|
289
|
+
subject.expose :method_without_args, as: :that_method_without_args_again
|
274
290
|
|
275
|
-
|
291
|
+
object = SomeObject.new
|
292
|
+
expect do
|
293
|
+
subject.represent(object).value_for(:that_method_without_args)
|
294
|
+
end.to raise_error Grape::Entity::Deprecated
|
276
295
|
|
277
|
-
|
296
|
+
value2 = subject.represent(object).value_for(:that_method_without_args_again)
|
297
|
+
expect(value2).to eq('result')
|
298
|
+
end
|
299
|
+
else
|
300
|
+
specify do
|
301
|
+
subject.expose :that_method_without_args_again, &:method_without_args
|
278
302
|
|
279
|
-
|
280
|
-
expect(value).to eq('result')
|
303
|
+
object = SomeObject.new
|
281
304
|
|
282
|
-
|
283
|
-
|
305
|
+
value2 = subject.represent(object).value_for(:that_method_without_args_again)
|
306
|
+
expect(value2).to eq('result')
|
307
|
+
end
|
308
|
+
end
|
284
309
|
end
|
285
310
|
end
|
286
311
|
|
@@ -1693,10 +1718,12 @@ describe Grape::Entity do
|
|
1693
1718
|
end
|
1694
1719
|
end
|
1695
1720
|
|
1721
|
+
# rubocop:disable Lint/EmptyBlock
|
1696
1722
|
fresh_class.class_eval do
|
1697
1723
|
expose :first_friend, using: EntitySpec::FriendEntity do |_user, _opts|
|
1698
1724
|
end
|
1699
1725
|
end
|
1726
|
+
# rubocop:enable Lint/EmptyBlock
|
1700
1727
|
|
1701
1728
|
rep = subject.value_for(:first_friend)
|
1702
1729
|
expect(rep).to be_kind_of EntitySpec::FriendEntity
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-entity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Bleigh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -190,6 +190,7 @@ files:
|
|
190
190
|
- lib/grape_entity/delegator/hash_object.rb
|
191
191
|
- lib/grape_entity/delegator/openstruct_object.rb
|
192
192
|
- lib/grape_entity/delegator/plain_object.rb
|
193
|
+
- lib/grape_entity/deprecated.rb
|
193
194
|
- lib/grape_entity/entity.rb
|
194
195
|
- lib/grape_entity/exposure.rb
|
195
196
|
- lib/grape_entity/exposure/base.rb
|
@@ -229,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
229
230
|
- !ruby/object:Gem::Version
|
230
231
|
version: '0'
|
231
232
|
requirements: []
|
232
|
-
rubygems_version: 3.1
|
233
|
+
rubygems_version: 3.2.0.rc.1
|
233
234
|
signing_key:
|
234
235
|
specification_version: 4
|
235
236
|
summary: A simple facade for managing the relationship between your model and API.
|