horza 0.1.2 → 0.2.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: aa0c514a09b3c9cc5c381187de5123e83d6bbc20
4
- data.tar.gz: d6fb63bc973ed1cca3b703d8eceb5390163a5a0e
3
+ metadata.gz: 6313d7a6f90f6db3f51ed94b16b0de3498f2209f
4
+ data.tar.gz: eb2ecb68bb20c23db8032fe660a1b401b3b71fcf
5
5
  SHA512:
6
- metadata.gz: d59d0f2c0ab53696247e2144f34541a3a60074731e1431cea21ea73d3da6beab250a2cd0a57f55a52f75d695e0d49ccc3d22c8f570d0c9d86787e87073203371
7
- data.tar.gz: 8970bb56079f409f998e36a5d97192d5cec75f04a0ee05ac87611def55a51458b4c92b1c0901e64c25a746249f8b16dfb72777150e145e6f03db49676428349b
6
+ metadata.gz: c73d0a6d329c3326d8161ab9358407d6aa253f0137d2d5bb8afbd60301189b85aa7965aa5189ed95b39855243bf8fefb19ab7d0f288e5a27fb5a47c79175f322
7
+ data.tar.gz: 91988862e8911b424c7feeedcdba37b4bdd09dcfdcdf2c7885311df15ebb9548ba9037562f2b4f18e17355a3d97f2ecc66b9fa336df7062b703b37b36420ef58
@@ -5,7 +5,7 @@ module Horza
5
5
 
6
6
  class << self
7
7
  def expected_errors
8
- not_implemented_error
8
+ [::Horza::Errors::RecordNotFound, ::Horza::Errors::RecordInvalid]
9
9
  end
10
10
 
11
11
  def context_for_entity(entity)
@@ -26,7 +26,7 @@ module Horza
26
26
  end
27
27
 
28
28
  def get(options = {})
29
- get!(options = {})
29
+ get!(options)
30
30
  rescue *self.class.expected_errors
31
31
  end
32
32
 
@@ -35,7 +35,7 @@ module Horza
35
35
  end
36
36
 
37
37
  def find_first(options = {})
38
- find_first!(options = {})
38
+ find_first!(options)
39
39
  rescue *self.class.expected_errors
40
40
  end
41
41
 
@@ -47,6 +47,33 @@ module Horza
47
47
  not_implemented_error
48
48
  end
49
49
 
50
+ def create(options = {})
51
+ create!(options)
52
+ rescue *self.class.expected_errors
53
+ end
54
+
55
+ def create!(options = {})
56
+ not_implemented_error
57
+ end
58
+
59
+ def delete(id)
60
+ delete!(id)
61
+ rescue *self.class.expected_errors
62
+ end
63
+
64
+ def delete!(id)
65
+ not_implemented_error
66
+ end
67
+
68
+ def update(id, options = {})
69
+ update!(id, options)
70
+ rescue *self.class.expected_errors
71
+ end
72
+
73
+ def update!(id, options = {})
74
+ not_implemented_error
75
+ end
76
+
50
77
  def ancestors(options = {})
51
78
  not_implemented_error
52
79
  end
@@ -4,10 +4,6 @@ module Horza
4
4
  INVALID_ANCESTRY_MSG = 'Invalid relation. Ensure that the plurality of your associations is correct.'
5
5
 
6
6
  class << self
7
- def expected_errors
8
- [::ActiveRecord::RecordNotFound]
9
- end
10
-
11
7
  def context_for_entity(entity)
12
8
  entity_context_map[entity]
13
9
  end
@@ -19,16 +15,47 @@ module Horza
19
15
 
20
16
  def get!(id)
21
17
  entity_class(@context.find(id).attributes)
18
+ rescue ::ActiveRecord::RecordNotFound => e
19
+ raise Horza::Errors::RecordNotFound.new(e)
22
20
  end
23
21
 
24
22
  def find_first!(options = {})
25
23
  entity_class(base_query(options).first!.attributes)
