mongo_mapper 0.12.0 → 0.13.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.rdoc +35 -13
- data/bin/mmconsole +1 -1
- data/lib/mongo_mapper.rb +4 -0
- data/lib/mongo_mapper/connection.rb +17 -6
- data/lib/mongo_mapper/document.rb +1 -0
- data/lib/mongo_mapper/exceptions.rb +4 -1
- data/lib/mongo_mapper/extensions/binary.rb +1 -1
- data/lib/mongo_mapper/extensions/boolean.rb +20 -23
- data/lib/mongo_mapper/extensions/date.rb +3 -3
- data/lib/mongo_mapper/extensions/integer.rb +5 -1
- data/lib/mongo_mapper/extensions/kernel.rb +2 -0
- data/lib/mongo_mapper/extensions/ordered_hash.rb +23 -0
- data/lib/mongo_mapper/extensions/string.rb +2 -2
- data/lib/mongo_mapper/extensions/time.rb +7 -5
- data/lib/mongo_mapper/middleware/identity_map.rb +3 -4
- data/lib/mongo_mapper/plugins.rb +1 -1
- data/lib/mongo_mapper/plugins/associations.rb +11 -5
- data/lib/mongo_mapper/plugins/associations/base.rb +5 -3
- data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +0 -0
- data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +8 -8
- data/lib/mongo_mapper/plugins/associations/collection.rb +2 -0
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +32 -7
- data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +2 -2
- data/lib/mongo_mapper/plugins/associations/one_proxy.rb +12 -12
- data/lib/mongo_mapper/plugins/associations/proxy.rb +5 -1
- data/lib/mongo_mapper/plugins/associations/single_association.rb +6 -6
- data/lib/mongo_mapper/plugins/clone.rb +4 -2
- data/lib/mongo_mapper/plugins/dirty.rb +22 -21
- data/lib/mongo_mapper/plugins/document.rb +4 -4
- data/lib/mongo_mapper/plugins/dumpable.rb +22 -0
- data/lib/mongo_mapper/plugins/embedded_callbacks.rb +58 -9
- data/lib/mongo_mapper/plugins/identity_map.rb +42 -32
- data/lib/mongo_mapper/plugins/keys.rb +133 -54
- data/lib/mongo_mapper/plugins/keys/key.rb +68 -22
- data/lib/mongo_mapper/plugins/modifiers.rb +26 -19
- data/lib/mongo_mapper/plugins/persistence.rb +15 -5
- data/lib/mongo_mapper/plugins/querying.rb +15 -40
- data/lib/mongo_mapper/plugins/querying/{decorator.rb → decorated_plucky_query.rb} +24 -4
- data/lib/mongo_mapper/plugins/rails.rb +22 -2
- data/lib/mongo_mapper/plugins/safe.rb +8 -5
- data/lib/mongo_mapper/plugins/sci.rb +26 -4
- data/lib/mongo_mapper/plugins/scopes.rb +5 -4
- data/lib/mongo_mapper/plugins/timestamps.rb +11 -4
- data/lib/mongo_mapper/plugins/validations.rb +1 -1
- data/lib/mongo_mapper/utils.rb +12 -0
- data/lib/mongo_mapper/version.rb +1 -1
- data/lib/rails/generators/mongo_mapper/config/config_generator.rb +20 -7
- data/lib/rails/generators/mongo_mapper/config/templates/mongo.yml +6 -0
- data/lib/rails/generators/mongo_mapper/model/model_generator.rb +18 -1
- data/lib/rails/generators/mongo_mapper/model/templates/model.rb +9 -5
- data/{test/functional/test_accessible.rb → spec/functional/accessible_spec.rb} +29 -29
- data/{test/functional/associations/test_belongs_to_polymorphic_proxy.rb → spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb} +10 -10
- data/{test/functional/associations/test_belongs_to_proxy.rb → spec/functional/associations/belongs_to_proxy_spec.rb} +82 -64
- data/{test/functional/associations/test_in_array_proxy.rb → spec/functional/associations/in_array_proxy_spec.rb} +68 -68
- data/{test/functional/associations/test_many_documents_as_proxy.rb → spec/functional/associations/many_documents_as_proxy_spec.rb} +37 -38
- data/{test/functional/associations/test_many_documents_proxy.rb → spec/functional/associations/many_documents_proxy_spec.rb} +233 -146
- data/{test/functional/associations/test_many_embedded_polymorphic_proxy.rb → spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb} +19 -20
- data/{test/functional/associations/test_many_embedded_proxy.rb → spec/functional/associations/many_embedded_proxy_spec.rb} +23 -24
- data/{test/functional/associations/test_many_polymorphic_proxy.rb → spec/functional/associations/many_polymorphic_proxy_spec.rb} +45 -46
- data/{test/functional/associations/test_one_as_proxy.rb → spec/functional/associations/one_as_proxy_spec.rb} +75 -77
- data/{test/functional/associations/test_one_embedded_polymorphic_proxy.rb → spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb} +31 -32
- data/{test/functional/associations/test_one_embedded_proxy.rb → spec/functional/associations/one_embedded_proxy_spec.rb} +10 -10
- data/{test/functional/associations/test_one_proxy.rb → spec/functional/associations/one_proxy_spec.rb} +125 -102
- data/spec/functional/associations_spec.rb +48 -0
- data/{test/functional/test_binary.rb → spec/functional/binary_spec.rb} +6 -6
- data/spec/functional/caching_spec.rb +75 -0
- data/{test/functional/test_callbacks.rb → spec/functional/callbacks_spec.rb} +84 -26
- data/{test/functional/test_dirty.rb → spec/functional/dirty_spec.rb} +57 -42
- data/{test/functional/test_document.rb → spec/functional/document_spec.rb} +52 -52
- data/spec/functional/dumpable_spec.rb +24 -0
- data/{test/functional/test_dynamic_querying.rb → spec/functional/dynamic_querying_spec.rb} +14 -14
- data/{test/functional/test_embedded_document.rb → spec/functional/embedded_document_spec.rb} +51 -42
- data/{test/functional/test_equality.rb → spec/functional/equality_spec.rb} +4 -4
- data/spec/functional/extensions_spec.rb +16 -0
- data/{test/functional/test_identity_map.rb → spec/functional/identity_map_spec.rb} +73 -61
- data/spec/functional/indexes_spec.rb +48 -0
- data/spec/functional/keys_spec.rb +224 -0
- data/{test/functional/test_logger.rb → spec/functional/logger_spec.rb} +6 -6
- data/spec/functional/modifiers_spec.rb +550 -0
- data/spec/functional/pagination_spec.rb +89 -0
- data/spec/functional/protected_spec.rb +199 -0
- data/spec/functional/querying_spec.rb +1003 -0
- data/spec/functional/rails_spec.rb +55 -0
- data/spec/functional/safe_spec.rb +163 -0
- data/{test/functional/test_sci.rb → spec/functional/sci_spec.rb} +123 -34
- data/{test/functional/test_scopes.rb → spec/functional/scopes_spec.rb} +59 -26
- data/spec/functional/timestamps_spec.rb +97 -0
- data/{test/functional/test_touch.rb → spec/functional/touch_spec.rb} +13 -13
- data/spec/functional/userstamps_spec.rb +46 -0
- data/{test/functional/test_validations.rb → spec/functional/validations_spec.rb} +64 -64
- data/spec/spec_helper.rb +81 -0
- data/spec/support/matchers.rb +24 -0
- data/{test → spec/support}/models.rb +1 -6
- data/spec/unit/associations/base_spec.rb +146 -0
- data/spec/unit/associations/belongs_to_association_spec.rb +30 -0
- data/spec/unit/associations/many_association_spec.rb +64 -0
- data/spec/unit/associations/one_association_spec.rb +48 -0
- data/{test/unit/associations/test_proxy.rb → spec/unit/associations/proxy_spec.rb} +21 -21
- data/{test/unit/test_clone.rb → spec/unit/clone_spec.rb} +21 -11
- data/spec/unit/config_generator_spec.rb +24 -0
- data/{test/unit/test_document.rb → spec/unit/document_spec.rb} +42 -42
- data/{test/unit/test_dynamic_finder.rb → spec/unit/dynamic_finder_spec.rb} +28 -28
- data/{test/unit/test_embedded_document.rb → spec/unit/embedded_document_spec.rb} +102 -108
- data/{test/unit/test_equality.rb → spec/unit/equality_spec.rb} +7 -7
- data/{test/unit/test_exceptions.rb → spec/unit/exceptions_spec.rb} +3 -3
- data/{test/unit/test_extensions.rb → spec/unit/extensions_spec.rb} +85 -71
- data/spec/unit/identity_map_middleware_spec.rb +134 -0
- data/{test/unit/test_inspect.rb → spec/unit/inspect_spec.rb} +8 -8
- data/{test/unit/test_key.rb → spec/unit/key_spec.rb} +82 -52
- data/spec/unit/keys_spec.rb +155 -0
- data/spec/unit/model_generator_spec.rb +47 -0
- data/spec/unit/mongo_mapper_spec.rb +184 -0
- data/spec/unit/pagination_spec.rb +11 -0
- data/{test/unit/test_plugins.rb → spec/unit/plugins_spec.rb} +14 -14
- data/spec/unit/rails_compatibility_spec.rb +40 -0
- data/{test/unit/test_rails_reflect_on_association.rb → spec/unit/rails_reflect_on_association_spec.rb} +9 -9
- data/{test/unit/test_rails.rb → spec/unit/rails_spec.rb} +31 -31
- data/spec/unit/serialization_spec.rb +169 -0
- data/spec/unit/serializers/json_serializer_spec.rb +218 -0
- data/spec/unit/serializers/xml_serializer_spec.rb +198 -0
- data/{test/unit/test_time_zones.rb → spec/unit/time_zones_spec.rb} +8 -8
- data/{test/unit/test_translation.rb → spec/unit/translation_spec.rb} +6 -6
- data/{test/unit/test_validations.rb → spec/unit/validations_spec.rb} +72 -59
- metadata +199 -179
- data/test/_NOTE_ON_TESTING +0 -1
- data/test/functional/test_associations.rb +0 -46
- data/test/functional/test_caching.rb +0 -77
- data/test/functional/test_indexes.rb +0 -50
- data/test/functional/test_modifiers.rb +0 -537
- data/test/functional/test_pagination.rb +0 -91
- data/test/functional/test_protected.rb +0 -201
- data/test/functional/test_querying.rb +0 -935
- data/test/functional/test_safe.rb +0 -76
- data/test/functional/test_timestamps.rb +0 -62
- data/test/functional/test_userstamps.rb +0 -44
- data/test/support/railtie.rb +0 -4
- data/test/support/railtie/autoloaded.rb +0 -2
- data/test/support/railtie/not_autoloaded.rb +0 -3
- data/test/support/railtie/parent.rb +0 -3
- data/test/test_active_model_lint.rb +0 -18
- data/test/test_helper.rb +0 -93
- data/test/unit/associations/test_base.rb +0 -146
- data/test/unit/associations/test_belongs_to_association.rb +0 -29
- data/test/unit/associations/test_many_association.rb +0 -63
- data/test/unit/associations/test_one_association.rb +0 -47
- data/test/unit/serializers/test_json_serializer.rb +0 -216
- data/test/unit/serializers/test_xml_serializer.rb +0 -196
- data/test/unit/test_identity_map_middleware.rb +0 -132
- data/test/unit/test_keys.rb +0 -65
- data/test/unit/test_mongo_mapper.rb +0 -157
- data/test/unit/test_pagination.rb +0 -11
- data/test/unit/test_rails_compatibility.rb +0 -38
- data/test/unit/test_serialization.rb +0 -166
@@ -1,24 +1,23 @@
|
|
1
|
-
require '
|
2
|
-
require 'models'
|
1
|
+
require 'spec_helper'
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
describe "OneEmbeddedPolymorhpicProxy" do
|
4
|
+
before do
|
6
5
|
@post_class = Doc('Post') do
|
7
6
|
key :title, String
|
8
7
|
end
|
9
8
|
end
|
10
9
|
|
11
|
-
should
|
10
|
+
it "should default to nil" do
|
12
11
|
@post_class.one :author, :polymorphic => true, :class => Robot
|
13
12
|
@post_class.new.author.should be_nil
|
14
13
|
end
|
15
14
|
|
16
|
-
should
|
15
|
+
it "should return nil instead of a proxy" do
|
17
16
|
@post_class.one :author, :polymorphic => true, :class => Robot
|
18
17
|
nil.should === @post_class.new.author
|
19
18
|
end
|
20
19
|
|
21
|
-
should
|
20
|
+
it "should be able to build" do
|
22
21
|
@post_class.one :author, :polymorphic => true, :class => Robot
|
23
22
|
post = @post_class.create
|
24
23
|
author = post.build_author(:serial_number => "1B")
|
@@ -29,29 +28,29 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
29
28
|
post.author.post.should == post
|
30
29
|
end
|
31
30
|
|
32
|
-
should
|
31
|
+
it "should allow assignment of associated document using a hash" do
|
33
32
|
@post_class.one :author, :polymorphic => :true, :class => Robot
|
34
|
-
|
33
|
+
|
35
34
|
post = @post_class.new('author' => { 'name' => 'Frank', '_type' => 'Human' })
|
36
35
|
post.author.name.should == 'Frank'
|
37
36
|
post.author.class.should == Human
|
38
|
-
|
37
|
+
|
39
38
|
post.save.should be_true
|
40
39
|
post.reload
|
41
|
-
|
40
|
+
|
42
41
|
post.author.name.should == 'Frank'
|
43
42
|
post.author.class.should == Human
|
44
43
|
end
|
45
44
|
|
46
45
|
context "replacing the association" do
|
47
46
|
context "with an object" do
|
48
|
-
|
47
|
+
before do
|
49
48
|
@post_class.one :author, :polymorphic => true, :class => Robot
|
50
49
|
@post = @post_class.create
|
51
50
|
@human = Human.new(:name => 'Frank')
|
52
51
|
end
|
53
52
|
|
54
|
-
should
|
53
|
+
it "should work" do
|
55
54
|
@post.author = @human
|
56
55
|
@post.save
|
57
56
|
@post.reload
|
@@ -65,7 +64,7 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
65
64
|
@post.author.should == new_human
|
66
65
|
end
|
67
66
|
|
68
|
-
should
|
67
|
+
it "should generate a new proxy instead of modifying the existing one" do
|
69
68
|
@post.author = @human
|
70
69
|
@post.save
|
71
70
|
@post.reload
|
@@ -82,19 +81,19 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
82
81
|
original_author.name.should == 'Frank'
|
83
82
|
end
|
84
83
|
|
85
|
-
should
|
84
|
+
it "should assign _type" do
|
86
85
|
@post.author = @human
|
87
86
|
@post.author._type.should == "Human"
|
88
87
|
end
|
89
88
|
end
|
90
89
|
|
91
90
|
context "with a Hash" do
|
92
|
-
|
91
|
+
before do
|
93
92
|
@post_class.one :author, :polymorphic => true, :class => Robot
|
94
93
|
@post = @post_class.create
|
95
94
|
end
|
96
95
|
|
97
|
-
should
|
96
|
+
it "should convert to an object of the class and work" do
|
98
97
|
@post.author = {'serial_number' => '1B'}
|
99
98
|
@post.save
|
100
99
|
@post.reload
|
@@ -106,7 +105,7 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
106
105
|
@post.author.serial_number.should == '2C'
|
107
106
|
end
|
108
107
|
|
109
|
-
should
|
108
|
+
it "should convert to an object of _type if given" do
|
110
109
|
@post.author = {'name' => 'Frank', '_type' => 'Human'}
|
111
110
|
@post.author.name.should == 'Frank'
|
112
111
|
@post.author.class.should == Human
|
@@ -117,7 +116,7 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
117
116
|
@post.author.class.should == Human
|
118
117
|
end
|
119
118
|
|
120
|
-
should
|
119
|
+
it "should assign _type" do
|
121
120
|
@post.author = {'name' => 'Frank', '_type' => 'Human'}
|
122
121
|
@post.save
|
123
122
|
@post.reload
|
@@ -126,7 +125,7 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
126
125
|
end
|
127
126
|
end
|
128
127
|
|
129
|
-
should
|
128
|
+
it "should unset the association" do
|
130
129
|
@post_class.one :author, :polymorphic => true, :class => Robot
|
131
130
|
post = @post_class.create
|
132
131
|
human = Human.new
|
@@ -136,7 +135,7 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
136
135
|
post.author.should == nil
|
137
136
|
end
|
138
137
|
|
139
|
-
should
|
138
|
+
it "should set modularized associated models correctly" do
|
140
139
|
@post_class.one :author, :polymorphic => true, :class => Robot
|
141
140
|
|
142
141
|
post = @post_class.new('author' => {'_type' => 'TrModels::Ambulance', 'license_plate' => 'GGG123', 'icu' => true})
|
@@ -152,7 +151,7 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
152
151
|
post.author.icu.should be_true
|
153
152
|
end
|
154
153
|
|
155
|
-
should
|
154
|
+
it "should not have problem loading root document if embedded one is nil" do
|
156
155
|
@post_class.one :author, :polymorphic => true, :class => Robot
|
157
156
|
post = @post_class.create
|
158
157
|
|
@@ -161,7 +160,7 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
161
160
|
}.should_not raise_error
|
162
161
|
end
|
163
162
|
|
164
|
-
should
|
163
|
+
it "should load the parent and root documents for nested embedded documents" do
|
165
164
|
@address_class = EDoc('Address') do
|
166
165
|
key :city, String
|
167
166
|
key :state, String
|
@@ -169,31 +168,31 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
169
168
|
@author_class = EDoc('EmbeddedAuthor')
|
170
169
|
@author_class.one :address, :polymorphic => true, :class => @address_class
|
171
170
|
@post_class.one :author, :polymorphic => true, :class => @author_class
|
172
|
-
|
171
|
+
|
173
172
|
post = @post_class.create(:title => 'Post Title', :author => { :name => 'Frank', :address => { :city => 'Boston', :state => 'MA' } })
|
174
|
-
|
173
|
+
|
175
174
|
post.author.address._parent_document.should == post.author
|
176
175
|
post.author.address._root_document.should == post
|
177
176
|
end
|
178
|
-
|
179
|
-
should
|
177
|
+
|
178
|
+
it "should have boolean method for testing presence" do
|
180
179
|
@post_class.one :author, :polymorphic => true, :class => Robot
|
181
|
-
|
180
|
+
|
182
181
|
post = @post_class.new
|
183
182
|
post.author?.should be_false
|
184
|
-
|
183
|
+
|
185
184
|
post.author = Human.new(:name => 'Frank')
|
186
185
|
post.author?.should be_true
|
187
186
|
end
|
188
187
|
|
189
|
-
should
|
188
|
+
it "should initialize id for nested embedded document created from hash" do
|
190
189
|
@address_class = EDoc('Address') do
|
191
190
|
key :city, String
|
192
191
|
key :state, String
|
193
192
|
end
|
194
193
|
@author_class = EDoc('EmbeddedAuthor')
|
195
194
|
@author_class.one :address, :polymorphic => true, :class => @address_class
|
196
|
-
@post_class.one :author, :polymorphic => true, :class => @author_class
|
195
|
+
@post_class.one :author, :polymorphic => true, :class => @author_class
|
197
196
|
|
198
197
|
post = @post_class.create(:title => 'Post Title', :author => {
|
199
198
|
:name => 'Frank',
|
@@ -202,7 +201,7 @@ class OneEmbeddedPolymorhpicProxyTest < Test::Unit::TestCase
|
|
202
201
|
:state => 'MA'
|
203
202
|
}
|
204
203
|
})
|
205
|
-
|
204
|
+
|
206
205
|
post.author.address.id.should_not be_nil
|
207
206
|
end
|
208
207
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe "OneEmbeddedProxy" do
|
4
|
+
before do
|
5
5
|
@post_class = Doc('Post') do
|
6
6
|
key :title, String
|
7
7
|
end
|
@@ -11,12 +11,12 @@ class OneEmbeddedProxyTest < Test::Unit::TestCase
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
should
|
14
|
+
it "should default to nil" do
|
15
15
|
@post_class.one :author, :class => @author_class
|
16
16
|
@post_class.new.author.should be_nil
|
17
17
|
end
|
18
18
|
|
19
|
-
should
|
19
|
+
it "should be able to build" do
|
20
20
|
@post_class.one :author, :class => @author_class
|
21
21
|
|
22
22
|
post = @post_class.create
|
@@ -28,7 +28,7 @@ class OneEmbeddedProxyTest < Test::Unit::TestCase
|
|
28
28
|
post.author.post.should == post
|
29
29
|
end
|
30
30
|
|
31
|
-
should
|
31
|
+
it "should be able to replace the association" do
|
32
32
|
@post_class.one :author, :class => @author_class
|
33
33
|
|
34
34
|
post = @post_class.new
|
@@ -45,7 +45,7 @@ class OneEmbeddedProxyTest < Test::Unit::TestCase
|
|
45
45
|
post.author.should == new_author
|
46
46
|
end
|
47
47
|
|
48
|
-
should
|
48
|
+
it "should not have problem loading root document if embedded one is nil" do
|
49
49
|
@post_class.one :author, :class => @author_class
|
50
50
|
post = @post_class.create
|
51
51
|
|
@@ -54,7 +54,7 @@ class OneEmbeddedProxyTest < Test::Unit::TestCase
|
|
54
54
|
}.should_not raise_error
|
55
55
|
end
|
56
56
|
|
57
|
-
should
|
57
|
+
it "should load the parent and root documents for nested embedded documents" do
|
58
58
|
@address_class = EDoc('Address') do
|
59
59
|
key :city, String
|
60
60
|
key :state, String
|
@@ -68,7 +68,7 @@ class OneEmbeddedProxyTest < Test::Unit::TestCase
|
|
68
68
|
post.author.address._root_document.should == post
|
69
69
|
end
|
70
70
|
|
71
|
-
should
|
71
|
+
it "should have boolean method for testing presence" do
|
72
72
|
@post_class.one :author, :class => @author_class
|
73
73
|
|
74
74
|
post = @post_class.new
|
@@ -78,7 +78,7 @@ class OneEmbeddedProxyTest < Test::Unit::TestCase
|
|
78
78
|
post.author?.should be_true
|
79
79
|
end
|
80
80
|
|
81
|
-
should
|
81
|
+
it "should initialize id for nested embedded document created from hash" do
|
82
82
|
@address_class = EDoc('Address') do
|
83
83
|
key :city, String
|
84
84
|
key :state, String
|
@@ -1,25 +1,25 @@
|
|
1
|
-
require '
|
2
|
-
require 'models'
|
1
|
+
require 'spec_helper'
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
describe "OneProxy" do
|
4
|
+
before do
|
6
5
|
@post_class = Doc('Post')
|
7
6
|
@author_class = Doc do
|
7
|
+
key :name, String
|
8
8
|
key :post_id, ObjectId
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
should
|
12
|
+
it "should default to nil" do
|
13
13
|
@post_class.one :author, :class => @author_class
|
14
14
|
@post_class.new.author.nil?.should be_true
|
15
15
|
end
|
16
16
|
|
17
|
-
should
|
17
|
+
it "should return nil instead of a proxy" do
|
18
18
|
@post_class.one :author, :class => @author_class
|
19
19
|
nil.should === @post_class.new.author
|
20
20
|
end
|
21
21
|
|
22
|
-
should
|
22
|
+
it "should allow assignment of associated document using a hash" do
|
23
23
|
@post_class.one :author, :class => @author_class
|
24
24
|
|
25
25
|
post = @post_class.new('author' => { 'name' => 'Frank' })
|
@@ -33,7 +33,7 @@ class OneProxyTest < Test::Unit::TestCase
|
|
33
33
|
|
34
34
|
context "replacing the association" do
|
35
35
|
context "with an object of the class" do
|
36
|
-
should
|
36
|
+
it "should work" do
|
37
37
|
@post_class.one :author, :class => @author_class
|
38
38
|
|
39
39
|
post = @post_class.new
|
@@ -49,7 +49,7 @@ class OneProxyTest < Test::Unit::TestCase
|
|
49
49
|
post.author.should == new_author
|
50
50
|
end
|
51
51
|
|
52
|
-
should
|
52
|
+
it "should generate a new proxy instead of modifying the existing one" do
|
53
53
|
@post_class.one :author, :class => @author_class
|
54
54
|
|
55
55
|
post = @post_class.new
|
@@ -71,7 +71,7 @@ class OneProxyTest < Test::Unit::TestCase
|
|
71
71
|
end
|
72
72
|
|
73
73
|
context "with a Hash" do
|
74
|
-
should
|
74
|
+
it "should convert to an object of the class and work" do
|
75
75
|
@post_class.one :author, :class => @author_class
|
76
76
|
|
77
77
|
post = @post_class.new
|
@@ -85,35 +85,35 @@ class OneProxyTest < Test::Unit::TestCase
|
|
85
85
|
post.author.name.should == 'Emily'
|
86
86
|
end
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
context "with :dependent" do
|
90
90
|
context "=> delete" do
|
91
|
-
|
91
|
+
before do
|
92
92
|
@post_class.one :author, :class => @author_class, :dependent => :delete
|
93
93
|
|
94
94
|
@post = @post_class.create
|
95
95
|
@author = @author_class.new
|
96
96
|
@post.author = @author
|
97
97
|
end
|
98
|
-
|
99
|
-
should
|
100
|
-
@author_class.any_instance.
|
98
|
+
|
99
|
+
it "should call delete on the existing document" do
|
100
|
+
@author_class.any_instance.should_receive(:delete).once
|
101
101
|
@post.author = @author_class.new
|
102
102
|
end
|
103
|
-
|
104
|
-
should
|
103
|
+
|
104
|
+
it "should remove the existing document from the database" do
|
105
105
|
@post.author = @author_class.new
|
106
106
|
lambda { @author.reload }.should raise_error(MongoMapper::DocumentNotFound)
|
107
107
|
end
|
108
|
-
|
109
|
-
should
|
110
|
-
@author_class.any_instance.
|
108
|
+
|
109
|
+
it "should do nothing if it's the same document" do
|
110
|
+
@author_class.any_instance.should_receive(:delete).never
|
111
111
|
@post.author = @author
|
112
|
-
end
|
112
|
+
end
|
113
113
|
end
|
114
|
-
|
114
|
+
|
115
115
|
context "=> destory" do
|
116
|
-
|
116
|
+
before do
|
117
117
|
@post_class.one :author, :class => @author_class, :dependent => :destroy
|
118
118
|
|
119
119
|
@post = @post_class.create
|
@@ -121,32 +121,32 @@ class OneProxyTest < Test::Unit::TestCase
|
|
121
121
|
@post.author = @author
|
122
122
|
end
|
123
123
|
|
124
|
-
should
|
125
|
-
@author_class.any_instance.
|
124
|
+
it "should call destroy the existing document" do
|
125
|
+
@author_class.any_instance.should_receive(:destroy).once
|
126
126
|
@post.author = @author_class.new
|
127
127
|
end
|
128
|
-
|
129
|
-
should
|
128
|
+
|
129
|
+
it "should remove the existing document from the database" do
|
130
130
|
@post.author = @author_class.new
|
131
131
|
lambda { @author.reload }.should raise_error(MongoMapper::DocumentNotFound)
|
132
132
|
end
|
133
|
-
|
134
|
-
should
|
135
|
-
@author_class.any_instance.
|
133
|
+
|
134
|
+
it "should do nothing if it's the same document" do
|
135
|
+
@author_class.any_instance.should_receive(:destroy).never
|
136
136
|
@post.author = @author
|
137
|
-
end
|
137
|
+
end
|
138
138
|
end
|
139
139
|
|
140
140
|
context "=> nullify" do
|
141
|
-
|
141
|
+
before do
|
142
142
|
@post_class.one :author, :class => @author_class, :dependent => :nullify
|
143
143
|
|
144
144
|
@post = @post_class.create
|
145
145
|
@author = @author_class.new
|
146
146
|
@post.author = @author
|
147
147
|
end
|
148
|
-
|
149
|
-
should
|
148
|
+
|
149
|
+
it "should nullify the existing document" do
|
150
150
|
@author.reload
|
151
151
|
@author.post_id.should == @post.id
|
152
152
|
|
@@ -155,16 +155,16 @@ class OneProxyTest < Test::Unit::TestCase
|
|
155
155
|
@author.reload
|
156
156
|
@author.post_id.should be_nil
|
157
157
|
end
|
158
|
-
|
159
|
-
should
|
158
|
+
|
159
|
+
it "should work when it's the same document" do
|
160
160
|
old_author = @post.author
|
161
161
|
@post.author = @author
|
162
162
|
old_author.should == @post.author
|
163
|
-
end
|
163
|
+
end
|
164
164
|
end
|
165
|
-
|
165
|
+
|
166
166
|
context "unspecified" do
|
167
|
-
should
|
167
|
+
it "should nullify the existing document" do
|
168
168
|
@post_class.one :author, :class => @author_class
|
169
169
|
|
170
170
|
post = @post_class.create
|
@@ -180,30 +180,30 @@ class OneProxyTest < Test::Unit::TestCase
|
|
180
180
|
end
|
181
181
|
end
|
182
182
|
end
|
183
|
-
|
183
|
+
|
184
184
|
context "with nil" do
|
185
|
-
|
185
|
+
before do
|
186
186
|
@post_class.one :author, :class => @author_class
|
187
187
|
|
188
188
|
@post = @post_class.new
|
189
|
-
@author = @author_class.new(:name => 'Frank')
|
189
|
+
@author = @author_class.new(:name => 'Frank')
|
190
190
|
@post.author = @author
|
191
191
|
end
|
192
|
-
|
193
|
-
should
|
192
|
+
|
193
|
+
it "should nullify the existing document" do
|
194
194
|
@post.author = nil
|
195
195
|
@author.reload
|
196
196
|
@author.post_id.should be_nil
|
197
197
|
end
|
198
198
|
|
199
|
-
should
|
199
|
+
it "should set the target to nil" do
|
200
200
|
@post.author = nil
|
201
201
|
@post.author.should == nil
|
202
202
|
end
|
203
203
|
end
|
204
204
|
end
|
205
205
|
|
206
|
-
should
|
206
|
+
it "should have boolean method for testing presence" do
|
207
207
|
@post_class.one :author, :class => @author_class
|
208
208
|
|
209
209
|
post = @post_class.new
|
@@ -213,7 +213,7 @@ class OneProxyTest < Test::Unit::TestCase
|
|
213
213
|
post.author?.should be_true
|
214
214
|
end
|
215
215
|
|
216
|
-
should
|
216
|
+
it "should work with criteria" do
|
217
217
|
@post_class.one :primary_author, :class => @author_class, :primary => true
|
218
218
|
@post_class.one :author, :class => @author_class, :primary => false
|
219
219
|
|
@@ -225,7 +225,7 @@ class OneProxyTest < Test::Unit::TestCase
|
|
225
225
|
post.primary_author.should == primary
|
226
226
|
end
|
227
227
|
|
228
|
-
should
|
228
|
+
it "should unset the association" do
|
229
229
|
@post_class.one :author, :class => @author_class
|
230
230
|
post = @post_class.create
|
231
231
|
author = @author_class.create
|
@@ -234,10 +234,10 @@ class OneProxyTest < Test::Unit::TestCase
|
|
234
234
|
post.author = nil
|
235
235
|
post.author.nil?.should be_true
|
236
236
|
end
|
237
|
-
|
237
|
+
|
238
238
|
context "destroying parent with :dependent" do
|
239
239
|
context "=> destroy" do
|
240
|
-
|
240
|
+
before do
|
241
241
|
@post_class.one :author, :class => @author_class, :dependent => :destroy
|
242
242
|
|
243
243
|
@post = @post_class.create
|
@@ -245,12 +245,12 @@ class OneProxyTest < Test::Unit::TestCase
|
|
245
245
|
@post.author = @author
|
246
246
|
end
|
247
247
|
|
248
|
-
|
249
|
-
@author_class.any_instance.
|
248
|
+
it "should should call destroy on the associated documents" do
|
249
|
+
@author_class.any_instance.should_receive(:destroy).once
|
250
250
|
@post.destroy
|
251
251
|
end
|
252
|
-
|
253
|
-
|
252
|
+
|
253
|
+
it "should should remove the associated documents" do
|
254
254
|
@author_class.count.should == 1
|
255
255
|
@post.destroy
|
256
256
|
@post.author.should == nil
|
@@ -259,7 +259,7 @@ class OneProxyTest < Test::Unit::TestCase
|
|
259
259
|
end
|
260
260
|
|
261
261
|
context "=> delete" do
|
262
|
-
|
262
|
+
before do
|
263
263
|
@post_class.one :author, :class => @author_class, :dependent => :delete
|
264
264
|
|
265
265
|
@post = @post_class.create
|
@@ -267,12 +267,12 @@ class OneProxyTest < Test::Unit::TestCase
|
|
267
267
|
@post.author = @author
|
268
268
|
end
|
269
269
|
|
270
|
-
|
271
|
-
@author_class.any_instance.
|
270
|
+
it "should should call delete the associated documents" do
|
271
|
+
@author_class.any_instance.should_receive(:delete).once
|
272
272
|
@post.destroy
|
273
273
|
end
|
274
274
|
|
275
|
-
should
|
275
|
+
it "should remove the associated documents" do
|
276
276
|
@author_class.count.should == 1
|
277
277
|
@post.destroy
|
278
278
|
@post.author.should == nil
|
@@ -281,7 +281,7 @@ class OneProxyTest < Test::Unit::TestCase
|
|
281
281
|
end
|
282
282
|
|
283
283
|
context "=> nullify" do
|
284
|
-
|
284
|
+
it "should should nullify the relationship but not destroy the associated document" do
|
285
285
|
@post_class.one :author, :class => @author_class, :dependent => :nullify
|
286
286
|
|
287
287
|
post = @post_class.create
|
@@ -297,9 +297,9 @@ class OneProxyTest < Test::Unit::TestCase
|
|
297
297
|
author.post_id.should == nil
|
298
298
|
end
|
299
299
|
end
|
300
|
-
|
300
|
+
|
301
301
|
context "unspecified" do
|
302
|
-
|
302
|
+
it "should should nullify the relationship but not destroy the associated document" do
|
303
303
|
@post_class.one :author, :class => @author_class
|
304
304
|
|
305
305
|
post = @post_class.create
|
@@ -316,65 +316,88 @@ class OneProxyTest < Test::Unit::TestCase
|
|
316
316
|
end
|
317
317
|
end
|
318
318
|
end
|
319
|
-
|
320
319
|
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
320
|
+
context "when building associations" do
|
321
|
+
before do
|
322
|
+
@post_class.one :author, :class => @author_class
|
323
|
+
end
|
324
|
+
let(:post) { @post_class.create }
|
325
|
+
|
326
|
+
context "#build" do
|
327
|
+
it "should work" do
|
328
|
+
author = post.build_author(:name => 'John')
|
329
|
+
post.author.should be_instance_of(@author_class)
|
330
|
+
post.author.should be_new
|
331
|
+
post.author.name.should == 'John'
|
332
|
+
post.author.should == author
|
333
|
+
post.author.post_id.should == post.id
|
334
|
+
end
|
332
335
|
|
333
|
-
|
334
|
-
|
336
|
+
it "should allow a block" do
|
337
|
+
author = post.build_author do |doc|
|
338
|
+
doc.name = "John"
|
339
|
+
end
|
340
|
+
author.name.should == "John"
|
341
|
+
end
|
342
|
+
end
|
335
343
|
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
+
context "#create" do
|
345
|
+
it "should work" do
|
346
|
+
author = post.create_author(:name => 'John')
|
347
|
+
post.author.should be_instance_of(@author_class)
|
348
|
+
post.author.should_not be_new
|
349
|
+
post.author.name.should == 'John'
|
350
|
+
post.author.should == author
|
351
|
+
post.author.post_id.should == post.id
|
352
|
+
end
|
344
353
|
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
354
|
+
it "should allow a block" do
|
355
|
+
author = post.create_author do |doc|
|
356
|
+
doc.name = "John"
|
357
|
+
end
|
358
|
+
author.name.should == "John"
|
359
|
+
end
|
349
360
|
end
|
350
361
|
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
362
|
+
|
363
|
+
context "#create!" do
|
364
|
+
before do
|
365
|
+
@author_class.key :name, String, :required => true
|
366
|
+
end
|
367
|
+
|
368
|
+
it "should raise exception if invalid" do
|
369
|
+
expect {
|
370
|
+
post.create_author!
|
371
|
+
}.to raise_error(MongoMapper::DocumentNotValid)
|
372
|
+
end
|
373
|
+
|
374
|
+
it "should work if valid" do
|
375
|
+
author = post.create_author!(:name => 'John')
|
376
|
+
post.author.should be_instance_of(@author_class)
|
377
|
+
post.author.should_not be_new
|
378
|
+
post.author.name.should == 'John'
|
379
|
+
post.author.should == author
|
380
|
+
post.author.post_id.should == post.id
|
355
381
|
end
|
356
|
-
end
|
357
382
|
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
post.author.should == author
|
365
|
-
post.author.post_id.should == post.id
|
383
|
+
it "should accept a block" do
|
384
|
+
author = post.create_author! do |doc|
|
385
|
+
doc.name = "John"
|
386
|
+
end
|
387
|
+
author.name.should == "John"
|
388
|
+
end
|
366
389
|
end
|
367
390
|
end
|
368
391
|
|
369
392
|
context "namespaced foreign keys" do
|
370
|
-
|
393
|
+
before do
|
371
394
|
News::Paper.one :article, :class_name => 'News::Article'
|
372
395
|
News::Article.belongs_to :paper, :class_name => 'News::Paper'
|
373
396
|
|
374
397
|
@paper = News::Paper.create
|
375
398
|
end
|
376
399
|
|
377
|
-
should
|
400
|
+
it "should properly infer the foreign key" do
|
378
401
|
article = @paper.create_article
|
379
402
|
article.should respond_to(:paper_id)
|
380
403
|
article.paper_id.should == @paper.id
|