tenacity 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. data/EXTEND.rdoc +9 -13
  2. data/Rakefile +6 -0
  3. data/history.txt +17 -0
  4. data/lib/tenacity.rb +13 -9
  5. data/lib/tenacity/associate_proxy.rb +56 -0
  6. data/lib/tenacity/associates_proxy.rb +5 -3
  7. data/lib/tenacity/association.rb +81 -9
  8. data/lib/tenacity/associations/belongs_to.rb +28 -16
  9. data/lib/tenacity/associations/has_many.rb +113 -53
  10. data/lib/tenacity/associations/has_one.rb +33 -14
  11. data/lib/tenacity/class_methods.rb +117 -9
  12. data/lib/tenacity/errors.rb +9 -0
  13. data/lib/tenacity/instance_methods.rb +40 -3
  14. data/lib/tenacity/orm_ext/activerecord.rb +114 -95
  15. data/lib/tenacity/orm_ext/couchrest.rb +132 -113
  16. data/lib/tenacity/orm_ext/datamapper.rb +138 -112
  17. data/lib/tenacity/orm_ext/helpers.rb +36 -0
  18. data/lib/tenacity/orm_ext/mongo_mapper.rb +102 -84
  19. data/lib/tenacity/orm_ext/mongoid.rb +106 -87
  20. data/lib/tenacity/orm_ext/sequel.rb +137 -110
  21. data/lib/tenacity/version.rb +1 -1
  22. data/tenacity.gemspec +2 -1
  23. data/test/association_features/belongs_to_test.rb +46 -1
  24. data/test/association_features/has_many_test.rb +187 -2
  25. data/test/association_features/has_one_test.rb +57 -2
  26. data/test/associations/belongs_to_test.rb +41 -7
  27. data/test/associations/has_many_test.rb +59 -10
  28. data/test/associations/has_one_test.rb +57 -2
  29. data/test/fixtures/active_record_car.rb +5 -4
  30. data/test/fixtures/active_record_climate_control_unit.rb +1 -0
  31. data/test/fixtures/active_record_engine.rb +1 -0
  32. data/test/fixtures/active_record_has_many_target.rb +7 -0
  33. data/test/fixtures/active_record_has_one_target.rb +7 -0
  34. data/test/fixtures/active_record_object.rb +19 -0
  35. data/test/fixtures/couch_rest_has_many_target.rb +7 -0
  36. data/test/fixtures/couch_rest_has_one_target.rb +7 -0
  37. data/test/fixtures/couch_rest_object.rb +14 -0
  38. data/test/fixtures/data_mapper_has_many_target.rb +23 -3
  39. data/test/fixtures/data_mapper_has_one_target.rb +23 -3
  40. data/test/fixtures/data_mapper_object.rb +14 -0
  41. data/test/fixtures/mongo_mapper_air_filter.rb +6 -0
  42. data/test/fixtures/mongo_mapper_alternator.rb +7 -0
  43. data/test/fixtures/mongo_mapper_autosave_false_has_many_target.rb +8 -0
  44. data/test/fixtures/mongo_mapper_autosave_false_has_one_target.rb +8 -0
  45. data/test/fixtures/mongo_mapper_autosave_true_has_many_target.rb +8 -0
  46. data/test/fixtures/mongo_mapper_autosave_true_has_one_target.rb +8 -0
  47. data/test/fixtures/mongo_mapper_circuit_board.rb +6 -0
  48. data/test/fixtures/mongo_mapper_dashboard.rb +5 -2
  49. data/test/fixtures/mongo_mapper_has_many_target.rb +7 -0
  50. data/test/fixtures/mongo_mapper_has_one_target.rb +7 -0
  51. data/test/fixtures/mongo_mapper_object.rb +14 -0
  52. data/test/fixtures/mongo_mapper_wheel.rb +2 -0
  53. data/test/fixtures/mongo_mapper_windows.rb +6 -0
  54. data/test/fixtures/mongoid_has_many_target.rb +7 -0
  55. data/test/fixtures/mongoid_has_one_target.rb +7 -0
  56. data/test/fixtures/mongoid_object.rb +14 -0
  57. data/test/fixtures/sequel_has_many_target.rb +7 -0
  58. data/test/fixtures/sequel_has_one_target.rb +7 -0
  59. data/test/fixtures/sequel_object.rb +14 -0
  60. data/test/helpers/active_record_test_helper.rb +87 -8
  61. data/test/helpers/couch_rest_test_helper.rb +7 -0
  62. data/test/helpers/data_mapper_test_helper.rb +41 -3
  63. data/test/helpers/sequel_test_helper.rb +65 -9
  64. data/test/orm_ext/activerecord_test.rb +1 -1
  65. data/test/orm_ext/datamapper_test.rb +33 -24
  66. data/test/orm_ext/mongo_mapper_test.rb +6 -6
  67. data/test/orm_ext/mongoid_test.rb +6 -6
  68. data/test/orm_ext/sequel_test.rb +1 -1
  69. data/test/test_helper.rb +18 -9
  70. metadata +119 -55
@@ -6,3 +6,10 @@ TEST_SERVER = CouchRest.new
6
6
  TEST_SERVER.default_database = TESTDB
7
7
  COUCH_DB = TEST_SERVER.database(TESTDB)
8
8
 
9
+ begin
10
+ TEST_SERVER.databases
11
+ rescue Exception
12
+ puts "CouchDB is not running, and is required. Please start it."
13
+ exit
14
+ end
15
+
@@ -10,7 +10,7 @@ migration 1, :create_join_tables do
10
10
  up do
11
11
  create_table :active_record_has_many_targets_data_mapper_objects do
12
12
  column :data_mapper_object_id, Integer
13
- column :active_record_has_many_target_id, String
13
+ column :active_record_has_many_target_id, Integer
14
14
  end
15
15
 
16
16
  create_table :data_mapper_objects_mongo_mapper_has_many_targets do
@@ -25,7 +25,7 @@ migration 1, :create_join_tables do
25
25
 
26
26
  create_table :data_mapper_has_many_targets_data_mapper_objects do
27
27
  column :data_mapper_object_id, Integer
28
- column :data_mapper_has_many_target_id, String
28
+ column :data_mapper_has_many_target_id, Integer
29
29
  end
30
30
 
31
31
  create_table :data_mapper_objects_mongoid_has_many_targets do
@@ -35,10 +35,48 @@ migration 1, :create_join_tables do
35
35
 
36
36
  create_table :data_mapper_objects_sequel_has_many_targets do
37
37
  column :data_mapper_object_id, Integer
38
- column :sequel_has_many_target_id, String
38
+ column :sequel_has_many_target_id, Integer
39
+ end
40
+
41
+ create_table :active_record_has_many_target_testables_data_mapper_objects do
42
+ column :data_mapper_object_id, Integer
43
+ column :active_record_has_many_target_testable_id, Integer
44
+ end
45
+
46
+ create_table :data_mapper_objects_mongo_mapper_has_many_target_testables do
47
+ column :data_mapper_object_id, Integer
48
+ column :mongo_mapper_has_many_target_testable_id, String
49
+ end
50
+
51
+ create_table :couch_rest_has_many_target_testables_data_mapper_objects do
52
+ column :data_mapper_object_id, Integer
53
+ column :couch_rest_has_many_target_testable_id, String
54
+ end
55
+
56
+ create_table :data_mapper_has_many_target_testables_data_mapper_objects do
57
+ column :data_mapper_object_id, Integer
58
+ column :data_mapper_has_many_target_testable_id, Integer
59
+ end
60
+
61
+ create_table :data_mapper_objects_mongoid_has_many_target_testables do
62
+ column :data_mapper_object_id, Integer
63
+ column :mongoid_has_many_target_testable_id, String
64
+ end
65
+
66
+ create_table :data_mapper_objects_sequel_has_many_target_testables do
67
+ column :data_mapper_object_id, Integer
68
+ column :sequel_has_many_target_testable_id, Integer
39
69
  end
40
70
  end
41
71
  end
42
72
 
43
73
  migrate_up!
44
74
 
75
+ def migrate_data_mapper_tables
76
+ DataMapperHasManyTarget
77
+ DataMapperHasOneTarget
78
+ DataMapperObject
79
+
80
+ DataMapper.auto_migrate!
81
+ end
82
+
@@ -9,28 +9,54 @@ end
9
9
  DB.create_table :sequel_has_one_targets do
10
10
  primary_key :id
11
11
 
12
- String :active_record_object_id
12
+ Integer :active_record_object_id
13
13
  String :couch_rest_object_id
14
- String :data_mapper_object_id
14
+ Integer :data_mapper_object_id
15
15
  String :mongo_mapper_object_id
16
16
  String :mongoid_object_id
17
- String :sequel_object_id
17
+ Integer :sequel_object_id
18
+
19
+ String :active_record_has_one_target_testable_id
20
+ String :active_record_has_one_target_testable_type
21
+ String :couch_rest_has_one_target_testable_id
22
+ String :couch_rest_has_one_target_testable_type
23
+ String :data_mapper_has_one_target_testable_id
24
+ String :data_mapper_has_one_target_testable_type
25
+ String :mongo_mapper_has_one_target_testable_id
26
+ String :mongo_mapper_has_one_target_testable_type
27
+ String :mongoid_has_one_target_testable_id
28
+ String :mongoid_has_one_target_testable_type
29
+ String :sequel_has_one_target_testable_id
30
+ String :sequel_has_one_target_testable_type
18
31
  end
19
32
 
20
33
  DB.create_table :sequel_has_many_targets do
21
34
  primary_key :id
22
35
 
23
- String :active_record_object_id
36
+ Integer :active_record_object_id
24
37
  String :couch_rest_object_id
25
- String :data_mapper_object_id
38
+ Integer :data_mapper_object_id
26
39
  String :mongo_mapper_object_id
27
40
  String :mongoid_object_id
