mongomodel 0.4.6 → 0.4.7
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/Appraisals +12 -0
- data/bin/console +1 -2
- data/gemfiles/mongo_mapper.gemfile +12 -0
- data/gemfiles/mongoid.gemfile +12 -0
- data/lib/mongomodel.rb +3 -0
- data/lib/mongomodel/compatibility/mongo_mapper.rb +23 -0
- data/lib/mongomodel/compatibility/mongoid.rb +17 -0
- data/lib/mongomodel/concerns/properties.rb +5 -0
- data/lib/mongomodel/concerns/validations.rb +5 -3
- data/lib/mongomodel/support/core_extensions.rb +4 -4
- data/lib/mongomodel/support/mongo_options.rb +4 -2
- data/lib/mongomodel/support/mongo_order.rb +4 -0
- data/lib/mongomodel/support/scope.rb +1 -1
- data/lib/mongomodel/version.rb +1 -1
- data/spec/mongomodel/attributes/store_spec.rb +12 -12
- data/spec/mongomodel/concerns/associations/belongs_to_spec.rb +13 -13
- data/spec/mongomodel/concerns/associations/has_many_by_foreign_key_spec.rb +25 -25
- data/spec/mongomodel/concerns/associations/has_many_by_ids_spec.rb +25 -25
- data/spec/mongomodel/concerns/attribute_methods/before_type_cast_spec.rb +5 -5
- data/spec/mongomodel/concerns/attribute_methods/dirty_spec.rb +21 -21
- data/spec/mongomodel/concerns/attribute_methods/multi_parameter_assignment_spec.rb +3 -3
- data/spec/mongomodel/concerns/attribute_methods/protected_spec.rb +10 -10
- data/spec/mongomodel/concerns/attribute_methods/query_spec.rb +6 -6
- data/spec/mongomodel/concerns/attribute_methods/read_spec.rb +6 -6
- data/spec/mongomodel/concerns/attribute_methods/write_spec.rb +5 -5
- data/spec/mongomodel/concerns/attribute_methods_spec.rb +5 -5
- data/spec/mongomodel/concerns/attributes_spec.rb +13 -13
- data/spec/mongomodel/concerns/callbacks_spec.rb +11 -11
- data/spec/mongomodel/concerns/logging_spec.rb +2 -2
- data/spec/mongomodel/concerns/observing_spec.rb +3 -3
- data/spec/mongomodel/concerns/pretty_inspect_spec.rb +5 -5
- data/spec/mongomodel/concerns/properties_spec.rb +6 -6
- data/spec/mongomodel/concerns/serialization/json_serialization_spec.rb +6 -6
- data/spec/mongomodel/concerns/timestamps_spec.rb +10 -10
- data/spec/mongomodel/concerns/translation_spec.rb +1 -1
- data/spec/mongomodel/concerns/validations_spec.rb +12 -4
- data/spec/mongomodel/document/callbacks_spec.rb +10 -10
- data/spec/mongomodel/document/collection_modifiers_spec.rb +1 -1
- data/spec/mongomodel/document/dynamic_finders_spec.rb +5 -5
- data/spec/mongomodel/document/finders_spec.rb +9 -9
- data/spec/mongomodel/document/indexes_spec.rb +19 -19
- data/spec/mongomodel/document/optimistic_locking_spec.rb +8 -8
- data/spec/mongomodel/document/persistence_spec.rb +38 -38
- data/spec/mongomodel/document/scopes_spec.rb +8 -8
- data/spec/mongomodel/document/validations/uniqueness_spec.rb +9 -9
- data/spec/mongomodel/document/validations_spec.rb +16 -16
- data/spec/mongomodel/document_spec.rb +11 -11
- data/spec/mongomodel/embedded_document_spec.rb +13 -13
- data/spec/mongomodel/mongomodel_spec.rb +4 -4
- data/spec/mongomodel/support/collection_spec.rb +40 -40
- data/spec/mongomodel/support/map_spec.rb +41 -41
- data/spec/mongomodel/support/mongo_operator_spec.rb +11 -9
- data/spec/mongomodel/support/mongo_options_spec.rb +17 -17
- data/spec/mongomodel/support/mongo_order_spec.rb +22 -22
- data/spec/mongomodel/support/property_spec.rb +21 -12
- data/spec/mongomodel/support/scope_spec.rb +134 -134
- data/spec/spec_helper.rb +1 -0
- data/spec/specdoc.opts +0 -3
- metadata +7 -5
@@ -7,92 +7,92 @@ module MongoModel
|
|
7
7
|
has_many :chapters
|
8
8
|
end
|
9
9
|
|
10
|
-
it "
|
10
|
+
it "defaults to :by => :ids" do
|
11
11
|
Book.associations[:chapters].should be_a(Associations::HasManyByIds)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
shared_examples_for "accessing and manipulating a has_many :by => :ids association" do
|
17
|
-
it "
|
17
|
+
it "accesses chapters" do
|
18
18
|
subject.chapters.should == [chapter1, chapter2]
|
19
19
|
end
|
20
20
|
|
21
|
-
it "
|
21
|
+
it "accesses chapter ids through association" do
|
22
22
|
subject.chapters.ids.should == [chapter1.id, chapter2.id]
|
23
23
|
end
|
24
24
|
|
25
|
-
it "
|
25
|
+
it "has chapter ids" do
|
26
26
|
subject.chapter_ids.should == [chapter1.id, chapter2.id]
|
27
27
|
end
|
28
28
|
|
29
|
-
it "
|
29
|
+
it "adds chapters with <<" do
|
30
30
|
subject.chapters << chapter3
|
31
31
|
subject.chapters.should == [chapter1, chapter2, chapter3]
|
32
32
|
subject.chapter_ids.should == [chapter1.id, chapter2.id, chapter3.id]
|
33
33
|
end
|
34
34
|
|
35
|
-
it "
|
35
|
+
it "adds/change chapters with []=" do
|
36
36
|
subject.chapters[2] = chapter3
|
37
37
|
subject.chapters.should == [chapter1, chapter2, chapter3]
|
38
38
|
subject.chapter_ids.should == [chapter1.id, chapter2.id, chapter3.id]
|
39
39
|
end
|
40
40
|
|
41
|
-
it "
|
41
|
+
it "adds chapters with concat" do
|
42
42
|
subject.chapters.concat([chapter3])
|
43
43
|
subject.chapters.should == [chapter1, chapter2, chapter3]
|
44
44
|
subject.chapter_ids.should == [chapter1.id, chapter2.id, chapter3.id]
|
45
45
|
end
|
46
46
|
|
47
|
-
it "
|
47
|
+
it "inserts chapters" do
|
48
48
|
subject.chapters.insert(1, chapter3)
|
49
49
|
subject.chapters.should == [chapter1, chapter3, chapter2]
|
50
50
|
subject.chapter_ids.should == [chapter1.id, chapter3.id, chapter2.id]
|
51
51
|
end
|
52
52
|
|
53
|
-
it "
|
53
|
+
it "replaces chapters" do
|
54
54
|
subject.chapters.replace([chapter2, chapter3])
|
55
55
|
subject.chapters.should == [chapter2, chapter3]
|
56
56
|
subject.chapter_ids.should == [chapter2.id, chapter3.id]
|
57
57
|
end
|
58
58
|
|
59
|
-
it "
|
59
|
+
it "adds chapters with push" do
|
60
60
|
subject.chapters.push(chapter3)
|
61
61
|
subject.chapters.should == [chapter1, chapter2, chapter3]
|
62
62
|
subject.chapter_ids.should == [chapter1.id, chapter2.id, chapter3.id]
|
63
63
|
end
|
64
64
|
|
65
|
-
it "
|
65
|
+
it "adds chapters with unshift" do
|
66
66
|
subject.chapters.unshift(chapter3)
|
67
67
|
subject.chapters.should == [chapter3, chapter1, chapter2]
|
68
68
|
subject.chapter_ids.should == [chapter3.id, chapter1.id, chapter2.id]
|
69
69
|
end
|
70
70
|
|
71
|
-
it "
|
71
|
+
it "clears chapters" do
|
72
72
|
subject.chapters.clear
|
73
73
|
subject.chapters.should be_empty
|
74
74
|
subject.chapter_ids.should be_empty
|
75
75
|
end
|
76
76
|
|
77
|
-
it "
|
77
|
+
it "removes chapters with delete" do
|
78
78
|
subject.chapters.delete(chapter1)
|
79
79
|
subject.chapters.should == [chapter2]
|
80
80
|
subject.chapter_ids.should == [chapter2.id]
|
81
81
|
end
|
82
82
|
|
83
|
-
it "
|
83
|
+
it "removes chapters with delete_at" do
|
84
84
|
subject.chapters.delete_at(0)
|
85
85
|
subject.chapters.should == [chapter2]
|
86
86
|
subject.chapter_ids.should == [chapter2.id]
|
87
87
|
end
|
88
88
|
|
89
|
-
it "
|
89
|
+
it "removes chapters with delete_if" do
|
90
90
|
subject.chapters.delete_if { |c| c.id == chapter1.id }
|
91
91
|
subject.chapters.should == [chapter2]
|
92
92
|
subject.chapter_ids.should == [chapter2.id]
|
93
93
|
end
|
94
94
|
|
95
|
-
it "
|
95
|
+
it "builds a chapter" do
|
96
96
|
chapter4 = subject.chapters.build(:id => '4')
|
97
97
|
subject.chapters.should == [chapter1, chapter2, chapter4]
|
98
98
|
subject.chapter_ids.should == [chapter1.id, chapter2.id, chapter4.id]
|
@@ -101,7 +101,7 @@ module MongoModel
|
|
101
101
|
chapter4.id.should == '4'
|
102
102
|
end
|
103
103
|
|
104
|
-
it "
|
104
|
+
it "creates a chapter" do
|
105
105
|
chapter4 = subject.chapters.create(:id => '4')
|
106
106
|
subject.chapters.should == [chapter1, chapter2, chapter4]
|
107
107
|
subject.chapter_ids.should == [chapter1.id, chapter2.id, chapter4.id]
|
@@ -110,7 +110,7 @@ module MongoModel
|
|
110
110
|
chapter4.id.should == '4'
|
111
111
|
end
|
112
112
|
|
113
|
-
it "
|
113
|
+
it "finds chapters" do
|
114
114
|
# Create bogus chapters
|
115
115
|
Chapter.create!(:id => '999')
|
116
116
|
Chapter.create!(:id => '998')
|
@@ -121,7 +121,7 @@ module MongoModel
|
|
121
121
|
|
122
122
|
describe "adding a non-chapter" do
|
123
123
|
def self.should_raise(message, &block)
|
124
|
-
it "
|
124
|
+
it "raises an AsssociationTypeMismatch error when #{message}" do
|
125
125
|
lambda { instance_eval(&block) }.should raise_error(AssociationTypeMismatch, "expected instance of Chapter but got NonChapter")
|
126
126
|
end
|
127
127
|
end
|
@@ -153,11 +153,11 @@ module MongoModel
|
|
153
153
|
context "when uninitialized" do
|
154
154
|
subject { Book.new }
|
155
155
|
|
156
|
-
it "
|
156
|
+
it "is empty" do
|
157
157
|
subject.chapters.should be_empty
|
158
158
|
end
|
159
159
|
|
160
|
-
it "
|
160
|
+
it "has an empty ids array" do
|
161
161
|
subject.chapter_ids.should be_empty
|
162
162
|
end
|
163
163
|
end
|
@@ -204,7 +204,7 @@ module MongoModel
|
|
204
204
|
end
|
205
205
|
|
206
206
|
context "when the parent object is destroyed" do
|
207
|
-
it "
|
207
|
+
it "calls destroy on the child objects" do
|
208
208
|
chapter1.should_receive(:destroy)
|
209
209
|
chapter2.should_receive(:destroy)
|
210
210
|
chapter3.should_receive(:destroy)
|
@@ -212,7 +212,7 @@ module MongoModel
|
|
212
212
|
subject.destroy
|
213
213
|
end
|
214
214
|
|
215
|
-
it "
|
215
|
+
it "removes the child objects from their collection" do
|
216
216
|
subject.destroy
|
217
217
|
|
218
218
|
Chapter.exists?(chapter1.id).should be_false
|
@@ -238,7 +238,7 @@ module MongoModel
|
|
238
238
|
end
|
239
239
|
|
240
240
|
context "when the parent object is destroyed" do
|
241
|
-
it "
|
241
|
+
it "does not call destroy on the child objects" do
|
242
242
|
chapter1.should_not_receive(:destroy)
|
243
243
|
chapter2.should_not_receive(:destroy)
|
244
244
|
chapter3.should_not_receive(:destroy)
|
@@ -246,7 +246,7 @@ module MongoModel
|
|
246
246
|
subject.destroy
|
247
247
|
end
|
248
248
|
|
249
|
-
it "
|
249
|
+
it "removes the child objects from their collection" do
|
250
250
|
subject.destroy
|
251
251
|
|
252
252
|
Chapter.exists?(chapter1.id).should be_false
|
@@ -10,31 +10,31 @@ module MongoModel
|
|
10
10
|
|
11
11
|
describe "#read_attribute_before_type_cast" do
|
12
12
|
context "with property" do
|
13
|
-
it "
|
13
|
+
it "returns the attribute before type casting" do
|
14
14
|
subject.attributes[:foo] = 'some date'
|
15
15
|
subject.read_attribute_before_type_cast(:foo).should == 'some date'
|
16
16
|
end
|
17
17
|
|
18
|
-
it "
|
18
|
+
it "defines a reader method" do
|
19
19
|
subject.attributes[:foo] = 'some date'
|
20
20
|
subject.foo_before_type_cast.should == 'some date'
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
context "no property" do
|
25
|
-
it "
|
25
|
+
it "returns the attribute without type casting" do
|
26
26
|
subject.attributes[:bar] = 'set bar'
|
27
27
|
subject.read_attribute_before_type_cast(:bar).should == 'set bar'
|
28
28
|
end
|
29
29
|
|
30
|
-
it "
|
30
|
+
it "does not define a reader method" do
|
31
31
|
lambda { subject.bar_before_type_cast }.should raise_error(NoMethodError)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
describe "#attributes_before_type_cast" do
|
37
|
-
it "
|
37
|
+
it "returns a hash of attributes before type casting" do
|
38
38
|
subject.attributes[:foo] = 'some date'
|
39
39
|
subject.attributes[:bar] = 'set bar'
|
40
40
|
|
@@ -30,15 +30,15 @@ module MongoModel
|
|
30
30
|
subject.write_attribute(:foo, 'new foo')
|
31
31
|
end
|
32
32
|
|
33
|
-
it "
|
33
|
+
it "adds the old attribute name to the changed attributes" do
|
34
34
|
subject.changed.should include("foo")
|
35
35
|
end
|
36
36
|
|
37
|
-
it "
|
37
|
+
it "does not add other attributes to the changed attributes" do
|
38
38
|
subject.changed.should_not include("bar")
|
39
39
|
end
|
40
40
|
|
41
|
-
it "
|
41
|
+
it "adds the changed attribute value to the changes hash" do
|
42
42
|
subject.changes["foo"].should == ['original foo', 'new foo']
|
43
43
|
end
|
44
44
|
|
@@ -47,7 +47,7 @@ module MongoModel
|
|
47
47
|
subject.write_attribute(:foo, 'new foo #2')
|
48
48
|
end
|
49
49
|
|
50
|
-
it "
|
50
|
+
it "keeps the original value as the old value in the changes hash" do
|
51
51
|
subject.changes["foo"].should == ['original foo', 'new foo #2']
|
52
52
|
end
|
53
53
|
end
|
@@ -61,19 +61,19 @@ module MongoModel
|
|
61
61
|
|
62
62
|
it { should be_changed }
|
63
63
|
|
64
|
-
it "
|
64
|
+
it "has a changed attribute" do
|
65
65
|
subject.foo_changed?.should == true
|
66
66
|
end
|
67
67
|
|
68
|
-
it "
|
68
|
+
it "tells what the attribute was" do
|
69
69
|
subject.foo_was.should == "original foo"
|
70
70
|
end
|
71
71
|
|
72
|
-
it "
|
72
|
+
it "has an attribute change" do
|
73
73
|
subject.foo_change.should == ["original foo", "foo changed"]
|
74
74
|
end
|
75
75
|
|
76
|
-
it "
|
76
|
+
it "is able to reset an attribute" do
|
77
77
|
subject.reset_foo!
|
78
78
|
subject.foo.should == "original foo"
|
79
79
|
subject.changed?.should == false
|
@@ -87,19 +87,19 @@ module MongoModel
|
|
87
87
|
|
88
88
|
it { should_not be_changed }
|
89
89
|
|
90
|
-
it "
|
90
|
+
it "does not have a changed attribute" do
|
91
91
|
subject.foo_changed?.should == false
|
92
92
|
end
|
93
93
|
|
94
|
-
it "
|
94
|
+
it "tells what the attribute was" do
|
95
95
|
subject.foo_was.should == "original foo"
|
96
96
|
end
|
97
97
|
|
98
|
-
it "
|
98
|
+
it "does not have an attribute change" do
|
99
99
|
subject.foo_change.should == nil
|
100
100
|
end
|
101
101
|
|
102
|
-
it "
|
102
|
+
it "is able to reset an attribute" do
|
103
103
|
subject.reset_foo!
|
104
104
|
subject.foo.should == "original foo"
|
105
105
|
subject.changed?.should == false
|
@@ -110,19 +110,19 @@ module MongoModel
|
|
110
110
|
context "without changed attributes" do
|
111
111
|
it { should_not be_changed }
|
112
112
|
|
113
|
-
it "
|
113
|
+
it "does not have a changed attribute" do
|
114
114
|
subject.foo_changed?.should == false
|
115
115
|
end
|
116
116
|
|
117
|
-
it "
|
117
|
+
it "tells what the attribute was" do
|
118
118
|
subject.foo_was.should == "original foo"
|
119
119
|
end
|
120
120
|
|
121
|
-
it "
|
121
|
+
it "does not have an attribute change" do
|
122
122
|
subject.foo_change.should == nil
|
123
123
|
end
|
124
124
|
|
125
|
-
it "
|
125
|
+
it "is able to reset an attribute" do
|
126
126
|
subject.reset_foo!
|
127
127
|
subject.foo.should == "original foo"
|
128
128
|
subject.changed?.should == false
|
@@ -135,13 +135,13 @@ module MongoModel
|
|
135
135
|
subject.foo = 'changed foo'
|
136
136
|
end
|
137
137
|
|
138
|
-
it "
|
138
|
+
it "returns the attributes before changes" do
|
139
139
|
subject.original_attributes['foo'].should == 'original foo'
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
143
143
|
context "without changes" do
|
144
|
-
it "
|
144
|
+
it "returns the attributes hash" do
|
145
145
|
subject.original_attributes.symbolize_keys.should == subject.attributes
|
146
146
|
end
|
147
147
|
end
|
@@ -161,14 +161,14 @@ module MongoModel
|
|
161
161
|
end
|
162
162
|
|
163
163
|
context "with save" do
|
164
|
-
it "
|
164
|
+
it "resets the changed attributes" do
|
165
165
|
subject.save
|
166
166
|
subject.should_not be_changed
|
167
167
|
end
|
168
168
|
end
|
169
169
|
|
170
170
|
context "with save!" do
|
171
|
-
it "
|
171
|
+
it "resets the changed attributes" do
|
172
172
|
subject.save!
|
173
173
|
subject.should_not be_changed
|
174
174
|
end
|
@@ -176,7 +176,7 @@ module MongoModel
|
|
176
176
|
end
|
177
177
|
|
178
178
|
context "when instantiated from database" do
|
179
|
-
it "
|
179
|
+
it "is not changed" do
|
180
180
|
instance = TestDocument.find(subject.id)
|
181
181
|
instance.should_not be_changed
|
182
182
|
end
|
@@ -12,7 +12,7 @@ module MongoModel
|
|
12
12
|
|
13
13
|
describe "multiparameter assignment from select" do
|
14
14
|
context "setting a Time" do
|
15
|
-
it "
|
15
|
+
it "combines and assign parameters as Time" do
|
16
16
|
subject.attributes = {
|
17
17
|
"timestamp(1i)" => "2009",
|
18
18
|
"timestamp(2i)" => "10",
|
@@ -26,7 +26,7 @@ module MongoModel
|
|
26
26
|
end
|
27
27
|
|
28
28
|
context "setting a Date" do
|
29
|
-
it "
|
29
|
+
it "combines and assign parameters as Date" do
|
30
30
|
subject.attributes = {
|
31
31
|
"datestamp(1i)" => "2008",
|
32
32
|
"datestamp(2i)" => "4",
|
@@ -38,7 +38,7 @@ module MongoModel
|
|
38
38
|
end
|
39
39
|
|
40
40
|
context "setting a DateTime" do
|
41
|
-
it "
|
41
|
+
it "combines and assign parameters as DateTime" do
|
42
42
|
subject.attributes = {
|
43
43
|
"datetime(1i)" => "2009",
|
44
44
|
"datetime(2i)" => "10",
|
@@ -14,22 +14,22 @@ module MongoModel
|
|
14
14
|
TestDocument.attr_protected :foo
|
15
15
|
end
|
16
16
|
|
17
|
-
it "
|
17
|
+
it "disallows the attribute to be mass-assigned via attributes=" do
|
18
18
|
subject.attributes = { :foo => 'value of foo' }
|
19
19
|
subject.foo.should be_nil
|
20
20
|
end
|
21
21
|
|
22
|
-
it "
|
22
|
+
it "does not disallow the attribute to be assigned individually" do
|
23
23
|
subject.foo = 'value of foo'
|
24
24
|
subject.foo.should == 'value of foo'
|
25
25
|
end
|
26
26
|
|
27
|
-
it "
|
27
|
+
it "does not disallow other attributes to be mass-assigned via attributes=" do
|
28
28
|
subject.attributes = { :bar => 'value of bar' }
|
29
29
|
subject.bar.should == 'value of bar'
|
30
30
|
end
|
31
31
|
|
32
|
-
it "
|
32
|
+
it "accepts multiple attributes" do
|
33
33
|
TestDocument.attr_protected :foo, :bar
|
34
34
|
|
35
35
|
subject.attributes = { :foo => 'value of foo', :bar => 'value of bar' }
|
@@ -43,22 +43,22 @@ module MongoModel
|
|
43
43
|
TestDocument.attr_accessible :foo
|
44
44
|
end
|
45
45
|
|
46
|
-
it "
|
46
|
+
it "allows the attribute to be mass-assigned via attributes=" do
|
47
47
|
subject.attributes = { :foo => 'value of foo' }
|
48
48
|
subject.foo.should == 'value of foo'
|
49
49
|
end
|
50
50
|
|
51
|
-
it "
|
51
|
+
it "does not disallow other attributes to be mass-assigned via attributes=" do
|
52
52
|
subject.attributes = { :bar => 'value of bar' }
|
53
53
|
subject.bar.should be_nil
|
54
54
|
end
|
55
55
|
|
56
|
-
it "
|
56
|
+
it "does not disallow others attributes to be assigned individually" do
|
57
57
|
subject.bar = 'value of bar'
|
58
58
|
subject.bar.should == 'value of bar'
|
59
59
|
end
|
60
60
|
|
61
|
-
it "
|
61
|
+
it "accepts multiple attributes" do
|
62
62
|
TestDocument.attr_accessible :foo, :bar
|
63
63
|
|
64
64
|
subject.attributes = { :foo => 'value of foo', :bar => 'value of bar' }
|
@@ -69,14 +69,14 @@ module MongoModel
|
|
69
69
|
|
70
70
|
describe "#property" do
|
71
71
|
context "with :protected option" do
|
72
|
-
it "
|
72
|
+
it "makes the attribute protected" do
|
73
73
|
TestDocument.should_receive(:attr_protected).with(:baz)
|
74
74
|
TestDocument.property :baz, String, :protected => true
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
78
|
context "with :accessible option" do
|
79
|
-
it "
|
79
|
+
it "makes the attribute accessible" do
|
80
80
|
TestDocument.should_receive(:attr_accessible).with(:baz)
|
81
81
|
TestDocument.property :baz, String, :accessible => true
|
82
82
|
end
|