entity_rb 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01cab009a4a6409a362314526a1148049288eb9d
4
- data.tar.gz: b663c91b67df1893266ebf5aeea81b8bc476af6d
3
+ metadata.gz: a7bff6f5f8be6d1ebe4dd9ce6e9c0c1e7b85bc91
4
+ data.tar.gz: 27ec5d3ecb58c0fe859b708e362f0ae0e06895ad
5
5
  SHA512:
6
- metadata.gz: 41a7904c86d36c7263fea5931792a1d770ba81e7539530f1127736c2d37388d80c7fe6dca69d5577c63f4a5956b4e40a0677984b678be3e15ec629192729fb0c
7
- data.tar.gz: c3bfe5a86f736d8cb5a39ea6655dcb4331387747975aa959ff6ec806b766f1f417ce5c5bac1bae346f3163310cab1703c6d02d1aad34a4b0480b6882e6b704b6
6
+ metadata.gz: ba4c4b78b169ad65f33eafc5920f4a18cb8aa608bd3ae66f5acd59a07ce3df6a9f15452205260218eba7d2f02a7259a2932fb650d682bba4d25989a27bca40d0
7
+ data.tar.gz: b7a2c398e137a2e759547c96b82965fc4b624f037403536f3f7cb131b8853a04987188f3aa161b04227fc376a0d4b8df1fbb3dbcaa42d6f6ce9edbb827b5d5c6
@@ -1,23 +1,35 @@
1
1
  module Entity
2
2
  class Base
3
- def initialize(attributes={})
4
- attributes.each do |key, value|
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 attributes
10
- hash = {}
13
+ def set_attributes(args)
14
+ end
11
15
 
12
- fields.each do |key|
13
- hash[key.to_sym] = self.send(key)
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('Key must be a String, Symbol or Array') unless [String, Symbol, Array].include? key.class
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
@@ -1,3 +1,3 @@
1
1
  module Entity
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -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 sets field3 value' do
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 sets field4 value' do
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 TestClass < Entity::Base
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 { TestClass.new(hash) }
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 TestClass < Entity::Base
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 { TestClass.fields }
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 TestClass < Entity::Base
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 { TestClass.new.fields }
252
+ subject { Test.new.fields }
201
253
 
202
254
  it "returns a hash with all fields and it's values" do
203
- expect(TestClass).to receive(:fields)
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.2
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: 2015-02-25 00:00:00.000000000 Z
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.6
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)