24
+ rescue ::ActiveRecord::RecordNotFound => e
25
+ raise Horza::Errors::RecordNotFound.new(e)
26
26
  end
27
27
 
28
28
  def find_all(options = {})
29
29
  entity_class(base_query(options))
30
30
  end
31
31
 
32
+ def create!(options = {})
33
+ record = @context.new(options)
34
+ record.save!
35
+ entity_class(record.attributes)
36
+ rescue ::ActiveRecord::RecordInvalid => e
37
+ raise Horza::Errors::RecordInvalid.new(e)
38
+ end
39
+
40
+ def update!(id, options = {})
41
+ record = @context.find(id)
42
+ record.assign_attributes(options)
43
+ record.save!
44
+ record
45
+ rescue ::ActiveRecord::RecordNotFound => e
46
+ raise Horza::Errors::RecordNotFound.new(e)
47
+ rescue ::ActiveRecord::RecordInvalid => e
48
+ raise Horza::Errors::RecordInvalid.new(e)
49
+ end
50
+
51
+ def delete!(id)
52
+ record = @context.find(id)
53
+ record.destroy!
54
+ true
55
+ rescue ::ActiveRecord::RecordNotFound => e
56
+ raise Horza::Errors::RecordNotFound.new(e)
57
+ end
58
+
32
59
  def ancestors(options = {})
33
60
  result = walk_family_tree(@context.find(options[:id]), options)
34
61
 
@@ -14,5 +14,11 @@ module Horza
14
14
 
15
15
  class CannotGetHashFromCollection < StandardError
16
16
  end
17
+
18
+ class RecordInvalid < StandardError
19
+ end
20
+
21
+ class RecordNotFound < StandardError
22
+ end
17
23
  end
18
24
  end
@@ -9,6 +9,7 @@ else
9
9
  ActiveRecord::Schema.define(:version => 0) do
10
10
  create_table(:employers, force: true) {|t| t.string :name }
11
11
  create_table(:users, force: true) {|t| t.string :first_name; t.string :last_name; t.references :employer; }
12
+ create_table(:customers, force: true) {|t| t.string :first_name; t.string :last_name; }
12
13
  create_table(:sports_cars, force: true) {|t| t.string :make; t.references :employer; }
13
14
  create_table(:dummy_models, force: true) {|t| t.string :key }
14
15
  create_table(:other_dummy_models, force: true) {|t| t.string :key }
@@ -25,6 +26,10 @@ else
25
26
  belongs_to :employer
26
27
  end
27
28
 
29
+ class Customer < ActiveRecord::Base
30
+ validates :last_name, presence: true
31
+ end
32
+
28
33
  class SportsCar < ActiveRecord::Base
29
34
  belongs_to :employer
30
35
  end
@@ -43,6 +48,7 @@ describe Horza do
43
48
  let(:last_name) { 'Turner' }
44
49
  let(:adapter) { :active_record }
45
50
  let(:user_adapter) { Horza.adapter.new(HorzaSpec::User) }
51
+ let(:customer_adapter) { Horza.adapter.new(HorzaSpec::Customer) }
46
52
  let(:employer_adapter) { Horza.adapter.new(HorzaSpec::Employer) }
47
53
  let(:sports_car_adapter) { Horza.adapter.new(HorzaSpec::SportsCar) }
48
54
 
@@ -71,7 +77,7 @@ describe Horza do
71
77
 
72
78
  context 'when user does not exist' do
73
79
  it 'throws error' do
74
- expect { user_adapter.get!(999) }.to raise_error ActiveRecord::RecordNotFound
80
+ expect { user_adapter.get!(999) }.to raise_error Horza::Errors::RecordNotFound
75
81
  end
76
82
  end
77
83
  end
@@ -101,7 +107,7 @@ describe Horza do
101
107
 
102
108
  context 'when user does not exist' do
103
109
  it 'throws error' do
104
- expect { user_adapter.find_first!(last_name: last_name) }.to raise_error ActiveRecord::RecordNotFound
110
+ expect { user_adapter.find_first!(last_name: last_name) }.to raise_error Horza::Errors::RecordNotFound
105
111
  end
