simple_record 2.1.3 → 2.1.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.
- data/README.markdown +23 -2
- data/lib/simple_record.rb +50 -47
- data/lib/simple_record/active_sdb.rb +941 -938
- data/lib/simple_record/json.rb +37 -57
- data/lib/simple_record/sharding.rb +48 -20
- data/lib/simple_record/validations.rb +1 -1
- metadata +47 -82
- data/test/conversions_test.rb +0 -44
- data/test/model_with_enc.rb +0 -6
- data/test/my_base_model.rb +0 -8
- data/test/my_child_model.rb +0 -35
- data/test/my_model.rb +0 -101
- data/test/my_sharded_model.rb +0 -46
- data/test/my_simple_model.rb +0 -13
- data/test/paging_array_test.rb +0 -15
- data/test/temp.rb +0 -9
- data/test/temp_test.rb +0 -63
- data/test/test_base.rb +0 -67
- data/test/test_dirty.rb +0 -79
- data/test/test_encodings.rb +0 -43
- data/test/test_global_options.rb +0 -63
- data/test/test_helpers.rb +0 -15
- data/test/test_json.rb +0 -82
- data/test/test_lobs.rb +0 -118
- data/test/test_marshalled.rb +0 -43
- data/test/test_pagination.rb +0 -31
- data/test/test_rails3.rb +0 -24
- data/test/test_results_array.rb +0 -57
- data/test/test_shards.rb +0 -148
- data/test/test_simple_record.rb +0 -693
- data/test/test_usage.rb +0 -40
- data/test/test_validations.rb +0 -55
data/test/test_encodings.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + "/../lib/simple_record")
|
3
|
-
require "yaml"
|
4
|
-
require 'aws'
|
5
|
-
require 'my_model'
|
6
|
-
require 'my_child_model'
|
7
|
-
require 'active_support'
|
8
|
-
require 'test_base'
|
9
|
-
|
10
|
-
|
11
|
-
class Person < SimpleRecord::Base
|
12
|
-
has_strings :name, :i_as_s
|
13
|
-
has_ints :age
|
14
|
-
end
|
15
|
-
class TestEncodings < TestBase
|
16
|
-
|
17
|
-
def test_ascii_http_post
|
18
|
-
first_name = "joe" + ("X" * 1000) # pad the field to help get the URL over the 2000 length limit so AWS uses a POST
|
19
|
-
last_name = "blow" + ("X" * 1000) # pad the field to help get the URL over the 2000 length limit so AWS uses a POST
|
20
|
-
mm = MyModel.create :first_name=>first_name, :last_name=>last_name
|
21
|
-
mm.save
|
22
|
-
sleep 1
|
23
|
-
assert mm.first_name == first_name
|
24
|
-
assert mm.last_name == last_name
|
25
|
-
mm2 = MyModel.find(mm.id)
|
26
|
-
assert mm2.first_name == first_name
|
27
|
-
assert mm2.last_name == last_name
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_utf8_http_post
|
31
|
-
first_name = "jos�" + ("X" * 1000) # pad the field to help get the URL over the 2000 length limit so AWS uses a POST
|
32
|
-
last_name = "??" + ("X" * 1000) # pad the field to help get the URL over the 2000 length limit so AWS uses a POST
|
33
|
-
mm = MyModel.create :first_name=>first_name, :last_name=>last_name
|
34
|
-
mm.save
|
35
|
-
sleep 1
|
36
|
-
assert mm.first_name == first_name
|
37
|
-
assert mm.last_name == last_name
|
38
|
-
mm2 = MyModel.find(mm.id)
|
39
|
-
assert mm2.first_name == first_name
|
40
|
-
assert mm2.last_name == last_name
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
data/test/test_global_options.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require_relative "../lib/simple_record"
|
3
|
-
require "yaml"
|
4
|
-
require 'aws'
|
5
|
-
require_relative 'my_model'
|
6
|
-
require_relative 'my_child_model'
|
7
|
-
require 'active_support/core_ext'
|
8
|
-
require_relative 'test_base'
|
9
|
-
|
10
|
-
|
11
|
-
class Person < SimpleRecord::Base
|
12
|
-
has_strings :name, :i_as_s
|
13
|
-
has_ints :age
|
14
|
-
end
|
15
|
-
class TestGlobalOptions < TestBase
|
16
|
-
|
17
|
-
def setup
|
18
|
-
super
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_domain_prefix
|
22
|
-
|
23
|
-
SimpleRecord::Base.set_domain_prefix("someprefix_")
|
24
|
-
|
25
|
-
p = Person.create(:name=>"my prefix name")
|
26
|
-
|
27
|
-
sleep 1
|
28
|
-
|
29
|
-
sdb_atts = @@sdb.select("select * from someprefix_people")
|
30
|
-
puts 'sdb_atts=' + sdb_atts.inspect
|
31
|
-
|
32
|
-
@@sdb.delete_domain("someprefix_people") # doing it here so it's done before assertions might fail
|
33
|
-
|
34
|
-
assert sdb_atts[:items].size == 1, "hmmm, not size 1: " + sdb_atts[:items].size.to_s
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_created_col_and_updated_col
|
39
|
-
reset_connection(:created_col=>"created_at", :updated_col=>"updated_at")
|
40
|
-
|
41
|
-
p = Person.create(:name=>"my prefix name")
|
42
|
-
sleep 1
|
43
|
-
|
44
|
-
sdb_atts = @@sdb.select("select * from simplerecord_tests_people")
|
45
|
-
puts 'sdb_atts=' + sdb_atts.inspect
|
46
|
-
|
47
|
-
|
48
|
-
@@sdb.delete_domain("simplerecord_tests_people")
|
49
|
-
|
50
|
-
items = sdb_atts[:items][0]
|
51
|
-
first = nil
|
52
|
-
items.each_pair do |k, v|
|
53
|
-
first = v
|
54
|
-
break
|
55
|
-
end
|
56
|
-
|
57
|
-
assert_nil first["created"]
|
58
|
-
assert_not_nil first["created_at"]
|
59
|
-
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
data/test/test_helpers.rb
DELETED
data/test/test_json.rb
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require File.join(File.dirname(__FILE__), "/../lib/simple_record")
|
3
|
-
require File.join(File.dirname(__FILE__), "./test_helpers")
|
4
|
-
require File.join(File.dirname(__FILE__), "./test_base")
|
5
|
-
require "yaml"
|
6
|
-
require 'aws'
|
7
|
-
require_relative 'my_model'
|
8
|
-
require_relative 'my_child_model'
|
9
|
-
require_relative 'model_with_enc'
|
10
|
-
require 'active_support/core_ext'
|
11
|
-
|
12
|
-
# Tests for SimpleRecord
|
13
|
-
#
|
14
|
-
|
15
|
-
class TestJson < TestBase
|
16
|
-
|
17
|
-
|
18
|
-
def test_json
|
19
|
-
mm = MyModel.new
|
20
|
-
|
21
|
-
mm.name = "whatever"
|
22
|
-
mm.age = "1"
|
23
|
-
|
24
|
-
|
25
|
-
jsoned = mm.to_json
|
26
|
-
puts 'jsoned=' + jsoned
|
27
|
-
unjsoned = JSON.parse jsoned
|
28
|
-
puts 'unjsoned=' + unjsoned.inspect
|
29
|
-
assert unjsoned.name == "whatever"
|
30
|
-
|
31
|
-
mm.save
|
32
|
-
|
33
|
-
puts 'no trying an array'
|
34
|
-
|
35
|
-
data = {}
|
36
|
-
models = []
|
37
|
-
data[:models] = models
|
38
|
-
|
39
|
-
models << mm
|
40
|
-
|
41
|
-
jsoned = models.to_json
|
42
|
-
puts 'jsoned=' + jsoned
|
43
|
-
unjsoned = JSON.parse jsoned
|
44
|
-
puts 'unjsoned=' + unjsoned.inspect
|
45
|
-
assert unjsoned.size == models.size
|
46
|
-
assert unjsoned[0].name == mm.name
|
47
|
-
assert unjsoned[0].age == mm.age
|
48
|
-
assert unjsoned[0].created.present?
|
49
|
-
assert unjsoned[0].id.present?
|
50
|
-
assert unjsoned[0].id == mm.id, "unjsoned.id=#{unjsoned[0].id}"
|
51
|
-
|
52
|
-
puts 'array good'
|
53
|
-
|
54
|
-
t = Tester.new
|
55
|
-
t2 = Tester.new
|
56
|
-
t2.x1 = "i'm number 2"
|
57
|
-
t.x1 = 1
|
58
|
-
t.x2 = t2
|
59
|
-
jsoned = t.to_json
|
60
|
-
|
61
|
-
puts 'jsoned=' + jsoned
|
62
|
-
|
63
|
-
puts 'non simplerecord object good'
|
64
|
-
|
65
|
-
mcm = MyChildModel.new
|
66
|
-
mcm.name = "child"
|
67
|
-
mcm.my_model = mm
|
68
|
-
jsoned = mcm.to_json
|
69
|
-
puts 'jsoned=' + jsoned
|
70
|
-
unjsoned = JSON.parse jsoned
|
71
|
-
puts 'unjsoned=' + unjsoned.inspect
|
72
|
-
assert mcm.my_model.id == unjsoned.my_model.id
|
73
|
-
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
class Tester
|
79
|
-
|
80
|
-
attr_accessor :x1, :x2
|
81
|
-
|
82
|
-
end
|
data/test/test_lobs.rb
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require_relative "../lib/simple_record"
|
3
|
-
require_relative "test_helpers"
|
4
|
-
require_relative "test_base"
|
5
|
-
require "yaml"
|
6
|
-
require 'aws'
|
7
|
-
require_relative 'my_model'
|
8
|
-
require_relative 'my_child_model'
|
9
|
-
require_relative 'model_with_enc'
|
10
|
-
|
11
|
-
# Tests for SimpleRecord
|
12
|
-
#
|
13
|
-
|
14
|
-
class TestLobs < TestBase
|
15
|
-
|
16
|
-
|
17
|
-
def test_clobs
|
18
|
-
mm = MyModel.new
|
19
|
-
|
20
|
-
puts mm.clob1.inspect
|
21
|
-
assert mm.clob1.nil?
|
22
|
-
|
23
|
-
mm.name = "whatever"
|
24
|
-
mm.age = "1"
|
25
|
-
mm.clob1 = "0" * 2000
|
26
|
-
assert SimpleRecord.stats.s3_puts == 0
|
27
|
-
puts mm.inspect
|
28
|
-
mm.save
|
29
|
-
|
30
|
-
assert SimpleRecord.stats.s3_puts == 1
|
31
|
-
sleep 2
|
32
|
-
|
33
|
-
mm.clob1 = "1" * 2000
|
34
|
-
mm.clob2 = "2" * 2000
|
35
|
-
mm.save
|
36
|
-
assert SimpleRecord.stats.s3_puts == 3
|
37
|
-
|
38
|
-
mm2 = MyModel.find(mm.id)
|
39
|
-
assert mm.id == mm2.id
|
40
|
-
puts 'mm.clob1=' + mm.clob1.to_s
|
41
|
-
puts 'mm2.clob1=' + mm2.clob1.to_s
|
42
|
-
assert mm.clob1 == mm2.clob1
|
43
|
-
assert SimpleRecord.stats.s3_puts == 3, "puts is #{SimpleRecord.stats.s3_puts}"
|
44
|
-
assert SimpleRecord.stats.s3_gets == 1, "gets is #{SimpleRecord.stats.s3_gets}"
|
45
|
-
mm2.clob1 # make sure it doesn't do another get
|
46
|
-
assert SimpleRecord.stats.s3_gets == 1
|
47
|
-
|
48
|
-
assert mm.clob2 == mm2.clob2
|
49
|
-
assert SimpleRecord.stats.s3_gets == 2
|
50
|
-
|
51
|
-
mm2.save
|
52
|
-
|
53
|
-
# shouldn't save twice if not dirty
|
54
|
-
assert SimpleRecord.stats.s3_puts == 3
|
55
|
-
|
56
|
-
mm2.delete
|
57
|
-
|
58
|
-
assert_equal 2, SimpleRecord.stats.s3_deletes
|
59
|
-
|
60
|
-
e = assert_raise(Aws::AwsError) do
|
61
|
-
sclob = SimpleRecord.s3.bucket(mm2.s3_bucket_name2).get(mm2.s3_lob_id("clob1"))
|
62
|
-
end
|
63
|
-
assert_match(/NoSuchKey/, e.message)
|
64
|
-
e = assert_raise(Aws::AwsError) do
|
65
|
-
sclob = SimpleRecord.s3.bucket(mm2.s3_bucket_name2).get(mm2.s3_lob_id("clob2"))
|
66
|
-
end
|
67
|
-
assert_match(/NoSuchKey/, e.message)
|
68
|
-
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_single_clob
|
73
|
-
mm = SingleClobClass.new
|
74
|
-
|
75
|
-
puts mm.clob1.inspect
|
76
|
-
assert mm.clob1.nil?
|
77
|
-
|
78
|
-
mm.name = "whatever"
|
79
|
-
mm.clob1 = "0" * 2000
|
80
|
-
mm.clob2 = "2" * 2000
|
81
|
-
assert SimpleRecord.stats.s3_puts == 0
|
82
|
-
puts mm.inspect
|
83
|
-
mm.save
|
84
|
-
|
85
|
-
assert SimpleRecord.stats.s3_puts == 1
|
86
|
-
|
87
|
-
sleep 2
|
88
|
-
|
89
|
-
mm2 = SingleClobClass.find(mm.id)
|
90
|
-
assert mm.id == mm2.id
|
91
|
-
puts 'mm.clob1=' + mm.clob1.to_s
|
92
|
-
puts 'mm2.clob1=' + mm2.clob1.to_s
|
93
|
-
assert_equal mm.clob1, mm2.clob1
|
94
|
-
assert SimpleRecord.stats.s3_puts == 1, "puts is #{SimpleRecord.stats.s3_puts}"
|
95
|
-
assert SimpleRecord.stats.s3_gets == 1, "gets is #{SimpleRecord.stats.s3_gets}"
|
96
|
-
mm2.clob1 # make sure it doesn't do another get
|
97
|
-
assert SimpleRecord.stats.s3_gets == 1
|
98
|
-
|
99
|
-
assert mm.clob2 == mm2.clob2
|
100
|
-
assert SimpleRecord.stats.s3_gets == 1
|
101
|
-
|
102
|
-
mm2.save
|
103
|
-
|
104
|
-
# shouldn't save twice if not dirty
|
105
|
-
assert SimpleRecord.stats.s3_puts == 1
|
106
|
-
|
107
|
-
mm2.delete
|
108
|
-
|
109
|
-
assert SimpleRecord.stats.s3_deletes == 1
|
110
|
-
|
111
|
-
e = assert_raise(Aws::AwsError) do
|
112
|
-
sclob = SimpleRecord.s3.bucket(mm2.s3_bucket_name2).get(mm2.single_clob_id)
|
113
|
-
end
|
114
|
-
assert_match(/NoSuchKey/, e.message)
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
end
|
data/test/test_marshalled.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + "/../lib/simple_record")
|
3
|
-
require "yaml"
|
4
|
-
require 'aws'
|
5
|
-
require 'my_model'
|
6
|
-
require 'my_child_model'
|
7
|
-
require 'active_support'
|
8
|
-
require 'test_base'
|
9
|
-
|
10
|
-
|
11
|
-
class Person < SimpleRecord::Base
|
12
|
-
has_strings :name, :i_as_s
|
13
|
-
has_ints :age, :i2
|
14
|
-
end
|
15
|
-
class MarshalTest < TestBase
|
16
|
-
|
17
|
-
def setup
|
18
|
-
super
|
19
|
-
|
20
|
-
Person.create_domain
|
21
|
-
@person = Person.new(:name => 'old', :age => 70)
|
22
|
-
@person.save
|
23
|
-
|
24
|
-
assert !@person.changed?
|
25
|
-
assert !@person.name_changed?
|
26
|
-
end
|
27
|
-
|
28
|
-
def teardown
|
29
|
-
Person.delete_domain
|
30
|
-
SimpleRecord.close_connection
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_string_on_initialize
|
34
|
-
p = Person.new(:name=>"Travis", :age=>5, :i2=>"6")
|
35
|
-
assert p.name == "Travis"
|
36
|
-
assert p.age == 5
|
37
|
-
assert p.i2 == 6, "i2 == #{p.i2}"
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
data/test/test_pagination.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require File.join(File.dirname(__FILE__), "/../lib/simple_record")
|
3
|
-
require File.join(File.dirname(__FILE__), "./test_helpers")
|
4
|
-
require File.join(File.dirname(__FILE__), "./test_base")
|
5
|
-
require "yaml"
|
6
|
-
require 'aws'
|
7
|
-
require 'my_model'
|
8
|
-
require 'my_child_model'
|
9
|
-
require 'model_with_enc'
|
10
|
-
require 'active_support'
|
11
|
-
|
12
|
-
|
13
|
-
# Pagination is intended to be just like will_paginate.
|
14
|
-
class TestPagination < TestBase
|
15
|
-
|
16
|
-
def test_paginate
|
17
|
-
create_my_models(20)
|
18
|
-
|
19
|
-
i = 20
|
20
|
-
(1..3).each do |page|
|
21
|
-
models = MyModel.paginate :page=>page, :per_page=>5, :order=>"created desc"
|
22
|
-
assert models.size == 5, "models.size=#{models.size}"
|
23
|
-
models.each do |m|
|
24
|
-
i -= 1
|
25
|
-
puts m.name
|
26
|
-
assert m.age == i
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
data/test/test_rails3.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require 'active_model'
|
3
|
-
require File.join(File.dirname(__FILE__), "/../lib/simple_record")
|
4
|
-
require File.join(File.dirname(__FILE__), "./test_helpers")
|
5
|
-
require File.join(File.dirname(__FILE__), "./test_base")
|
6
|
-
require "yaml"
|
7
|
-
require 'aws'
|
8
|
-
require_relative 'my_model'
|
9
|
-
require_relative 'my_child_model'
|
10
|
-
require_relative 'model_with_enc'
|
11
|
-
|
12
|
-
# To test things related to rails 3 like ActiveModel usage.
|
13
|
-
class TestRails3 < TestBase
|
14
|
-
|
15
|
-
def test_active_model_defined
|
16
|
-
|
17
|
-
my_model = MyModel.new
|
18
|
-
|
19
|
-
assert (defined?(MyModel.model_name))
|
20
|
-
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
data/test/test_results_array.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
# These ones take longer to run
|
2
|
-
|
3
|
-
require 'test/unit'
|
4
|
-
require File.join(File.dirname(__FILE__), "/../lib/simple_record")
|
5
|
-
require File.join(File.dirname(__FILE__), "./test_helpers")
|
6
|
-
require File.join(File.dirname(__FILE__), "./test_base")
|
7
|
-
require "yaml"
|
8
|
-
require 'aws'
|
9
|
-
require 'my_model'
|
10
|
-
require 'my_child_model'
|
11
|
-
require 'active_support'
|
12
|
-
|
13
|
-
# Tests for SimpleRecord
|
14
|
-
#
|
15
|
-
|
16
|
-
class TestResultsArray < TestBase
|
17
|
-
|
18
|
-
|
19
|
-
# ensures that it uses next token and what not
|
20
|
-
def test_big_result
|
21
|
-
i = TestHelpers.clear_out_my_models
|
22
|
-
SimpleRecord.stats.clear
|
23
|
-
num_made = 110
|
24
|
-
num_made.times do |i|
|
25
|
-
mm = MyModel.create(:name=>"Travis", :age=>i, :cool=>true)
|
26
|
-
end
|
27
|
-
assert SimpleRecord.stats.saves == num_made
|
28
|
-
rs = MyModel.find(:all) # should get 100 at a time
|
29
|
-
assert rs.size == num_made
|
30
|
-
i = 0
|
31
|
-
rs.each do |x|
|
32
|
-
#puts 'x=' + x.id
|
33
|
-
i+=1
|
34
|
-
end
|
35
|
-
assert SimpleRecord.stats.selects == 3 # one for count.
|
36
|
-
assert i == num_made
|
37
|
-
# running through all the results twice to ensure it works properly after lazy loading complete.
|
38
|
-
SimpleRecord.stats.clear
|
39
|
-
i = 0
|
40
|
-
rs.each do |x|
|
41
|
-
#puts 'x=' + x.id
|
42
|
-
i+=1
|
43
|
-
end
|
44
|
-
assert SimpleRecord.stats.selects == 0
|
45
|
-
assert i == num_made
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_limit
|
49
|
-
SimpleRecord.stats.clear
|
50
|
-
rs = MyModel.find(:all, :per_token=>2500)
|
51
|
-
assert rs.size == 110
|
52
|
-
assert SimpleRecord.stats.selects == 1, "SimpleRecord.stats.selects is #{SimpleRecord.stats.selects}"
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
end
|