mongoid 1.2.14 → 1.9.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 (200) hide show
  1. data/lib/mongoid.rb +10 -3
  2. data/lib/mongoid/associations.rb +133 -97
  3. data/lib/mongoid/associations/belongs_to_related.rb +2 -3
  4. data/lib/mongoid/associations/{belongs_to.rb → embedded_in.rb} +14 -6
  5. data/lib/mongoid/associations/{has_many.rb → embeds_many.rb} +89 -31
  6. data/lib/mongoid/associations/{has_one.rb → embeds_one.rb} +8 -7
  7. data/lib/mongoid/associations/has_many_related.rb +52 -7
  8. data/lib/mongoid/associations/has_one_related.rb +8 -4
  9. data/lib/mongoid/associations/meta_data.rb +2 -1
  10. data/lib/mongoid/associations/options.rb +6 -1
  11. data/lib/mongoid/associations/proxy.rb +14 -21
  12. data/lib/mongoid/attributes.rb +27 -12
  13. data/lib/mongoid/collection.rb +4 -3
  14. data/lib/mongoid/collections.rb +41 -0
  15. data/lib/mongoid/collections/master.rb +3 -2
  16. data/lib/mongoid/collections/slaves.rb +3 -2
  17. data/lib/mongoid/components.rb +21 -19
  18. data/lib/mongoid/concern.rb +31 -0
  19. data/lib/mongoid/config.rb +117 -12
  20. data/lib/mongoid/contexts.rb +1 -1
  21. data/lib/mongoid/contexts/enumerable.rb +1 -1
  22. data/lib/mongoid/contexts/mongo.rb +1 -1
  23. data/lib/mongoid/contexts/paging.rb +10 -2
  24. data/lib/mongoid/criterion/inclusion.rb +17 -0
  25. data/lib/mongoid/criterion/optional.rb +1 -1
  26. data/lib/mongoid/dirty.rb +253 -0
  27. data/lib/mongoid/document.rb +81 -52
  28. data/lib/mongoid/errors.rb +32 -1
  29. data/lib/mongoid/extensions.rb +11 -9
  30. data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
  31. data/lib/mongoid/extensions/boolean/conversions.rb +8 -2
  32. data/lib/mongoid/extensions/date/conversions.rb +13 -4
  33. data/lib/mongoid/extensions/datetime/conversions.rb +1 -6
  34. data/lib/mongoid/extensions/float/conversions.rb +5 -1
  35. data/lib/mongoid/extensions/hash/assimilation.rb +12 -3
  36. data/lib/mongoid/extensions/hash/conversions.rb +34 -4
  37. data/lib/mongoid/extensions/integer/conversions.rb +5 -1
  38. data/lib/mongoid/extensions/nil/assimilation.rb +4 -0
  39. data/lib/mongoid/extensions/object/conversions.rb +1 -1
  40. data/lib/mongoid/extensions/string/conversions.rb +1 -1
  41. data/lib/mongoid/extensions/symbol/inflections.rb +1 -1
  42. data/lib/mongoid/extensions/time_conversions.rb +35 -0
  43. data/lib/mongoid/extras.rb +6 -9
  44. data/lib/mongoid/factory.rb +2 -1
  45. data/lib/mongoid/field.rb +9 -2
  46. data/lib/mongoid/fields.rb +1 -0
  47. data/lib/mongoid/identity.rb +3 -3
  48. data/lib/mongoid/indexes.rb +3 -3
  49. data/lib/mongoid/memoization.rb +8 -2
  50. data/lib/mongoid/named_scope.rb +0 -3
  51. data/lib/mongoid/observable.rb +30 -0
  52. data/lib/mongoid/paths.rb +62 -0
  53. data/lib/mongoid/persistence.rb +222 -0
  54. data/lib/mongoid/persistence/command.rb +39 -0
  55. data/lib/mongoid/persistence/insert.rb +50 -0
  56. data/lib/mongoid/persistence/insert_embedded.rb +38 -0
  57. data/lib/mongoid/persistence/remove.rb +39 -0
  58. data/lib/mongoid/persistence/remove_all.rb +37 -0
  59. data/lib/mongoid/persistence/remove_embedded.rb +50 -0
  60. data/lib/mongoid/persistence/update.rb +63 -0
  61. data/lib/mongoid/state.rb +28 -21
  62. data/lib/mongoid/timestamps.rb +5 -8
  63. data/lib/mongoid/version.rb +4 -0
  64. data/lib/mongoid/versioning.rb +6 -7
  65. metadata +81 -300
  66. data/.gitignore +0 -6
  67. data/.watchr +0 -29
  68. data/Rakefile +0 -53
  69. data/VERSION +0 -1
  70. data/caliper.yml +0 -4
  71. data/lib/mongoid/collections/mimic.rb +0 -46
  72. data/lib/mongoid/commands.rb +0 -174
  73. data/lib/mongoid/commands/create.rb +0 -21
  74. data/lib/mongoid/commands/delete.rb +0 -16
  75. data/lib/mongoid/commands/delete_all.rb +0 -23
  76. data/lib/mongoid/commands/deletion.rb +0 -18
  77. data/lib/mongoid/commands/destroy.rb +0 -19
  78. data/lib/mongoid/commands/destroy_all.rb +0 -23
  79. data/lib/mongoid/commands/save.rb +0 -27
  80. data/lib/mongoid/extensions/time/conversions.rb +0 -18
  81. data/mongoid.gemspec +0 -395
  82. data/perf/benchmark.rb +0 -77
  83. data/spec/integration/mongoid/associations_spec.rb +0 -340
  84. data/spec/integration/mongoid/attributes_spec.rb +0 -22
  85. data/spec/integration/mongoid/commands_spec.rb +0 -218
  86. data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -33
  87. data/spec/integration/mongoid/criteria_spec.rb +0 -272
  88. data/spec/integration/mongoid/document_spec.rb +0 -593
  89. data/spec/integration/mongoid/extensions_spec.rb +0 -26
  90. data/spec/integration/mongoid/finders_spec.rb +0 -119
  91. data/spec/integration/mongoid/inheritance_spec.rb +0 -137
  92. data/spec/integration/mongoid/named_scope_spec.rb +0 -46
  93. data/spec/models/address.rb +0 -39
  94. data/spec/models/animal.rb +0 -6
  95. data/spec/models/callbacks.rb +0 -18
  96. data/spec/models/comment.rb +0 -8
  97. data/spec/models/country_code.rb +0 -6
  98. data/spec/models/employer.rb +0 -5
  99. data/spec/models/game.rb +0 -7
  100. data/spec/models/inheritance.rb +0 -56
  101. data/spec/models/location.rb +0 -5
  102. data/spec/models/mixed_drink.rb +0 -4
  103. data/spec/models/name.rb +0 -13
  104. data/spec/models/namespacing.rb +0 -11
  105. data/spec/models/patient.rb +0 -4
  106. data/spec/models/person.rb +0 -99
  107. data/spec/models/pet.rb +0 -7
  108. data/spec/models/pet_owner.rb +0 -6
  109. data/spec/models/phone.rb +0 -7
  110. data/spec/models/post.rb +0 -15
  111. data/spec/models/translation.rb +0 -5
  112. data/spec/models/vet_visit.rb +0 -5
  113. data/spec/spec.opts +0 -3
  114. data/spec/spec_helper.rb +0 -31
  115. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -145
  116. data/spec/unit/mongoid/associations/belongs_to_spec.rb +0 -193
  117. data/spec/unit/mongoid/associations/has_many_related_spec.rb +0 -420
  118. data/spec/unit/mongoid/associations/has_many_spec.rb +0 -519
  119. data/spec/unit/mongoid/associations/has_one_related_spec.rb +0 -179
  120. data/spec/unit/mongoid/associations/has_one_spec.rb +0 -282
  121. data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
  122. data/spec/unit/mongoid/associations/options_spec.rb +0 -192
  123. data/spec/unit/mongoid/associations_spec.rb +0 -595
  124. data/spec/unit/mongoid/attributes_spec.rb +0 -507
  125. data/spec/unit/mongoid/callbacks_spec.rb +0 -55
  126. data/spec/unit/mongoid/collection_spec.rb +0 -187
  127. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +0 -75
  128. data/spec/unit/mongoid/collections/master_spec.rb +0 -41
  129. data/spec/unit/mongoid/collections/mimic_spec.rb +0 -43
  130. data/spec/unit/mongoid/collections/slaves_spec.rb +0 -81
  131. data/spec/unit/mongoid/commands/create_spec.rb +0 -30
  132. data/spec/unit/mongoid/commands/delete_all_spec.rb +0 -58
  133. data/spec/unit/mongoid/commands/delete_spec.rb +0 -38
  134. data/spec/unit/mongoid/commands/destroy_all_spec.rb +0 -23
  135. data/spec/unit/mongoid/commands/destroy_spec.rb +0 -50
  136. data/spec/unit/mongoid/commands/save_spec.rb +0 -105
  137. data/spec/unit/mongoid/commands_spec.rb +0 -275
  138. data/spec/unit/mongoid/config_spec.rb +0 -172
  139. data/spec/unit/mongoid/contexts/enumerable_spec.rb +0 -421
  140. data/spec/unit/mongoid/contexts/mongo_spec.rb +0 -682
  141. data/spec/unit/mongoid/contexts_spec.rb +0 -25
  142. data/spec/unit/mongoid/criteria_spec.rb +0 -824
  143. data/spec/unit/mongoid/criterion/complex_spec.rb +0 -19
  144. data/spec/unit/mongoid/criterion/exclusion_spec.rb +0 -91
  145. data/spec/unit/mongoid/criterion/inclusion_spec.rb +0 -219
  146. data/spec/unit/mongoid/criterion/optional_spec.rb +0 -319
  147. data/spec/unit/mongoid/cursor_spec.rb +0 -74
  148. data/spec/unit/mongoid/deprecation_spec.rb +0 -24
  149. data/spec/unit/mongoid/document_spec.rb +0 -952
  150. data/spec/unit/mongoid/errors_spec.rb +0 -103
  151. data/spec/unit/mongoid/extensions/array/accessors_spec.rb +0 -50
  152. data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +0 -24
  153. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +0 -35
  154. data/spec/unit/mongoid/extensions/array/parentization_spec.rb +0 -20
  155. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
  156. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
  157. data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +0 -49
  158. data/spec/unit/mongoid/extensions/date/conversions_spec.rb +0 -102
  159. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +0 -70
  160. data/spec/unit/mongoid/extensions/float/conversions_spec.rb +0 -61
  161. data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +0 -184
  162. data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +0 -46
  163. data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +0 -21
  164. data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +0 -17
  165. data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +0 -14
  166. data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +0 -61
  167. data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +0 -24
  168. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +0 -57
  169. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +0 -34
  170. data/spec/unit/mongoid/extensions/string/conversions_spec.rb +0 -17
  171. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +0 -208
  172. data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +0 -91
  173. data/spec/unit/mongoid/extensions/time/conversions_spec.rb +0 -70
  174. data/spec/unit/mongoid/extras_spec.rb +0 -102
  175. data/spec/unit/mongoid/factory_spec.rb +0 -31
  176. data/spec/unit/mongoid/field_spec.rb +0 -143
  177. data/spec/unit/mongoid/fields_spec.rb +0 -181
  178. data/spec/unit/mongoid/finders_spec.rb +0 -404
  179. data/spec/unit/mongoid/identity_spec.rb +0 -109
  180. data/spec/unit/mongoid/indexes_spec.rb +0 -93
  181. data/spec/unit/mongoid/javascript_spec.rb +0 -48
  182. data/spec/unit/mongoid/matchers/all_spec.rb +0 -27
  183. data/spec/unit/mongoid/matchers/default_spec.rb +0 -27
  184. data/spec/unit/mongoid/matchers/exists_spec.rb +0 -56
  185. data/spec/unit/mongoid/matchers/gt_spec.rb +0 -39
  186. data/spec/unit/mongoid/matchers/gte_spec.rb +0 -49
  187. data/spec/unit/mongoid/matchers/in_spec.rb +0 -27
  188. data/spec/unit/mongoid/matchers/lt_spec.rb +0 -39
  189. data/spec/unit/mongoid/matchers/lte_spec.rb +0 -49
  190. data/spec/unit/mongoid/matchers/ne_spec.rb +0 -27
  191. data/spec/unit/mongoid/matchers/nin_spec.rb +0 -27
  192. data/spec/unit/mongoid/matchers/size_spec.rb +0 -27
  193. data/spec/unit/mongoid/matchers_spec.rb +0 -329
  194. data/spec/unit/mongoid/memoization_spec.rb +0 -75
  195. data/spec/unit/mongoid/named_scope_spec.rb +0 -123
  196. data/spec/unit/mongoid/scope_spec.rb +0 -240
  197. data/spec/unit/mongoid/state_spec.rb +0 -83
  198. data/spec/unit/mongoid/timestamps_spec.rb +0 -25
  199. data/spec/unit/mongoid/versioning_spec.rb +0 -41
  200. data/spec/unit/mongoid_spec.rb +0 -46
