horza 0.1.2 → 0.2.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: 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