28
- String :sequel_object_id
41
+ Integer :sequel_object_id
42
+
43
+ String :active_record_has_many_target_testable_id
44
+ String :active_record_has_many_target_testable_type
45
+ String :couch_rest_has_many_target_testable_id
46
+ String :couch_rest_has_many_target_testable_type
47
+ String :data_mapper_has_many_target_testable_id
48
+ String :data_mapper_has_many_target_testable_type
49
+ String :mongo_mapper_has_many_target_testable_id
50
+ String :mongo_mapper_has_many_target_testable_type
51
+ String :mongoid_has_many_target_testable_id
52
+ String :mongoid_has_many_target_testable_type
53
+ String :sequel_has_many_target_testable_id
54
+ String :sequel_has_many_target_testable_type
29
55
  end
30
56
 
31
57
  DB.create_table :active_record_has_many_targets_sequel_objects do
32
58
  Integer :sequel_object_id
33
- String :active_record_has_many_target_id
59
+ Integer :active_record_has_many_target_id
34
60
  end
35
61
 
36
62
  DB.create_table :mongo_mapper_has_many_targets_sequel_objects do
@@ -45,7 +71,7 @@ end
45
71
 
46
72
  DB.create_table :data_mapper_has_many_targets_sequel_objects do
47
73
  Integer :sequel_object_id
48
- String :data_mapper_has_many_target_id
74
+ Integer :data_mapper_has_many_target_id
49
75
  end
50
76
 
51
77
  DB.create_table :mongoid_has_many_targets_sequel_objects do
@@ -55,6 +81,36 @@ end
55
81
 
56
82
  DB.create_table :sequel_has_many_targets_sequel_objects do
57
83
  Integer :sequel_object_id
58
- String :sequel_has_many_target_id
84
+ Integer :sequel_has_many_target_id
85
+ end
86
+
87
+ DB.create_table :active_record_has_many_target_testables_sequel_objects do
88
+ Integer :sequel_object_id
89
+ Integer :active_record_has_many_target_testable_id
90
+ end
91
+
92
+ DB.create_table :mongo_mapper_has_many_target_testables_sequel_objects do
93
+ Integer :sequel_object_id
94
+ String :mongo_mapper_has_many_target_testable_id
95
+ end
96
+
97
+ DB.create_table :couch_rest_has_many_target_testables_sequel_objects do
98
+ Integer :sequel_object_id
99
+ String :couch_rest_has_many_target_testable_id
100
+ end
101
+
102
+ DB.create_table :data_mapper_has_many_target_testables_sequel_objects do
103
+ Integer :sequel_object_id
104
+ Integer :data_mapper_has_many_target_testable_id
105
+ end
106
+
107
+ DB.create_table :mongoid_has_many_target_testables_sequel_objects do
108
+ Integer :sequel_object_id
109
+ String :mongoid_has_many_target_testable_id
110
+ end
111
+
112
+ DB.create_table :sequel_has_many_target_testables_sequel_objects do
113
+ Integer :sequel_object_id
114
+ Integer :sequel_has_many_target_testable_id
59
115
  end
60
116
 
@@ -52,7 +52,7 @@ class ActiveRecordTest < Test::Unit::TestCase
52
52
  object = ActiveRecordHasOneTarget.create
53
53
  object.mongo_mapper_object_id = 'abc123'
54
54
  object.reload
55
- assert_equal '', object.mongo_mapper_object_id
55
+ assert_nil object.mongo_mapper_object_id
56
56
  end
57
57
 
58
58
  should "be able to clear the associates of a given object" do
@@ -50,31 +50,11 @@ class DataMapperTest < Test::Unit::TestCase
50
50
 
51
51
  should "be able to reload an object from the database" do
52
52
  object = DataMapperHasOneTarget.create
53
- object.mongo_mapper_object_id = 'abc123'
54
- assert_equal 'abc123', object.mongo_mapper_object_id
53
+ other_object = MongoMapperObject.create
54
+ object.mongo_mapper_object_id = other_object.id
55
+ assert_equal other_object.id.to_s, object.mongo_mapper_object_id
55
56
  object.reload
56
- assert_equal '', object.mongo_mapper_object_id
57
- end
58
-
59
- should "be able to clear the associates of a given object" do
60
- object = DataMapperObject.create
61
- object._t_associate_many(association, ['abc123', 'def456', 'ghi789'])
62
- object.save
63
- object._t_clear_associates(association)
64
- assert_set_equal [], object._t_get_associate_ids(association)
65
- end
66
-
67
- should "be able to associate many objects with the given object" do
68
- object = DataMapperObject.create
69
- object._t_associate_many(association, ['abc123', 'def456', 'ghi789'])
70
- rows = DataMapperObject.repository.adapter.select("select mongo_mapper_has_many_target_id from data_mapper_objects_mongo_mapper_has_many_targets where data_mapper_object_id = #{object.id}")
71
- assert_set_equal ['abc123', 'def456', 'ghi789'], rows
72
- end
73
-
74
- should "be able to get the ids of the objects associated with the given object" do
75
- object = DataMapperObject.create
76
- object._t_associate_many(association, ['abc123', 'def456', 'ghi789'])
77
- assert_set_equal ['abc123', 'def456', 'ghi789'], object._t_get_associate_ids(association)
57
+ assert_nil object.mongo_mapper_object_id
78
58
  end
79
59
 
