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
@@ -4,7 +4,7 @@ class HasOneTest < Test::Unit::TestCase
4
4
 
5
5
  context "A class with a has_one association to another class" do
6
6
  setup do
7
- setup_fixtures
7
+ setup_all_fixtures
8
8
  @climate_control_unit = ActiveRecordClimateControlUnit.create
9
9
  @dashboard = MongoMapperDashboard.create(:active_record_climate_control_unit => @climate_control_unit)
10
10
  end
@@ -15,7 +15,7 @@ class HasOneTest < Test::Unit::TestCase
15
15
  other_climate_control_unit = ActiveRecordClimateControlUnit.create
16
16
  assert_equal @climate_control_unit, MongoMapperDashboard.find(@dashboard.id).active_record_climate_control_unit
17
17
  ActiveRecordClimateControlUnit.update(@climate_control_unit.id, :mongo_mapper_dashboard_id => nil)
18
- ActiveRecordClimateControlUnit.update(other_climate_control_unit.id, :mongo_mapper_dashboard_id => @dashboard.id)
18
+ ActiveRecordClimateControlUnit.update(other_climate_control_unit.id, :mongo_mapper_dashboard_id => serialize_id(@dashboard))
19
19
  assert_equal other_climate_control_unit, MongoMapperDashboard.find(@dashboard.id).active_record_climate_control_unit
20
20
 
21
21
  assert_equal @climate_control_unit, @dashboard.active_record_climate_control_unit
@@ -36,6 +36,61 @@ class HasOneTest < Test::Unit::TestCase
36
36
  engine = ActiveRecordEngine.create(:active_record_car => car)
37
37
  assert_equal engine, car.active_record_engine
38
38
  end
39
+
40
+ should "not be able to modify the associated object if the readonly option is set" do
41
+ car = ActiveRecordCar.create
42
+ dashboard = MongoMapperDashboard.create(:active_record_car => car)
43
+ dashboard = car.mongo_mapper_dashboard
44
+ dashboard.prop = "value"
45
+ assert_raises(Tenacity::ReadOnlyError) { dashboard.save }
46
+ end
47
+
48
+ should "save the associated object if autosave is true" do
49
+ source = ActiveRecordObject.create
50
+ target = MongoMapperAutosaveTrueHasOneTarget.new(:prop => 'abc')
51
+ source.mongo_mapper_autosave_true_has_one_target = target
52
+ source.save
53
+ assert_equal 'abc', source.mongo_mapper_autosave_true_has_one_target.prop
54
+
55
+ source.mongo_mapper_autosave_true_has_one_target.prop = 'xyz'
56
+ source.save
57
+ source.reload && source.mongo_mapper_autosave_true_has_one_target(true)
58
+ assert_equal 'xyz', source.mongo_mapper_autosave_true_has_one_target.prop
59
+ end
60
+
61
+ should "not save the associated object upon assignment if autosave is false" do
62
+ source = ActiveRecordObject.create
63
+ target = MongoMapperAutosaveFalseHasOneTarget.new
64
+ source.mongo_mapper_autosave_false_has_one_target = target
65
+
66
+ source.save
67
+ assert_nil MongoMapperAutosaveFalseHasOneTarget.first(:active_record_object_id => source.id)
68
+ end
69
+
70
+ should "destroy the associated object if autosave is true and object is marked for destruction" do
71
+ source = ActiveRecordObject.create
72
+ target = MongoMapperAutosaveTrueHasOneTarget.new
73
+ source.mongo_mapper_autosave_true_has_one_target = target
74
+ source.save
75
+ assert_not_nil source.mongo_mapper_autosave_true_has_one_target(true)
76
+
77
+ source.mongo_mapper_autosave_true_has_one_target.mark_for_destruction
78
+ assert source.mongo_mapper_autosave_true_has_one_target.marked_for_destruction?
79
+ source.save
80
+ source.reload
81
+ assert_nil source.mongo_mapper_autosave_true_has_one_target(true)
82
+ end
83
+
84
+ should "be able to store an object via its polymorphic interface" do
85
+ circuit_board = MongoMapperCircuitBoard.create
86
+ alternator = MongoMapperAlternator.create
87
+ alternator.diagnosable = circuit_board
88
+ alternator.save
89
+
90
+ component = MongoMapperAlternator.find(alternator.id).diagnosable
91
+ assert_equal circuit_board, component
92
+ assert_equal 'MongoMapperAlternator', component.diagnosable_type
93
+ end
39
94
  end
