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,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Commands::Create do
4
-
5
- describe "#execute" do
6
-
7
- before do
8
- @document = stub(:run_callbacks)
9
- end
10
-
11
- it "executes a save command" do
12
- Mongoid::Commands::Save.expects(:execute).with(@document, true).returns(@document)
13
- Mongoid::Commands::Create.execute(@document)
14
- end
15
-
16
- it "runs the before and after create callbacks" do
17
- @document.expects(:run_callbacks).with(:before_create)
18
- Mongoid::Commands::Save.expects(:execute).with(@document, true).returns(@document)
19
- @document.expects(:run_callbacks).with(:after_create)
20
- Mongoid::Commands::Create.execute(@document)
21
- end
22
-
23
- it "returns the document" do
24
- Mongoid::Commands::Save.expects(:execute).with(@document, true).returns(@document)
25
- Mongoid::Commands::Create.execute(@document).should == @document
26
- end
27
-
28
- end
29
-
30
- end
@@ -1,58 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Commands::DeleteAll do
4
-
5
- describe "#execute" do
6
-
7
- before do
8
- @doc = mock
9
- @docs = [@doc]
10
- @klass = stub(:name => "Person")
11
- end
12
-
13
- context "when conditions supplied" do
14
-
15
- before do
16
- @collection = mock
17
- @conditions = { :conditions => { :title => "Sir" } }
18
- end
19
-
20
- it "deletes each document that the criteria finds" do
21
- @klass.expects(:collection).returns(@collection)
22
- @collection.expects(:remove).with(@conditions[:conditions].merge(:_type => "Person"), :safe => true)
23
- Mongoid::Commands::DeleteAll.execute(@klass, @conditions)
24
- end
25
-
26
- end
27
-
28
- context "when no conditions supplied" do
29
-
30
- before do
31
- @collection = mock
32
- end
33
-
34
- it "drops the collection" do
35
- @klass.expects(:collection).returns(@collection)
36
- @collection.expects(:remove).with({ :_type => "Person" }, { :safe => true })
37
- Mongoid::Commands::DeleteAll.execute(@klass)
38
- end
39
-
40
- end
41
-
42
- context "when empty conditions supplied" do
43
-
44
- before do
45
- @collection = mock
46
- end
47
-
48
- it "drops the collection" do
49
- @klass.expects(:collection).returns(@collection)
50
- @collection.expects(:remove).with({ :_type => "Person" }, { :safe => true })
51
- Mongoid::Commands::DeleteAll.execute(@klass, {})
52
- end
53
-
54
- end
55
-
56
- end
57
-
58
- end
@@ -1,38 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Commands::Delete do
4
-
5
- describe "#execute" do
6
-
7
- before do
8
- @collection = mock
9
- @document = stub(:collection => @collection, :id => "1", :_parent => false)
10
- end
11
-
12
- it "removes the document from its collection" do
13
- @collection.expects(:remove).with({ :_id => @document.id })
14
- Mongoid::Commands::Delete.execute(@document)
15
- end
16
-
17
- it "sets the destroyed flag to true" do
18
- @collection.expects(:remove).with({ :_id => @document.id }).returns(true)
19
- @document.expects(:destroyed=).with(true)
20
- Mongoid::Commands::Delete.execute(@document)
21
- end
22
-
23
- context "when the document is embedded" do
24
-
25
- before do
26
- @parent = Person.new
27
- @address = Address.new(:street => "Genoa Pl")
28
- @parent.addresses << @address
29
- end
30
-
31
- it "removes the document from the parent attributes" do
32
- @parent.addresses.should == [@address]
33
- Mongoid::Commands::Delete.execute(@address)
34
- @parent.addresses.should be_empty
35
- end
36
- end
37
- end
38
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Commands::DestroyAll do
4
-
5
- describe "#execute" do
6
-
7
- before do
8
- @doc = mock
9
- @docs = [@doc]
10
- @klass = stub(:name => "Person")
11
- @conditions = { :conditions => { :title => "Sir" } }
12
- @expected = { :conditions => { :title => "Sir", :_type => "Person" } }
13
- end
14
-
15
- it "destroys each document that the criteria finds" do
16
- @klass.expects(:find).with(:all, @expected).returns(@docs)
17
- Mongoid::Commands::Destroy.expects(:execute).with(@doc)
18
- Mongoid::Commands::DestroyAll.execute(@klass, @conditions)
19
- end
20
-
21
- end
22
-
23
- end
@@ -1,50 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Commands::Destroy do
4
-
5
- describe "#execute" do
6
-
7
- before do
8
- @collection = stub_everything
9
- @document = stub(:run_callbacks => true,
10
- :collection => @collection,
11
- :id => "1",
12
- :_parent => false)
13
- end
14
-
15
- it "runs the before and after destroy callbacks" do
16
- @document.expects(:run_callbacks).with(:before_destroy)
17
- @document.expects(:run_callbacks).with(:after_destroy)
18
- Mongoid::Commands::Destroy.execute(@document)
19
- end
20
-
21
- it "removes the document from its collection" do
22
- @collection.expects(:remove).with({ :_id => @document.id })
23
- Mongoid::Commands::Destroy.execute(@document)
24
- end
25
-
26
- it "sets the destroy flag on the document" do
27
- @collection.expects(:remove).with({ :_id => @document.id }).returns(true)
28
- @document.expects(:destroyed=).with(true)
29
- Mongoid::Commands::Destroy.execute(@document)
30
- end
31
-
32
- context "when the document is embedded" do
33
-
34
- before do
35
- @parent = Person.new
36
- @address = Address.new(:street => "Genoa Pl")
37
- @parent.addresses << @address
38
- @collection = mock
39
- Person.expects(:collection).returns(@collection)
40
- end
41
-
42
- it "removes the document from the parent attributes" do
43
- @parent.addresses.should == [@address]
44
- @collection.expects(:save).returns(true)
45
- Mongoid::Commands::Destroy.execute(@address)
46
- @parent.addresses.should be_empty
47
- end
48
- end
49
- end
50
- end
@@ -1,105 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Commands::Save do
4
-
5
- describe "#execute" do
6
-
7
- before do
8
- @parent_collection = stub(:save => true)
9
- @doc_collection = stub(:save => true)
10
- @parent = stub(:collection => @parent_collection,
11
- :valid? => true,
12
- :run_callbacks => true,
13
- :_parent => nil,
14
- :raw_attributes => {},
15
- :new_record= => false)
16
- @document = stub(:collection => @doc_collection,
17
- :run_callbacks => true,
18
- :_parent => @parent,
19
- :raw_attributes => {},
20
- :new_record= => false)
21
- end
22
-
23
- context "when document is valid" do
24
-
25
- before do
26
- @document.expects(:valid?).returns(true)
27
- end
28
-
29
- it "runs the before and after callbacks" do
30
- @document.expects(:run_callbacks).with(:before_save)
31
- @document.expects(:run_callbacks).with(:after_save)
32
- Mongoid::Commands::Save.execute(@document)
33
- end
34
-
35
- it "returns true" do
36
- Mongoid::Commands::Save.execute(@document).should be_true
37
- end
38
-
39
- context "when the document has a parent" do
40
-
41
- it "executes a save on the parent" do
42
- @parent_collection.expects(:save).with(@parent.raw_attributes, :safe => true)
43
- Mongoid::Commands::Save.execute(@document)
44
- end
45
-
46
- end
47
-
48
- context "when the document has no parent" do
49
-
50
- before do
51
- @document.expects(:_parent).returns(nil)
52
- end
53
-
54
- it "calls save on the document collection" do
55
- @doc_collection.expects(:save).with(@document.raw_attributes, :safe => true)
56
- Mongoid::Commands::Save.execute(@document)
57
- end
58
-
59
- end
60
-
61
- end
62
-
63
- context "when document is invalid" do
64
-
65
- before do
66
- @document.expects(:valid?).returns(false)
67
- end
68
-
69
- it "returns false" do
70
- Mongoid::Commands::Save.execute(@document).should be_false
71
- end
72
-
73
- end
74
-
75
- context "when saving without validation" do
76
-
77
- before do
78
- @document.stubs(:valid?).returns(false)
79
- end
80
-
81
- it "ignores validation and returns true" do
82
- Mongoid::Commands::Save.execute(@document, false).should be_true
83
- end
84
-
85
- end
86
-
87
- end
88
-
89
- context "when the document is embedded" do
90
-
91
- before do
92
- @child_name = Name.new(:first_name => "Testy")
93
- end
94
-
95
- context "when parent reference does not exist" do
96
-
97
- it "raises an error" do
98
- lambda { @child_name.save }.should raise_error
99
- end
100
-
101
- end
102
-
103
- end
104
-
105
- end
@@ -1,275 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Commands do
4
-
5
- before do
6
- @person = Person.new(:_id => Mongo::ObjectID.new.to_s)
7
- end
8
-
9
- describe "#delete" do
10
-
11
- it "delegates to the Delete command" do
12
- Mongoid::Commands::Delete.expects(:execute).with(@person)
13
- @person.delete
14
- end
15
-
16
- end
17
-
18
- describe "#destroy" do
19
-
20
- it "delegates to the Destroy command" do
21
- Mongoid::Commands::Destroy.expects(:execute).with(@person)
22
- @person.destroy
23
- end
24
-
25
- end
26
-
27
- describe "#save" do
28
-
29
- it "delegates to the Save command" do
30
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
31
- @person.save
32
- end
33
-
34
- context "when document is new" do
35
-
36
- before do
37
- @person = Person.new
38
- end
39
-
40
- context "when validation fails" do
41
-
42
- it "it raises an error" do
43
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(false)
44
- @person.save.should be_false
45
- end
46
-
47
- it "should run callback before_create and no after_create" do
48
- @person.expects(:run_callbacks).with(:before_create)
49
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(false)
50
- @person.expects(:run_callbacks).with(:after_create).never
51
- @person.save.should be_false
52
- end
53
-
54
- end
55
-
56
- it "delegates to the save command" do
57
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
58
- @person.save
59
- end
60
-
61
- it "runs the before and after create callbacks" do
62
- @person.expects(:run_callbacks).with(:before_create)
63
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
64
- @person.expects(:run_callbacks).with(:after_create)
65
- @person.save
66
- end
67
-
68
- end
69
-
70
- context "when not validating" do
71
-
72
- before do
73
- @person = Person.new
74
- end
75
-
76
- it "passes the validate param to the command" do
77
- Mongoid::Commands::Save.expects(:execute).with(@person, false).returns(true)
78
- @person.save(false)
79
- end
80
-
81
- end
82
-
83
- context "when the database raises an error" do
84
-
85
- before do
86
- @person = Person.new
87
- end
88
-
89
- it "lets the error bubble up" do
90
- Mongoid::Commands::Save.expects(:execute).raises(Mongo::OperationFailure.new("Operation Failed"))
91
- lambda { @person.save }.should raise_error
92
- end
93
-
94
- end
95
-
96
- end
97
-
98
- describe "#save!" do
99
-
100
- context "when validation passes" do
101
-
102
- it "it returns the person" do
103
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
104
- @person.save!
105
- end
106
-
107
- end
108
-
109
- context "when validation fails" do
110
-
111
- it "it raises an error" do
112
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(false)
113
- lambda { @person.save! }.should raise_error
114
- end
115
-
116
- end
117
-
118
- context "when document is new" do
119
-
120
- before do
121
- @person = Person.new
122
- end
123
-
124
- it "delegates to the save command" do
125
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
126
- @person.save!
127
- end
128
-
129
- context "when validation fails" do
130
-
131
- it "it raises an error " do
132
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(false)
133
- lambda { @person.save! }.should raise_error
134
- end
135
-
136
- end
137
-
138
- it "runs the before and after create callbacks" do
139
- @person.expects(:run_callbacks).with(:before_create)
140
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
141
- @person.expects(:run_callbacks).with(:after_create)
142
- @person.save!
143
- end
144
-
145
- end
146
-
147
- end
148
-
149
- describe "#update_attributes" do
150
-
151
- it "delegates to the Save command" do
152
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
153
- @person.update_attributes({})
154
- end
155
-
156
- it "executes the before and after update callbacks" do
157
- @person.expects(:run_callbacks).with(:before_update)
158
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
159
- @person.expects(:run_callbacks).with(:after_update)
160
- @person.update_attributes({})
161
- end
162
-
163
- end
164
-
165
- describe "#update_attributes!" do
166
-
167
- context "when validation passes" do
168
-
169
- it "it returns the person" do
170
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
171
- @person.update_attributes({}).should be_true
172
- end
173
-
174
- end
175
-
176
- context "when validation fails" do
177
-
178
- it "it raises an error" do
179
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(false)
180
- lambda { @person.update_attributes!({}) }.should raise_error
181
- end
182
-
183
- end
184
-
185
- end
186
-
187
- describe ".create" do
188
-
189
- it "delegates to the Create command" do
190
- Mongoid::Commands::Create.expects(:execute)
191
- Person.create
192
- end
193
-
194
- it "returns the document" do
195
- Mongoid::Commands::Create.expects(:execute).returns(Person.new)
196
- Person.create.should_not be_nil
197
- end
198
-
199
- context "when the database raises an error" do
200
-
201
- before do
202
- @person = Person.new
203
- Mongoid::Commands::Save.expects(:execute).raises(Mongo::OperationFailure.new("Operation Failed"))
204
- end
205
-
206
- it "lets the error bubble up" do
207
- lambda { Person.create }.should raise_error
208
- end
209
-
210
- end
211
-
212
- end
213
-
214
- describe ".create!" do
215
-
216
- it "delegates to the Create command" do
217
- Mongoid::Commands::Create.expects(:execute).returns(Person.new)
218
- Person.create!
219
- end
220
-
221
- it "returns the document" do
222
- Mongoid::Commands::Create.expects(:execute).returns(Person.new)
223
- Person.create!.should_not be_nil
224
- end
225
-
226
- context "when validation fails" do
227
-
228
- it "raises an error" do
229
- person = stub(:errors => stub(:empty? => false))
230
- Mongoid::Commands::Create.expects(:execute).returns(person)
231
- lambda { Person.create! }.should raise_error(Mongoid::Errors::Validations)
232
- end
233
-
234
- end
235
-
236
- end
237
-
238
- describe ".delete_all" do
239
-
240
- it "delegates to the DeleteAll command" do
241
- Mongoid::Commands::DeleteAll.expects(:execute).with(Person, {})
242
- Person.delete_all
243
- end
244
-
245
- end
246
-
247
- describe ".destroy_all" do
248
-
249
- it "delegates to the DestroyAll command" do
250
- Mongoid::Commands::DestroyAll.expects(:execute).with(Person, {})
251
- Person.destroy_all
252
- end
253
-
254
- end
255
-
256
- describe "#valid?" do
257
-
258
- before do
259
- @comment = Comment.new
260
- end
261
-
262
- it "validates the document" do
263
- @comment.valid?.should be_false
264
- end
265
-
266
- it "runs the validation callbacks" do
267
- @comment.expects(:run_callbacks).with(:validate)
268
- @comment.expects(:run_callbacks).with(:before_validation)
269
- @comment.expects(:run_callbacks).with(:after_validation)
270
- @comment.valid?
271
- end
272
-
273
- end
274
-
275
- end