mongoid 0.11.3 → 0.11.4
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/HISTORY +8 -0
- data/VERSION +1 -1
- data/lib/mongoid/associations/has_one.rb +18 -3
- data/lib/mongoid/attributes.rb +1 -1
- data/mongoid.gemspec +1 -1
- data/spec/unit/mongoid/associations/has_one_spec.rb +36 -14
- data/spec/unit/mongoid/attributes_spec.rb +11 -1
- data/spec/unit/mongoid/document_spec.rb +2 -2
- metadata +1 -1
data/HISTORY
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 0.11.4
|
2
|
+
- Fixed issue with dynamic fields: checking whether
|
3
|
+
the document responded to the attribute's method
|
4
|
+
should have checked the setter and not the getter
|
5
|
+
|
6
|
+
- Fixed has_one associations not being able to be
|
7
|
+
set to nil.
|
8
|
+
|
1
9
|
=== 0.11.3
|
2
10
|
- Fixed issue with Document#save! not calling before
|
3
11
|
and after create callbacks if document is new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.11.
|
1
|
+
0.11.4
|
@@ -36,13 +36,14 @@ module Mongoid #:nodoc:
|
|
36
36
|
unless attributes.nil?
|
37
37
|
klass = attributes[:_type] ? attributes[:_type].constantize : nil
|
38
38
|
@document = attributes.assimilate(@parent, @options, klass)
|
39
|
+
else
|
40
|
+
@document = nil
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
42
44
|
# Delegate all missing methods over to the +Document+.
|
43
45
|
def method_missing(name, *args, &block)
|
44
|
-
@document
|
45
|
-
@document.send(name, *args, &block)
|
46
|
+
@document.send(name, *args, &block) unless @document.nil?
|
46
47
|
end
|
47
48
|
|
48
49
|
# Used for setting the association via a nested attributes setter on the
|
@@ -51,6 +52,16 @@ module Mongoid #:nodoc:
|
|
51
52
|
build(attributes)
|
52
53
|
end
|
53
54
|
|
55
|
+
# This should delegate to the document.
|
56
|
+
def nil?
|
57
|
+
@document.nil?
|
58
|
+
end
|
59
|
+
|
60
|
+
# This will get deprecated
|
61
|
+
def to_a
|
62
|
+
[@document]
|
63
|
+
end
|
64
|
+
|
54
65
|
# Need to override here for when the underlying document is nil.
|
55
66
|
def valid?
|
56
67
|
@document ? @document.valid? : false
|
@@ -87,7 +98,11 @@ module Mongoid #:nodoc:
|
|
87
98
|
#
|
88
99
|
# <tt>HasOne.update({:first_name => "Hank"}, person, options)</tt>
|
89
100
|
def update(child, parent, options)
|
90
|
-
child.
|
101
|
+
if child.nil?
|
102
|
+
return parent.attributes[options.name] = nil
|
103
|
+
else
|
104
|
+
return child.assimilate(parent, options)
|
105
|
+
end
|
91
106
|
end
|
92
107
|
end
|
93
108
|
|
data/lib/mongoid/attributes.rb
CHANGED
@@ -14,7 +14,7 @@ module Mongoid #:nodoc:
|
|
14
14
|
# put into the document's attributes.
|
15
15
|
def process(attrs = {})
|
16
16
|
attrs.each_pair do |key, value|
|
17
|
-
unless respond_to?(key)
|
17
|
+
unless respond_to?("#{key}=")
|
18
18
|
self.class.field key, :type => value.class if Mongoid.allow_dynamic_fields
|
19
19
|
end
|
20
20
|
send("#{key}=", value) unless value.blank?
|
data/mongoid.gemspec
CHANGED
@@ -210,23 +210,45 @@ describe Mongoid::Associations::HasOne do
|
|
210
210
|
|
211
211
|
describe ".update" do
|
212
212
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
@
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
213
|
+
context "when setting to a non-nil value" do
|
214
|
+
|
215
|
+
before do
|
216
|
+
@name = Name.new(:first_name => "Donald")
|
217
|
+
@person = Person.new(:title => "Sir")
|
218
|
+
Mongoid::Associations::HasOne.update(
|
219
|
+
@name,
|
220
|
+
@person,
|
221
|
+
Mongoid::Associations::Options.new(:name => :name)
|
222
|
+
)
|
223
|
+
end
|
224
|
+
|
225
|
+
it "parentizes the child document" do
|
226
|
+
@name._parent.should == @person
|
227
|
+
end
|
228
|
+
|
229
|
+
it "sets the attributes of the child on the parent" do
|
230
|
+
@person.attributes[:name].should ==
|
231
|
+
{ "_id" => "donald", "first_name" => "Donald", "_type" => "Name" }
|
232
|
+
end
|
222
233
|
|
223
|
-
it "parentizes the child document" do
|
224
|
-
@name._parent.should == @person
|
225
234
|
end
|
226
235
|
|
227
|
-
|
228
|
-
|
229
|
-
|
236
|
+
context "when setting the object to nil" do
|
237
|
+
|
238
|
+
before do
|
239
|
+
@name = Name.new(:first_name => "Donald")
|
240
|
+
@person = Person.new(:title => "Sir")
|
241
|
+
Mongoid::Associations::HasOne.update(
|
242
|
+
nil,
|
243
|
+
@person,
|
244
|
+
Mongoid::Associations::Options.new(:name => :name)
|
245
|
+
)
|
246
|
+
end
|
247
|
+
|
248
|
+
it "clears out the association" do
|
249
|
+
@person.name.should be_nil
|
250
|
+
end
|
251
|
+
|
230
252
|
end
|
231
253
|
|
232
254
|
end
|
@@ -96,7 +96,8 @@ describe Mongoid::Attributes do
|
|
96
96
|
before do
|
97
97
|
@attributes = {
|
98
98
|
:nofieldstring => "Testing",
|
99
|
-
:nofieldint => 5
|
99
|
+
:nofieldint => 5,
|
100
|
+
:employer => Employer.new
|
100
101
|
}
|
101
102
|
end
|
102
103
|
|
@@ -127,6 +128,15 @@ describe Mongoid::Attributes do
|
|
127
128
|
|
128
129
|
end
|
129
130
|
|
131
|
+
context "when a method has been defined for the attribute" do
|
132
|
+
|
133
|
+
it "does not create the field" do
|
134
|
+
@person.fields.keys.should_not include("employer")
|
135
|
+
@person.fields.keys.should_not include("employer=")
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
130
140
|
end
|
131
141
|
|
132
142
|
context "when not allowing dynamic fields" do
|
@@ -954,11 +954,11 @@ describe Mongoid::Document do
|
|
954
954
|
|
955
955
|
context "when the associated is nil" do
|
956
956
|
|
957
|
-
it "returns
|
957
|
+
it "returns true" do
|
958
958
|
Person.class_eval do
|
959
959
|
validates_associated :name
|
960
960
|
end
|
961
|
-
@person.valid?.should
|
961
|
+
@person.valid?.should be_true
|
962
962
|
end
|
963
963
|
|
964
964
|
end
|