106
112
  end
107
113
  end
@@ -132,6 +138,108 @@ describe Horza do
132
138
  end
133
139
  end
134
140
 
141
+ describe '#create' do
142
+ context 'when parameters are valid' do
143
+ it 'creates the record' do
144
+ expect { customer_adapter.create(last_name: last_name) }.to change(HorzaSpec::Customer, :count).by(1)
145
+ end
146
+
147
+ it 'returns the entity' do
148
+ expect(customer_adapter.create(last_name: last_name).last_name).to eq last_name
149
+ end
150
+ end
151
+
152
+ context 'when parameters are invalid' do
153
+ it 'does not create the record' do
154
+ expect { customer_adapter.create }.to change(HorzaSpec::Customer, :count).by(0)
155
+ end
156
+
157
+ it 'returns nil' do
158
+ expect(customer_adapter.create).to be nil
159
+ end
160
+ end
161
+ end
162
+
163
+ describe '#create!' do
164
+ context 'when parameters are invalid' do
165
+ it 'throws error' do
166
+ expect { customer_adapter.create! }.to raise_error Horza::Errors::RecordInvalid
167
+ end
168
+ end
169
+ end
170
+
171
+ describe '#update' do
172
+ let(:customer) { HorzaSpec::Customer.create(last_name: last_name) }
173
+
174
+ context 'when parameters are valid' do
175
+ let(:updated_last_name) { 'Smith' }
176
+
177
+ it 'returns the updated entity' do
178
+ expect(customer_adapter.update(customer.id, last_name: updated_last_name).last_name).to eq updated_last_name
179
+ end
180
+ end
181
+
182
+ context 'when parameters are invalid' do
183
+ it 'returns nil' do
184
+ expect(customer_adapter.update(customer.id, last_name: nil)).to be nil
185
+ end
186
+ end
187
+
188
+ context 'when record does not exist' do
189
+ it 'returns nil' do
190
+ expect(customer_adapter.update(999)).to be nil
191
+ end
192
+ end
193
+ end
194
+
195
+ describe '#update!' do
196
+ let(:customer) { HorzaSpec::Customer.create(last_name: last_name) }
197
+
198
+ context 'when parameters are invalid' do
199
+ it 'throws error' do
200
+ expect { customer_adapter.update!(customer.id, last_name: nil) }.to raise_error Horza::Errors::RecordInvalid
201
+ end
202
+ end
203
+
204
+ context 'when record does not exist' do
205
+ it 'returns nil' do
206
+ expect { customer_adapter.update!(999) }.to raise_error Horza::Errors::RecordNotFound
207
+ end
208
+ end
209
+ end
210
+
211
+ describe '#delete' do
212
+ let!(:customer) { HorzaSpec::Customer.create(last_name: last_name) }
213
+
214
+ context 'when record exists' do
215
+ let(:updated_last_name) { 'Smith' }
216
+
217
+ it 'destroys the record' do
218
+ expect { customer_adapter.delete(customer.id) }.to change(HorzaSpec::Customer, :count).by(-1)
219
+ end
220
+
221
+ it 'returns true' do
222
+ expect(customer_adapter.delete(customer.id)).to be true
223
+ end
224
+ end
225
+
226
+ context 'when record does not exist' do
227
+ it 'returns nil' do
228
+ expect(customer_adapter.delete(999)).to be nil
229
+ end
230
+ end
231
+ end
232
+
233
+ describe '#delete!' do
234
+ let(:customer) { HorzaSpec::Customer.create(last_name: last_name) }
235
+
236
+ context 'when record does not exist' do
237
+ it 'returns nil' do
238
+ expect { customer_adapter.delete!(999) }.to raise_error Horza::Errors::RecordNotFound
239
+ end
240
+ end
241
+ end
242
+
135
243
  context '#ancestors' do
136
244
  context 'direct relation' do
137
245
  let(:employer) { HorzaSpec::Employer.create }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: horza
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Turner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-27 00:00:00.000000000 Z
11
+ date: 2015-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie