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 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)