grape-entity 0.6.1 → 0.7.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.
- checksums.yaml +5 -5
- data/.coveralls.yml +1 -0
- data/.gitignore +5 -1
- data/.rubocop.yml +31 -0
- data/.rubocop_todo.yml +29 -16
- data/.travis.yml +15 -10
- data/CHANGELOG.md +18 -0
- data/Dangerfile +2 -0
- data/Gemfile +6 -1
- data/README.md +82 -1
- data/Rakefile +2 -2
- data/bench/serializing.rb +2 -0
- data/grape-entity.gemspec +9 -7
- data/lib/grape-entity.rb +2 -0
- data/lib/grape_entity.rb +2 -0
- data/lib/grape_entity/condition.rb +20 -11
- data/lib/grape_entity/condition/base.rb +2 -0
- data/lib/grape_entity/condition/block_condition.rb +3 -1
- data/lib/grape_entity/condition/hash_condition.rb +2 -0
- data/lib/grape_entity/condition/symbol_condition.rb +2 -0
- data/lib/grape_entity/delegator.rb +10 -9
- data/lib/grape_entity/delegator/base.rb +2 -0
- data/lib/grape_entity/delegator/fetchable_object.rb +2 -0
- data/lib/grape_entity/delegator/hash_object.rb +2 -0
- data/lib/grape_entity/delegator/openstruct_object.rb +2 -0
- data/lib/grape_entity/delegator/plain_object.rb +2 -0
- data/lib/grape_entity/entity.rb +49 -29
- data/lib/grape_entity/exposure.rb +58 -41
- data/lib/grape_entity/exposure/base.rb +14 -3
- data/lib/grape_entity/exposure/block_exposure.rb +2 -0
- data/lib/grape_entity/exposure/delegator_exposure.rb +2 -0
- data/lib/grape_entity/exposure/formatter_block_exposure.rb +2 -0
- data/lib/grape_entity/exposure/formatter_exposure.rb +2 -0
- data/lib/grape_entity/exposure/nesting_exposure.rb +34 -30
- data/lib/grape_entity/exposure/nesting_exposure/nested_exposures.rb +23 -14
- data/lib/grape_entity/exposure/nesting_exposure/output_builder.rb +5 -2
- data/lib/grape_entity/exposure/represent_exposure.rb +3 -1
- data/lib/grape_entity/options.rb +41 -56
- data/lib/grape_entity/version.rb +3 -1
- data/spec/grape_entity/entity_spec.rb +202 -47
- data/spec/grape_entity/exposure/nesting_exposure/nested_exposures_spec.rb +6 -4
- data/spec/grape_entity/exposure/represent_exposure_spec.rb +2 -0
- data/spec/grape_entity/exposure_spec.rb +14 -2
- data/spec/grape_entity/hash_spec.rb +2 -0
- data/spec/grape_entity/options_spec.rb +66 -0
- data/spec/spec_helper.rb +11 -0
- metadata +28 -39
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Grape::Entity::Exposure::NestingExposure::NestedExposures do
|
4
6
|
subject(:nested_exposures) { described_class.new([]) }
|
5
7
|
|
6
|
-
describe '#deep_complex_nesting?' do
|
8
|
+
describe '#deep_complex_nesting?(entity)' do
|
7
9
|
it 'is reset when additional exposure is added' do
|
8
10
|
subject << Grape::Entity::Exposure.new(:x, {})
|
9
11
|
expect(subject.instance_variable_get(:@deep_complex_nesting)).to be_nil
|
10
|
-
subject.deep_complex_nesting?
|
12
|
+
subject.deep_complex_nesting?(subject)
|
11
13
|
expect(subject.instance_variable_get(:@deep_complex_nesting)).to_not be_nil
|
12
14
|
subject << Grape::Entity::Exposure.new(:y, {})
|
13
15
|
expect(subject.instance_variable_get(:@deep_complex_nesting)).to be_nil
|
@@ -16,7 +18,7 @@ describe Grape::Entity::Exposure::NestingExposure::NestedExposures do
|
|
16
18
|
it 'is reset when exposure is deleted' do
|
17
19
|
subject << Grape::Entity::Exposure.new(:x, {})
|
18
20
|
expect(subject.instance_variable_get(:@deep_complex_nesting)).to be_nil
|
19
|
-
subject.deep_complex_nesting?
|
21
|
+
subject.deep_complex_nesting?(subject)
|
20
22
|
expect(subject.instance_variable_get(:@deep_complex_nesting)).to_not be_nil
|
21
23
|
subject.delete_by(:x)
|
22
24
|
expect(subject.instance_variable_get(:@deep_complex_nesting)).to be_nil
|
@@ -25,7 +27,7 @@ describe Grape::Entity::Exposure::NestingExposure::NestedExposures do
|
|
25
27
|
it 'is reset when exposures are cleared' do
|
26
28
|
subject << Grape::Entity::Exposure.new(:x, {})
|
27
29
|
expect(subject.instance_variable_get(:@deep_complex_nesting)).to be_nil
|
28
|
-
subject.deep_complex_nesting?
|
30
|
+
subject.deep_complex_nesting?(subject)
|
29
31
|
expect(subject.instance_variable_get(:@deep_complex_nesting)).to_not be_nil
|
30
32
|
subject.clear
|
31
33
|
expect(subject.instance_variable_get(:@deep_complex_nesting)).to be_nil
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Grape::Entity::Exposure do
|
@@ -24,12 +26,22 @@ describe Grape::Entity::Exposure do
|
|
24
26
|
describe '#key' do
|
25
27
|
it 'returns the attribute if no :as is set' do
|
26
28
|
fresh_class.expose :name
|
27
|
-
expect(subject.key).to eq :name
|
29
|
+
expect(subject.key(entity)).to eq :name
|
28
30
|
end
|
29
31
|
|
30
32
|
it 'returns the :as alias if one exists' do
|
31
33
|
fresh_class.expose :name, as: :nombre
|
32
|
-
expect(subject.key).to eq :nombre
|
34
|
+
expect(subject.key(entity)).to eq :nombre
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns the result if :as is a proc' do
|
38
|
+
fresh_class.expose :name, as: proc { object.name.reverse }
|
39
|
+
expect(subject.key(entity)).to eq(model.name.reverse)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns the result if :as is a lambda' do
|
43
|
+
fresh_class.expose :name, as: ->(obj, _opts) { obj.name.reverse }
|
44
|
+
expect(subject.key(entity)).to eq(model.name.reverse)
|
33
45
|
end
|
34
46
|
end
|
35
47
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Grape::Entity::Options do
|
6
|
+
module EntitySpec
|
7
|
+
class Crystalline
|
8
|
+
attr_accessor :prop1, :prop2, :prop3
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@prop1 = 'value1'
|
12
|
+
@prop2 = 'value2'
|
13
|
+
@prop3 = 'value3'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class CrystallineEntity < Grape::Entity
|
18
|
+
expose :prop1, if: ->(_, options) { options.fetch(:signal) }
|
19
|
+
expose :prop2, if: ->(_, options) { options.fetch(:beam, 'destructive') == 'destructive' }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context '#fetch' do
|
24
|
+
it 'without passing in a required option raises KeyError' do
|
25
|
+
expect { EntitySpec::CrystallineEntity.represent(EntitySpec::Crystalline.new).as_json }.to raise_error KeyError
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'passing in a required option will expose the values' do
|
29
|
+
crystalline_entity = EntitySpec::CrystallineEntity.represent(EntitySpec::Crystalline.new, signal: true)
|
30
|
+
expect(crystalline_entity.as_json).to eq(prop1: 'value1', prop2: 'value2')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'with an option that is not default will not expose that value' do
|
34
|
+
crystalline_entity = EntitySpec::CrystallineEntity.represent(EntitySpec::Crystalline.new, signal: true, beam: 'intermittent')
|
35
|
+
expect(crystalline_entity.as_json).to eq(prop1: 'value1')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context '#dig', skip: !{}.respond_to?(:dig) do
|
40
|
+
let(:model_class) do
|
41
|
+
Class.new do
|
42
|
+
attr_accessor :prop1
|
43
|
+
|
44
|
+
def initialize
|
45
|
+
@prop1 = 'value1'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
let(:entity_class) do
|
51
|
+
Class.new(Grape::Entity) do
|
52
|
+
expose :prop1, if: ->(_, options) { options.dig(:first, :second) == :nested }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'without passing in a expected option hide the value' do
|
57
|
+
entity = entity_class.represent(model_class.new, first: { invalid: :nested })
|
58
|
+
expect(entity.as_json).to eq({})
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'passing in a expected option will expose the values' do
|
62
|
+
entity = entity_class.represent(model_class.new, first: { second: :nested })
|
63
|
+
expect(entity.as_json).to eq(prop1: 'value1')
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'simplecov'
|
4
|
+
require 'coveralls'
|
5
|
+
|
6
|
+
SimpleCov.start do
|
7
|
+
add_filter 'spec/'
|
8
|
+
end
|
9
|
+
|
10
|
+
Coveralls.wear!
|
11
|
+
|
1
12
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
13
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
14
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-entity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Bleigh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '4.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:
|
26
|
+
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: multi_json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.3.2
|
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:
|
40
|
+
version: 1.3.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: maruku
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,35 +67,21 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0.40'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0.40'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rspec
|
70
|
+
name: pry
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- - "
|
73
|
+
- - ">="
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
75
|
+
version: '0'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- - "
|
80
|
+
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
82
|
+
version: '0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
84
|
+
name: pry-byebug
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
87
|
- - ">="
|
@@ -109,7 +95,7 @@ dependencies:
|
|
109
95
|
- !ruby/object:Gem::Version
|
110
96
|
version: '0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
98
|
+
name: rack-test
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - ">="
|
@@ -123,7 +109,7 @@ dependencies:
|
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '0'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
112
|
+
name: rake
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
128
114
|
requirements:
|
129
115
|
- - ">="
|
@@ -137,21 +123,21 @@ dependencies:
|
|
137
123
|
- !ruby/object:Gem::Version
|
138
124
|
version: '0'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
126
|
+
name: rspec
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
143
|
-
- - "
|
129
|
+
- - "~>"
|
144
130
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
131
|
+
version: '3.0'
|
146
132
|
type: :development
|
147
133
|
prerelease: false
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
|
-
- - "
|
136
|
+
- - "~>"
|
151
137
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
138
|
+
version: '3.0'
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
140
|
+
name: yard
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
156
142
|
requirements:
|
157
143
|
- - ">="
|
@@ -172,6 +158,7 @@ executables: []
|
|
172
158
|
extensions: []
|
173
159
|
extra_rdoc_files: []
|
174
160
|
files:
|
161
|
+
- ".coveralls.yml"
|
175
162
|
- ".gitignore"
|
176
163
|
- ".rspec"
|
177
164
|
- ".rubocop.yml"
|
@@ -221,6 +208,7 @@ files:
|
|
221
208
|
- spec/grape_entity/exposure/represent_exposure_spec.rb
|
222
209
|
- spec/grape_entity/exposure_spec.rb
|
223
210
|
- spec/grape_entity/hash_spec.rb
|
211
|
+
- spec/grape_entity/options_spec.rb
|
224
212
|
- spec/spec_helper.rb
|
225
213
|
homepage: https://github.com/ruby-grape/grape-entity
|
226
214
|
licenses:
|
@@ -234,7 +222,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
234
222
|
requirements:
|
235
223
|
- - ">="
|
236
224
|
- !ruby/object:Gem::Version
|
237
|
-
version: 2.
|
225
|
+
version: '2.3'
|
238
226
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
227
|
requirements:
|
240
228
|
- - ">="
|
@@ -242,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
242
230
|
version: '0'
|
243
231
|
requirements: []
|
244
232
|
rubyforge_project: grape-entity
|
245
|
-
rubygems_version: 2.
|
233
|
+
rubygems_version: 2.7.3
|
246
234
|
signing_key:
|
247
235
|
specification_version: 4
|
248
236
|
summary: A simple facade for managing the relationship between your model and API.
|
@@ -252,4 +240,5 @@ test_files:
|
|
252
240
|
- spec/grape_entity/exposure/represent_exposure_spec.rb
|
253
241
|
- spec/grape_entity/exposure_spec.rb
|
254
242
|
- spec/grape_entity/hash_spec.rb
|
243
|
+
- spec/grape_entity/options_spec.rb
|
255
244
|
- spec/spec_helper.rb
|