40
95
 
41
96
  end
@@ -17,26 +17,60 @@ class BelongsToTest < Test::Unit::TestCase
17
17
  end
18
18
 
19
19
  should "be able to fetch the id of the associated object" do
20
- @target.send("#{@foreign_key_id}=", @source.id.to_s)
20
+ @target.send("#{@foreign_key_id}=", serialize_id(@source))
21
21
  @target.save
22
- assert_equal @source.id.to_s, @target_class._t_find(@target.id.to_s).send(@foreign_key_id)
22
+ assert_equal serialize_id(@source), @target_class._t_find(serialize_id(@target)).send(@foreign_key_id)
23
23
  end
24
24
 
25
25
  should "be able to load the associated object" do
26
26
  @target.send("#{@foreign_key}=", @source)
27
27
  @target.save
28
- assert_equal @source.id.to_s, @target_class._t_find(@target.id.to_s).send(@foreign_key_id)
29
- assert_equal @source, @target_class._t_find(@target.id.to_s).send(@foreign_key)
28
+ assert_equal serialize_id(@source), @target_class._t_find(serialize_id(@target)).send(@foreign_key_id)
29
+ assert_equal @source, @target_class._t_find(serialize_id(@target)).send(@foreign_key)
30
30
  end
31
31
 
32
32
  should "be be able to load the associated object if all we have is the id" do
33
- @target.send("#{@foreign_key_id}=", @source.id.to_s)
33
+ @target.send("#{@foreign_key_id}=", serialize_id(@source))
34
34
  @target.save
35
- assert_equal @source, @target_class._t_find(@target.id.to_s).send(@foreign_key)
35
+ assert_equal @source, @target_class._t_find(serialize_id(@target)).send(@foreign_key)
36
36
  end
37
37
 
38
38
  should "return nil if no association is set" do
39
- assert_nil @target_class._t_find(@target.id.to_s).send(@foreign_key)
39
+ assert_nil @target_class._t_find(serialize_id(@target)).send(@foreign_key)
40
+ end
41
+
42
+ should "be able to destroy the associated object when the source object is destroyed" do
43
+ Tenacity::Association.any_instance.stubs(:dependent).returns(:destroy)
44
+ @target.send("#{@foreign_key}=", @source)
45
+ @target.save
46
+ @target_class._t_delete([serialize_id(@target)])
47
+ assert_nil @source_class._t_find(serialize_id(@source))
48
+ assert_nil @target_class._t_find(serialize_id(@target))
49
+ end
50
+
51
+ should "be able to delete the associated object when the source object is destroyed" do
52
+ Tenacity::Association.any_instance.stubs(:dependent).returns(:delete)
53
+ @target.send("#{@foreign_key}=", @source)
54
+ @target.save
55
+ @target_class._t_delete([serialize_id(@target)])
56
+ assert_nil @source_class._t_find(serialize_id(@source))
57
+ assert_nil @target_class._t_find(serialize_id(@target))
58
+ end
59
+
60
+ context "with a polymorphic association" do
61
+ setup do
62
+ @foreign_key = "#{source}_has_one_target_testable"
63
+ @polymorphic_type = "#{source}_has_one_target_testable_type"
64
+ end
65
+
66
+ should "be able to create a polymorphic association" do
67
+ @target.send("#{@foreign_key}=", @source)
68
+ @target.save
69
+
70
+ reloaded_source = @target_class._t_find(serialize_id(@target)).send(@foreign_key)
71
+ assert_equal @source, reloaded_source
72
+ assert_equal @source_class.to_s, @target.send(@polymorphic_type)
73
+ end
40
74
  end
41
75
  end
42
76
  end
@@ -22,8 +22,8 @@ class HasManyTest < Test::Unit::TestCase
22
22
  @source.send("#{@foreign_key_id}=", [@target_1.id, @target_2.id, @target_3.id])
23
23
  @source.save
24
24
  [@target_1, @target_2, @target_3].each { |t| t._t_reload }
25
- assert_set_equal [@target_1, @target_2, @target_3], @source_class._t_find(@source.id.to_s).send(@foreign_key)
26
- assert_set_equal [@target_1.id.to_s, @target_2.id.to_s, @target_3.id.to_s], @source_class._t_find(@source.id.to_s).send(@foreign_key_id)
25
+ assert_set_equal [@target_1, @target_2, @target_3], @source_class._t_find(serialize_id(@source)).send(@foreign_key)
26
+ assert_set_equal [serialize_id(@target_1), serialize_id(@target_2), serialize_id(@target_3)], @source_class._t_find(serialize_id(@source)).send(@foreign_key_id)
27
27
  end
