mongoid 2.0.0.beta.5 → 2.0.0.beta.7
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 +10 -2
- data/lib/mongoid/associations.rb +82 -58
- data/lib/mongoid/associations/embeds_one.rb +6 -6
- data/lib/mongoid/associations/foreign_key.rb +35 -0
- data/lib/mongoid/associations/meta_data.rb +9 -0
- data/lib/mongoid/associations/options.rb +1 -1
- data/lib/mongoid/associations/proxy.rb +9 -0
- data/lib/mongoid/associations/{belongs_to_related.rb → referenced_in.rb} +6 -5
- data/lib/mongoid/associations/{has_many_related.rb → references_many.rb} +69 -26
- data/lib/mongoid/associations/references_many_as_array.rb +78 -0
- data/lib/mongoid/associations/{has_one_related.rb → references_one.rb} +16 -2
- data/lib/mongoid/atomicity.rb +42 -0
- data/lib/mongoid/attributes.rb +148 -146
- data/lib/mongoid/callbacks.rb +5 -1
- data/lib/mongoid/collections.rb +31 -1
- data/lib/mongoid/components.rb +4 -1
- data/lib/mongoid/config.rb +2 -1
- data/lib/mongoid/criteria.rb +9 -0
- data/lib/mongoid/dirty.rb +211 -212
- data/lib/mongoid/document.rb +126 -185
- data/lib/mongoid/extensions.rb +5 -0
- data/lib/mongoid/extensions/array/conversions.rb +3 -5
- data/lib/mongoid/extensions/hash/conversions.rb +19 -22
- data/lib/mongoid/extensions/object/conversions.rb +3 -5
- data/lib/mongoid/extensions/set/conversions.rb +20 -0
- data/lib/mongoid/field.rb +11 -0
- data/lib/mongoid/finders.rb +8 -0
- data/lib/mongoid/hierarchy.rb +76 -0
- data/lib/mongoid/identity.rb +37 -29
- data/lib/mongoid/paths.rb +46 -47
- data/lib/mongoid/persistence.rb +111 -113
- data/lib/mongoid/persistence/insert.rb +1 -1
- data/lib/mongoid/persistence/insert_embedded.rb +10 -5
- data/lib/mongoid/persistence/remove_all.rb +3 -2
- data/lib/mongoid/persistence/update.rb +8 -3
- data/lib/mongoid/railtie.rb +3 -0
- data/lib/mongoid/railties/database.rake +33 -18
- data/lib/mongoid/timestamps.rb +9 -12
- data/lib/mongoid/validations/uniqueness.rb +16 -4
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/versioning.rb +10 -11
- data/lib/rails/generators/mongoid/config/config_generator.rb +0 -16
- metadata +64 -24
@@ -22,7 +22,7 @@ module Mongoid #:nodoc:
|
|
22
22
|
#
|
23
23
|
# The +Document+, whether the insert succeeded or not.
|
24
24
|
def persist
|
25
|
-
return @document if @validate &&
|
25
|
+
return @document if @validate && @document.invalid?(:create)
|
26
26
|
@document.run_callbacks(:create) do
|
27
27
|
@document.run_callbacks(:save) do
|
28
28
|
if insert
|
@@ -24,12 +24,17 @@ module Mongoid #:nodoc:
|
|
24
24
|
#
|
25
25
|
# The +Document+, whether the insert succeeded or not.
|
26
26
|
def persist
|
27
|
+
return @document if @validate && @document.invalid?(:create)
|
27
28
|
parent = @document._parent
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
@document.run_callbacks(:create) do
|
30
|
+
@document.run_callbacks(:save) do
|
31
|
+
if parent.new_record?
|
32
|
+
parent.insert
|
33
|
+
else
|
34
|
+
update = { @document._inserter => { @document._position => @document.raw_attributes } }
|
35
|
+
@collection.update(parent._selector, update, @options.merge(:multi => false))
|
36
|
+
end
|
37
|
+
end
|
33
38
|
end
|
34
39
|
@document.new_record = false; @document
|
35
40
|
end
|
@@ -28,8 +28,9 @@ module Mongoid #:nodoc:
|
|
28
28
|
protected
|
29
29
|
# Remove the document from the database.
|
30
30
|
def remove
|
31
|
-
|
32
|
-
@collection.
|
31
|
+
selector = (@klass.hereditary ? @selector.merge(:_type => @klass.name) : @selector)
|
32
|
+
count = @collection.find(selector).count
|
33
|
+
@collection.remove(selector, @options)
|
33
34
|
count
|
34
35
|
end
|
35
36
|
end
|
@@ -39,11 +39,15 @@ module Mongoid #:nodoc:
|
|
39
39
|
#
|
40
40
|
# +true+ or +false+, depending on validation.
|
41
41
|
def persist
|
42
|
-
return false if validate &&
|
42
|
+
return false if validate && @document.invalid?(:update)
|
43
43
|
@document.run_callbacks(:save) do
|
44
44
|
@document.run_callbacks(:update) do
|
45
45
|
if update
|
46
46
|
@document.move_changes
|
47
|
+
@document._children.each do |child|
|
48
|
+
child.move_changes
|
49
|
+
child.new_record = false if child.new_record?
|
50
|
+
end
|
47
51
|
else
|
48
52
|
return false
|
49
53
|
end
|
@@ -54,8 +58,9 @@ module Mongoid #:nodoc:
|
|
54
58
|
protected
|
55
59
|
# Update the document in the database atomically.
|
56
60
|
def update
|
57
|
-
|
58
|
-
|
61
|
+
updates = @document._updates
|
62
|
+
unless updates.empty?
|
63
|
+
@collection.update(@document._selector, updates, @options.merge(:multi => false))
|
59
64
|
end; true
|
60
65
|
end
|
61
66
|
end
|
data/lib/mongoid/railtie.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "rails"
|
1
2
|
module Rails #:nodoc:
|
2
3
|
module Mongoid #:nodoc:
|
3
4
|
class Railtie < Rails::Railtie #:nodoc:
|
@@ -5,6 +6,8 @@ module Rails #:nodoc:
|
|
5
6
|
# do we want a custom log subscriber for mongoid?
|
6
7
|
# log_subscriber :mongoid, ::Mongoid::Railties::LogSubscriber.new
|
7
8
|
|
9
|
+
config.generators.orm :mongoid, :migration => false
|
10
|
+
|
8
11
|
rake_tasks do
|
9
12
|
load "mongoid/railties/database.rake"
|
10
13
|
end
|
@@ -1,36 +1,51 @@
|
|
1
1
|
namespace :db do
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
if not Rake::Task.task_defined?("db:drop")
|
4
|
+
desc 'Drops all the collections for the database for the current Rails.env'
|
5
|
+
task :drop => :environment do
|
6
|
+
Mongoid.master.collections.each{|col| col.drop unless col.name == 'system.users' || col.name == "system.indexes" }
|
7
|
+
end
|
6
8
|
end
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
if not Rake::Task.task_defined?("db:seed")
|
11
|
+
# if another ORM has defined db:seed, don't run it twice.
|
12
|
+
desc 'Load the seed data from db/seeds.rb'
|
13
|
+
task :seed => :environment do
|
14
|
+
seed_file = File.join(Rails.root, 'db', 'seeds.rb')
|
15
|
+
load(seed_file) if File.exist?(seed_file)
|
16
|
+
end
|
12
17
|
end
|
13
18
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
task :reseed => [ 'db:drop', 'db:seed' ]
|
19
|
+
if not Rake::Task.task_defined?("db:setup")
|
20
|
+
desc 'Create the database, and initialize with the seed data'
|
21
|
+
task :setup => [ 'db:create', 'db:seed' ]
|
22
|
+
end
|
19
23
|
|
20
|
-
|
21
|
-
|
24
|
+
if not Rake::Task.task_defined?("db:reseed")
|
25
|
+
desc 'Delete data and seed'
|
26
|
+
task :reseed => [ 'db:drop', 'db:seed' ]
|
22
27
|
end
|
23
28
|
|
24
|
-
|
25
|
-
|
29
|
+
if not Rake::Task.task_defined?("db:create")
|
30
|
+
task :create => :environment do
|
31
|
+
# noop
|
32
|
+
end
|
26
33
|
end
|
27
34
|
|
28
|
-
|
29
|
-
task :
|
35
|
+
if not Rake::Task.task_defined?("db:migrate")
|
36
|
+
task :migrate => :environment do
|
30
37
|
# noop
|
31
38
|
end
|
32
39
|
end
|
33
40
|
|
41
|
+
if not Rake::Task.task_defined?("db:schema:load")
|
42
|
+
namespace :schema do
|
43
|
+
task :load do
|
44
|
+
# noop
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
34
49
|
########
|
35
50
|
# TODO: lots more useful db tasks can be added here. stuff like copyDatabase, etc
|
36
51
|
########
|
data/lib/mongoid/timestamps.rb
CHANGED
@@ -9,19 +9,16 @@ module Mongoid #:nodoc:
|
|
9
9
|
set_callback :save, :before, :set_updated_at
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
self.created_at = Time.now.utc if !created_at
|
18
|
-
end
|
12
|
+
# Update the created_at field on the Document to the current time. This is
|
13
|
+
# only called on create.
|
14
|
+
def set_created_at
|
15
|
+
self.created_at = Time.now.utc if !created_at
|
16
|
+
end
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
18
|
+
# Update the updated_at field on the Document to the current time.
|
19
|
+
# This is only called on create and on save.
|
20
|
+
def set_updated_at
|
21
|
+
self.updated_at = Time.now.utc
|
25
22
|
end
|
26
23
|
end
|
27
24
|
end
|
@@ -13,11 +13,23 @@ module Mongoid #:nodoc:
|
|
13
13
|
# validates_uniqueness_of :title
|
14
14
|
# end
|
15
15
|
class UniquenessValidator < ActiveModel::EachValidator
|
16
|
+
# Unfortunately, we have to tie Uniqueness validators to a class.
|
17
|
+
def setup(klass)
|
18
|
+
@klass = klass
|
19
|
+
end
|
20
|
+
|
16
21
|
def validate_each(document, attribute, value)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
criteria = @klass.where(attribute => value)
|
23
|
+
|
24
|
+
Array.wrap(options[:scope]).each do |item|
|
25
|
+
criteria = criteria.where(item => document.attributes[item])
|
26
|
+
end
|
27
|
+
|
28
|
+
unless document.new_record?
|
29
|
+
criteria = criteria.where(:_id => {'$ne' => document._id})
|
30
|
+
end
|
31
|
+
|
32
|
+
if criteria.exists?
|
21
33
|
document.errors.add(attribute, :taken, :default => options[:message], :value => value)
|
22
34
|
end
|
23
35
|
end
|
data/lib/mongoid/version.rb
CHANGED
data/lib/mongoid/versioning.rb
CHANGED
@@ -10,17 +10,16 @@ module Mongoid #:nodoc:
|
|
10
10
|
embeds_many :versions, :class_name => self.name
|
11
11
|
set_callback :save, :before, :revise
|
12
12
|
end
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
13
|
+
|
14
|
+
# Create a new version of the +Document+. This will load the previous
|
15
|
+
# document from the database and set it as the next version before saving
|
16
|
+
# the current document. It then increments the version number.
|
17
|
+
def revise
|
18
|
+
last_version = self.class.first(:conditions => { :_id => id, :version => version })
|
19
|
+
if last_version
|
20
|
+
self.versions << last_version.clone
|
21
|
+
self.version = version + 1
|
22
|
+
@modifications["versions"] = [ nil, @attributes["versions"] ] if @modifications
|
24
23
|
end
|
25
24
|
end
|
26
25
|
end
|
@@ -20,22 +20,6 @@ module Mongoid
|
|
20
20
|
template 'mongoid.yml', File.join('config', "mongoid.yml")
|
21
21
|
end
|
22
22
|
|
23
|
-
def inject_mongoid_into_application
|
24
|
-
config_application_path = File.join("config", "application.rb")
|
25
|
-
config_contents = File.read(config_application_path)
|
26
|
-
|
27
|
-
mongoid_require = "\n\nrequire 'mongoid/railtie'"
|
28
|
-
|
29
|
-
# check to see if its already been included
|
30
|
-
return if config_contents.include?(mongoid_require)
|
31
|
-
|
32
|
-
if config_contents.include?("require 'rails/all'")
|
33
|
-
inject_into_file config_application_path, mongoid_require, :after => "require 'rails/all'"
|
34
|
-
elsif config_contents.include?("require \"action_controller/railtie\"")
|
35
|
-
inject_into_file config_application_path, mongoid_require, :after => "require \"action_controller/railtie\""
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
23
|
end
|
40
24
|
end
|
41
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 62196461
|
4
5
|
prerelease: true
|
5
6
|
segments:
|
6
7
|
- 2
|
7
8
|
- 0
|
8
9
|
- 0
|
9
10
|
- beta
|
10
|
-
-
|
11
|
-
version: 2.0.0.beta.
|
11
|
+
- 7
|
12
|
+
version: 2.0.0.beta.7
|
12
13
|
platform: ruby
|
13
14
|
authors:
|
14
15
|
- Durran Jordan
|
@@ -16,94 +17,124 @@ autorequire:
|
|
16
17
|
bindir: bin
|
17
18
|
cert_chain: []
|
18
19
|
|
19
|
-
date: 2010-
|
20
|
+
date: 2010-07-26 00:00:00 -04:00
|
20
21
|
default_executable:
|
21
22
|
dependencies:
|
22
23
|
- !ruby/object:Gem::Dependency
|
23
24
|
name: activemodel
|
24
25
|
prerelease: false
|
25
26
|
requirement: &id001 !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
26
28
|
requirements:
|
27
|
-
- -
|
29
|
+
- - ~>
|
28
30
|
- !ruby/object:Gem::Version
|
31
|
+
hash: 31098225
|
29
32
|
segments:
|
30
33
|
- 3
|
31
34
|
- 0
|
32
35
|
- 0
|
33
|
-
-
|
34
|
-
version: 3.0.0.
|
36
|
+
- beta
|
37
|
+
version: 3.0.0.beta
|
35
38
|
type: :runtime
|
36
39
|
version_requirements: *id001
|
37
40
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
41
|
+
name: tzinfo
|
39
42
|
prerelease: false
|
40
43
|
requirement: &id002 !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
41
45
|
requirements:
|
42
|
-
- -
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
hash: 63
|
49
|
+
segments:
|
50
|
+
- 0
|
51
|
+
- 3
|
52
|
+
- 22
|
53
|
+
version: 0.3.22
|
54
|
+
type: :runtime
|
55
|
+
version_requirements: *id002
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: will_paginate
|
58
|
+
prerelease: false
|
59
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ~>
|
43
63
|
- !ruby/object:Gem::Version
|
64
|
+
hash: 961915916
|
44
65
|
segments:
|
45
66
|
- 3
|
46
67
|
- 0
|
47
68
|
- pre
|
48
69
|
version: 3.0.pre
|
49
70
|
type: :runtime
|
50
|
-
version_requirements: *
|
71
|
+
version_requirements: *id003
|
51
72
|
- !ruby/object:Gem::Dependency
|
52
73
|
name: mongo
|
53
74
|
prerelease: false
|
54
|
-
requirement: &
|
75
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
55
77
|
requirements:
|
56
78
|
- - ~>
|
57
79
|
- !ruby/object:Gem::Version
|
80
|
+
hash: 21
|
58
81
|
segments:
|
59
82
|
- 1
|
60
83
|
- 0
|
61
84
|
- 1
|
62
85
|
version: 1.0.1
|
63
86
|
type: :runtime
|
64
|
-
version_requirements: *
|
87
|
+
version_requirements: *id004
|
65
88
|
- !ruby/object:Gem::Dependency
|
66
89
|
name: bson
|
67
90
|
prerelease: false
|
68
|
-
requirement: &
|
91
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
69
93
|
requirements:
|
70
94
|
- - ~>
|
71
95
|
- !ruby/object:Gem::Version
|
96
|
+
hash: 21
|
72
97
|
segments:
|
73
98
|
- 1
|
74
99
|
- 0
|
75
100
|
- 1
|
76
101
|
version: 1.0.1
|
77
102
|
type: :runtime
|
78
|
-
version_requirements: *
|
103
|
+
version_requirements: *id005
|
79
104
|
- !ruby/object:Gem::Dependency
|
80
105
|
name: rspec
|
81
106
|
prerelease: false
|
82
|
-
requirement: &
|
107
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
83
109
|
requirements:
|
84
110
|
- - "="
|
85
111
|
- !ruby/object:Gem::Version
|
112
|
+
hash: 62196475
|
86
113
|
segments:
|
87
|
-
-
|
88
|
-
-
|
114
|
+
- 2
|
115
|
+
- 0
|
89
116
|
- 0
|
90
|
-
|
117
|
+
- beta
|
118
|
+
- 12
|
119
|
+
version: 2.0.0.beta.12
|
91
120
|
type: :development
|
92
|
-
version_requirements: *
|
121
|
+
version_requirements: *id006
|
93
122
|
- !ruby/object:Gem::Dependency
|
94
123
|
name: mocha
|
95
124
|
prerelease: false
|
96
|
-
requirement: &
|
125
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
97
127
|
requirements:
|
98
128
|
- - "="
|
99
129
|
- !ruby/object:Gem::Version
|
130
|
+
hash: 43
|
100
131
|
segments:
|
101
132
|
- 0
|
102
133
|
- 9
|
103
134
|
- 8
|
104
135
|
version: 0.9.8
|
105
136
|
type: :development
|
106
|
-
version_requirements: *
|
137
|
+
version_requirements: *id007
|
107
138
|
description: Mongoid is an ODM (Object Document Mapper) Framework for MongoDB, written in Ruby.
|
108
139
|
email:
|
109
140
|
- durran@gmail.com
|
@@ -114,16 +145,19 @@ extensions: []
|
|
114
145
|
extra_rdoc_files: []
|
115
146
|
|
116
147
|
files:
|
117
|
-
- lib/mongoid/associations/belongs_to_related.rb
|
118
148
|
- lib/mongoid/associations/embedded_in.rb
|
119
149
|
- lib/mongoid/associations/embeds_many.rb
|
120
150
|
- lib/mongoid/associations/embeds_one.rb
|
121
|
-
- lib/mongoid/associations/
|
122
|
-
- lib/mongoid/associations/has_one_related.rb
|
151
|
+
- lib/mongoid/associations/foreign_key.rb
|
123
152
|
- lib/mongoid/associations/meta_data.rb
|
124
153
|
- lib/mongoid/associations/options.rb
|
125
154
|
- lib/mongoid/associations/proxy.rb
|
155
|
+
- lib/mongoid/associations/referenced_in.rb
|
156
|
+
- lib/mongoid/associations/references_many.rb
|
157
|
+
- lib/mongoid/associations/references_many_as_array.rb
|
158
|
+
- lib/mongoid/associations/references_one.rb
|
126
159
|
- lib/mongoid/associations.rb
|
160
|
+
- lib/mongoid/atomicity.rb
|
127
161
|
- lib/mongoid/attributes.rb
|
128
162
|
- lib/mongoid/callbacks.rb
|
129
163
|
- lib/mongoid/collection.rb
|
@@ -170,6 +204,7 @@ files:
|
|
170
204
|
- lib/mongoid/extensions/object/conversions.rb
|
171
205
|
- lib/mongoid/extensions/objectid/conversions.rb
|
172
206
|
- lib/mongoid/extensions/proc/scoping.rb
|
207
|
+
- lib/mongoid/extensions/set/conversions.rb
|
173
208
|
- lib/mongoid/extensions/string/conversions.rb
|
174
209
|
- lib/mongoid/extensions/string/inflections.rb
|
175
210
|
- lib/mongoid/extensions/symbol/inflections.rb
|
@@ -180,6 +215,7 @@ files:
|
|
180
215
|
- lib/mongoid/field.rb
|
181
216
|
- lib/mongoid/fields.rb
|
182
217
|
- lib/mongoid/finders.rb
|
218
|
+
- lib/mongoid/hierarchy.rb
|
183
219
|
- lib/mongoid/identity.rb
|
184
220
|
- lib/mongoid/indexes.rb
|
185
221
|
- lib/mongoid/javascript/functions.yml
|
@@ -237,16 +273,20 @@ rdoc_options: []
|
|
237
273
|
require_paths:
|
238
274
|
- lib
|
239
275
|
required_ruby_version: !ruby/object:Gem::Requirement
|
276
|
+
none: false
|
240
277
|
requirements:
|
241
278
|
- - ">="
|
242
279
|
- !ruby/object:Gem::Version
|
280
|
+
hash: 3
|
243
281
|
segments:
|
244
282
|
- 0
|
245
283
|
version: "0"
|
246
284
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
285
|
+
none: false
|
247
286
|
requirements:
|
248
287
|
- - ">="
|
249
288
|
- !ruby/object:Gem::Version
|
289
|
+
hash: 23
|
250
290
|
segments:
|
251
291
|
- 1
|
252
292
|
- 3
|
@@ -255,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
255
295
|
requirements: []
|
256
296
|
|
257
297
|
rubyforge_project: mongoid
|
258
|
-
rubygems_version: 1.3.
|
298
|
+
rubygems_version: 1.3.7
|
259
299
|
signing_key:
|
260
300
|
specification_version: 3
|
261
301
|
summary: Elegent Persistance in Ruby for MongoDB.
|