mongoid 2.0.0.alpha → 2.0.0.beta.5

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 (216) hide show
  1. data/lib/mongoid.rb +11 -5
  2. data/lib/mongoid/associations.rb +112 -107
  3. data/lib/mongoid/associations/belongs_to_related.rb +2 -3
  4. data/lib/mongoid/associations/embedded_in.rb +12 -4
  5. data/lib/mongoid/associations/{embed_many.rb → embeds_many.rb} +101 -32
  6. data/lib/mongoid/associations/{embed_one.rb → embeds_one.rb} +10 -10
  7. data/lib/mongoid/associations/has_many_related.rb +51 -5
  8. data/lib/mongoid/associations/has_one_related.rb +9 -5
  9. data/lib/mongoid/associations/meta_data.rb +2 -1
  10. data/lib/mongoid/associations/options.rb +15 -6
  11. data/lib/mongoid/associations/proxy.rb +14 -21
  12. data/lib/mongoid/attributes.rb +34 -13
  13. data/lib/mongoid/callbacks.rb +1 -2
  14. data/lib/mongoid/collection.rb +4 -3
  15. data/lib/mongoid/collections.rb +41 -0
  16. data/lib/mongoid/collections/master.rb +3 -2
  17. data/lib/mongoid/collections/slaves.rb +3 -2
  18. data/lib/mongoid/components.rb +4 -1
  19. data/lib/mongoid/config.rb +163 -13
  20. data/lib/mongoid/contexts.rb +1 -2
  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/criteria.rb +13 -22
  25. data/lib/mongoid/criterion/exclusion.rb +3 -3
  26. data/lib/mongoid/criterion/inclusion.rb +17 -0
  27. data/lib/mongoid/criterion/optional.rb +1 -1
  28. data/lib/mongoid/dirty.rb +253 -0
  29. data/lib/mongoid/document.rb +40 -85
  30. data/lib/mongoid/errors.rb +48 -1
  31. data/lib/mongoid/extensions.rb +11 -9
  32. data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
  33. data/lib/mongoid/extensions/boolean/conversions.rb +8 -2
  34. data/lib/mongoid/extensions/date/conversions.rb +13 -4
  35. data/lib/mongoid/extensions/datetime/conversions.rb +1 -6
  36. data/lib/mongoid/extensions/float/conversions.rb +5 -1
  37. data/lib/mongoid/extensions/hash/assimilation.rb +12 -3
  38. data/lib/mongoid/extensions/hash/conversions.rb +34 -4
  39. data/lib/mongoid/extensions/integer/conversions.rb +5 -1
  40. data/lib/mongoid/extensions/nil/assimilation.rb +4 -0
  41. data/lib/mongoid/extensions/object/conversions.rb +3 -3
  42. data/lib/mongoid/extensions/string/conversions.rb +1 -1
  43. data/lib/mongoid/extensions/symbol/inflections.rb +5 -2
  44. data/lib/mongoid/extensions/time_conversions.rb +35 -0
  45. data/lib/mongoid/factory.rb +2 -1
  46. data/lib/mongoid/field.rb +15 -2
  47. data/lib/mongoid/fields.rb +1 -1
  48. data/lib/mongoid/identity.rb +3 -3
  49. data/lib/mongoid/indexes.rb +3 -3
  50. data/lib/mongoid/matchers.rb +1 -2
  51. data/lib/mongoid/memoization.rb +8 -2
  52. data/lib/mongoid/named_scope.rb +0 -5
  53. data/lib/mongoid/observable.rb +1 -1
  54. data/lib/mongoid/paths.rb +30 -22
  55. data/lib/mongoid/persistence.rb +218 -0
  56. data/lib/mongoid/persistence/command.rb +39 -0
  57. data/lib/mongoid/persistence/insert.rb +47 -0
  58. data/lib/mongoid/persistence/insert_embedded.rb +38 -0
  59. data/lib/mongoid/persistence/remove.rb +39 -0
  60. data/lib/mongoid/persistence/remove_all.rb +37 -0
  61. data/lib/mongoid/persistence/remove_embedded.rb +50 -0
  62. data/lib/mongoid/persistence/update.rb +63 -0
  63. data/lib/mongoid/railtie.rb +53 -0
  64. data/lib/mongoid/railties/database.rake +37 -0
  65. data/lib/mongoid/timestamps.rb +2 -2
  66. data/lib/mongoid/validations.rb +2 -2
  67. data/lib/mongoid/validations/associated.rb +2 -2
  68. data/lib/mongoid/validations/uniqueness.rb +13 -2
  69. data/lib/mongoid/version.rb +4 -0
  70. data/lib/mongoid/versioning.rb +3 -2
  71. data/lib/rails/generators/mongoid/config/config_generator.rb +41 -0
  72. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +24 -0
  73. data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
  74. data/lib/rails/generators/mongoid/model/templates/model.rb +15 -0
  75. data/lib/rails/generators/mongoid_generator.rb +61 -0
  76. metadata +76 -301
  77. data/.gitignore +0 -6
  78. data/.watchr +0 -29
  79. data/Rakefile +0 -52
  80. data/VERSION +0 -1
  81. data/caliper.yml +0 -4
  82. data/lib/mongoid/collections/mimic.rb +0 -46
  83. data/lib/mongoid/commands.rb +0 -161
  84. data/lib/mongoid/commands/create.rb +0 -19
  85. data/lib/mongoid/commands/delete.rb +0 -16
  86. data/lib/mongoid/commands/delete_all.rb +0 -23
  87. data/lib/mongoid/commands/deletion.rb +0 -18
  88. data/lib/mongoid/commands/destroy.rb +0 -17
  89. data/lib/mongoid/commands/destroy_all.rb +0 -23
  90. data/lib/mongoid/commands/save.rb +0 -29
  91. data/lib/mongoid/extensions/time/conversions.rb +0 -18
  92. data/mongoid.gemspec +0 -408
  93. data/perf/benchmark.rb +0 -77
  94. data/spec/integration/mongoid/associations_spec.rb +0 -340
  95. data/spec/integration/mongoid/attributes_spec.rb +0 -22
  96. data/spec/integration/mongoid/commands_spec.rb +0 -227
  97. data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -33
  98. data/spec/integration/mongoid/criteria_spec.rb +0 -272
  99. data/spec/integration/mongoid/document_spec.rb +0 -650
  100. data/spec/integration/mongoid/extensions_spec.rb +0 -22
  101. data/spec/integration/mongoid/finders_spec.rb +0 -119
  102. data/spec/integration/mongoid/inheritance_spec.rb +0 -137
  103. data/spec/integration/mongoid/named_scope_spec.rb +0 -46
  104. data/spec/models/address.rb +0 -39
  105. data/spec/models/animal.rb +0 -6
  106. data/spec/models/callbacks.rb +0 -18
  107. data/spec/models/comment.rb +0 -8
  108. data/spec/models/country_code.rb +0 -6
  109. data/spec/models/employer.rb +0 -5
  110. data/spec/models/game.rb +0 -7
  111. data/spec/models/inheritance.rb +0 -56
  112. data/spec/models/location.rb +0 -5
  113. data/spec/models/mixed_drink.rb +0 -4
  114. data/spec/models/name.rb +0 -13
  115. data/spec/models/namespacing.rb +0 -11
  116. data/spec/models/patient.rb +0 -4
  117. data/spec/models/person.rb +0 -99
  118. data/spec/models/pet.rb +0 -7
  119. data/spec/models/pet_owner.rb +0 -6
  120. data/spec/models/phone.rb +0 -7
  121. data/spec/models/post.rb +0 -15
  122. data/spec/models/translation.rb +0 -5
  123. data/spec/models/vet_visit.rb +0 -5
  124. data/spec/spec.opts +0 -3
  125. data/spec/spec_helper.rb +0 -31
  126. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -145
  127. data/spec/unit/mongoid/associations/embed_many_spec.rb +0 -516
  128. data/spec/unit/mongoid/associations/embed_one_spec.rb +0 -282
  129. data/spec/unit/mongoid/associations/embedded_in_spec.rb +0 -193
  130. data/spec/unit/mongoid/associations/has_many_related_spec.rb +0 -418
  131. data/spec/unit/mongoid/associations/has_one_related_spec.rb +0 -179
  132. data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
  133. data/spec/unit/mongoid/associations/options_spec.rb +0 -192
  134. data/spec/unit/mongoid/associations_spec.rb +0 -595
  135. data/spec/unit/mongoid/attributes_spec.rb +0 -507
  136. data/spec/unit/mongoid/callbacks_spec.rb +0 -55
  137. data/spec/unit/mongoid/collection_spec.rb +0 -187
  138. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +0 -75
  139. data/spec/unit/mongoid/collections/master_spec.rb +0 -41
  140. data/spec/unit/mongoid/collections/mimic_spec.rb +0 -43
  141. data/spec/unit/mongoid/collections/slaves_spec.rb +0 -81
  142. data/spec/unit/mongoid/commands/create_spec.rb +0 -31
  143. data/spec/unit/mongoid/commands/delete_all_spec.rb +0 -58
  144. data/spec/unit/mongoid/commands/delete_spec.rb +0 -38
  145. data/spec/unit/mongoid/commands/destroy_all_spec.rb +0 -21
  146. data/spec/unit/mongoid/commands/destroy_spec.rb +0 -51
  147. data/spec/unit/mongoid/commands/save_spec.rb +0 -107
  148. data/spec/unit/mongoid/commands_spec.rb +0 -270
  149. data/spec/unit/mongoid/config_spec.rb +0 -172
  150. data/spec/unit/mongoid/contexts/enumerable_spec.rb +0 -421
  151. data/spec/unit/mongoid/contexts/mongo_spec.rb +0 -682
  152. data/spec/unit/mongoid/contexts_spec.rb +0 -25
  153. data/spec/unit/mongoid/criteria_spec.rb +0 -824
  154. data/spec/unit/mongoid/criterion/complex_spec.rb +0 -19
  155. data/spec/unit/mongoid/criterion/exclusion_spec.rb +0 -91
  156. data/spec/unit/mongoid/criterion/inclusion_spec.rb +0 -219
  157. data/spec/unit/mongoid/criterion/optional_spec.rb +0 -319
  158. data/spec/unit/mongoid/cursor_spec.rb +0 -74
  159. data/spec/unit/mongoid/deprecation_spec.rb +0 -24
  160. data/spec/unit/mongoid/document_spec.rb +0 -818
  161. data/spec/unit/mongoid/errors_spec.rb +0 -103
  162. data/spec/unit/mongoid/extensions/array/accessors_spec.rb +0 -50
  163. data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +0 -24
  164. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +0 -35
  165. data/spec/unit/mongoid/extensions/array/parentization_spec.rb +0 -20
  166. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
  167. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
  168. data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +0 -49
  169. data/spec/unit/mongoid/extensions/date/conversions_spec.rb +0 -102
  170. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +0 -67
  171. data/spec/unit/mongoid/extensions/float/conversions_spec.rb +0 -61
  172. data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +0 -184
  173. data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +0 -46
  174. data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +0 -21
  175. data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +0 -17
  176. data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +0 -14
  177. data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +0 -61
  178. data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +0 -24
  179. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +0 -57
  180. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +0 -34
  181. data/spec/unit/mongoid/extensions/string/conversions_spec.rb +0 -17
  182. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +0 -208
  183. data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +0 -91
  184. data/spec/unit/mongoid/extensions/time/conversions_spec.rb +0 -70
  185. data/spec/unit/mongoid/extras_spec.rb +0 -102
  186. data/spec/unit/mongoid/factory_spec.rb +0 -31
  187. data/spec/unit/mongoid/field_spec.rb +0 -143
  188. data/spec/unit/mongoid/fields_spec.rb +0 -181
  189. data/spec/unit/mongoid/finders_spec.rb +0 -404
  190. data/spec/unit/mongoid/identity_spec.rb +0 -109
  191. data/spec/unit/mongoid/indexes_spec.rb +0 -93
  192. data/spec/unit/mongoid/javascript_spec.rb +0 -48
  193. data/spec/unit/mongoid/matchers/all_spec.rb +0 -27
  194. data/spec/unit/mongoid/matchers/default_spec.rb +0 -27
  195. data/spec/unit/mongoid/matchers/exists_spec.rb +0 -56
  196. data/spec/unit/mongoid/matchers/gt_spec.rb +0 -39
  197. data/spec/unit/mongoid/matchers/gte_spec.rb +0 -49
  198. data/spec/unit/mongoid/matchers/in_spec.rb +0 -27
  199. data/spec/unit/mongoid/matchers/lt_spec.rb +0 -39
  200. data/spec/unit/mongoid/matchers/lte_spec.rb +0 -49
  201. data/spec/unit/mongoid/matchers/ne_spec.rb +0 -27
  202. data/spec/unit/mongoid/matchers/nin_spec.rb +0 -27
  203. data/spec/unit/mongoid/matchers/size_spec.rb +0 -27
  204. data/spec/unit/mongoid/matchers_spec.rb +0 -329
  205. data/spec/unit/mongoid/memoization_spec.rb +0 -75
  206. data/spec/unit/mongoid/named_scope_spec.rb +0 -123
  207. data/spec/unit/mongoid/observable_spec.rb +0 -46
  208. data/spec/unit/mongoid/paths_spec.rb +0 -124
  209. data/spec/unit/mongoid/scope_spec.rb +0 -240
  210. data/spec/unit/mongoid/state_spec.rb +0 -83
  211. data/spec/unit/mongoid/timestamps_spec.rb +0 -25
  212. data/spec/unit/mongoid/validations/associated_spec.rb +0 -103
  213. data/spec/unit/mongoid/validations/uniqueness_spec.rb +0 -47
  214. data/spec/unit/mongoid/validations_spec.rb +0 -190
  215. data/spec/unit/mongoid/versioning_spec.rb +0 -41
  216. data/spec/unit/mongoid_spec.rb +0 -46