28
28
 
29
29
  context "that works with associated objects" do
@@ -34,7 +34,7 @@ class HasManyTest < Test::Unit::TestCase
34
34
 
35
35
  should "be able to set the associated objects" do
36
36
  [@target_1, @target_2, @target_3].each { |t| t._t_reload }
37
- assert_set_equal [@target_1, @target_2, @target_3], @source_class._t_find(@source.id.to_s).send(@foreign_key)
37
+ assert_set_equal [@target_1, @target_2, @target_3], @source_class._t_find(serialize_id(@source)).send(@foreign_key)
38
38
  end
39
39
 
40
40
  should "be able to add an associated object using the << operator" do
@@ -42,7 +42,7 @@ class HasManyTest < Test::Unit::TestCase
42
42
  @source.send(@foreign_key) << target_4
43
43
  @source.save
44
44
  [@target_1, @target_2, @target_3, target_4].each { |t| t._t_reload }
45
- assert_set_equal [@target_1, @target_2, @target_3, target_4], @source_class._t_find(@source.id.to_s).send(@foreign_key)
45
+ assert_set_equal [@target_1, @target_2, @target_3, target_4], @source_class._t_find(serialize_id(@source)).send(@foreign_key)
46
46
  end
47
47
 
48
48
  should "be able to add an associated object using the push method" do
@@ -51,7 +51,7 @@ class HasManyTest < Test::Unit::TestCase
51
51
  @source.send(@foreign_key).push(target_4, target_5)
52
52
  @source.save
53
53
  [@target_1, @target_2, @target_3, target_4, target_5].each { |t| t._t_reload }
54
- assert_set_equal [@target_1, @target_2, @target_3, target_4, target_5], @source_class._t_find(@source.id.to_s).send(@foreign_key)
54
+ assert_set_equal [@target_1, @target_2, @target_3, target_4, target_5], @source_class._t_find(serialize_id(@source)).send(@foreign_key)
55
55
  end
56
56
 
57
57
  should "be able to add an associated object using the concat method" do
@@ -60,25 +60,74 @@ class HasManyTest < Test::Unit::TestCase
60
60
  @source.send(@foreign_key).concat([target_4, target_5])
61
61
  @source.save
62
62
  [@target_1, @target_2, @target_3, target_4, target_5].each { |t| t._t_reload }
63
- assert_set_equal [@target_1, @target_2, @target_3, target_4, target_5], @source_class._t_find(@source.id.to_s).send(@foreign_key)
63
+ assert_set_equal [@target_1, @target_2, @target_3, target_4, target_5], @source_class._t_find(serialize_id(@source)).send(@foreign_key)
64
64
  end
65
65
 
66
66
  should "be able to remove an associated object using the delete method" do
67
67
  @source.send(@foreign_key).delete(@target_3)
68
68
  @source.save
69
69
  [@target_1, @target_2].each { |t| t._t_reload }
70
- assert_set_equal [@target_1, @target_2], @source_class._t_find(@source.id.to_s).send(@foreign_key)
70
+ assert_set_equal [@target_1, @target_2], @source_class._t_find(serialize_id(@source)).send(@foreign_key)
71
71
  end
72
72
 
73
73
  should "be able to clear all associated objects using the clear method" do
74
74
  @source.send(@foreign_key).clear
75
75
  @source.save
76
- assert_set_equal [], @source_class._t_find(@source.id.to_s).send(@foreign_key)
76
+ assert_set_equal [], @source_class._t_find(serialize_id(@source)).send(@foreign_key)
77
77
  end
78
78
 
79
79
  should "return an empty array if the association is not set" do