80
60
  should "return an empty array if there are no objects associated with the given object ids" do
@@ -101,6 +81,35 @@ class DataMapperTest < Test::Unit::TestCase
101
81
  DataMapperObject._t_delete([object_1.id, object_2.id, object_3.id], false)
102
82
  assert_equal old_count - 3, DataMapperObject.count
103
83
  end
84
+
85
+ context "that works with t_has_many associations" do
86
+ setup do
87
+ @has_many_target_1 = MongoMapperHasManyTarget.create
88
+ @has_many_target_2 = MongoMapperHasManyTarget.create
89
+ @has_many_target_3 = MongoMapperHasManyTarget.create
90
+ end
91
+
92
+ should "be able to clear the associates of a given object" do
93
+ object = DataMapperObject.create
94
+ object._t_associate_many(association, [@has_many_target_1.id, @has_many_target_2.id, @has_many_target_3.id])
95
+ object.save
96
+ object._t_clear_associates(association)
97
+ assert_set_equal [], object._t_get_associate_ids(association)
98
+ end
99
+
100
+ should "be able to associate many objects with the given object" do
101
+ object = DataMapperObject.create
102
+ object._t_associate_many(association, [@has_many_target_1.id, @has_many_target_2.id, @has_many_target_3.id])
103
+ rows = DataMapperObject.repository.adapter.select("select mongo_mapper_has_many_target_id from data_mapper_objects_mongo_mapper_has_many_targets where data_mapper_object_id = #{object.id}")
104
+ assert_set_equal [@has_many_target_1.id.to_s, @has_many_target_2.id.to_s, @has_many_target_3.id.to_s], rows
105
+ end
106
+
107
+ should "be able to get the ids of the objects associated with the given object" do
108
+ object = DataMapperObject.create
109
+ object._t_associate_many(association, [@has_many_target_1.id, @has_many_target_2.id, @has_many_target_3.id])
110
+ assert_set_equal [@has_many_target_1.id.to_s, @has_many_target_2.id.to_s, @has_many_target_3.id.to_s], object._t_get_associate_ids(association)
111
+ end
112
+ end
104
113
  end
105
114
 
106
115
  private
@@ -28,7 +28,7 @@ class MongoMapperTest < Test::Unit::TestCase
28
28
 
29
29
  should "be able to find the first associate of an object" do
30
30
  object = MongoMapperObject.create
31
- target = MongoMapperHasOneTarget.create(:mongo_mapper_object_id => object.id.to_s)
31
+ target = MongoMapperHasOneTarget.create(:mongo_mapper_object_id => object.id)
32
32
  assert_equal target, MongoMapperHasOneTarget._t_find_first_by_associate(:mongo_mapper_object_id, object.id)
33
33
  end
34
34
 
@@ -49,10 +49,10 @@ class MongoMapperTest < Test::Unit::TestCase
49
49
 
50
50
  should "be able to reload an object from the database" do
51
51
  target = MongoMapperHasOneTarget.create
52
- target.mongo_mapper_object_id = 101
52
+ target.mongo_mapper_object_id = '101'
53
53
  assert_equal '101', target.mongo_mapper_object_id
54
54
  target.reload
55
- assert_equal '', target.mongo_mapper_object_id
55
+ assert_nil target.mongo_mapper_object_id
56
56
  end
57
57
 
58
58
  should "be able to associate many objects with the given object" do
@@ -61,7 +61,7 @@ class MongoMapperTest < Test::Unit::TestCase
61
61
  target_3 = MongoMapperHasManyTarget.create
62
62
  object = MongoMapperObject.create
63
63
  object._t_associate_many(association, [target_1.id, target_2.id, target_3.id])
64
- assert_set_equal [target_1.id.to_s, target_2.id.to_s, target_3.id.to_s], object.t_mongo_mapper_has_many_target_ids
64
+ assert_set_equal [target_1.id, target_2.id, target_3.id], object.t_mongo_mapper_has_many_target_ids
65
65
  end
66
66
 
67
67
  should "be able to get the ids of the objects associated with the given object" do
@@ -71,7 +71,7 @@ class MongoMapperTest < Test::Unit::TestCase
71
71
  object = MongoMapperObject.create
72
72
 
73
73
  object._t_associate_many(association, [target_1.id, target_2.id, target_3.id])
74
- assert_set_equal [target_1.id.to_s, target_2.id.to_s, target_3.id.to_s], object._t_get_associate_ids(association)
74
+ assert_set_equal [target_1.id, target_2.id, target_3.id], object._t_get_associate_ids(association)
75
75
  end
76
76
 
77
77
  should "return an empty array when trying to fetch associate ids for an object with no associates" do
@@ -86,7 +86,7 @@ class MongoMapperTest < Test::Unit::TestCase
86
86
  object = MongoMapperObject.create
87
87
 
88
88
  object._t_associate_many(association, [target_1.id, target_2.id, target_3.id])
89
- assert_set_equal [target_1.id.to_s, target_2.id.to_s, target_3.id.to_s], object._t_get_associate_ids(association)
89
+ assert_set_equal [target_1.id, target_2.id, target_3.id], object._t_get_associate_ids(association)
90
90
  object._t_clear_associates(association)
91
91
  assert_equal [], object._t_get_associate_ids(association)
92
92
  end
@@ -29,7 +29,7 @@ require_mongoid do
29
29
 
30
30
  should "be able to find the first associate of an object" do
31
31
  object = MongoidObject.create
32
- target = MongoidHasOneTarget.create(:mongoid_object_id => object.id.to_s)
32
+ target = MongoidHasOneTarget.create(:mongoid_object_id => object.id)
33
33
  assert_equal target, MongoidHasOneTarget._t_find_first_by_associate(:mongoid_object_id, object.id)
34
34
  end
35
35
 
@@ -50,10 +50,10 @@ require_mongoid do
50
50
 
51
51
  should "be able to reload an object from the database" do
52
52
  target = MongoidHasOneTarget.create
53
- target.mongoid_object_id = 101
53
+ target.mongoid_object_id = '101'
54
54
  assert_equal '101', target.mongoid_object_id
55
55
  target.reload
56
- assert_equal '', target.mongoid_object_id
56
+ assert_nil target.mongoid_object_id
57
57
  end
58
58
 
59
59
  should "be able to associate many objects with the given object" do
@@ -62,7 +62,7 @@ require_mongoid do
62
62
  target_3 = MongoidHasManyTarget.create
63
63
  object = MongoidObject.create
64
64
  object._t_associate_many(association, [target_1.id, target_2.id, target_3.id])
65
- assert_set_equal [target_1.id.to_s, target_2.id.to_s, target_3.id.to_s], object.t_mongoid_has_many_target_ids
65
+ assert_set_equal [target_1.id, target_2.id, target_3.id], object.t_mongoid_has_many_target_ids
66
66
  end
67
67
 
68
68
  should "be able to get the ids of the objects associated with the given object" do
@@ -72,7 +72,7 @@ require_mongoid do
72
72
  object = MongoidObject.create
73
73
 
74
74
  object._t_associate_many(association, [target_1.id, target_2.id, target_3.id])
75
- assert_set_equal [target_1.id.to_s, target_2.id.to_s, target_3.id.to_s], object._t_get_associate_ids(association)
75
+ assert_set_equal [target_1.id, target_2.id, target_3.id], object._t_get_associate_ids(association)
76
76
  end
77
77
 
78
78
  should "return an empty array when trying to fetch associate ids for an object with no associates" do
@@ -87,7 +87,7 @@ require_mongoid do
87
87
  object = MongoidObject.create
88
88
 
89
89
  object._t_associate_many(association, [target_1.id, target_2.id, target_3.id])
90
- assert_set_equal [target_1.id.to_s, target_2.id.to_s, target_3.id.to_s], object._t_get_associate_ids(association)
90
+ assert_set_equal [target_1.id, target_2.id, target_3.id], object._t_get_associate_ids(association)
91
91
  object._t_clear_associates(association)
92
92
  assert_equal [], object._t_get_associate_ids(association)
93
93
  end
@@ -53,7 +53,7 @@ class SequelTest < Test::Unit::TestCase
53
53
  object.mongo_mapper_object_id = 'abc123'
54
54
  assert_equal 'abc123', object.mongo_mapper_object_id
55
55
  object.reload
56
- assert_equal '', object.mongo_mapper_object_id
56
+ assert_nil object.mongo_mapper_object_id
57
57
  end
58
58
 
59
59
  should "be able to clear the associates of a given object" do
data/test/test_helper.rb CHANGED
@@ -10,6 +10,11 @@ end
10
10
 
11
11
  require 'test/unit'
12
12
  require 'shoulda'
13
+ require 'mocha'
14
+
15
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
17
+ require 'tenacity'
13
18
 
14
19
  require File.join(File.dirname(__FILE__), 'helpers', 'active_record_test_helper')
15
20
  require File.join(File.dirname(__FILE__), 'helpers', 'couch_rest_test_helper')
@@ -18,13 +23,9 @@ require File.join(File.dirname(__FILE__), 'helpers', 'mongo_mapper_test_helper')
18
23
  require File.join(File.dirname(__FILE__), 'helpers', 'mongoid_test_helper')
19
24
  require File.join(File.dirname(__FILE__), 'helpers', 'sequel_test_helper')
20
25
 
21
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
22
- $LOAD_PATH.unshift(File.dirname(__FILE__))
23
- require 'tenacity'
24
-
25
- Dir[File.join(File.dirname(__FILE__), 'fixtures', '*.rb')].each { |file| require file }
26
+ Dir[File.join(File.dirname(__FILE__), 'fixtures', '*.rb')].each { |file| autoload(file[file.rindex('/') + 1..-4].camelcase, file) }
26
27
 
27
- DataMapper.auto_migrate!
28
+ migrate_data_mapper_tables
28
29
 
29
30
  def setup_fixtures
30
31
  Dir.glob(File.join(File.dirname(__FILE__), 'fixtures', '*.rb')).each do |filename|
@@ -76,9 +77,13 @@ def setup_fixtures_for(source, target)
76
77
  end
77
78
 
