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 +4 -4
- data/lib/horza/adapters/abstract_adapter.rb +30 -3
- data/lib/horza/adapters/active_record.rb +31 -4
- data/lib/horza/errors.rb +6 -0
- data/spec/active_record_spec.rb +110 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6313d7a6f90f6db3f51ed94b16b0de3498f2209f
|
4
|
+
data.tar.gz: eb2ecb68bb20c23db8032fe660a1b401b3b71fcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
|
data/lib/horza/errors.rb
CHANGED
data/spec/active_record_spec.rb
CHANGED
@@ -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
|
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
|
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.
|
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-
|
11
|
+
date: 2015-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|