80
- source = @source_class.create({})
81
- assert_set_equal [], @source_class._t_find(source.id.to_s).send(@foreign_key)
80
+ s = @source_class.create({})
81
+ assert_set_equal [], @source_class._t_find(serialize_id(s)).send(@foreign_key)
82
+ end
83
+
84
+ should "be able to destroy the associated object when an object is destroyed" do
85
+ Tenacity::Association.any_instance.stubs(:dependent).returns(:destroy, nil)
86
+ @source.destroy
87
+
88
+ assert_nil @source_class._t_find(serialize_id(@source))
89
+ assert_nil @target_class._t_find(serialize_id(@target_1))
90
+ assert_nil @target_class._t_find(serialize_id(@target_2))
91
+ assert_nil @target_class._t_find(serialize_id(@target_3))
92
+ end
93
+
94
+ should "be able to delete the associated object when an object is destroyed" do
95
+ Tenacity::Association.any_instance.stubs(:dependent).returns(:delete_all)
96
+ @source.destroy
97
+
98
+ assert_nil @source_class._t_find(serialize_id(@source))
99
+ assert_nil @target_class._t_find(serialize_id(@target_1))
100
+ assert_nil @target_class._t_find(serialize_id(@target_2))
101
+ assert_nil @target_class._t_find(serialize_id(@target_3))
102
+ end
103
+
104
+ should "be able to nullify the foreign key of the associated object when an object is destroyed" do
105
+ Tenacity::Association.any_instance.stubs(:dependent).returns(:nullify)
106
+ @source.destroy
107
+
108
+ assert_nil @source_class._t_find(serialize_id(@source))
109
+ assert_not_nil @target_class._t_find(serialize_id(@target_1))
110
+ assert_not_nil @target_class._t_find(serialize_id(@target_2))
111
+ assert_not_nil @target_class._t_find(serialize_id(@target_3))
112
+ assert_nil @target_class._t_find(serialize_id(@target_1)).send(foreign_key_id_for(target, :belongs_to))
113
+ assert_nil @target_class._t_find(serialize_id(@target_2)).send(foreign_key_id_for(target, :belongs_to))
114
+ assert_nil @target_class._t_find(serialize_id(@target_3)).send(foreign_key_id_for(target, :belongs_to))
115
+ end
116
+ end
117
+
118
+ context "with polymorphic associations" do
119
+ setup do
120
+ @foreign_key = "#{target}_has_many_target_testable"
121
+ @polymorphic_type = "#{target}_has_many_target_testable_type"
122
+ end
123
+
124
+ should "be able to store an object via its polymorphic interface" do
125
+ @source.send("#{@foreign_key}=", [@target_1, @target_2, @target_3])
126
+ @source.save
127
+
128
+ [@target_1, @target_2, @target_3].each { |t| t._t_reload }
129
+ assert_set_equal [@target_1, @target_2, @target_3], @source_class._t_find(serialize_id(@source)).send(@foreign_key)
130
+ [@target_1, @target_2, @target_3].each { |t| assert_equal @source_class.to_s, t.send(@polymorphic_type) }
82
131
  end
83
132
  end
84
133
  end
@@ -18,11 +18,66 @@ class HasOneTest < Test::Unit::TestCase
18
18
 
19
19
  should "be able to set and get the associated object" do
20
20
  @source.send("#{@foreign_key}=", @target)
21
- assert_equal @target, @source_class._t_find(@source.id.to_s).send(@foreign_key)
21
+ assert_equal @target, @source_class._t_find(serialize_id(@source)).send(@foreign_key)
22
22
  end
23
23
 
24
24
  should "return nil if no association is set" do
25
- assert_nil @source_class._t_find(@source.id.to_s).send(@foreign_key)
25
+ assert_nil @source_class._t_find(serialize_id(@source)).send(@foreign_key)
26
+ end
27
+
28
+ should "be able to invoke the post delete callback" do
29
+ @source.send("#{@foreign_key}=", @target)
30
+ @source_class._t_delete([serialize_id(@source)])
31
+ end
32
+
33
+ should "be able to destroy the associated object when an object is destroyed" do
34
+ Tenacity::Association.any_instance.stubs(:dependent).returns(:destroy, nil)
35
+
36
+ @source.send("#{@foreign_key}=", @target)
37
+ assert_equal @target, @source_class._t_find(serialize_id(@source)).send(@foreign_key)
38
+ @source.destroy
39
+
40
+ assert_nil @source_class._t_find(serialize_id(@source))
41
+ assert_nil @target_class._t_find(serialize_id(@target))
42
+ end
43
+
44
+ should "be able to delete the associated object when an object is destroyed" do
45
+ Tenacity::Association.any_instance.stubs(:dependent).returns(:delete)
46
+
47
+ @source.send("#{@foreign_key}=", @target)
48
+ assert_equal @target, @source_class._t_find(serialize_id(@source)).send(@foreign_key)
49
+ @source.destroy
50
+
51
+ assert_nil @source_class._t_find(serialize_id(@source))
52
+ assert_nil @target_class._t_find(serialize_id(@target))
53
+ end
54
+
55
+ should "be able to nullify the foreign key of the associated object when an object is destroyed" do
56
+ Tenacity::Association.any_instance.stubs(:dependent).returns(:nullify)
57
+
58
+ @source.send("#{@foreign_key}=", @target)
59
+ assert_equal @target, @source_class._t_find(serialize_id(@source)).send(@foreign_key)
60
+ @source.destroy
61
+
62
+ assert_nil @source_class._t_find(serialize_id(@source))
63
+ assert_not_nil @target_class._t_find(serialize_id(@target))
64
+ assert_nil @target_class._t_find(serialize_id(@target)).send(foreign_key_id_for(target, :belongs_to))
65
+ end
66
+
67
+ context "with a polymorphic association" do
68
+ setup do
69
+ @foreign_key = "#{target}_has_one_target_testable"
70
+ @polymorphic_type = "#{target}_has_one_target_testable_type"
71
+ end
72
+
73
+ should "be able to store an object via its polymorphic interface" do
74
+ @source.send("#{@foreign_key}=", @target)
75
+ @source.save
76
+
77
+ reloaded_target = @source_class._t_find(serialize_id(@source)).send(@foreign_key)
78
+ assert_equal @target, reloaded_target
79
+ assert_equal @source_class.to_s, reloaded_target.send(@polymorphic_type)
80
+ end
26
81
  end
