horza 0.3.5 → 0.3.6

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: 3788b00b2fdf18bc5cbd7ca93fff81cb78b66e98
4
- data.tar.gz: 67bbeccedbcfa604055a2dc0e4e5ae9bae9154ed
3
+ metadata.gz: 3e0c5a3f309830bcdf12d45b896c194edd65564a
4
+ data.tar.gz: 0abdd19ad225b57350ef96861620ef52b5977d7b
5
5
  SHA512:
6
- metadata.gz: 997bb4746b4dd08b4e407be0f6ceb903be24b4332aa1b23eb25462258f4997bfe8376c0c2e5208476f7f78094ab1f57436cb1e239a01712f9494665655b90080
7
- data.tar.gz: 47f30e2a60aba80c94b226c7bb8a352eb673fa099ad1a13df777f482c056636f3940338975a528ad7c3a043a0939bb9ce7f6c31b605e1beb8585ffe3f5a7017d
6
+ metadata.gz: 96e4b16fb9944e3b4e5ea6bbdf9d0cf90902a59316f35facda683b3831d6e37d9f189121293c922e6a68800910dc7f7df9b00ffe7633ee8faaf9cb6f237580c3
7
+ data.tar.gz: 21a843a404376023ed172d82c7d6bc4f0638f599a113b6219e853464656fa3b131a04f33b01ab5455697f7aa632940040093fd2147600e1467b0ae5c5b437122
data/README.md CHANGED
@@ -21,17 +21,31 @@ user = Horza.adapt(User)
21
21
  # Examples
22
22
  user.get(id) # Find by id - Return nil on fail
23
23
  user.get!(id) # Find by id - Error on fail
24
+
24
25
  user.find_first(options) # Find 1 user - Orders by id desc by default - Return nil on fail
25
26
  user.find_first!(options) # Find 1 user - Orders by id desc by default - Error nil on fail
27
+
26
28
  user.find_all(options) # Find all users that match parameters
29
+
27
30
  user.create(options) # Create record - return nil on fail
28
31
  user.create!(options) # Create record - raise error on fail
32
+
29
33
  user.update(options) # Update record - return nil on fail
30
34
  user.update!(options) # Update record - raise error on fail
35
+
31
36
  user.delete(options) # Delete record - return nil on fail
32
37
  user.delete!(options) # Delete record - raise error on fail
38
+
33
39
  user.association(target: :employer, via: []) # Traverse association
34
40
 
41
+ # Special case: create a child record when mass-assignment is disabled for parent instance_methods
42
+ # klass is a symbol version of your model name, ie Employer is :employer, SportsCar is :sports_car
43
+ parent = { id: parent_id, klass: :employer }
44
+
45
+ user.create_as_child(parent, options) # Create record - return nil on fail
46
+ user.create_as_child!(parent, options) # Create record - raise error on fail
47
+
48
+ # With args
35
49
  conditions = { last_name: 'Turner' }
36
50
 
37
51
  # Ordering
@@ -22,5 +22,13 @@ module Horza
22
22
  def adapt(klass)
23
23
  adapter.new(klass)
24
24
  end
25
+
26
+ def single(params = {})
27
+ Horza::Entities::Single.new(params)
28
+ end
29
+
30
+ def collection(items = [])
31
+ Horza::Entities::Collection.new(items)
32
+ end
25
33
  end
26
34
  end
@@ -33,6 +33,10 @@ module Horza
33
33
  not_implemented_error
34
34
  end
35
35
 
36
+ def create_as_child!(parent, options = {})
37
+ not_implemented_error
38
+ end
39
+
36
40
  def delete!(id)
37
41
  not_implemented_error
38
42
  end
@@ -40,6 +40,13 @@ module Horza
40
40
  end
41
41
  end
42
42
 
43
+ def create_as_child!(parent_args, options = {})
44
+ run_and_convert_exceptions do
45
+ parent = Horza.adapter.context_for_entity(parent_args[:klass]).find(parent_args[:id])
46
+ create!(options.merge(parent_args[:klass] => parent))
47
+ end
48
+ end
49
+
43
50
  def update!(id, options = {})
44
51
  run_and_convert_exceptions do
45
52
  record = @context.find(id)
@@ -18,6 +18,10 @@ module Horza
18
18
  run_quietly { create!(options) }
19
19
  end
20
20
 
21
+ def create_as_child(parent_id, options = {})
22
+ run_quietly { create_as_child!(parent_id, options) }
23
+ end
24
+
21
25
  def delete(id)
22
26
  run_quietly { delete!(id) }
23
27
  end
@@ -274,6 +274,63 @@ describe Horza do
274
274
  end
275
275
  end
276
276
 
277
+ describe '#create_as_child' do
278
+ let(:employer) { HorzaSpec::Employer.create }
279
+ let(:parent) do
280
+ {
281
+ id: employer.id,
282
+ klass: :employer
283
+ }
284
+ end
285
+ let(:action) { user_adapter.create_as_child(parent, last_name: last_name) }
286
+
287
+ context 'when parameters are valid' do
288
+ it 'creates the record' do
289
+ expect { action }.to change(HorzaSpec::User, :count).by(1)
290
+ end
291
+
292
+ it 'returns the entity' do
293
+ expect(action.last_name).to eq last_name
294
+ expect(action.employer_id).to eq employer.id
295
+ end
296
+ end
297
+
298
+ context 'when parameters are invalid' do
299
+ let(:parent) do
300
+ {
301
+ id: 999,
302
+ klass: :employer
303
+ }
304
+ end
305
+
306
+ it 'does not create the record' do
307
+ expect { action }.to change(HorzaSpec::User, :count).by(0)
308
+ end
309
+
310
+ it 'returns nil' do
311
+ expect(action).to be nil
312
+ end
313
+ end
314
+ end
315
+
316
+ describe '#create_as_child!' do
317
+ let(:employer) { HorzaSpec::Employer.create }
318
+ let(:action) { user_adapter.create_as_child!(parent, last_name: last_name) }
319
+
320
+ context 'when parameters are invalid' do
321
+ let(:parent) do
322
+ {
323
+ id: 999,
324
+ klass: :employer
325
+ }
326
+ end
327
+
328
+ it 'throws error' do
329
+ expect { action }.to raise_error Horza::Errors::RecordNotFound
330
+ end
331
+ end
332
+ end
333
+
277
334
  describe '#update' do
278
335
  let(:customer) { HorzaSpec::Customer.create(last_name: last_name) }
279
336
 
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.3.5
4
+ version: 0.3.6
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-06-18 00:00:00.000000000 Z
11
+ date: 2015-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie