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
data/.gitignore DELETED
@@ -1,6 +0,0 @@
1
- .DS_STORE
2
- coverage/*
3
- pkg/*
4
- scratch_directory/*
5
- tmp/*
6
- *.gem
data/.watchr DELETED
@@ -1,29 +0,0 @@
1
- # Watchr is the preferred method to run specs automatically over rspactor for
2
- # Mongoid. If you are using vim, you can add the file:
3
- #
4
- # ~/.vim/ftdetect/watchr.vim
5
- #
6
- # This should have only the following line in it:
7
- #
8
- # autocmd BufNewFile,BufRead *.watchr setf ruby
9
- #
10
- # This will enable vim to recognize this file as ruby code should you wish to
11
- # edit it.
12
- def run(cmd)
13
- puts cmd
14
- system cmd
15
- end
16
-
17
- def spec(file)
18
- run "spec -O spec/spec.opts #{file}"
19
- end
20
-
21
- watch("spec/.*/*_spec\.rb") do |match|
22
- p match[0]
23
- spec(match[0])
24
- end
25
-
26
- watch("lib/(.*/.*)\.rb") do |match|
27
- p match[1]
28
- spec("spec/unit/#{match[1]}_spec.rb")
29
- end
data/Rakefile DELETED
@@ -1,53 +0,0 @@
1
- require "rubygems"
2
- require "rake"
3
- require "rake/rdoctask"
4
- require "spec/rake/spectask"
5
-
6
- begin
7
- require "jeweler"
8
- Jeweler::Tasks.new do |gem|
9
- gem.name = "mongoid"
10
- gem.summary = "ODM framework for MongoDB"
11
- gem.email = "durran@gmail.com"
12
- gem.homepage = "http://mongoid.org"
13
- gem.authors = ["Durran Jordan"]
14
-
15
- gem.add_dependency("activesupport", "<= 2.3.5")
16
- gem.add_dependency("mongo", ">= 0.19.1")
17
- gem.add_dependency("durran-validatable", ">= 2.0.1")
18
- gem.add_dependency("will_paginate", "< 2.9")
19
-
20
- gem.add_development_dependency("rspec", ">= 1.2.9")
21
- gem.add_development_dependency("mocha", ">= 0.9.8")
22
- end
23
- Jeweler::GemcutterTasks.new
24
- rescue LoadError
25
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
26
- end
27
-
28
- Spec::Rake::SpecTask.new(:spec) do |spec|
29
- spec.pattern = "spec/**/*_spec.rb"
30
- spec.spec_opts = ["--options", "spec/spec.opts"]
31
- end
32
-
33
- Spec::Rake::SpecTask.new(:rcov) do |spec|
34
- spec.libs << "lib" << "spec"
35
- spec.pattern = "spec/**/*_spec.rb"
36
- spec.spec_opts = ["--options", "spec/spec.opts"]
37
- spec.rcov = true
38
- end
39
-
40
- Rake::RDocTask.new do |rdoc|
41
- if File.exist?("VERSION.yml")
42
- config = File.read("VERSION")
43
- version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
44
- else
45
- version = ""
46
- end
47
- rdoc.rdoc_dir = "rdoc"
48
- rdoc.title = "mongoid #{version}"
49
- rdoc.rdoc_files.include("README*")
50
- rdoc.rdoc_files.include("lib/**/*.rb")
51
- end
52
-
53
- task :default => ["spec"]
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.2.14
@@ -1,4 +0,0 @@
1
- test_directories_to_calculate:
2
- - spec/unit
3
- - spec/integration
4
- - spec/integration/mongoid
@@ -1,46 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Collections #:nodoc:
4
- module Mimic #:nodoc:
5
- def self.included(base)
6
- base.class_eval do
7
- include InstanceMethods
8
- extend ClassMethods
9
- end
10
- end
11
-
12
- module InstanceMethods #:nodoc:
13
- # Retry the supplied operation until the reconnect time has expired,
14
- # defined in the mongoid Config module.
15
- #
16
- # Example:
17
- #
18
- # <tt>master.attempt(operation)</tt>
19
- def attempt(operation, start)
20
- begin
21
- elapsed = (Time.now - start)
22
- operation.call
23
- rescue Mongo::ConnectionFailure => error
24
- (elapsed < Mongoid.reconnect_time) ? retry : (raise error)
25
- end
26
- end
27
- end
28
-
29
- module ClassMethods #:nodoc:
30
- # Proxy all the supplied operations to the internal collection or target.
31
- #
32
- # Example:
33
- #
34
- # <tt>proxy Operations::ALL, :collection</tt>
35
- def proxy(target, operations)
36
- operations.each do |name|
37
- define_method(name) do |*args|
38
- operation = lambda { send(target).send(name, *args) }
39
- attempt(operation, Time.now)
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,174 +0,0 @@
1
- # encoding: utf-8
2
- require "mongoid/commands/create"
3
- require "mongoid/commands/deletion"
4
- require "mongoid/commands/delete"
5
- require "mongoid/commands/delete_all"
6
- require "mongoid/commands/destroy"
7
- require "mongoid/commands/destroy_all"
8
- require "mongoid/commands/save"
9
-
10
- module Mongoid #:nodoc:
11
-
12
- # This module is included in the +Document+ to provide all the persistence
13
- # methods required on the +Document+ object and class.
14
- module Commands
15
- def self.included(base)
16
- base.class_eval do
17
- include InstanceMethods
18
- extend ClassMethods
19
- end
20
- end
21
-
22
- module InstanceMethods
23
-
24
- # Delete the +Document+ from the database. This method is an optimized
25
- # delete that does not force any callbacks.
26
- #
27
- # Example:
28
- #
29
- # <tt>document.delete</tt>
30
- #
31
- # Returns: true unless an error occurs.
32
- def delete
33
- Delete.execute(self)
34
- end
35
-
36
- # Destroy the +Document+. This will delete the document from the database
37
- # and run the before and after destroy callbacks.
38
- #
39
- # Example:
40
- #
41
- # <tt>document.destroy</tt>
42
- #
43
- # Returns: true unless an error occurs.
44
- def destroy
45
- Destroy.execute(self)
46
- end
47
-
48
- # Save the +Document+. If the document is new, then the before and after
49
- # create callbacks will get executed as well as the save callbacks.
50
- # Otherwise only the save callbacks will run.
51
- #
52
- # Options:
53
- #
54
- # validate: Run validations or not. Defaults to true.
55
- #
56
- # Example:
57
- #
58
- # <tt>document.save # save with validations</tt>
59
- # <tt>document.save(false) # save without validations</tt>
60
- #
61
- # Returns: true if validation passes, false if not.
62
- def save(validate = true)
63
- new = new_record?
64
- run_callbacks(:before_create) if new
65
- saved = Save.execute(self, validate)
66
- run_callbacks(:after_create) if new && saved
67
- saved
68
- end
69
-
70
- # Save the +Document+, dangerously. Before and after save callbacks will
71
- # get run. If validation fails an error will get raised.
72
- #
73
- # Example:
74
- #
75
- # <tt>document.save!</tt>
76
- #
77
- # Returns: true if validation passes
78
- def save!
79
- return save(true) || (raise Errors::Validations.new(self.errors))
80
- end
81
-
82
- # Update the document attributes and persist the document to the
83
- # database. Will delegate to save with all callbacks.
84
- #
85
- # Example:
86
- #
87
- # <tt>document.update_attributes(:title => "Test")</tt>
88
- def update_attributes(attrs = {})
89
- set_attributes(attrs); save
90
- end
91
-
92
- # Update the document attributes and persist the document to the
93
- # database. Will delegate to save!
94
- #
95
- # Example:
96
- #
97
- # <tt>document.update_attributes!(:title => "Test")</tt>
98
- def update_attributes!(attrs = {})
99
- set_attributes(attrs); save!
100
- end
101
-
102
- protected
103
- def set_attributes(attrs = {})
104
- run_callbacks(:before_update)
105
- write_attributes(attrs)
106
- run_callbacks(:after_update)
107
- end
108
-
109
- end
110
-
111
- module ClassMethods
112
-
113
- # Create a new +Document+. This will instantiate a new document and save
114
- # it in a single call. Will always return the document whether save
115
- # passed or not.
116
- #
117
- # Example:
118
- #
119
- # <tt>Person.create(:title => "Mr")</tt>
120
- #
121
- # Returns: the +Document+.
122
- def create(attributes = {})
123
- document = new(attributes)
124
- Create.execute(document)
125
- document
126
- end
127
-
128
- # Create a new +Document+. This will instantiate a new document and save
129
- # it in a single call. Will always return the document whether save
130
- # passed or not. Will raise an error if validation fails.
131
- #
132
- # Example:
133
- #
134
- # <tt>Person.create!(:title => "Mr")</tt>
135
- #
136
- # Returns: the +Document+.
137
- def create!(attributes = {})
138
- document = Create.execute(new(attributes), true)
139
- raise Errors::Validations.new(document.errors) unless document.errors.empty?
140
- document
141
- end
142
-
143
- # Delete all documents given the supplied conditions. If no conditions
144
- # are passed, the entire collection will be dropped for performance
145
- # benefits. Does not fire any callbacks.
146
- #
147
- # Example:
148
- #
149
- # <tt>Person.delete_all(:conditions => { :title => "Sir" })</tt>
150
- # <tt>Person.delete_all</tt>
151
- #
152
- # Returns: true or raises an error.
153
- def delete_all(conditions = {})
154
- DeleteAll.execute(self, conditions)
155
- end
156
-
157
- # Delete all documents given the supplied conditions. If no conditions
158
- # are passed, the entire collection will be dropped for performance
159
- # benefits. Fires the destroy callbacks if conditions were passed.
160
- #
161
- # Example:
162
- #
163
- # <tt>Person.destroy_all(:conditions => { :title => "Sir" })</tt>
164
- # <tt>Person.destroy_all</tt>
165
- #
166
- # Returns: true or raises an error.
167
- def destroy_all(conditions = {})
168
- DestroyAll.execute(self, conditions)
169
- end
170
-
171
- end
172
-
173
- end
174
- end
@@ -1,21 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Commands
4
- class Create
5
- # Performs a create of the supplied Document, with the necessary
6
- # callbacks. It then delegates to the Save command.
7
- #
8
- # Options:
9
- #
10
- # doc: A new +Document+ that is going to be persisted.
11
- #
12
- # Returns: +Document+.
13
- def self.execute(doc, validate = true)
14
- doc.run_callbacks :before_create
15
- Save.execute(doc, validate)
16
- doc.run_callbacks :after_create
17
- return doc
18
- end
19
- end
20
- end
21
- end
@@ -1,16 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Commands
4
- class Delete
5
- extend Deletion
6
- # Performs a delete of the supplied +Document+ without any callbacks.
7
- #
8
- # Options:
9
- #
10
- # doc: A new +Document+ that is going to be deleted.
11
- def self.execute(doc)
12
- doc.destroyed = true if delete(doc)
13
- end
14
- end
15
- end
16
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Commands
4
- class DeleteAll
5
- # Performs a delete of the all the +Documents+ that match the criteria
6
- # supplied.
7
- #
8
- # Options:
9
- #
10
- # params: A set of conditions to find the +Documents+ by.
11
- # klass: The class of the +Document+ to execute the find on.
12
- #
13
- # Example:
14
- #
15
- # <tt>DeleteAll.execute(Person, :conditions => { :field => "value" })</tt>
16
- def self.execute(klass, params = {})
17
- safe = Mongoid.persist_in_safe_mode
18
- collection = klass.collection
19
- collection.remove((params[:conditions] || {}).merge(:_type => klass.name), :safe => safe)
20
- end
21
- end
22
- end
23
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Commands #:nodoc
4
- module Deletion #:nodoc
5
- # If the +Document+ has a parent, delete it from the parent's attributes,
6
- # otherwise delete it from it's collection.
7
- def delete(doc)
8
- parent = doc._parent
9
- if parent
10
- parent.remove(doc)
11
- parent.save
12
- else
13
- doc.collection.remove(:_id => doc.id)
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,19 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Commands
4
- class Destroy
5
- extend Deletion
6
- # Performs a destroy of the supplied +Document+, with the necessary
7
- # callbacks. It then deletes the record from the collection.
8
- #
9
- # Options:
10
- #
11
- # doc: A new +Document+ that is going to be destroyed.
12
- def self.execute(doc)
13
- doc.run_callbacks :before_destroy
14
- doc.destroyed = true if delete(doc)
15
- doc.run_callbacks :after_destroy
16
- end
17
- end
18
- end
19
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Commands
4
- class DestroyAll
5
- # Performs a destroy of the all the +Documents+ that match the criteria
6
- # supplied. Will execute all the destroy callbacks for each +Document+.
7
- #
8
- # Options:
9
- #
10
- # params: A set of conditions to find the +Documents+ by.
11
- # klass: The class of the +Document+ to execute the find on.
12
- #
13
- # Example:
14
- #
15
- # <tt>DestroyAll.execute(Person, :conditions => { :field => "value" })</tt>
16
- def self.execute(klass, params)
17
- conditions = params[:conditions] || {}
18
- params[:conditions] = conditions.merge(:_type => klass.name)
19
- klass.find(:all, params).each { |doc| Destroy.execute(doc) }; true
20
- end
21
- end
22
- end
23
- end