27
82
  end
28
83
  end
@@ -1,10 +1,11 @@
1
1
  class ActiveRecordCar < ActiveRecord::Base
2
2
  include Tenacity
3
3
 
4
- t_has_many :mongo_mapper_wheels
5
- t_has_one :mongo_mapper_dashboard
4
+ t_has_many :mongo_mapper_wheels, :dependent => :destroy, :readonly => true, :limit => 5
5
+ t_has_many :mongo_mapper_windows, :limit => 5, :offset => 3
6
+ t_has_one :mongo_mapper_dashboard, :dependent => :delete, :readonly => true
6
7
 
7
8
  t_has_one :couch_rest_windshield, :foreign_key => :car_id
8
- t_has_one :active_record_engine, :foreign_key => 'car_id'
9
- t_has_many :couch_rest_doors, :foreign_key => 'automobile_id'
9
+ t_has_one :active_record_engine, :foreign_key => 'car_id', :dependent => :nullify
10
+ t_has_many :couch_rest_doors, :foreign_key => 'automobile_id', :dependent => :delete_all
10
11
  end
@@ -2,4 +2,5 @@ class ActiveRecordClimateControlUnit < ActiveRecord::Base
2
2
  include Tenacity
3
3
 
4
4
  t_belongs_to :mongo_mapper_dashboard
5
+ t_has_one :mongo_mapper_circuit_board, :as => :diagnosable
5
6
  end
@@ -2,4 +2,5 @@ class ActiveRecordEngine < ActiveRecord::Base
2
2
  include Tenacity
3
3
 
4
4
  t_belongs_to :active_record_car, :foreign_key => 'car_id'
5
+ t_has_many :mongo_mapper_circuit_boards, :as => :diagnosable
5
6
  end
@@ -7,4 +7,11 @@ class ActiveRecordHasManyTarget < ActiveRecord::Base
7
7
  t_belongs_to :mongo_mapper_object
8
8
  require_mongoid { t_belongs_to :mongoid_object }
9
9
  t_belongs_to :sequel_object
10
+
11
+ t_belongs_to :active_record_has_many_target_testable, :polymorphic => true
12
+ t_belongs_to :couch_rest_has_many_target_testable, :polymorphic => true
13
+ t_belongs_to :data_mapper_has_many_target_testable, :polymorphic => true
14
+ t_belongs_to :mongo_mapper_has_many_target_testable, :polymorphic => true
15
+ require_mongoid { t_belongs_to :mongoid_has_many_target_testable, :polymorphic => true }
16
+ t_belongs_to :sequel_has_many_target_testable, :polymorphic => true
10
17
  end
@@ -7,4 +7,11 @@ class ActiveRecordHasOneTarget < ActiveRecord::Base
7
7
  t_belongs_to :mongo_mapper_object
8
8
  require_mongoid { t_belongs_to :mongoid_object }
9
9
  t_belongs_to :sequel_object
