simple_record 1.0.3 → 1.0.4
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.
- data/lib/simple_record.rb +63 -37
- data/test/test_simple_record.rb +23 -0
- metadata +2 -2
data/lib/simple_record.rb
CHANGED
@@ -29,7 +29,7 @@ require 'local_cache'
|
|
29
29
|
|
30
30
|
module SimpleRecord
|
31
31
|
|
32
|
-
VERSION = '1.0.
|
32
|
+
VERSION = '1.0.4'
|
33
33
|
|
34
34
|
class Base < RightAws::ActiveSdb::Base
|
35
35
|
|
@@ -386,7 +386,44 @@ VERSION = '1.0.3'
|
|
386
386
|
|
387
387
|
def save(*params)
|
388
388
|
# puts 'SAVING: ' + self.inspect
|
389
|
+
ok = pre_save(*params)
|
390
|
+
if ok
|
391
|
+
begin
|
392
|
+
# puts 'is frozen? ' + self.frozen?.to_s + ' - ' + self.inspect
|
393
|
+
to_delete = get_atts_to_delete
|
394
|
+
if super(*params)
|
395
|
+
# puts 'SAVED super'
|
396
|
+
self.class.cache_results(self)
|
397
|
+
delete_niled(to_delete)
|
398
|
+
if run_after_save && is_create ? run_after_create : run_after_update
|
399
|
+
return true
|
400
|
+
else
|
401
|
+
#I thought about calling destroy here, but rails doesn't behave that way, so neither will I
|
402
|
+
return false
|
403
|
+
end
|
404
|
+
else
|
405
|
+
return false
|
406
|
+
end
|
407
|
+
rescue RightAws::AwsError
|
408
|
+
# puts "RESCUED in save: " + $!
|
409
|
+
if (domain_ok($!))
|
410
|
+
if !@create_domain_called
|
411
|
+
@create_domain_called = true
|
412
|
+
save(*params)
|
413
|
+
else
|
414
|
+
raise $!
|
415
|
+
end
|
416
|
+
else
|
417
|
+
raise $!
|
418
|
+
end
|
419
|
+
end
|
420
|
+
else
|
421
|
+
#@debug = "not saved"
|
422
|
+
return false
|
423
|
+
end
|
424
|
+
end
|
389
425
|
|
426
|
+
def pre_save(*params)
|
390
427
|
if respond_to?('validate')
|
391
428
|
validate
|
392
429
|
# puts 'AFTER VALIDATIONS, ERRORS=' + errors.inspect
|
@@ -405,7 +442,10 @@ VERSION = '1.0.3'
|
|
405
442
|
ok = before_update
|
406
443
|
end
|
407
444
|
end
|
408
|
-
if ok
|
445
|
+
if ok
|
446
|
+
ok = run_before_save && is_create ? run_before_create : run_before_update
|
447
|
+
end
|
448
|
+
if ok
|
409
449
|
# puts 'ABOUT TO SAVE: ' + self.inspect
|
410
450
|
# First we gotta pad and offset
|
411
451
|
if !@@ints.nil?
|
@@ -416,9 +456,7 @@ VERSION = '1.0.3'
|
|
416
456
|
# puts @attributes.inspect
|
417
457
|
# puts @attributes[i.to_s].inspect
|
418
458
|
arr = @attributes[i.to_s]
|
419
|
-
arr.collect!{ |x|
|
420
|
-
self.class.pad_and_offset(x)
|
421
|
-
}
|
459
|
+
arr.collect!{ |x| self.class.pad_and_offset(x) }
|
422
460
|
@attributes[i.to_s] = arr
|
423
461
|
# puts 'after: ' + @attributes[i.to_s].inspect
|
424
462
|
else
|
@@ -426,39 +464,8 @@ VERSION = '1.0.3'
|
|
426
464
|
end
|
427
465
|
end
|
428
466
|
end
|
429
|
-
begin
|
430
|
-
# puts 'is frozen? ' + self.frozen?.to_s + ' - ' + self.inspect
|
431
|
-
to_delete = get_atts_to_delete
|
432
|
-
if super(*params)
|
433
|
-
# puts 'SAVED super'
|
434
|
-
self.class.cache_results(self)
|
435
|
-
delete_niled(to_delete)
|
436
|
-
if run_after_save && is_create ? run_after_create : run_after_update
|
437
|
-
return true
|
438
|
-
else
|
439
|
-
#I thought about calling destroy here, but rails doesn't behave that way, so neither will I
|
440
|
-
return false
|
441
|
-
end
|
442
|
-
else
|
443
|
-
return false
|
444
|
-
end
|
445
|
-
rescue RightAws::AwsError
|
446
|
-
# puts "RESCUED in save: " + $!
|
447
|
-
if (domain_ok($!))
|
448
|
-
if !@create_domain_called
|
449
|
-
@create_domain_called = true
|
450
|
-
save(*params)
|
451
|
-
else
|
452
|
-
raise $!
|
453
|
-
end
|
454
|
-
else
|
455
|
-
raise $!
|
456
|
-
end
|
457
|
-
end
|
458
|
-
else
|
459
|
-
#@debug = "not saved"
|
460
|
-
return false
|
461
467
|
end
|
468
|
+
ok
|
462
469
|
end
|
463
470
|
|
464
471
|
def save_attributes(*params)
|
@@ -480,6 +487,25 @@ VERSION = '1.0.3'
|
|
480
487
|
return to_delete
|
481
488
|
end
|
482
489
|
|
490
|
+
# Run pre_save on each object, then runs batch_put_attributes
|
491
|
+
# Returns
|
492
|
+
def self.batch_save(objects)
|
493
|
+
results = []
|
494
|
+
to_save = []
|
495
|
+
if objects && objects.size > 0
|
496
|
+
objects.each do |o|
|
497
|
+
ok = o.pre_save
|
498
|
+
raise "Pre save failed on object with id = " + o.id if !ok
|
499
|
+
results << ok
|
500
|
+
next if !ok
|
501
|
+
o.pre_save2
|
502
|
+
to_save << RightAws::SdbInterface::Item.new(o.id, o.attributes, true)
|
503
|
+
end
|
504
|
+
end
|
505
|
+
connection.batch_put_attributes(domain, to_save)
|
506
|
+
results
|
507
|
+
end
|
508
|
+
|
483
509
|
#
|
484
510
|
# Usage: ClassName.delete id
|
485
511
|
# todo: move to RightAWS
|
data/test/test_simple_record.rb
CHANGED
@@ -35,6 +35,29 @@ class TestSimpleRecord < Test::Unit::TestCase
|
|
35
35
|
assert mm2.cool == mm.cool
|
36
36
|
end
|
37
37
|
|
38
|
+
def test_batch_save
|
39
|
+
items = []
|
40
|
+
mm = MyModel.new
|
41
|
+
mm.name = "Travis"
|
42
|
+
mm.age = 32
|
43
|
+
mm.cool = true
|
44
|
+
items << mm
|
45
|
+
mm = MyModel.new
|
46
|
+
mm.name = "Tritt"
|
47
|
+
mm.age = 44
|
48
|
+
mm.cool = false
|
49
|
+
items << mm
|
50
|
+
MyModel.batch_save(items)
|
51
|
+
items.each do |item|
|
52
|
+
puts 'id=' + item.id
|
53
|
+
new_item = MyModel.find(item.id)
|
54
|
+
puts 'new=' + new_item.inspect
|
55
|
+
assert item.id == new_item.id
|
56
|
+
assert item.name == new_item.name
|
57
|
+
assert item.cool == new_item.cool
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
38
61
|
def test_callbacks
|
39
62
|
# these DO NOT work right now, all objects get all callbacks
|
40
63
|
# I tried like this, seem to be getting somewhere.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Travis Reeder
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-05-
|
12
|
+
date: 2009-05-21 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|