entity_rb 0.0.2 → 0.1.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 +4 -4
- data/lib/entity_rb/base.rb +27 -12
- data/lib/entity_rb/version.rb +1 -1
- data/spec/entity/base_spec.rb +61 -9
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a7bff6f5f8be6d1ebe4dd9ce6e9c0c1e7b85bc91
|
4
|
+
data.tar.gz: 27ec5d3ecb58c0fe859b708e362f0ae0e06895ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba4c4b78b169ad65f33eafc5920f4a18cb8aa608bd3ae66f5acd59a07ce3df6a9f15452205260218eba7d2f02a7259a2932fb650d682bba4d25989a27bca40d0
|
7
|
+
data.tar.gz: b7a2c398e137a2e759547c96b82965fc4b624f037403536f3f7cb131b8853a04987188f3aa161b04227fc376a0d4b8df1fbb3dbcaa42d6f6ce9edbb827b5d5c6
|
data/lib/entity_rb/base.rb
CHANGED
@@ -1,23 +1,35 @@
|
|
1
1
|
module Entity
|
2
2
|
class Base
|
3
|
-
def initialize(
|
4
|
-
attributes
|
3
|
+
def initialize(args={})
|
4
|
+
attributes = {} unless args
|
5
|
+
|
6
|
+
args.each do |key, value|
|
5
7
|
send("#{key}=", value) if fields.include? key.to_sym
|
6
8
|
end
|
9
|
+
|
10
|
+
set_attributes(args)
|
7
11
|
end
|
8
12
|
|
9
|
-
def
|
10
|
-
|
13
|
+
def set_attributes(args)
|
14
|
+
end
|
11
15
|
|
12
|
-
|
13
|
-
|
16
|
+
def to_h
|
17
|
+
{}.tap do |hash|
|
18
|
+
fields.each do |key|
|
19
|
+
hash[key] = send(key) unless send(key).nil?
|
20
|
+
end
|
14
21
|
end
|
15
|
-
|
16
|
-
hash
|
17
22
|
end
|
18
23
|
|
24
|
+
alias attributes to_h
|
25
|
+
alias to_hash to_h
|
26
|
+
|
19
27
|
def self.fields
|
20
|
-
@fields
|
28
|
+
return @fields if @fields
|
29
|
+
|
30
|
+
@fields = parent && parent.respond_to?(:fields) ? parent.fields.dup : []
|
31
|
+
|
32
|
+
field @fields
|
21
33
|
end
|
22
34
|
|
23
35
|
def fields
|
@@ -26,9 +38,7 @@ module Entity
|
|
26
38
|
|
27
39
|
protected
|
28
40
|
def self.field(key)
|
29
|
-
raise ArgumentError.new('
|
30
|
-
|
31
|
-
@fields ||= []
|
41
|
+
raise ArgumentError.new('Fields must be a String, Symbol or Array') unless [String, Symbol, Array].include? key.class
|
32
42
|
|
33
43
|
if key.is_a? Array
|
34
44
|
key.each do |k|
|
@@ -43,5 +53,10 @@ module Entity
|
|
43
53
|
attr_accessor key.to_sym
|
44
54
|
end
|
45
55
|
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def self.parent
|
59
|
+
(respond_to?(:superclass) && superclass != Object) ? superclass : nil
|
60
|
+
end
|
46
61
|
end
|
47
62
|
end
|
data/lib/entity_rb/version.rb
CHANGED
data/spec/entity/base_spec.rb
CHANGED
@@ -1,6 +1,31 @@
|
|
1
1
|
require './lib/entity_rb/base'
|
2
2
|
|
3
3
|
describe Entity::Base do
|
4
|
+
after do
|
5
|
+
Object.send(:remove_const, :Test) if Object.const_defined?(:Test)
|
6
|
+
Object.send(:remove_const, :Child) if Object.const_defined?(:Child)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '.initialize' do
|
10
|
+
before do
|
11
|
+
class Test < Entity::Base
|
12
|
+
field :field1
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
subject { Test.new(field1: 'field1') }
|
17
|
+
|
18
|
+
it 'sets fields values' do
|
19
|
+
expect(subject.field1).to eq 'field1'
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'calls set_attributes on instance' do
|
23
|
+
expect_any_instance_of(Test).to receive(:set_attributes)
|
24
|
+
|
25
|
+
subject
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
4
29
|
describe '.field' do
|
5
30
|
before do
|
6
31
|
class Test < Entity::Base
|
@@ -125,11 +150,11 @@ describe Entity::Base do
|
|
125
150
|
expect(subject.field2).to eq 'field2'
|
126
151
|
end
|
127
152
|
|
128
|
-
it 'does not
|
153
|
+
it 'does not set field3 value' do
|
129
154
|
expect{subject.field3}.to raise_error(NoMethodError)
|
130
155
|
end
|
131
156
|
|
132
|
-
it 'does not
|
157
|
+
it 'does not set field4 value' do
|
133
158
|
expect{subject.field4}.to raise_error(NoMethodError)
|
134
159
|
end
|
135
160
|
end
|
@@ -145,13 +170,40 @@ describe Entity::Base do
|
|
145
170
|
expect(subject.field2).to be_nil
|
146
171
|
end
|
147
172
|
end
|
173
|
+
|
174
|
+
context 'when class has a parent entity' do
|
175
|
+
before do
|
176
|
+
class Test < Entity::Base
|
177
|
+
field :field1
|
178
|
+
field :field2
|
179
|
+
end
|
180
|
+
|
181
|
+
class Child < Test
|
182
|
+
field :field3
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
subject { Child.new(field1: 'field1', field2: 'field2', field3: 'field3') }
|
187
|
+
|
188
|
+
it 'parent does not inherit Child fields' do
|
189
|
+
expect(Test.fields).to eq [:field1, :field2]
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'has parent fields' do
|
193
|
+
expect(subject.field1).to eq 'field1'
|
194
|
+
end
|
195
|
+
|
196
|
+
it 'has its own fields' do
|
197
|
+
expect(subject.field3).to eq 'field3'
|
198
|
+
end
|
199
|
+
end
|
148
200
|
end
|
149
201
|
|
150
202
|
describe '#attributes' do
|
151
203
|
let(:hash) { { field1: 'field1', field2: 'field2', field3: 'field3', field4: 'field4' } }
|
152
204
|
|
153
205
|
before do
|
154
|
-
class
|
206
|
+
class Test < Entity::Base
|
155
207
|
field :field1
|
156
208
|
field :field2
|
157
209
|
field :field3
|
@@ -159,7 +211,7 @@ describe Entity::Base do
|
|
159
211
|
end
|
160
212
|
end
|
161
213
|
|
162
|
-
subject {
|
214
|
+
subject { Test.new(hash) }
|
163
215
|
|
164
216
|
it "returns a hash with all fields and it's values" do
|
165
217
|
expect(subject.attributes).to eq hash
|
@@ -168,7 +220,7 @@ describe Entity::Base do
|
|
168
220
|
|
169
221
|
describe '.fields' do
|
170
222
|
before do
|
171
|
-
class
|
223
|
+
class Test < Entity::Base
|
172
224
|
field :field1
|
173
225
|
field :field2
|
174
226
|
field :field3
|
@@ -176,7 +228,7 @@ describe Entity::Base do
|
|
176
228
|
end
|
177
229
|
end
|
178
230
|
|
179
|
-
subject {
|
231
|
+
subject { Test.fields }
|
180
232
|
|
181
233
|
it "returns a hash with all fields and it's values" do
|
182
234
|
expect(subject).to eq [:field1, :field2, :field3, :field4]
|
@@ -185,7 +237,7 @@ describe Entity::Base do
|
|
185
237
|
|
186
238
|
describe '#fields' do
|
187
239
|
before do
|
188
|
-
class
|
240
|
+
class Test < Entity::Base
|
189
241
|
field :field1
|
190
242
|
field :field1
|
191
243
|
field :field2
|
@@ -197,10 +249,10 @@ describe Entity::Base do
|
|
197
249
|
end
|
198
250
|
end
|
199
251
|
|
200
|
-
subject {
|
252
|
+
subject { Test.new.fields }
|
201
253
|
|
202
254
|
it "returns a hash with all fields and it's values" do
|
203
|
-
expect(
|
255
|
+
expect(Test).to receive(:fields)
|
204
256
|
|
205
257
|
subject
|
206
258
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: entity_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Caio Torres e Paulo Patto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -92,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
92
|
version: '0'
|
93
93
|
requirements: []
|
94
94
|
rubyforge_project:
|
95
|
-
rubygems_version: 2.4.
|
95
|
+
rubygems_version: 2.4.5.1
|
96
96
|
signing_key:
|
97
97
|
specification_version: 4
|
98
98
|
summary: An Entity implementation to store all business logic from the (so called)
|