10
+
11
+ t_belongs_to :active_record_has_one_target_testable, :polymorphic => true
12
+ t_belongs_to :couch_rest_has_one_target_testable, :polymorphic => true
13
+ t_belongs_to :data_mapper_has_one_target_testable, :polymorphic => true
14
+ t_belongs_to :mongo_mapper_has_one_target_testable, :polymorphic => true
15
+ require_mongoid { t_belongs_to :mongoid_has_one_target_testable, :polymorphic => true }
16
+ t_belongs_to :sequel_has_one_target_testable, :polymorphic => true
10
17
  end
@@ -8,10 +8,29 @@ class ActiveRecordObject < ActiveRecord::Base
8
8
  require_mongoid { t_has_one :mongoid_has_one_target }
9
9
  t_has_one :sequel_has_one_target
10
10
 
11
+ t_has_one :active_record_has_one_target, :as => :active_record_has_one_target_testable
12
+ t_has_one :couch_rest_has_one_target, :as => :couch_rest_has_one_target_testable
13
+ t_has_one :data_mapper_has_one_target, :as => :data_mapper_has_one_target_testable
14
+ t_has_one :mongo_mapper_has_one_target, :as => :mongo_mapper_has_one_target_testable
15
+ require_mongoid { t_has_one :mongoid_has_one_target, :as => :mongoid_has_one_target_testable }
16
+ t_has_one :sequel_has_one_target, :as => :sequel_has_one_target_testable
17
+
11
18
  t_has_many :active_record_has_many_targets
12
19
  t_has_many :couch_rest_has_many_targets
13
20
  t_has_many :data_mapper_has_many_targets
14
21
  t_has_many :mongo_mapper_has_many_targets
15
22
  require_mongoid { t_has_many :mongoid_has_many_targets }
16
23
  t_has_many :sequel_has_many_targets
24
+
25
+ t_has_many :active_record_has_many_targets, :as => :active_record_has_many_target_testable
26
+ t_has_many :couch_rest_has_many_targets, :as => :couch_rest_has_many_target_testable
27
+ t_has_many :data_mapper_has_many_targets, :as => :data_mapper_has_many_target_testable
28
+ t_has_many :mongo_mapper_has_many_targets, :as => :mongo_mapper_has_many_target_testable
29
+ require_mongoid { t_has_many :mongoid_has_many_targets, :as => :mongoid_has_many_target_testable }
30
+ t_has_many :sequel_has_many_targets, :as => :sequel_has_many_target_testable
31
+
32
+ t_has_one :mongo_mapper_autosave_true_has_one_target, :autosave => true
33
+ t_has_one :mongo_mapper_autosave_false_has_one_target, :autosave => false
34
+ t_has_many :mongo_mapper_autosave_true_has_many_targets, :autosave => true
35
+ t_has_many :mongo_mapper_autosave_false_has_many_targets, :autosave => false
17
36
  end
@@ -8,5 +8,12 @@ class CouchRestHasManyTarget < CouchRest::Model::Base
8
8
  t_belongs_to :mongo_mapper_object
9
9
  require_mongoid { t_belongs_to :mongoid_object }
10
10
  t_belongs_to :sequel_object
11
+
12
+ t_belongs_to :active_record_has_many_target_testable, :polymorphic => true
13
+ t_belongs_to :couch_rest_has_many_target_testable, :polymorphic => true
14
+ t_belongs_to :data_mapper_has_many_target_testable, :polymorphic => true
15
+ t_belongs_to :mongo_mapper_has_many_target_testable, :polymorphic => true
16
+ require_mongoid { t_belongs_to :mongoid_has_many_target_testable, :polymorphic => true }
17
+ t_belongs_to :sequel_has_many_target_testable, :polymorphic => true
11
18
  end
12
19
 
@@ -8,5 +8,12 @@ class CouchRestHasOneTarget < CouchRest::Model::Base
8
8
  t_belongs_to :mongo_mapper_object
9
9
  require_mongoid { t_belongs_to :mongoid_object }
10
10
  t_belongs_to :sequel_object
11
+
12
+ t_belongs_to :active_record_has_one_target_testable, :polymorphic => true
13
+ t_belongs_to :couch_rest_has_one_target_testable, :polymorphic => true
14
+ t_belongs_to :data_mapper_has_one_target_testable, :polymorphic => true
15
+ t_belongs_to :mongo_mapper_has_one_target_testable, :polymorphic => true
16
+ require_mongoid { t_belongs_to :mongoid_has_one_target_testable, :polymorphic => true }
17
+ t_belongs_to :sequel_has_one_target_testable, :polymorphic => true
11
18
  end
12
19