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.
- data/lib/mongoid.rb +11 -5
- data/lib/mongoid/associations.rb +112 -107
- data/lib/mongoid/associations/belongs_to_related.rb +2 -3
- data/lib/mongoid/associations/embedded_in.rb +12 -4
- data/lib/mongoid/associations/{embed_many.rb → embeds_many.rb} +101 -32
- data/lib/mongoid/associations/{embed_one.rb → embeds_one.rb} +10 -10
- data/lib/mongoid/associations/has_many_related.rb +51 -5
- data/lib/mongoid/associations/has_one_related.rb +9 -5
- data/lib/mongoid/associations/meta_data.rb +2 -1
- data/lib/mongoid/associations/options.rb +15 -6
- data/lib/mongoid/associations/proxy.rb +14 -21
- data/lib/mongoid/attributes.rb +34 -13
- data/lib/mongoid/callbacks.rb +1 -2
- data/lib/mongoid/collection.rb +4 -3
- data/lib/mongoid/collections.rb +41 -0
- data/lib/mongoid/collections/master.rb +3 -2
- data/lib/mongoid/collections/slaves.rb +3 -2
- data/lib/mongoid/components.rb +4 -1
- data/lib/mongoid/config.rb +163 -13
- data/lib/mongoid/contexts.rb +1 -2
- data/lib/mongoid/contexts/enumerable.rb +1 -1
- data/lib/mongoid/contexts/mongo.rb +1 -1
- data/lib/mongoid/contexts/paging.rb +10 -2
- data/lib/mongoid/criteria.rb +13 -22
- data/lib/mongoid/criterion/exclusion.rb +3 -3
- data/lib/mongoid/criterion/inclusion.rb +17 -0
- data/lib/mongoid/criterion/optional.rb +1 -1
- data/lib/mongoid/dirty.rb +253 -0
- data/lib/mongoid/document.rb +40 -85
- data/lib/mongoid/errors.rb +48 -1
- data/lib/mongoid/extensions.rb +11 -9
- data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
- data/lib/mongoid/extensions/boolean/conversions.rb +8 -2
- data/lib/mongoid/extensions/date/conversions.rb +13 -4
- data/lib/mongoid/extensions/datetime/conversions.rb +1 -6
- data/lib/mongoid/extensions/float/conversions.rb +5 -1
- data/lib/mongoid/extensions/hash/assimilation.rb +12 -3
- data/lib/mongoid/extensions/hash/conversions.rb +34 -4
- data/lib/mongoid/extensions/integer/conversions.rb +5 -1
- data/lib/mongoid/extensions/nil/assimilation.rb +4 -0
- data/lib/mongoid/extensions/object/conversions.rb +3 -3
- data/lib/mongoid/extensions/string/conversions.rb +1 -1
- data/lib/mongoid/extensions/symbol/inflections.rb +5 -2
- data/lib/mongoid/extensions/time_conversions.rb +35 -0
- data/lib/mongoid/factory.rb +2 -1
- data/lib/mongoid/field.rb +15 -2
- data/lib/mongoid/fields.rb +1 -1
- data/lib/mongoid/identity.rb +3 -3
- data/lib/mongoid/indexes.rb +3 -3
- data/lib/mongoid/matchers.rb +1 -2
- data/lib/mongoid/memoization.rb +8 -2
- data/lib/mongoid/named_scope.rb +0 -5
- data/lib/mongoid/observable.rb +1 -1
- data/lib/mongoid/paths.rb +30 -22
- data/lib/mongoid/persistence.rb +218 -0
- data/lib/mongoid/persistence/command.rb +39 -0
- data/lib/mongoid/persistence/insert.rb +47 -0
- data/lib/mongoid/persistence/insert_embedded.rb +38 -0
- data/lib/mongoid/persistence/remove.rb +39 -0
- data/lib/mongoid/persistence/remove_all.rb +37 -0
- data/lib/mongoid/persistence/remove_embedded.rb +50 -0
- data/lib/mongoid/persistence/update.rb +63 -0
- data/lib/mongoid/railtie.rb +53 -0
- data/lib/mongoid/railties/database.rake +37 -0
- data/lib/mongoid/timestamps.rb +2 -2
- data/lib/mongoid/validations.rb +2 -2
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/uniqueness.rb +13 -2
- data/lib/mongoid/version.rb +4 -0
- data/lib/mongoid/versioning.rb +3 -2
- data/lib/rails/generators/mongoid/config/config_generator.rb +41 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +24 -0
- data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
- data/lib/rails/generators/mongoid/model/templates/model.rb +15 -0
- data/lib/rails/generators/mongoid_generator.rb +61 -0
- metadata +76 -301
- data/.gitignore +0 -6
- data/.watchr +0 -29
- data/Rakefile +0 -52
- data/VERSION +0 -1
- data/caliper.yml +0 -4
- data/lib/mongoid/collections/mimic.rb +0 -46
- data/lib/mongoid/commands.rb +0 -161
- data/lib/mongoid/commands/create.rb +0 -19
- data/lib/mongoid/commands/delete.rb +0 -16
- data/lib/mongoid/commands/delete_all.rb +0 -23
- data/lib/mongoid/commands/deletion.rb +0 -18
- data/lib/mongoid/commands/destroy.rb +0 -17
- data/lib/mongoid/commands/destroy_all.rb +0 -23
- data/lib/mongoid/commands/save.rb +0 -29
- data/lib/mongoid/extensions/time/conversions.rb +0 -18
- data/mongoid.gemspec +0 -408
- data/perf/benchmark.rb +0 -77
- data/spec/integration/mongoid/associations_spec.rb +0 -340
- data/spec/integration/mongoid/attributes_spec.rb +0 -22
- data/spec/integration/mongoid/commands_spec.rb +0 -227
- data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -33
- data/spec/integration/mongoid/criteria_spec.rb +0 -272
- data/spec/integration/mongoid/document_spec.rb +0 -650
- data/spec/integration/mongoid/extensions_spec.rb +0 -22
- data/spec/integration/mongoid/finders_spec.rb +0 -119
- data/spec/integration/mongoid/inheritance_spec.rb +0 -137
- data/spec/integration/mongoid/named_scope_spec.rb +0 -46
- data/spec/models/address.rb +0 -39
- data/spec/models/animal.rb +0 -6
- data/spec/models/callbacks.rb +0 -18
- data/spec/models/comment.rb +0 -8
- data/spec/models/country_code.rb +0 -6
- data/spec/models/employer.rb +0 -5
- data/spec/models/game.rb +0 -7
- data/spec/models/inheritance.rb +0 -56
- data/spec/models/location.rb +0 -5
- data/spec/models/mixed_drink.rb +0 -4
- data/spec/models/name.rb +0 -13
- data/spec/models/namespacing.rb +0 -11
- data/spec/models/patient.rb +0 -4
- data/spec/models/person.rb +0 -99
- data/spec/models/pet.rb +0 -7
- data/spec/models/pet_owner.rb +0 -6
- data/spec/models/phone.rb +0 -7
- data/spec/models/post.rb +0 -15
- data/spec/models/translation.rb +0 -5
- data/spec/models/vet_visit.rb +0 -5
- data/spec/spec.opts +0 -3
- data/spec/spec_helper.rb +0 -31
- data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -145
- data/spec/unit/mongoid/associations/embed_many_spec.rb +0 -516
- data/spec/unit/mongoid/associations/embed_one_spec.rb +0 -282
- data/spec/unit/mongoid/associations/embedded_in_spec.rb +0 -193
- data/spec/unit/mongoid/associations/has_many_related_spec.rb +0 -418
- data/spec/unit/mongoid/associations/has_one_related_spec.rb +0 -179
- data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
- data/spec/unit/mongoid/associations/options_spec.rb +0 -192
- data/spec/unit/mongoid/associations_spec.rb +0 -595
- data/spec/unit/mongoid/attributes_spec.rb +0 -507
- data/spec/unit/mongoid/callbacks_spec.rb +0 -55
- data/spec/unit/mongoid/collection_spec.rb +0 -187
- data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +0 -75
- data/spec/unit/mongoid/collections/master_spec.rb +0 -41
- data/spec/unit/mongoid/collections/mimic_spec.rb +0 -43
- data/spec/unit/mongoid/collections/slaves_spec.rb +0 -81
- data/spec/unit/mongoid/commands/create_spec.rb +0 -31
- data/spec/unit/mongoid/commands/delete_all_spec.rb +0 -58
- data/spec/unit/mongoid/commands/delete_spec.rb +0 -38
- data/spec/unit/mongoid/commands/destroy_all_spec.rb +0 -21
- data/spec/unit/mongoid/commands/destroy_spec.rb +0 -51
- data/spec/unit/mongoid/commands/save_spec.rb +0 -107
- data/spec/unit/mongoid/commands_spec.rb +0 -270
- data/spec/unit/mongoid/config_spec.rb +0 -172
- data/spec/unit/mongoid/contexts/enumerable_spec.rb +0 -421
- data/spec/unit/mongoid/contexts/mongo_spec.rb +0 -682
- data/spec/unit/mongoid/contexts_spec.rb +0 -25
- data/spec/unit/mongoid/criteria_spec.rb +0 -824
- data/spec/unit/mongoid/criterion/complex_spec.rb +0 -19
- data/spec/unit/mongoid/criterion/exclusion_spec.rb +0 -91
- data/spec/unit/mongoid/criterion/inclusion_spec.rb +0 -219
- data/spec/unit/mongoid/criterion/optional_spec.rb +0 -319
- data/spec/unit/mongoid/cursor_spec.rb +0 -74
- data/spec/unit/mongoid/deprecation_spec.rb +0 -24
- data/spec/unit/mongoid/document_spec.rb +0 -818
- data/spec/unit/mongoid/errors_spec.rb +0 -103
- data/spec/unit/mongoid/extensions/array/accessors_spec.rb +0 -50
- data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +0 -24
- data/spec/unit/mongoid/extensions/array/conversions_spec.rb +0 -35
- data/spec/unit/mongoid/extensions/array/parentization_spec.rb +0 -20
- data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
- data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
- data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +0 -49
- data/spec/unit/mongoid/extensions/date/conversions_spec.rb +0 -102
- data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +0 -67
- data/spec/unit/mongoid/extensions/float/conversions_spec.rb +0 -61
- data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +0 -184
- data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +0 -46
- data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +0 -21
- data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +0 -17
- data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +0 -14
- data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +0 -61
- data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +0 -24
- data/spec/unit/mongoid/extensions/object/conversions_spec.rb +0 -57
- data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +0 -34
- data/spec/unit/mongoid/extensions/string/conversions_spec.rb +0 -17
- data/spec/unit/mongoid/extensions/string/inflections_spec.rb +0 -208
- data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +0 -91
- data/spec/unit/mongoid/extensions/time/conversions_spec.rb +0 -70
- data/spec/unit/mongoid/extras_spec.rb +0 -102
- data/spec/unit/mongoid/factory_spec.rb +0 -31
- data/spec/unit/mongoid/field_spec.rb +0 -143
- data/spec/unit/mongoid/fields_spec.rb +0 -181
- data/spec/unit/mongoid/finders_spec.rb +0 -404
- data/spec/unit/mongoid/identity_spec.rb +0 -109
- data/spec/unit/mongoid/indexes_spec.rb +0 -93
- data/spec/unit/mongoid/javascript_spec.rb +0 -48
- data/spec/unit/mongoid/matchers/all_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/default_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/exists_spec.rb +0 -56
- data/spec/unit/mongoid/matchers/gt_spec.rb +0 -39
- data/spec/unit/mongoid/matchers/gte_spec.rb +0 -49
- data/spec/unit/mongoid/matchers/in_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/lt_spec.rb +0 -39
- data/spec/unit/mongoid/matchers/lte_spec.rb +0 -49
- data/spec/unit/mongoid/matchers/ne_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/nin_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/size_spec.rb +0 -27
- data/spec/unit/mongoid/matchers_spec.rb +0 -329
- data/spec/unit/mongoid/memoization_spec.rb +0 -75
- data/spec/unit/mongoid/named_scope_spec.rb +0 -123
- data/spec/unit/mongoid/observable_spec.rb +0 -46
- data/spec/unit/mongoid/paths_spec.rb +0 -124
- data/spec/unit/mongoid/scope_spec.rb +0 -240
- data/spec/unit/mongoid/state_spec.rb +0 -83
- data/spec/unit/mongoid/timestamps_spec.rb +0 -25
- data/spec/unit/mongoid/validations/associated_spec.rb +0 -103
- data/spec/unit/mongoid/validations/uniqueness_spec.rb +0 -47
- data/spec/unit/mongoid/validations_spec.rb +0 -190
- data/spec/unit/mongoid/versioning_spec.rb +0 -41
- data/spec/unit/mongoid_spec.rb +0 -46
data/.gitignore
DELETED
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,52 +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("activemodel", ">= 3.0.pre")
|
16
|
-
gem.add_dependency("will_paginate", ">= 3.0.pre")
|
17
|
-
gem.add_dependency("mongo", ">= 0.19.1")
|
18
|
-
|
19
|
-
gem.add_development_dependency("rspec", ">= 1.3.0")
|
20
|
-
gem.add_development_dependency("mocha", ">= 0.9.8")
|
21
|
-
end
|
22
|
-
Jeweler::GemcutterTasks.new
|
23
|
-
rescue LoadError
|
24
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
25
|
-
end
|
26
|
-
|
27
|
-
Spec::Rake::SpecTask.new(:spec) do |spec|
|
28
|
-
spec.pattern = "spec/**/*_spec.rb"
|
29
|
-
spec.spec_opts = ["--options", "spec/spec.opts"]
|
30
|
-
end
|
31
|
-
|
32
|
-
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
33
|
-
spec.libs << "lib" << "spec"
|
34
|
-
spec.pattern = "spec/**/*_spec.rb"
|
35
|
-
spec.spec_opts = ["--options", "spec/spec.opts"]
|
36
|
-
spec.rcov = true
|
37
|
-
end
|
38
|
-
|
39
|
-
Rake::RDocTask.new do |rdoc|
|
40
|
-
if File.exist?("VERSION.yml")
|
41
|
-
config = File.read("VERSION")
|
42
|
-
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
43
|
-
else
|
44
|
-
version = ""
|
45
|
-
end
|
46
|
-
rdoc.rdoc_dir = "rdoc"
|
47
|
-
rdoc.title = "mongoid #{version}"
|
48
|
-
rdoc.rdoc_files.include("README*")
|
49
|
-
rdoc.rdoc_files.include("lib/**/*.rb")
|
50
|
-
end
|
51
|
-
|
52
|
-
task :default => ["spec"]
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.0.0.alpha
|
data/caliper.yml
DELETED
@@ -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
|
data/lib/mongoid/commands.rb
DELETED
@@ -1,161 +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
|
-
extend ActiveSupport::Concern
|
16
|
-
module InstanceMethods
|
17
|
-
|
18
|
-
# Delete the +Document+ from the database. This method is an optimized
|
19
|
-
# delete that does not force any callbacks.
|
20
|
-
#
|
21
|
-
# Example:
|
22
|
-
#
|
23
|
-
# <tt>document.delete</tt>
|
24
|
-
#
|
25
|
-
# Returns: true unless an error occurs.
|
26
|
-
def delete
|
27
|
-
Delete.execute(self)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Destroy the +Document+. This will delete the document from the database
|
31
|
-
# and run the before and after destroy callbacks.
|
32
|
-
#
|
33
|
-
# Example:
|
34
|
-
#
|
35
|
-
# <tt>document.destroy</tt>
|
36
|
-
#
|
37
|
-
# Returns: true unless an error occurs.
|
38
|
-
def destroy
|
39
|
-
Destroy.execute(self)
|
40
|
-
end
|
41
|
-
|
42
|
-
# Save the +Document+. If the document is new, then the before and after
|
43
|
-
# create callbacks will get executed as well as the save callbacks.
|
44
|
-
# Otherwise only the save callbacks will run.
|
45
|
-
#
|
46
|
-
# Options:
|
47
|
-
#
|
48
|
-
# validate: Run validations or not. Defaults to true.
|
49
|
-
#
|
50
|
-
# Example:
|
51
|
-
#
|
52
|
-
# <tt>document.save # save with validations</tt>
|
53
|
-
# <tt>document.save(false) # save without validations</tt>
|
54
|
-
#
|
55
|
-
# Returns: true if validation passes, false if not.
|
56
|
-
def save(validate = true)
|
57
|
-
save = lambda { Save.execute(self, validate) }
|
58
|
-
new_record? ? run_callbacks(:create, &save) : save.call
|
59
|
-
end
|
60
|
-
|
61
|
-
# Save the +Document+, dangerously. Before and after save callbacks will
|
62
|
-
# get run. If validation fails an error will get raised.
|
63
|
-
#
|
64
|
-
# Example:
|
65
|
-
#
|
66
|
-
# <tt>document.save!</tt>
|
67
|
-
#
|
68
|
-
# Returns: true if validation passes
|
69
|
-
def save!
|
70
|
-
save(true) || (raise Errors::Validations.new(self.errors))
|
71
|
-
end
|
72
|
-
|
73
|
-
# Update the document attributes and persist the document to the
|
74
|
-
# database. Will delegate to save with all callbacks.
|
75
|
-
#
|
76
|
-
# Example:
|
77
|
-
#
|
78
|
-
# <tt>document.update_attributes(:title => "Test")</tt>
|
79
|
-
def update_attributes(attrs = {})
|
80
|
-
set_attributes(attrs); save
|
81
|
-
end
|
82
|
-
|
83
|
-
# Update the document attributes and persist the document to the
|
84
|
-
# database. Will delegate to save!
|
85
|
-
#
|
86
|
-
# Example:
|
87
|
-
#
|
88
|
-
# <tt>document.update_attributes!(:title => "Test")</tt>
|
89
|
-
def update_attributes!(attrs = {})
|
90
|
-
set_attributes(attrs); save!
|
91
|
-
end
|
92
|
-
|
93
|
-
protected
|
94
|
-
def set_attributes(attrs = {})
|
95
|
-
run_callbacks(:update) { write_attributes(attrs) }
|
96
|
-
end
|
97
|
-
|
98
|
-
end
|
99
|
-
|
100
|
-
module ClassMethods
|
101
|
-
|
102
|
-
# Create a new +Document+. This will instantiate a new document and save
|
103
|
-
# it in a single call. Will always return the document whether save
|
104
|
-
# passed or not.
|
105
|
-
#
|
106
|
-
# Example:
|
107
|
-
#
|
108
|
-
# <tt>Person.create(:title => "Mr")</tt>
|
109
|
-
#
|
110
|
-
# Returns: the +Document+.
|
111
|
-
def create(attributes = {})
|
112
|
-
document = new(attributes)
|
113
|
-
Create.execute(document)
|
114
|
-
document
|
115
|
-
end
|
116
|
-
|
117
|
-
# Create a new +Document+. This will instantiate a new document and save
|
118
|
-
# it in a single call. Will always return the document whether save
|
119
|
-
# passed or not. Will raise an error if validation fails.
|
120
|
-
#
|
121
|
-
# Example:
|
122
|
-
#
|
123
|
-
# <tt>Person.create!(:title => "Mr")</tt>
|
124
|
-
#
|
125
|
-
# Returns: the +Document+.
|
126
|
-
def create!(attributes = {})
|
127
|
-
document = Create.execute(new(attributes), true)
|
128
|
-
raise Errors::Validations.new(document.errors) unless document.errors.empty?
|
129
|
-
document
|
130
|
-
end
|
131
|
-
|
132
|
-
# Delete all documents given the supplied conditions. If no conditions
|
133
|
-
# are passed, the entire collection will be dropped for performance
|
134
|
-
# benefits. Does not fire any callbacks.
|
135
|
-
#
|
136
|
-
# Example:
|
137
|
-
#
|
138
|
-
# <tt>Person.delete_all(:conditions => { :title => "Sir" })</tt>
|
139
|
-
# <tt>Person.delete_all</tt>
|
140
|
-
#
|
141
|
-
# Returns: true or raises an error.
|
142
|
-
def delete_all(conditions = {})
|
143
|
-
DeleteAll.execute(self, conditions)
|
144
|
-
end
|
145
|
-
|
146
|
-
# Delete all documents given the supplied conditions. If no conditions
|
147
|
-
# are passed, the entire collection will be dropped for performance
|
148
|
-
# benefits. Fires the destroy callbacks if conditions were passed.
|
149
|
-
#
|
150
|
-
# Example:
|
151
|
-
#
|
152
|
-
# <tt>Person.destroy_all(:conditions => { :title => "Sir" })</tt>
|
153
|
-
# <tt>Person.destroy_all</tt>
|
154
|
-
#
|
155
|
-
# Returns: true or raises an error.
|
156
|
-
def destroy_all(conditions = {})
|
157
|
-
DestroyAll.execute(self, conditions)
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
@@ -1,19 +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(:create) { Save.execute(doc, validate) }
|
15
|
-
doc
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
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,17 +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(:destroy) { doc.destroyed = true if delete(doc) }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
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
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
module Commands
|
4
|
-
class Save
|
5
|
-
# Performs a save of the supplied +Document+, handling all associated
|
6
|
-
# callbacks and validation.
|
7
|
-
#
|
8
|
-
# Options:
|
9
|
-
#
|
10
|
-
# doc: A +Document+ that is going to be persisted.
|
11
|
-
#
|
12
|
-
# Returns: +true+ if validation passes, +false+ if not.
|
13
|
-
def self.execute(doc, validate = true)
|
14
|
-
return false if validate && !doc.valid?
|
15
|
-
doc.run_callbacks :save do
|
16
|
-
parent = doc._parent
|
17
|
-
doc.new_record = false
|
18
|
-
saved = if parent
|
19
|
-
Save.execute(parent, validate)
|
20
|
-
else
|
21
|
-
doc.collection.save(doc.raw_attributes, :safe => Mongoid.persist_in_safe_mode)
|
22
|
-
end
|
23
|
-
return false unless saved
|
24
|
-
end
|
25
|
-
return true
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|