tenacity 0.3.0 → 0.4.0

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.
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