tenacity 0.1.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.
- data/.gitignore +6 -0
- data/EXTEND.rdoc +79 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +70 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +103 -0
- data/Rakefile +96 -0
- data/lib/tenacity/associations/belongs_to.rb +28 -0
- data/lib/tenacity/associations/has_many.rb +86 -0
- data/lib/tenacity/associations/has_one.rb +40 -0
- data/lib/tenacity/class_methods.rb +226 -0
- data/lib/tenacity/instance_methods.rb +31 -0
- data/lib/tenacity/orm_ext/activerecord.rb +116 -0
- data/lib/tenacity/orm_ext/couchrest/couchrest_extended_document.rb +45 -0
- data/lib/tenacity/orm_ext/couchrest/couchrest_model.rb +46 -0
- data/lib/tenacity/orm_ext/couchrest/tenacity_class_methods.rb +52 -0
- data/lib/tenacity/orm_ext/couchrest/tenacity_instance_methods.rb +21 -0
- data/lib/tenacity/orm_ext/mongo_mapper.rb +107 -0
- data/lib/tenacity/version.rb +3 -0
- data/lib/tenacity.rb +27 -0
- data/tenacity.gemspec +34 -0
- data/test/associations/belongs_to_test.rb +119 -0
- data/test/associations/has_many_test.rb +184 -0
- data/test/associations/has_one_test.rb +77 -0
- data/test/core/classmethods_test.rb +53 -0
- data/test/fixtures/active_record_car.rb +6 -0
- data/test/fixtures/active_record_climate_control_unit.rb +5 -0
- data/test/fixtures/active_record_nuts.rb +5 -0
- data/test/fixtures/couch_rest_radio.rb +10 -0
- data/test/fixtures/mongo_mapper_button.rb +6 -0
- data/test/fixtures/mongo_mapper_dashboard.rb +10 -0
- data/test/fixtures/mongo_mapper_wheel.rb +9 -0
- data/test/helpers/active_record_test_helper.rb +7 -0
- data/test/helpers/couch_rest_test_helper.rb +8 -0
- data/test/helpers/mongo_mapper_test_helper.rb +3 -0
- data/test/orm_ext/activerecord_test.rb +85 -0
- data/test/orm_ext/couchrest_test.rb +95 -0
- data/test/orm_ext/mongo_mapper_test.rb +93 -0
- data/test/test_helper.rb +47 -0
- metadata +253 -0
data/tenacity.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path("../lib/tenacity/version", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "tenacity"
|
6
|
+
s.license = "MIT"
|
7
|
+
s.version = Tenacity::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["John Wood"]
|
10
|
+
s.email = ["john@johnpwood.net"]
|
11
|
+
s.homepage = "http://github.com/jwood/tenacity"
|
12
|
+
s.summary = %Q{A ORM independent way of specifying simple relationships between models backed by different databases.}
|
13
|
+
s.description = %Q{Tenacity provides an ORM independent way of specifying simple relationships between models backed by different databases.}
|
14
|
+
|
15
|
+
s.required_rubygems_version = ">= 1.3.6"
|
16
|
+
|
17
|
+
s.add_runtime_dependency "activesupport", ">= 2.3"
|
18
|
+
|
19
|
+
s.add_development_dependency "bundler", "~> 1.0.0"
|
20
|
+
s.add_development_dependency "rake", "~> 0.8.7"
|
21
|
+
s.add_development_dependency "rcov", "~> 0.9.9"
|
22
|
+
s.add_development_dependency "shoulda", "~> 2.11.3"
|
23
|
+
s.add_development_dependency "mongo_mapper", "~> 0.8.6"
|
24
|
+
s.add_development_dependency "bson_ext", "~> 1.1.3"
|
25
|
+
s.add_development_dependency "activerecord", "~> 3.0.0"
|
26
|
+
s.add_development_dependency "mysql", "~> 2.8.1"
|
27
|
+
s.add_development_dependency "couchrest", "~> 1.0.0"
|
28
|
+
s.add_development_dependency "couchrest_model"
|
29
|
+
|
30
|
+
s.files = `git ls-files`.split("\n")
|
31
|
+
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
32
|
+
s.require_path = 'lib'
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class BelongsToTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "A class with a belongs_to association to another class" do
|
6
|
+
setup do
|
7
|
+
setup_fixtures
|
8
|
+
@car = ActiveRecordCar.create
|
9
|
+
@wheel = MongoMapperWheel.create(:active_record_car => @car)
|
10
|
+
end
|
11
|
+
|
12
|
+
should "memoize the association" do
|
13
|
+
assert_equal @car, @wheel.active_record_car
|
14
|
+
|
15
|
+
other_car = ActiveRecordCar.create
|
16
|
+
assert_equal @car, MongoMapperWheel.find(@wheel.id).active_record_car
|
17
|
+
MongoMapperWheel.update(@wheel.id, :active_record_car => other_car)
|
18
|
+
assert_equal other_car, MongoMapperWheel.find(@wheel.id).active_record_car
|
19
|
+
|
20
|
+
assert_equal @car, @wheel.active_record_car
|
21
|
+
assert_equal other_car, @wheel.active_record_car(true)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "A MongoMapper class with belongs_to association to an ActiveRecord class" do
|
26
|
+
setup do
|
27
|
+
setup_fixtures
|
28
|
+
@car = ActiveRecordCar.create
|
29
|
+
@wheel = MongoMapperWheel.create
|
30
|
+
end
|
31
|
+
|
32
|
+
should "be able to fetch the id of the associated object" do
|
33
|
+
@wheel.active_record_car_id = @car.id
|
34
|
+
@wheel.save
|
35
|
+
assert_equal @car.id, MongoMapperWheel.find(@wheel.id).active_record_car_id.to_i
|
36
|
+
end
|
37
|
+
|
38
|
+
should "be able to load the associated object" do
|
39
|
+
@wheel.active_record_car = @car
|
40
|
+
@wheel.save
|
41
|
+
assert_equal @car.id, MongoMapperWheel.find(@wheel.id).active_record_car_id.to_i
|
42
|
+
assert_equal @car, MongoMapperWheel.find(@wheel.id).active_record_car
|
43
|
+
end
|
44
|
+
|
45
|
+
should "be able to load the associated object if all we have is the id" do
|
46
|
+
@wheel.active_record_car_id = @car.id
|
47
|
+
@wheel.save
|
48
|
+
assert_equal @car, MongoMapperWheel.find(@wheel.id).active_record_car
|
49
|
+
end
|
50
|
+
|
51
|
+
should "return nil if no association is set" do
|
52
|
+
assert_nil MongoMapperWheel.find(@wheel.id).active_record_car
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "An ActiveRecord class with belongs_to association to a MongoMapper class" do
|
57
|
+
setup do
|
58
|
+
setup_fixtures
|
59
|
+
@wheel = MongoMapperWheel.create
|
60
|
+
@nut = ActiveRecordNut.create
|
61
|
+
end
|
62
|
+
|
63
|
+
should "be able to fetch the id of the associated object" do
|
64
|
+
@nut.mongo_mapper_wheel_id = @wheel.id
|
65
|
+
@nut.save
|
66
|
+
assert_equal @wheel.id.to_s, ActiveRecordNut.find(@nut.id).mongo_mapper_wheel_id
|
67
|
+
end
|
68
|
+
|
69
|
+
should "be able to load the associated object" do
|
70
|
+
@nut.mongo_mapper_wheel = @wheel
|
71
|
+
@nut.save
|
72
|
+
assert_equal @wheel.id.to_s, ActiveRecordNut.find(@nut.id).mongo_mapper_wheel_id
|
73
|
+
assert_equal @wheel, ActiveRecordNut.find(@nut.id).mongo_mapper_wheel
|
74
|
+
end
|
75
|
+
|
76
|
+
should "be be able to load the associated object if all we have is the id" do
|
77
|
+
@nut.mongo_mapper_wheel_id = @wheel.id
|
78
|
+
@nut.save
|
79
|
+
assert_equal @wheel, ActiveRecordNut.find(@nut.id).mongo_mapper_wheel
|
80
|
+
end
|
81
|
+
|
82
|
+
should "return nil if no association is set" do
|
83
|
+
assert_nil ActiveRecordNut.find(@nut.id).mongo_mapper_wheel
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context "A CouchRest class with belongs_to association to a MongoMapper class" do
|
88
|
+
setup do
|
89
|
+
setup_all_fixtures
|
90
|
+
@dashboard = MongoMapperDashboard.create
|
91
|
+
@radio = CouchRestRadio.create({})
|
92
|
+
end
|
93
|
+
|
94
|
+
should "be able to fetch the id of the associated object" do
|
95
|
+
@radio.mongo_mapper_dashboard_id = @dashboard.id
|
96
|
+
@radio.save
|
97
|
+
assert_equal @dashboard.id.to_s, CouchRestRadio.find(@radio.id).mongo_mapper_dashboard_id
|
98
|
+
end
|
99
|
+
|
100
|
+
should "be able to load the associated object" do
|
101
|
+
@radio.mongo_mapper_dashboard = @dashboard
|
102
|
+
@radio.save
|
103
|
+
assert_equal @dashboard.id.to_s, CouchRestRadio.find(@radio.id).mongo_mapper_dashboard_id
|
104
|
+
assert_equal @dashboard, CouchRestRadio.find(@radio.id).mongo_mapper_dashboard
|
105
|
+
end
|
106
|
+
|
107
|
+
should "be be able to load the associated object if all we have is the id" do
|
108
|
+
@radio.mongo_mapper_dashboard_id = @dashboard.id
|
109
|
+
@radio.save
|
110
|
+
assert_equal @dashboard, CouchRestRadio.find(@radio.id).mongo_mapper_dashboard
|
111
|
+
end
|
112
|
+
|
113
|
+
should "return nil if no association is set" do
|
114
|
+
assert_nil CouchRestRadio.find(@radio.id).mongo_mapper_dashboard
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
@@ -0,0 +1,184 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class HasManyTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "A class with a belongs_to association to another class" do
|
6
|
+
setup do
|
7
|
+
setup_fixtures
|
8
|
+
@car = ActiveRecordCar.create
|
9
|
+
@wheels = [MongoMapperWheel.create, MongoMapperWheel.create, MongoMapperWheel.create]
|
10
|
+
|
11
|
+
@car.mongo_mapper_wheels = @wheels
|
12
|
+
@car.save
|
13
|
+
end
|
14
|
+
|
15
|
+
should "memoize the association" do
|
16
|
+
assert_equal @wheels, @car.mongo_mapper_wheels
|
17
|
+
|
18
|
+
other_wheels = [MongoMapperWheel.create, MongoMapperWheel.create, MongoMapperWheel.create]
|
19
|
+
assert_equal @wheels, ActiveRecordCar.find(@car.id).mongo_mapper_wheels
|
20
|
+
ActiveRecordCar.find(@car.id).update_attribute(:mongo_mapper_wheels, other_wheels)
|
21
|
+
assert_equal other_wheels, ActiveRecordCar.find(@car.id).mongo_mapper_wheels
|
22
|
+
|
23
|
+
assert_equal @wheels, @car.mongo_mapper_wheels
|
24
|
+
assert_equal other_wheels, @car.mongo_mapper_wheels(true)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "An ActiveRecord class with a has_many association to a MongoMapper class" do
|
29
|
+
setup do
|
30
|
+
setup_fixtures
|
31
|
+
@car = ActiveRecordCar.create
|
32
|
+
@wheel_1 = MongoMapperWheel.create
|
33
|
+
@wheel_2 = MongoMapperWheel.create
|
34
|
+
@wheel_3 = MongoMapperWheel.create
|
35
|
+
end
|
36
|
+
|
37
|
+
should "be able to set the associated objects by their ids" do
|
38
|
+
@car.mongo_mapper_wheel_ids = [@wheel_1.id, @wheel_2.id, @wheel_3.id]
|
39
|
+
@car.save
|
40
|
+
assert_set_equal [@wheel_1, @wheel_2, @wheel_3], ActiveRecordCar.find(@car.id).mongo_mapper_wheels
|
41
|
+
assert_set_equal [@wheel_1.id.to_s, @wheel_2.id.to_s, @wheel_3.id.to_s], ActiveRecordCar.find(@car.id).mongo_mapper_wheel_ids
|
42
|
+
end
|
43
|
+
|
44
|
+
context "that works with associated objects" do
|
45
|
+
setup do
|
46
|
+
@car.mongo_mapper_wheels = [@wheel_1, @wheel_2, @wheel_3]
|
47
|
+
@car.save
|
48
|
+
end
|
49
|
+
|
50
|
+
should "be able to set the associated objects" do
|
51
|
+
assert_set_equal [@wheel_1, @wheel_2, @wheel_3], ActiveRecordCar.find(@car.id).mongo_mapper_wheels
|
52
|
+
end
|
53
|
+
|
54
|
+
should "be able to add an associated object using the << operator" do
|
55
|
+
wheel_4 = MongoMapperWheel.create
|
56
|
+
@car.mongo_mapper_wheels << wheel_4
|
57
|
+
@car.save
|
58
|
+
assert_set_equal [@wheel_1, @wheel_2, @wheel_3, wheel_4], ActiveRecordCar.find(@car.id).mongo_mapper_wheels
|
59
|
+
end
|
60
|
+
|
61
|
+
should "be able to remove an associated object using the delete method" do
|
62
|
+
@car.mongo_mapper_wheels.delete(@wheel_3)
|
63
|
+
@car.save
|
64
|
+
assert_set_equal [@wheel_1, @wheel_2], ActiveRecordCar.find(@car.id).mongo_mapper_wheels
|
65
|
+
end
|
66
|
+
|
67
|
+
should "be able to clear all associated objects using the clear method" do
|
68
|
+
@car.mongo_mapper_wheels.clear
|
69
|
+
@car.save
|
70
|
+
assert_equal [], ActiveRecordCar.find(@car.id).mongo_mapper_wheels
|
71
|
+
end
|
72
|
+
|
73
|
+
should "return an empty array if the association is not set" do
|
74
|
+
car = ActiveRecordCar.create
|
75
|
+
assert_set_equal [], ActiveRecordCar.find(car.id).mongo_mapper_wheels
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "A MongoMapper class with a has_many association to an ActiveRecord class" do
|
81
|
+
setup do
|
82
|
+
setup_fixtures
|
83
|
+
@wheel = MongoMapperWheel.create
|
84
|
+
@nut_1 = ActiveRecordNut.create
|
85
|
+
@nut_2 = ActiveRecordNut.create
|
86
|
+
@nut_3 = ActiveRecordNut.create
|
87
|
+
end
|
88
|
+
|
89
|
+
should "be able to set the associated objects by their ids" do
|
90
|
+
@wheel.active_record_nut_ids = [@nut_1.id, @nut_2.id, @nut_3.id]
|
91
|
+
@wheel.save
|
92
|
+
assert_set_equal [@nut_1, @nut_2, @nut_3], MongoMapperWheel.find(@wheel.id).active_record_nuts
|
93
|
+
assert_set_equal [@nut_1.id.to_s, @nut_2.id.to_s, @nut_3.id.to_s], MongoMapperWheel.find(@wheel.id).active_record_nut_ids
|
94
|
+
end
|
95
|
+
|
96
|
+
context "that works with associated objects" do
|
97
|
+
setup do
|
98
|
+
@wheel.active_record_nuts = [@nut_1, @nut_2, @nut_3]
|
99
|
+
@wheel.save
|
100
|
+
end
|
101
|
+
|
102
|
+
should "be able to set the associated objects" do
|
103
|
+
assert_set_equal [@nut_1, @nut_2, @nut_3], MongoMapperWheel.find(@wheel.id).active_record_nuts
|
104
|
+
end
|
105
|
+
|
106
|
+
should "be able to add an associated object using the << operator" do
|
107
|
+
nut_4 = ActiveRecordNut.create
|
108
|
+
@wheel.active_record_nuts << nut_4
|
109
|
+
@wheel.save
|
110
|
+
assert_set_equal [@nut_1, @nut_2, @nut_3, nut_4], MongoMapperWheel.find(@wheel.id).active_record_nuts
|
111
|
+
end
|
112
|
+
|
113
|
+
should "be able to remove an associated object using the delete method" do
|
114
|
+
@wheel.active_record_nuts.delete(@nut_3)
|
115
|
+
@wheel.save
|
116
|
+
assert_set_equal [@nut_1, @nut_2], MongoMapperWheel.find(@wheel.id).active_record_nuts
|
117
|
+
end
|
118
|
+
|
119
|
+
should "be able to clear all associated objects using the clear method" do
|
120
|
+
@wheel.active_record_nuts.clear
|
121
|
+
@wheel.save
|
122
|
+
assert_set_equal [], MongoMapperWheel.find(@wheel.id).active_record_nuts
|
123
|
+
end
|
124
|
+
|
125
|
+
should "return an empty array if the association is not set" do
|
126
|
+
wheel = MongoMapperWheel.create
|
127
|
+
assert_set_equal [], MongoMapperWheel.find(wheel.id).active_record_nuts
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context "A CouchRest class with a has_many association to a MongoMapper class" do
|
133
|
+
setup do
|
134
|
+
setup_all_fixtures
|
135
|
+
@radio = CouchRestRadio.create({})
|
136
|
+
@button_1 = MongoMapperButton.create
|
137
|
+
@button_2 = MongoMapperButton.create
|
138
|
+
@button_3 = MongoMapperButton.create
|
139
|
+
end
|
140
|
+
|
141
|
+
should "be able to set the associated objects by their ids" do
|
142
|
+
@radio.mongo_mapper_button_ids = [@button_1.id, @button_2.id, @button_3.id]
|
143
|
+
@radio.save
|
144
|
+
assert_set_equal [@button_1, @button_2, @button_3], CouchRestRadio.get(@radio.id).mongo_mapper_buttons
|
145
|
+
assert_set_equal [@button_1.id.to_s, @button_2.id.to_s, @button_3.id.to_s], CouchRestRadio.get(@radio.id).mongo_mapper_button_ids
|
146
|
+
end
|
147
|
+
|
148
|
+
context "that works with associated objects" do
|
149
|
+
setup do
|
150
|
+
@radio.mongo_mapper_buttons = [@button_1, @button_2, @button_3]
|
151
|
+
@radio.save
|
152
|
+
end
|
153
|
+
|
154
|
+
should "be able to set the associated objects" do
|
155
|
+
assert_set_equal [@button_1, @button_2, @button_3], CouchRestRadio.get(@radio.id).mongo_mapper_buttons
|
156
|
+
end
|
157
|
+
|
158
|
+
should "be able to add an associated object using the << operator" do
|
159
|
+
button_4 = MongoMapperButton.create
|
160
|
+
@radio.mongo_mapper_buttons << button_4
|
161
|
+
@radio.save
|
162
|
+
assert_set_equal [@button_1, @button_2, @button_3, button_4], CouchRestRadio.get(@radio.id).mongo_mapper_buttons
|
163
|
+
end
|
164
|
+
|
165
|
+
should "be able to remove an associated object using the delete method" do
|
166
|
+
@radio.mongo_mapper_buttons.delete(@button_3)
|
167
|
+
@radio.save
|
168
|
+
assert_set_equal [@button_1, @button_2], CouchRestRadio.get(@radio.id).mongo_mapper_buttons
|
169
|
+
end
|
170
|
+
|
171
|
+
should "be able to clear all associated objects using the clear method" do
|
172
|
+
@radio.mongo_mapper_buttons.clear
|
173
|
+
@radio.save
|
174
|
+
assert_equal [], CouchRestRadio.get(@radio.id).mongo_mapper_buttons
|
175
|
+
end
|
176
|
+
|
177
|
+
should "return an empty array if the association is not set" do
|
178
|
+
radio = CouchRestRadio.create({})
|
179
|
+
assert_set_equal [], CouchRestRadio.get(radio.id).mongo_mapper_buttons
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class HasOneTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "A class with a has_one association to another class" do
|
6
|
+
setup do
|
7
|
+
setup_fixtures
|
8
|
+
@climate_control_unit = ActiveRecordClimateControlUnit.create
|
9
|
+
@dashboard = MongoMapperDashboard.create(:active_record_climate_control_unit => @climate_control_unit)
|
10
|
+
end
|
11
|
+
|
12
|
+
should "memoize the association" do
|
13
|
+
assert_equal @climate_control_unit, @dashboard.active_record_climate_control_unit
|
14
|
+
|
15
|
+
other_climate_control_unit = ActiveRecordClimateControlUnit.create
|
16
|
+
assert_equal @climate_control_unit, MongoMapperDashboard.find(@dashboard.id).active_record_climate_control_unit
|
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)
|
19
|
+
assert_equal other_climate_control_unit, MongoMapperDashboard.find(@dashboard.id).active_record_climate_control_unit
|
20
|
+
|
21
|
+
assert_equal @climate_control_unit, @dashboard.active_record_climate_control_unit
|
22
|
+
assert_equal other_climate_control_unit, @dashboard.active_record_climate_control_unit(true)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "A MongoMapper class with a has_one association to an ActiveRecord class" do
|
27
|
+
setup do
|
28
|
+
setup_fixtures
|
29
|
+
@climate_control_unit = ActiveRecordClimateControlUnit.create
|
30
|
+
@dashboard = MongoMapperDashboard.create
|
31
|
+
end
|
32
|
+
|
33
|
+
should "be able to set and get the associated object" do
|
34
|
+
@dashboard.active_record_climate_control_unit = @climate_control_unit
|
35
|
+
assert_equal @climate_control_unit, MongoMapperDashboard.find(@dashboard.id).active_record_climate_control_unit
|
36
|
+
end
|
37
|
+
|
38
|
+
should "return nil if no association is set" do
|
39
|
+
assert_nil MongoMapperDashboard.find(@dashboard.id).active_record_climate_control_unit
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "An ActiveRecord class with a has_one association to a MongoMapper class" do
|
44
|
+
setup do
|
45
|
+
setup_fixtures
|
46
|
+
@dashboard = MongoMapperDashboard.create
|
47
|
+
@car = ActiveRecordCar.create
|
48
|
+
end
|
49
|
+
|
50
|
+
should "be able to set and get the associated object" do
|
51
|
+
@car.mongo_mapper_dashboard = @dashboard
|
52
|
+
assert_equal @dashboard, ActiveRecordCar.find(@car.id).mongo_mapper_dashboard
|
53
|
+
end
|
54
|
+
|
55
|
+
should "return nil if no association is set" do
|
56
|
+
assert_nil ActiveRecordCar.find(@car.id).mongo_mapper_dashboard
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "A CouchRest class with a has_one association to a MongoMapper class" do
|
61
|
+
setup do
|
62
|
+
setup_all_fixtures
|
63
|
+
@dashboard = MongoMapperDashboard.create
|
64
|
+
@radio = CouchRestRadio.create({})
|
65
|
+
end
|
66
|
+
|
67
|
+
should "be able to set and get the associated object" do
|
68
|
+
@dashboard.couch_rest_radio = @radio
|
69
|
+
assert_equal @radio, MongoMapperDashboard.find(@dashboard.id).couch_rest_radio
|
70
|
+
end
|
71
|
+
|
72
|
+
should "return nil if no association is set" do
|
73
|
+
assert_nil MongoMapperDashboard.find(@dashboard.id).couch_rest_radio
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ClassmethodsTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "A class with a belongs_to :active_record_car association" do
|
6
|
+
setup do
|
7
|
+
setup_fixtures
|
8
|
+
@wheel = MongoMapperWheel.new
|
9
|
+
end
|
10
|
+
|
11
|
+
should("respond to active_record_car") { assert @wheel.respond_to?(:active_record_car) }
|
12
|
+
should("respond to active_record_car=") { assert @wheel.respond_to?(:active_record_car=) }
|
13
|
+
should("respond to active_record_car_id") { assert @wheel.respond_to?(:active_record_car_id) }
|
14
|
+
end
|
15
|
+
|
16
|
+
context "A class with a has_one :active_record_climate_control_unit association" do
|
17
|
+
setup do
|
18
|
+
setup_fixtures
|
19
|
+
@dashboard = MongoMapperDashboard.new
|
20
|
+
end
|
21
|
+
|
22
|
+
should("respond to active_record_climate_control_unit") { assert @dashboard.respond_to?(:active_record_climate_control_unit) }
|
23
|
+
should("respond to active_record_climate_control_unit=") { assert @dashboard.respond_to?(:active_record_climate_control_unit=) }
|
24
|
+
end
|
25
|
+
|
26
|
+
context "A class with a has_many :active_record_nuts association" do
|
27
|
+
setup do
|
28
|
+
setup_fixtures
|
29
|
+
@wheel = MongoMapperWheel.new
|
30
|
+
end
|
31
|
+
|
32
|
+
should("respond to active_record_nuts") { assert @wheel.respond_to?(:active_record_nuts) }
|
33
|
+
should("respond to active_record_nuts=") { assert @wheel.respond_to?(:active_record_nuts=) }
|
34
|
+
should("respond to active_record_nut_ids") { assert @wheel.respond_to?(:active_record_nut_ids) }
|
35
|
+
should("respond to active_record_nut_ids=") { assert @wheel.respond_to?(:active_record_nut_ids=) }
|
36
|
+
end
|
37
|
+
|
38
|
+
context "The object returned by a has_many association" do
|
39
|
+
setup do
|
40
|
+
setup_fixtures
|
41
|
+
@wheel = MongoMapperWheel.new
|
42
|
+
@nuts = @wheel.active_record_nuts
|
43
|
+
end
|
44
|
+
|
45
|
+
should("respond to <<") { assert @nuts.respond_to?(:<<) }
|
46
|
+
should("respond to delete") { assert @nuts.respond_to?(:delete) }
|
47
|
+
should("respond to clear") { assert @nuts.respond_to?(:clear) }
|
48
|
+
should("respond to empty?") { assert @nuts.respond_to?(:empty?) }
|
49
|
+
should("respond to size") { assert @nuts.respond_to?(:size) }
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ActiveRecordTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "The ActiveRecord extension" do
|
6
|
+
setup do
|
7
|
+
setup_fixtures
|
8
|
+
end
|
9
|
+
|
10
|
+
should "be able to find the object in the database" do
|
11
|
+
car = ActiveRecordCar.create
|
12
|
+
assert_equal car, ActiveRecordCar._t_find(car.id)
|
13
|
+
end
|
14
|
+
|
15
|
+
should "return nil if the specified object cannot be found in the database" do
|
16
|
+
assert_nil ActiveRecordCar._t_find(989782)
|
17
|
+
end
|
18
|
+
|
19
|
+
should "be able to find multiple objects in the database" do
|
20
|
+
car = ActiveRecordCar.create
|
21
|
+
car_2 = ActiveRecordCar.create
|
22
|
+
assert_set_equal [car, car_2], ActiveRecordCar._t_find_bulk([car.id, car_2.id, 989823])
|
23
|
+
end
|
24
|
+
|
25
|
+
should "return an empty array if none of the specified ids could be found in the database" do
|
26
|
+
assert_set_equal [], ActiveRecordNut._t_find_bulk([989823, 992111, 989771])
|
27
|
+
end
|
28
|
+
|
29
|
+
should "be able to find the first associate of an object" do
|
30
|
+
mongo_mapper_dashboard = MongoMapperDashboard.create
|
31
|
+
climate_control_unit = ActiveRecordClimateControlUnit.create(:mongo_mapper_dashboard_id => mongo_mapper_dashboard.id)
|
32
|
+
assert_equal climate_control_unit, ActiveRecordClimateControlUnit._t_find_first_by_associate(:mongo_mapper_dashboard_id, mongo_mapper_dashboard.id)
|
33
|
+
end
|
34
|
+
|
35
|
+
should "return nil if unable to find the first associate of an object" do
|
36
|
+
assert_nil ActiveRecordClimateControlUnit._t_find_first_by_associate(:mongo_mapper_dashboard_id, 'abc123')
|
37
|
+
end
|
38
|
+
|
39
|
+
should "be able to find all associates of an object" do
|
40
|
+
nut_1 = ActiveRecordNut.create(:mongo_mapper_wheel_id => 'abc123')
|
41
|
+
nut_2 = ActiveRecordNut.create(:mongo_mapper_wheel_id => 'abc123')
|
42
|
+
nut_3 = ActiveRecordNut.create(:mongo_mapper_wheel_id => 'xyz456')
|
43
|
+
assert_set_equal [nut_1, nut_2], ActiveRecordNut._t_find_all_by_associate(:mongo_mapper_wheel_id, 'abc123')
|
44
|
+
end
|
45
|
+
|
46
|
+
should "return an empty array able to find the associates of an object" do
|
47
|
+
assert_set_equal [], ActiveRecordNut._t_find_all_by_associate(:mongo_mapper_wheel_id, 'abc123')
|
48
|
+
end
|
49
|
+
|
50
|
+
should "be able to reload an object from the database" do
|
51
|
+
nut = ActiveRecordNut.create
|
52
|
+
nut.mongo_mapper_wheel_id = 'abc123'
|
53
|
+
nut.reload
|
54
|
+
assert_equal '', nut.mongo_mapper_wheel_id
|
55
|
+
end
|
56
|
+
|
57
|
+
should "be able to clear the associates of a given object" do
|
58
|
+
nut = ActiveRecordNut.create
|
59
|
+
nut._t_associate_many(:mongo_mapper_wheels, ['abc123', 'def456', 'ghi789'])
|
60
|
+
nut.save
|
61
|
+
nut._t_clear_associates(:mongo_mapper_wheels)
|
62
|
+
assert_set_equal [], nut._t_get_associate_ids(:mongo_mapper_wheels)
|
63
|
+
end
|
64
|
+
|
65
|
+
should "be able to associate many objects with the given object" do
|
66
|
+
nut = ActiveRecordNut.create
|
67
|
+
nut._t_associate_many(:mongo_mapper_wheels, ['abc123', 'def456', 'ghi789'])
|
68
|
+
rows = ActiveRecordNut.connection.execute("select mongo_mapper_wheel_id from active_record_nuts_mongo_mapper_wheels where active_record_nut_id = #{nut.id}")
|
69
|
+
ids = []; rows.each { |r| ids << r[0] }; ids
|
70
|
+
assert_set_equal ['abc123', 'def456', 'ghi789'], ids
|
71
|
+
end
|
72
|
+
|
73
|
+
should "be able to get the ids of the objects associated with the given object" do
|
74
|
+
nut = ActiveRecordNut.create
|
75
|
+
nut._t_associate_many(:mongo_mapper_wheels, ['abc123', 'def456', 'ghi789'])
|
76
|
+
assert_set_equal ['abc123', 'def456', 'ghi789'], nut._t_get_associate_ids(:mongo_mapper_wheels)
|
77
|
+
end
|
78
|
+
|
79
|
+
should "return an empty array if there are no objects associated with the given object ids" do
|
80
|
+
nut = ActiveRecordNut.create
|
81
|
+
assert_set_equal [], nut._t_get_associate_ids(:mongo_mapper_wheels)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|