78
79
  def orm_extensions
79
- extensions = [:active_record, :couch_rest, :data_mapper, :mongo_mapper, :sequel]
80
- require_mongoid { extensions << :mongoid }
81
- extensions
80
+ if ENV['QUICK'] == 'true'
81
+ extensions = [:active_record, :mongo_mapper]
82
+ else
83
+ extensions = [:active_record, :couch_rest, :data_mapper, :mongo_mapper, :sequel]
84
+ require_mongoid { extensions << :mongoid }
85
+ extensions
86
+ end
82
87
  end
83
88
 
84
89
  def for_each_orm_extension_combination
@@ -124,3 +129,7 @@ def assert_set_equal(expecteds, actuals, message = nil)
124
129
  assert_equal expecteds && Set.new(expecteds), actuals && Set.new(actuals), message
125
130
  end
126
131
 
132
+ def serialize_id(object)
133
+ object.class._t_serialize(object.id)
134
+ end
135
+
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tenacity
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 15
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
- - 3
8
+ - 4
8
9
  - 0
9
- version: 0.3.0
10
+ version: 0.4.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - John Wood
@@ -14,234 +15,282 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2011-01-24 00:00:00 -06:00
18
+ date: 2011-04-04 00:00:00 -05:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- prerelease: false
22
22
  name: activesupport
23
+ prerelease: false
23
24
  type: :runtime
24
- version_requirements: &id001 !ruby/object:Gem::Requirement
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
25
27
  requirements:
26
28
  - - ">="
27
29
  - !ruby/object:Gem::Version
30
+ hash: 5
28
31
  segments:
29
32
  - 2
30
33
  - 3
31
34
  version: "2.3"
32
- requirement: *id001
35
+ version_requirements: *id001
33
36
  - !ruby/object:Gem::Dependency
34
- prerelease: false
35
37
  name: bundler
38
+ prerelease: false
36
39
  type: :development
37
- version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
38
42
  requirements:
39
43
  - - ~>
40
44
  - !ruby/object:Gem::Version
45
+ hash: 23
41
46
  segments:
42
47
  - 1
43
48
  - 0
44
49
  - 0
45
50
  version: 1.0.0
46
- requirement: *id002
51
+ version_requirements: *id002
47
52
  - !ruby/object:Gem::Dependency
48
- prerelease: false
49
53
  name: rake
54
+ prerelease: false
50
55
  type: :development
51
- version_requirements: &id003 !ruby/object:Gem::Requirement
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
52
58
  requirements:
53
59
  - - ~>
54
60
  - !ruby/object:Gem::Version
61
+ hash: 49
55
62
  segments:
56
63
  - 0
57
64
  - 8
58
65
  - 7
59
66
  version: 0.8.7
60
- requirement: *id003
67
+ version_requirements: *id003
61
68
  - !ruby/object:Gem::Dependency
62
- prerelease: false
63
69
  name: rcov
70
+ prerelease: false
64
71
  type: :development
65
- version_requirements: &id004 !ruby/object:Gem::Requirement
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
66
74
  requirements:
67
75
  - - ~>
68
76
  - !ruby/object:Gem::Version
77
+ hash: 41
69
78
  segments:
70
79
  - 0
71
80
  - 9
72
81
  - 9
73
82
  version: 0.9.9
74
- requirement: *id004
83
+ version_requirements: *id004
75
84
  - !ruby/object:Gem::Dependency
76
- prerelease: false
77
85
  name: shoulda
86
+ prerelease: false
78
87
  type: :development
79
- version_requirements: &id005 !ruby/object:Gem::Requirement
88
+ requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
80
90
  requirements:
81
91
  - - ~>
82
92
  - !ruby/object:Gem::Version
93
+ hash: 37
83
94
  segments:
84
95
  - 2
85
96
  - 11
86
97
  - 3
87
98
  version: 2.11.3
88
- requirement: *id005
99
+ version_requirements: *id005
89
100
  - !ruby/object:Gem::Dependency
101
+ name: mocha
90
102
  prerelease: false
103
+ type: :development
104
+ requirement: &id006 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ hash: 47
110
+ segments:
111
+ - 0
112
+ - 9
113
+ - 10
114
+ version: 0.9.10
115
+ version_requirements: *id006
116
+ - !ruby/object:Gem::Dependency
91
117
  name: yard
118
+ prerelease: false
92
119
  type: :development
93
- version_requirements: &id006 !ruby/object:Gem::Requirement
120
+ requirement: &id007 !ruby/object:Gem::Requirement
121
+ none: false
94
122
  requirements:
95
123
  - - ~>
96
124
  - !ruby/object:Gem::Version
125
+ hash: 15
97
126
  segments:
98
127
  - 0
99
128
  - 6
100
129
  - 4
101
130
  version: 0.6.4
102
- requirement: *id006
131
+ version_requirements: *id007
103
132
  - !ruby/object:Gem::Dependency
104
- prerelease: false
105
133
  name: sqlite3-ruby
134
+ prerelease: false
106
135
  type: :development
107
- version_requirements: &id007 !ruby/object:Gem::Requirement
136
+ requirement: &id008 !ruby/object:Gem::Requirement
137
+ none: false
108
138
  requirements:
109
139
  - - ~>
110
140
  - !ruby/object:Gem::Version
141
+ hash: 25
111
142
  segments:
112
143
  - 1
113
144
  - 3
114
145
  - 1
115
146
  version: 1.3.1
116
- requirement: *id007
147
+ version_requirements: *id008
117
148
  - !ruby/object:Gem::Dependency
118
- prerelease: false
119
149
  name: activerecord
150
+ prerelease: false
120
151
  type: :development
121
- version_requirements: &id008 !ruby/object:Gem::Requirement
152
+ requirement: &id009 !ruby/object:Gem::Requirement
153
+ none: false
122
154
  requirements:
123
155
  - - ~>
124
156
  - !ruby/object:Gem::Version
157
+ hash: 7
125
158
  segments:
126
159
  - 3
127
160
  - 0
128
161
  - 0
129
162
  version: 3.0.0
130
- requirement: *id008
163
+ version_requirements: *id009
131
164
  - !ruby/object:Gem::Dependency
132
- prerelease: false
133
165
  name: datamapper
166
+ prerelease: false
134
167
  type: :development
135
- version_requirements: &id009 !ruby/object:Gem::Requirement
168
+ requirement: &id010 !ruby/object:Gem::Requirement
169
+ none: false
136
170
  requirements:
137
171
  - - ~>
138
172
  - !ruby/object:Gem::Version
173
+ hash: 19
139
174
  segments:
140
175
  - 1
141
176
  - 0
142
177
  - 2
143
178
  version: 1.0.2
144
- requirement: *id009
179
+ version_requirements: *id010
145
180
  - !ruby/object:Gem::Dependency
146
- prerelease: false
147
181
  name: dm-sqlite-adapter
182
+ prerelease: false
148
183
  type: :development
149
- version_requirements: &id010 !ruby/object:Gem::Requirement
184
+ requirement: &id011 !ruby/object:Gem::Requirement
185
+ none: false
150
186
  requirements:
151
187
  - - ~>
152
188
  - !ruby/object:Gem::Version
189
+ hash: 19
153
190
  segments:
154
191
  - 1
155
192
  - 0
156
193
  - 2
157
194
  version: 1.0.2
158
- requirement: *id010
195
+ version_requirements: *id011
159
196
  - !ruby/object:Gem::Dependency
160
- prerelease: false
161
197
  name: sequel
198
+ prerelease: false
162
199
  type: :development
163
- version_requirements: &id011 !ruby/object:Gem::Requirement
200
+ requirement: &id012 !ruby/object:Gem::Requirement
201
+ none: false
164
202
  requirements:
165
203
  - - ~>
166
204
  - !ruby/object:Gem::Version
205
+ hash: 75
167
206
  segments:
168
207
  - 3
169
208
  - 19
170
209
  - 0
171
210
  version: 3.19.0
172
- requirement: *id011
211
+ version_requirements: *id012
173
212
  - !ruby/object:Gem::Dependency
174
- prerelease: false
175
213
  name: mongo_mapper
214
+ prerelease: false
176
215
  type: :development
177
- version_requirements: &id012 !ruby/object:Gem::Requirement
216
+ requirement: &id013 !ruby/object:Gem::Requirement
217
+ none: false
178
218
  requirements:
179
219
  - - ~>
180
220
  - !ruby/object:Gem::Version
221
+ hash: 51
181
222
  segments:
182
223
  - 0
183
224
  - 8
184
225
  - 6
185
226
  version: 0.8.6
186
- requirement: *id012
227
+ version_requirements: *id013
187
228
  - !ruby/object:Gem::Dependency
188
- prerelease: false
189
229
  name: bson_ext
230
+ prerelease: false
190
231
  type: :development
191
- version_requirements: &id013 !ruby/object:Gem::Requirement
232
+ requirement: &id014 !ruby/object:Gem::Requirement
233
+ none: false
192
234
  requirements:
193
235
  - - ~>
194
236
  - !ruby/object:Gem::Version
237
+ hash: 23
195
238
  segments:
196
239
  - 1
197
- - 1
198
- - 3
199
- version: 1.1.3
200
- requirement: *id013
240
+ - 2
241
+ - 4
242
+ version: 1.2.4
243
+ version_requirements: *id014
201
244
  - !ruby/object:Gem::Dependency
202
- prerelease: false
203
245
  name: mongoid
246
+ prerelease: false
204
247
  type: :development
205
- version_requirements: &id014 !ruby/object:Gem::Requirement
248
+ requirement: &id015 !ruby/object:Gem::Requirement
249
+ none: false
206
250
  requirements:
207
251
  - - ~>
208
252
  - !ruby/object:Gem::Version
253
+ hash: 31098209
209
254
  segments:
210
255
  - 2
211
256
  - 0
212
257
  - 0
213
258
  - beta
214
259
  version: 2.0.0.beta
215
- requirement: *id014
260
+ version_requirements: *id015
216
261
  - !ruby/object:Gem::Dependency
217
- prerelease: false
218
262
  name: couchrest