@@ -1,179 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Associations::HasOneRelated do
4
-
5
- let(:document) { stub(:id => "1") }
6
- let(:block) do
7
- Proc.new do
8
- def extension
9
- "Testing"
10
- end
11
- end
12
- end
13
- let(:options) do
14
- Mongoid::Associations::Options.new(:name => :game, :extend => block)
15
- end
16
-
17
- describe "#build" do
18
-
19
- before do
20
- @parent = stub(:id => "5", :class => Person)
21
- Game.expects(:first).returns(nil)
22
- @association = Mongoid::Associations::HasOneRelated.new(@parent, options)
23
- end
24
-
25
- it "adds a new object to the association" do
26
- @association.build(:score => 100)
27
- @association.score.should == 100
28
- end
29
-
30
- it "sets the parent object id on the child" do
31
- @association.build(:score => 100)
32
- @association.person_id.should == @parent.id
33
- end
34
-
35
- it "sets the parent object reference on the child" do
36
- @association.build(:score => 100)
37
- @association.person.should == @parent
38
- end
39
-
40
- end
41
-
42
- describe "#create" do
43
-
44
- before do
45
- @parent = stub(:id => "5", :class => Person)
46
- Game.expects(:first).returns(nil)
47
- Mongoid::Commands::Save.expects(:execute)
48
- @association = Mongoid::Associations::HasOneRelated.new(@parent, options)
49
- end
50
-
51
- it "adds a new object to the association" do
52
- @association.create(:score => 100)
53
- @association.score.should == 100
54
- end
55
-
56
- it "sets the parent object id on the child" do
57
- @association.create(:score => 100)
58
- @association.person_id.should == @parent.id
59
- end
60
-
61
- it "returns the new document" do
62
- @association.create(:score => 100).should be_a_kind_of(Game)
63
- end
64
-
65
- end
66
-
67
- describe "#id" do
68
-
69
- before do
70
- @parent = stub(:id => "5", :class => Person)
71
- @game = Game.new
72
- Game.expects(:first).returns(@game)
73
- @association = Mongoid::Associations::HasOneRelated.new(@parent, options)
74
- end
75
-
76
- it "delegates to the proxied document" do
77
- @association.id.should == @game.id
78
- end
79
-
80
- end
81
-
82
- describe ".initialize" do
83
-
84
- before do
85
- @person = Person.new
86
- @game = stub
87
- end
88
-
89
- it "finds the association game by the parent key" do
90
- Game.expects(:first).with(:conditions => { "person_id"=> @person.id }).returns(@game)
91
- @person.game.should == @game
92
- end
93
-
94
- context "when the options have an extension" do
95
-
96
- before do
97
- @parent = stub(:id => "5", :class => Person)
98
- @game = Game.new
99
- Game.expects(:first).returns(@game)
100
- @association = Mongoid::Associations::HasOneRelated.new(@parent, options)
101
- end
102
-
103
- it "adds the extension to the module" do
104
- @association.extension.should == "Testing"
105
- end
106
-
107
- end
108
-
109
- end
110
-
111
- describe ".instantiate" do
112
-
113
- it "delegates to new" do
114
- Mongoid::Associations::HasOneRelated.expects(:new).with(document, options, nil)
115
- Mongoid::Associations::HasOneRelated.instantiate(document, options)
116
- end
117
-
118
- end
119
-
120
- describe "#method_missing" do
121
-
122
- before do
123
- @person = Person.new
124
- @game = stub
125
- end
126
-
127
- it "delegates to the documet" do
128
- Game.expects(:first).with(:conditions => { "person_id"=> @person.id }).returns(@game)
129
- @game.expects(:strange_method)
130
- association = Mongoid::Associations::HasOneRelated.instantiate(@person, options)
131
- association.strange_method
132
- end
133
-
134
- end
135
-
136
- describe ".macro" do
137
-
138
- it "returns :has_one_related" do
139
- Mongoid::Associations::HasOneRelated.macro.should == :has_one_related
140
- end
141
-
142
- end
143
-
144
- describe "#nil?" do
145
-
146
- before do
147
- @person = Person.new
148
- @game = stub
149
- Game.expects(:first).with(:conditions => { "person_id"=> @person.id }).returns(nil)
150
- end
151
-
152
- it "delegates to the document" do
153
- association = Mongoid::Associations::HasOneRelated.instantiate(@person, options)
154
- association.should be_nil
155
- end
156
-
157
- end
158
-
159
- describe ".update" do
160
-
161
- before do
162
- @person = Person.new
163
- @game = stub
164
- end
165
-
166
- it "sets the parent on the child association" do
167
- @game.expects(:person=).with(@person)
168
- Mongoid::Associations::HasOneRelated.update(@game, @person, options)
169
- end
170
-
171
- it "returns the proxy" do
172
- @game.expects(:person=).with(@person)
173
- @proxy = Mongoid::Associations::HasOneRelated.update(@game, @person, options)
174
- @proxy.target.should == @game
175
- end
176
-
177
- end
178
-
179
- end
@@ -1,282 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Associations::HasOne do
4
-
5
- before do
6
- @attributes = { "mixed_drink" => {
7
- "name" => "Jack and Coke", "_type" => "MixedDrink" },
8
- "writer" => { "speed" => 50, "_type" => "HtmlWriter" }
9
- }
10
- @document = stub(:raw_attributes => @attributes, :update => true)
11
- end
12
-
13
- describe "#build_*" do
14
-
15
- context "when attributes provided" do
16
-
17
- before do
18
- @association = Mongoid::Associations::HasOne.new(
19
- @document,
20
- @attributes["mixed_drink"],
21
- Mongoid::Associations::Options.new(:name => :mixed_drink)
22
- )
23
- end
24
-
25
- it "replaces the existing has_one" do
26
- drink = @association.send(:build, { :name => "Sapphire and Tonic" })
27
- drink.name.should == "Sapphire and Tonic"
28
- end
29
-
30
- end
31
-
32
- context "when a type is supplied" do
33
-
34
- before do
35
- @association = Mongoid::Associations::HasOne.new(
36
- @document,
37
- @attributes["writer"],
38
- Mongoid::Associations::Options.new(:name => :writer)
39
- )
40
- end
41
-
42
- it "instantiates a class of that type" do
43
- writer = @association.send(:build, { :speed => 500 }, HtmlWriter)
44
- writer.should be_a_kind_of(HtmlWriter)
45
- writer.speed.should == 500
46
- end
47
-
48
- end
49
-
50
- context "setting the parent relationship" do
51
-
52
- before do
53
- @person = Person.new
54
- end
55
-
56
- it "happens before any other operation" do
57
- name = @person.build_name(:set_parent => true, :street => "Madison Ave")
58
- name._parent.should == @person
59
- @person.name.should == name
60
- end
61
-
62
- end
63
-
64
- end
65
-
66
- describe "#initialize" do
67
-
68
- before do
69
- @parent = Person.new(:title => "Dr")
70
- @name = Name.new(:first_name => "Richard", :last_name => "Dawkins")
71
- @parent.name = @name
72
- @block = Proc.new {
73
- def extension
74
- "Testing"
75
- end
76
- }
77
- @options = Mongoid::Associations::Options.new(:name => :name, :extend => @block)
78
- @association = Mongoid::Associations::HasOne.new(@parent, {}, @options)
79
- end
80
-
81
- context "when the options have an extension" do
82
-
83
- it "adds the extension module" do
84
- @association.extension.should == "Testing"
85
- end
86
-
87
- end
88
-
89
- end
90
-
91
- describe ".instantiate" do
92
-
93
- context "when the attributes are nil" do
94
-
95
- before do
96
- @document = Person.new
97
- @association = Mongoid::Associations::HasOne.instantiate(
98
- @document,
99
- Mongoid::Associations::Options.new(:name => :name)
100
- )
101
- end
102
-
103
- it "returns nil" do
104
- @association.should be_nil
105
- end
106
-
107
- end
108
-
109
- context "when attributes are empty" do
110
-
111
- before do
112
- @document = stub(:raw_attributes => { "name" => {} })
113
- @association = Mongoid::Associations::HasOne.instantiate(
114
- @document,
115
- Mongoid::Associations::Options.new(:name => :name)
116
- )
117
- end
118
-
119
- it "returns nil" do
120
- @association.should be_nil
121
- end
122
-
123
- end
124
-
125
- context "when attributes exist" do
126
-
127
- before do
128
- @document = stub(:raw_attributes => { "name" => { "first_name" => "Test" } })
129
- @options = Mongoid::Associations::Options.new(:name => :name)
130
- end
131
-
132
- it "delegates to new" do
133
- Mongoid::Associations::HasOne.expects(:new).with(@document, { "first_name" => "Test" }, @options)
134
- Mongoid::Associations::HasOne.instantiate(@document, @options)
135
- end
136
-
137
- end
138
-
139
- end
140
-
141
- describe "#method_missing" do
142
-
143
- before do
144
- @association = Mongoid::Associations::HasOne.new(
145
- @document,
146
- @attributes["mixed_drink"],
147
- Mongoid::Associations::Options.new(:name => :mixed_drink)
148
- )
149
- end
150
-
151
- context "when getting values" do
152
-
153
- it "delegates to the document" do
154
- @association.name.should == "Jack and Coke"
155
- end
156
-
157
- end
158
-
159
- context "when setting values" do
160
-
161
- it "delegates to the document" do
162
- @association.name = "Jack and Coke"
163
- @association.name.should == "Jack and Coke"
164
- end
165
-
166
- end
167
-
168
- end
169
-
170
- describe "#nested_build" do
171
-
172
- context "when attributes provided" do
173
-
174
- before do
175
- @association = Mongoid::Associations::HasOne.new(
176
- @document,
177
- @attributes["mixed_drink"],
178
- Mongoid::Associations::Options.new(:name => :mixed_drink)
179
- )
180
- end
181
-
182
- it "replaces the existing has_one" do
183
- drink = @association.nested_build({ :name => "Sapphire and Tonic" })
184
- drink.name.should == "Sapphire and Tonic"
185
- end
186
-
187
- end
188
-
189
- end
190
-
191
- describe ".macro" do
192
-
193
- it "returns :has_one" do
194
- Mongoid::Associations::HasOne.macro.should == :has_one
195
- end
196
-
197
- end
198
-
199
- describe ".update" do
200
-
201
- context "when setting to a non-nil value" do
202
-
203
- before do
204
- @name = Name.new(:first_name => "Donald")
205
- @person = Person.new(:title => "Sir")
206
- @association = Mongoid::Associations::HasOne.update(
207
- @name,
208
- @person,
209
- Mongoid::Associations::Options.new(:name => :name)
210
- )
211
- end
212
-
213
- it "parentizes the child document" do
214
- @name._parent.should == @person
215
- end
216
-
217
- it "sets the attributes of the child on the parent" do
218
- @person.attributes[:name].should ==
219
- { "_id" => "donald", "first_name" => "Donald", "_type" => "Name" }
220
- end
221
-
222
- it "returns the proxy" do
223
- @association.target.should == @name
224
- end
225
-
226
- end
227
-
228
- context "when setting the object to nil" do
229
-
230
- before do
231
- @name = Name.new(:first_name => "Donald")
232
- @person = Person.new(:title => "Sir")
233
- Mongoid::Associations::HasOne.update(
234
- nil,
235
- @person,
236
- Mongoid::Associations::Options.new(:name => :name)
237
- )
238
- end
239
-
240
- it "clears out the association" do
241
- @person.name.should be_nil
242
- end
243
-
244
- end
245
-
246
- end
247
-
248
- describe "#to_a" do
249
-
250
- before do
251
- @association = Mongoid::Associations::HasOne.new(
252
- @document,
253
- @attributes["mixed_drink"],
254
- Mongoid::Associations::Options.new(:name => :mixed_drink)
255
- )
256
- end
257
-
258
- it "returns the target in a new array" do
259
- @association.to_a.first.should be_a_kind_of(MixedDrink)
260
- end
261
-
262
- end
263
-
264
- describe "#valid?" do
265
-
266
- context "when the document is not nil" do
267
-
268
- before do
269
- @document = stub(:raw_attributes => { "name" => { "first_name" => "Test" } }, :update => true)
270
- @options = Mongoid::Associations::Options.new(:name => :name)
271
- @association = Mongoid::Associations::HasOne.instantiate(@document, @options)
272
- end
273
-
274
- it "validates the document" do
275
- @association.valid?.should be_true
276
- end
277
-
278
- end
279
-
280
- end
281
-
282
- end