@@ -1,31 +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
- @document.expects(:run_callbacks).yields
13
- Mongoid::Commands::Save.expects(:execute).with(@document, true).returns(@document)
14
- Mongoid::Commands::Create.execute(@document)
15
- end
16
-
17
- it "runs the before and after create callbacks" do
18
- @document.expects(:run_callbacks).with(:create).yields
19
- Mongoid::Commands::Save.expects(:execute).with(@document, true).returns(@document)
20
- Mongoid::Commands::Create.execute(@document)
21
- end
22
-
23
- it "returns the document" do
24
- @document.expects(:run_callbacks).yields
25
- Mongoid::Commands::Save.expects(:execute).with(@document, true).returns(@document)
26
- Mongoid::Commands::Create.execute(@document).should == @document
27
- end
28
-
29
- end
30
-
31
- 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,21 +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
- end
21
- end
@@ -1,51 +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(:destroy)
17
- Mongoid::Commands::Destroy.execute(@document)
18
- end
19
-
20
- it "removes the document from its collection" do
21
- @document.expects(:run_callbacks).yields
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
- @document.expects(:run_callbacks).with(:destroy).yields
28
- @collection.expects(:remove).with({ :_id => @document.id }).returns(true)
29
- @document.expects(:destroyed=).with(true)
30
- Mongoid::Commands::Destroy.execute(@document)
31
- end
32
-
33
- context "when the document is embedded" do
34
-
35
- before do
36
- @parent = Person.new
37
- @address = Address.new(:street => "Genoa Pl")
38
- @parent.addresses << @address
39
- @collection = mock
40
- Person.expects(:collection).returns(@collection)
41
- end
42
-
43
- it "removes the document from the parent attributes" do
44
- @parent.addresses.should == [@address]
45
- @collection.expects(:save).returns(true)
46
- Mongoid::Commands::Destroy.execute(@address)
47
- @parent.addresses.should be_empty
48
- end
49
- end
50
- end
51
- end
@@ -1,107 +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(:save)
31
- Mongoid::Commands::Save.execute(@document)
32
- end
33
-
34
- it "returns true" do
35
- Mongoid::Commands::Save.execute(@document).should be_true
36
- end
37
-
38
- context "when the document has a parent" do
39
-
40
- it "executes a save on the parent" do
41
- @document.expects(:run_callbacks).yields
42
- @parent.expects(:run_callbacks).yields
43
- @parent_collection.expects(:save).with(@parent.raw_attributes, :safe => true)
44
- Mongoid::Commands::Save.execute(@document)
45
- end
46
-
47
- end
48
-
49
- context "when the document has no parent" do
50
-
51
- before do
52
- @document.expects(:_parent).returns(nil)
53
- end
54
-
55
- it "calls save on the document collection" do
56
- @document.expects(:run_callbacks).yields
57
- @doc_collection.expects(:save).with(@document.raw_attributes, :safe => true)
58
- Mongoid::Commands::Save.execute(@document)
59
- end
60
-
61
- end
62
-
63
- end
64
-
65
- context "when document is invalid" do
66
-
67
- before do
68
- @document.expects(:valid?).returns(false)
69
- end
70
-
71
- it "returns false" do
72
- Mongoid::Commands::Save.execute(@document).should be_false
73
- end
74
-
75
- end
76
-
77
- context "when saving without validation" do
78
-
79
- before do
80
- @document.stubs(:valid?).returns(false)
81
- end
82
-
83
- it "ignores validation and returns true" do
84
- Mongoid::Commands::Save.execute(@document, false).should be_true
85
- end
86
-
87
- end
88
-
89
- end
90
-
91
- context "when the document is embedded" do
92
-
93
- before do
94
- @child_name = Name.new(:first_name => "Testy")
95
- end
96
-
97
- context "when parent reference does not exist" do
98
-
99
- it "raises an error" do
100
- lambda { @child_name.save }.should raise_error
101
- end
102
-
103
- end
104
-
105
- end
106
-
107
- end
@@ -1,270 +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(:create).yields.returns(false)
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(:create).yields
63
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
64
- @person.save
65
- end
66
-
67
- end
68
-
69
- context "when not validating" do
70
-
71
- before do
72
- @person = Person.new
73
- end
74
-
75
- it "passes the validate param to the command" do
76
- Mongoid::Commands::Save.expects(:execute).with(@person, false).returns(true)
77
- @person.save(false)
78
- end
79
-
80
- end
81
-
82
- context "when the database raises an error" do
83
-
84
- before do
85
- @person = Person.new
86
- end
87
-
88
- it "lets the error bubble up" do
89
- Mongoid::Commands::Save.expects(:execute).raises(Mongo::OperationFailure.new("Operation Failed"))
90
- lambda { @person.save }.should raise_error
91
- end
92
-
93
- end
94
-
95
- end
96
-
97
- describe "#save!" do
98
-
99
- context "when validation passes" do
100
-
101
- it "it returns the person" do
102
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
103
- @person.save!
104
- end
105
-
106
- end
107
-
108
- context "when validation fails" do
109
-
110
- it "it raises an error" do
111
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(false)
112
- lambda { @person.save! }.should raise_error
113
- end
114
-
115
- end
116
-
117
- context "when document is new" do
118
-
119
- before do
120
- @person = Person.new
121
- end
122
-
123
- it "delegates to the save command" do
124
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
125
- @person.save!
126
- end
127
-
128
- context "when validation fails" do
129
-
130
- it "it raises an error " do
131
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(false)
132
- lambda { @person.save! }.should raise_error
133
- end
134
-
135
- end
136
-
137
- it "runs the before and after create callbacks" do
138
- @person.expects(:run_callbacks).with(:create).yields.returns(true)
139
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
140
- @person.save!
141
- end
142
-
143
- end
144
-
145
- end
146
-
147
- describe "#update_attributes" do
148
-
149
- it "delegates to the Save command" do
150
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
151
- @person.update_attributes({})
152
- end
153
-
154
- it "executes the before and after update callbacks" do
155
- @person.expects(:run_callbacks).with(:update).yields.returns(true)
156
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
157
- @person.update_attributes({})
158
- end
159
-
160
- end
161
-
162
- describe "#update_attributes!" do
163
-
164
- context "when validation passes" do
165
-
166
- it "it returns the person" do
167
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(true)
168
- @person.update_attributes({}).should be_true
169
- end
170
-
171
- end
172
-
173
- context "when validation fails" do
174
-
175
- it "it raises an error" do
176
- Mongoid::Commands::Save.expects(:execute).with(@person, true).returns(false)
177
- lambda { @person.update_attributes!({}) }.should raise_error
178
- end
179
-
180
- end
181
-
182
- end
183
-
184
- describe ".create" do
185
-
186
- it "delegates to the Create command" do
187
- Mongoid::Commands::Create.expects(:execute)
188
- Person.create
189
- end
190
-
191
- it "returns the document" do
192
- Mongoid::Commands::Create.expects(:execute).returns(Person.new)
193
- Person.create.should_not be_nil
194
- end
195
-
196
- context "when the database raises an error" do
197
-
198
- before do
199
- @person = Person.new
200
- Mongoid::Commands::Save.expects(:execute).raises(Mongo::OperationFailure.new("Operation Failed"))
201
- end
202
-
203
- it "lets the error bubble up" do
204
- lambda { Person.create }.should raise_error
205
- end
206
-
207
- end
208
-
209
- end
210
-
211
- describe ".create!" do
212
-
213
- it "delegates to the Create command" do
214
- Mongoid::Commands::Create.expects(:execute).returns(Person.new)
215
- Person.create!
216
- end
217
-
218
- it "returns the document" do
219
- Mongoid::Commands::Create.expects(:execute).returns(Person.new)
220
- Person.create!.should_not be_nil
221
- end
222
-
223
- context "when validation fails" do
224
-
225
- it "raises an error" do
226
- person = stub(:errors => stub(:empty? => false))
227
- Mongoid::Commands::Create.expects(:execute).returns(person)
228
- lambda { Person.create! }.should raise_error(Mongoid::Errors::Validations)
229
- end
230
-
231
- end
232
-
233
- end
234
-
235
- describe ".delete_all" do
236
-
237
- it "delegates to the DeleteAll command" do
238
- Mongoid::Commands::DeleteAll.expects(:execute).with(Person, {})
239
- Person.delete_all
240
- end
241
-
242
- end
243
-
244
- describe ".destroy_all" do
245
-
246
- it "delegates to the DestroyAll command" do
247
- Mongoid::Commands::DestroyAll.expects(:execute).with(Person, {})
248
- Person.destroy_all
249
- end
250
-
251
- end
252
-
253
- describe "#valid?" do
254
-
255
- before do
256
- @comment = Comment.new
257
- end
258
-
259
- it "validates the document" do
260
- @comment.valid?.should be_false
261
- end
262
-
263
- it "runs the validation callbacks" do
264
- @comment.expects(:_run_validate_callbacks)
265
- @comment.valid?
266
- end
267
-
268
- end
269
-
270
- end