263
+ prerelease: false
219
264
  type: :development
220
- version_requirements: &id015 !ruby/object:Gem::Requirement
265
+ requirement: &id016 !ruby/object:Gem::Requirement
266
+ none: false
221
267
  requirements:
222
268
  - - ~>
223
269
  - !ruby/object:Gem::Version
270
+ hash: 23
224
271
  segments:
225
272
  - 1
226
273
  - 0
227
274
  - 0
228
275
  version: 1.0.0
229
- requirement: *id015
276
+ version_requirements: *id016
230
277
  - !ruby/object:Gem::Dependency
231
- prerelease: false
232
278
  name: couchrest_model
279
+ prerelease: false
233
280
  type: :development
234
- version_requirements: &id016 !ruby/object:Gem::Requirement
281
+ requirement: &id017 !ruby/object:Gem::Requirement
282
+ none: false
235
283
  requirements:
236
284
  - - ~>
237
285
  - !ruby/object:Gem::Version
286
+ hash: 31098193
238
287
  segments:
239
288
  - 1
240
289
  - 0
241
290
  - 0
242
291
  - beta
243
292
  version: 1.0.0.beta
244
- requirement: *id016
293
+ version_requirements: *id017
245
294
  description: Tenacity provides a database client independent way of specifying simple relationships between models backed by different databases.
246
295
  email:
247
296
  - john@johnpwood.net
@@ -260,16 +309,19 @@ files:
260
309
  - Rakefile
261
310
  - history.txt
262
311
  - lib/tenacity.rb
312
+ - lib/tenacity/associate_proxy.rb
263
313
  - lib/tenacity/associates_proxy.rb
264
314
  - lib/tenacity/association.rb
265
315
  - lib/tenacity/associations/belongs_to.rb
266
316
  - lib/tenacity/associations/has_many.rb
267
317
  - lib/tenacity/associations/has_one.rb
268
318
  - lib/tenacity/class_methods.rb
319
+ - lib/tenacity/errors.rb
269
320
  - lib/tenacity/instance_methods.rb
270
321
  - lib/tenacity/orm_ext/activerecord.rb
271
322
  - lib/tenacity/orm_ext/couchrest.rb
272
323
  - lib/tenacity/orm_ext/datamapper.rb
324
+ - lib/tenacity/orm_ext/helpers.rb
273
325
  - lib/tenacity/orm_ext/mongo_mapper.rb
274
326
  - lib/tenacity/orm_ext/mongoid.rb
275
327
  - lib/tenacity/orm_ext/sequel.rb
@@ -297,13 +349,21 @@ files:
297
349
  - test/fixtures/data_mapper_has_many_target.rb
298
350
  - test/fixtures/data_mapper_has_one_target.rb
299
351
  - test/fixtures/data_mapper_object.rb
352
+ - test/fixtures/mongo_mapper_air_filter.rb
353
+ - test/fixtures/mongo_mapper_alternator.rb
300
354
  - test/fixtures/mongo_mapper_ash_tray.rb
355
+ - test/fixtures/mongo_mapper_autosave_false_has_many_target.rb
356
+ - test/fixtures/mongo_mapper_autosave_false_has_one_target.rb
357
+ - test/fixtures/mongo_mapper_autosave_true_has_many_target.rb
358
+ - test/fixtures/mongo_mapper_autosave_true_has_one_target.rb
359
+ - test/fixtures/mongo_mapper_circuit_board.rb
301
360
  - test/fixtures/mongo_mapper_dashboard.rb
302
361
  - test/fixtures/mongo_mapper_has_many_target.rb
303
362
  - test/fixtures/mongo_mapper_has_one_target.rb
304
363
  - test/fixtures/mongo_mapper_object.rb
305
364
  - test/fixtures/mongo_mapper_vent.rb
306
365
  - test/fixtures/mongo_mapper_wheel.rb
366
+ - test/fixtures/mongo_mapper_windows.rb
307
367
  - test/fixtures/mongoid_has_many_target.rb
308
368
  - test/fixtures/mongoid_has_one_target.rb
309
369
  - test/fixtures/mongoid_object.rb
@@ -333,16 +393,20 @@ rdoc_options: []
333
393
  require_paths:
334
394
  - lib
335
395
  required_ruby_version: !ruby/object:Gem::Requirement
396
+ none: false
336
397
  requirements:
337
398
  - - ">="
338
399
  - !ruby/object:Gem::Version
400
+ hash: 3
339
401
  segments:
340
402
  - 0
341
403
  version: "0"
342
404
  required_rubygems_version: !ruby/object:Gem::Requirement
405
+ none: false
343
406
  requirements:
344
407
  - - ">="
345
408
  - !ruby/object:Gem::Version
409
+ hash: 23
346
410
  segments:
347
411
  - 1
348
412
  - 3
@@ -351,7 +415,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
351
415
  requirements: []
352
416
 
353
417
  rubyforge_project: tenacity
354
- rubygems_version: 1.3.6
418
+ rubygems_version: 1.6.0
355
419
  signing_key:
356
420
  specification_version: 3
357
421
  summary: A database client independent way of specifying simple relationships between models backed by different databases.