mongoid 2.0.0.beta.19 → 2.0.0.beta.20
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mongoid/associations.rb +4 -0
- data/lib/mongoid/associations/options.rb +5 -0
- data/lib/mongoid/associations/references_many.rb +11 -7
- data/lib/mongoid/associations/references_many_as_array.rb +2 -2
- data/lib/mongoid/collection.rb +1 -1
- data/lib/mongoid/config.rb +6 -3
- data/lib/mongoid/criterion/complex.rb +13 -0
- data/lib/mongoid/criterion/optional.rb +20 -0
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/extensions.rb +0 -1
- data/lib/mongoid/matchers/default.rb +2 -1
- data/lib/mongoid/validations/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/versioning.rb +8 -2
- data/lib/rails/mongoid.rb +1 -1
- metadata +15 -19
data/lib/mongoid/associations.rb
CHANGED
@@ -193,12 +193,16 @@ module Mongoid # :nodoc:
|
|
193
193
|
# Options:
|
194
194
|
#
|
195
195
|
# name: A +Symbol+ that is the related class name pluralized.
|
196
|
+
# default_order: A +Criteria+ that specifies the default sort order for
|
197
|
+
# this association. (e.g. :position.asc). If an explicit ordering is
|
198
|
+
# specified on a +Criteria+ object, the default order will NOT be used.
|
196
199
|
#
|
197
200
|
# Example:
|
198
201
|
#
|
199
202
|
# class Person
|
200
203
|
# include Mongoid::Document
|
201
204
|
# references_many :posts
|
205
|
+
# references_many :board_games, :default_order => :title.asc
|
202
206
|
# end
|
203
207
|
#
|
204
208
|
def references_many(name, options = {}, &block)
|
@@ -24,10 +24,10 @@ module Mongoid #:nodoc:
|
|
24
24
|
# association, and the attributes will be passed into the constructor.
|
25
25
|
#
|
26
26
|
# Returns the newly created object.
|
27
|
-
def build(attributes = nil)
|
27
|
+
def build(attributes = {},type = nil)
|
28
28
|
load_target
|
29
29
|
name = determine_name
|
30
|
-
object = @klass.instantiate(attributes
|
30
|
+
object = (type || @klass).instantiate(attributes)
|
31
31
|
object.send("#{name}=", @parent)
|
32
32
|
@target << object
|
33
33
|
object
|
@@ -39,16 +39,16 @@ module Mongoid #:nodoc:
|
|
39
39
|
# the new object will then be saved.
|
40
40
|
#
|
41
41
|
# Returns the newly created object.
|
42
|
-
def create(attributes = nil)
|
43
|
-
build(attributes).tap(&:save)
|
42
|
+
def create(attributes = nil,type = nil)
|
43
|
+
build(attributes,type).tap(&:save)
|
44
44
|
end
|
45
45
|
|
46
46
|
# Creates a new Document and adds it to the association collection. If
|
47
47
|
# validation fails an error is raised.
|
48
48
|
#
|
49
49
|
# Returns the newly created object.
|
50
|
-
def create!(attributes = nil)
|
51
|
-
build(attributes).tap(&:save!)
|
50
|
+
def create!(attributes = nil,type = nil)
|
51
|
+
build(attributes,type).tap(&:save!)
|
52
52
|
end
|
53
53
|
|
54
54
|
# Delete all the associated objects.
|
@@ -166,7 +166,11 @@ module Mongoid #:nodoc:
|
|
166
166
|
# An +Array+ of objects if an ActiveRecord association
|
167
167
|
# A +Collection+ if a DataMapper association.
|
168
168
|
def query
|
169
|
-
@query ||= lambda {
|
169
|
+
@query ||= lambda {
|
170
|
+
@klass.all(:conditions => { @foreign_key => @parent.id }).tap do |crit|
|
171
|
+
crit.set_order_by(@options.default_order) if @options.default_order
|
172
|
+
end
|
173
|
+
}
|
170
174
|
end
|
171
175
|
|
172
176
|
# Remove the objects based on conditions.
|
@@ -45,9 +45,9 @@ module Mongoid #:nodoc:
|
|
45
45
|
# association, and the attributes will be passed into the constructor.
|
46
46
|
#
|
47
47
|
# Returns the newly created object.
|
48
|
-
def build(attributes = nil)
|
48
|
+
def build(attributes = {},type=nil)
|
49
49
|
load_target
|
50
|
-
document = @klass.instantiate(attributes
|
50
|
+
document = (type || @klass).instantiate(attributes)
|
51
51
|
push(document); document
|
52
52
|
end
|
53
53
|
|
data/lib/mongoid/collection.rb
CHANGED
@@ -83,7 +83,7 @@ module Mongoid #:nodoc
|
|
83
83
|
#
|
84
84
|
# Options:
|
85
85
|
#
|
86
|
-
# map: The map javascript
|
86
|
+
# map: The map javascript function.
|
87
87
|
# reduce: The reduce javascript function.
|
88
88
|
def map_reduce(map, reduce, options = {})
|
89
89
|
directed(options).map_reduce(map, reduce, options)
|
data/lib/mongoid/config.rb
CHANGED
@@ -103,7 +103,10 @@ module Mongoid #:nodoc
|
|
103
103
|
#
|
104
104
|
# The master +Mongo::DB+
|
105
105
|
def master
|
106
|
-
|
106
|
+
unless @master
|
107
|
+
_master(@settings) if @settings
|
108
|
+
raise Errors::InvalidDatabase.new(nil) unless @master
|
109
|
+
end
|
107
110
|
if @reconnect
|
108
111
|
@reconnect = false
|
109
112
|
reconnect!
|
@@ -142,6 +145,7 @@ module Mongoid #:nodoc
|
|
142
145
|
#
|
143
146
|
# The slave +Mongo::DBs+
|
144
147
|
def slaves
|
148
|
+
_slaves(@settings) unless @slaves || !@settings
|
145
149
|
@slaves
|
146
150
|
end
|
147
151
|
|
@@ -194,8 +198,7 @@ module Mongoid #:nodoc
|
|
194
198
|
settings.except("database", "slaves").each_pair do |name, value|
|
195
199
|
send("#{name}=", value) if respond_to?("#{name}=")
|
196
200
|
end
|
197
|
-
|
198
|
-
_slaves(settings)
|
201
|
+
@settings = settings.dup
|
199
202
|
end
|
200
203
|
|
201
204
|
# Adds a new I18n locale file to the load path
|
@@ -16,6 +16,19 @@ module Mongoid #:nodoc:
|
|
16
16
|
def initialize(opts = {})
|
17
17
|
@key, @operator = opts[:key], opts[:operator]
|
18
18
|
end
|
19
|
+
|
20
|
+
def hash
|
21
|
+
[@key, @operator].hash
|
22
|
+
end
|
23
|
+
|
24
|
+
def eql?(other)
|
25
|
+
self == (other)
|
26
|
+
end
|
27
|
+
|
28
|
+
def ==(other)
|
29
|
+
return false unless other.is_a?(self.class)
|
30
|
+
self.key == other.key && self.operator == other.operator
|
31
|
+
end
|
19
32
|
end
|
20
33
|
end
|
21
34
|
end
|
@@ -3,6 +3,16 @@ module Mongoid #:nodoc:
|
|
3
3
|
module Criterion #:nodoc:
|
4
4
|
module Optional
|
5
5
|
|
6
|
+
def using_default_sort?
|
7
|
+
@use_default_sort = true if @use_default_sort.nil? # TODO: move initialization elsewhere
|
8
|
+
return @use_default_sort
|
9
|
+
end
|
10
|
+
|
11
|
+
def remove_default_sort
|
12
|
+
@options[:sort] = nil if using_default_sort?
|
13
|
+
@use_default_sort = false
|
14
|
+
end
|
15
|
+
|
6
16
|
# Adds fields to be sorted in ascending order. Will add them in the order
|
7
17
|
# they were passed into the method.
|
8
18
|
#
|
@@ -10,6 +20,8 @@ module Mongoid #:nodoc:
|
|
10
20
|
#
|
11
21
|
# <tt>criteria.ascending(:title, :dob)</tt>
|
12
22
|
def ascending(*fields)
|
23
|
+
remove_default_sort
|
24
|
+
|
13
25
|
@options[:sort] = [] unless @options[:sort] || fields.first.nil?
|
14
26
|
fields.flatten.each { |field| @options[:sort] << [ field, :asc ] }
|
15
27
|
self
|
@@ -45,6 +57,8 @@ module Mongoid #:nodoc:
|
|
45
57
|
#
|
46
58
|
# <tt>criteria.descending(:title, :dob)</tt>
|
47
59
|
def descending(*fields)
|
60
|
+
remove_default_sort
|
61
|
+
|
48
62
|
@options[:sort] = [] unless @options[:sort] || fields.first.nil?
|
49
63
|
fields.flatten.each { |field| @options[:sort] << [ field, :desc ] }
|
50
64
|
self
|
@@ -149,6 +163,11 @@ module Mongoid #:nodoc:
|
|
149
163
|
#
|
150
164
|
# Returns: <tt>self</tt>
|
151
165
|
def order_by(*args)
|
166
|
+
remove_default_sort
|
167
|
+
set_order_by(*args)
|
168
|
+
end
|
169
|
+
|
170
|
+
def set_order_by(*args)
|
152
171
|
@options[:sort] = [] unless @options[:sort] || args.first.nil?
|
153
172
|
arguments = args.first
|
154
173
|
case arguments
|
@@ -200,6 +219,7 @@ module Mongoid #:nodoc:
|
|
200
219
|
types = [types] unless types.is_a?(Array)
|
201
220
|
self.in(:_type => types)
|
202
221
|
end
|
222
|
+
|
203
223
|
end
|
204
224
|
end
|
205
225
|
end
|
data/lib/mongoid/document.rb
CHANGED
@@ -94,7 +94,7 @@ module Mongoid #:nodoc:
|
|
94
94
|
# an empty +Hash+.
|
95
95
|
#
|
96
96
|
# If a primary key is defined, the document's id will be set to that key,
|
97
|
-
# otherwise it will be set to a fresh +BSON::
|
97
|
+
# otherwise it will be set to a fresh +BSON::ObjectId+ string.
|
98
98
|
#
|
99
99
|
# Options:
|
100
100
|
#
|
data/lib/mongoid/extensions.rb
CHANGED
@@ -54,7 +54,7 @@ module Mongoid #:nodoc:
|
|
54
54
|
# ensure :case_sensitive is true by default
|
55
55
|
def unique_search_value(value)
|
56
56
|
if options[:case_sensitive] == false
|
57
|
-
value ?
|
57
|
+
value ? Regexp.new("^#{Regexp.escape(value.to_s)}$", Regexp::IGNORECASE) : nil
|
58
58
|
else
|
59
59
|
value
|
60
60
|
end
|
data/lib/mongoid/version.rb
CHANGED
data/lib/mongoid/versioning.rb
CHANGED
@@ -14,6 +14,8 @@ module Mongoid #:nodoc:
|
|
14
14
|
|
15
15
|
module ClassMethods #:nodoc:
|
16
16
|
attr_accessor :version_max
|
17
|
+
|
18
|
+
# the number of max_version should >= 0
|
17
19
|
def max_versions(number)
|
18
20
|
self.version_max = number.to_i
|
19
21
|
end
|
@@ -26,10 +28,14 @@ module Mongoid #:nodoc:
|
|
26
28
|
def revise
|
27
29
|
last_version = self.class.first(:conditions => { :_id => id, :version => version })
|
28
30
|
if last_version
|
31
|
+
old_versions = ( @attributes['versions'].duplicable? ? @attributes['versions'].dup : nil )
|
29
32
|
self.versions << last_version.clone
|
30
|
-
|
33
|
+
if self.class.version_max.present? && ( self.class.version_max >= 0 ) && ( self.versions.length > self.class.version_max )
|
34
|
+
self.versions.shift
|
35
|
+
@attributes['versions'].shift
|
36
|
+
end
|
31
37
|
self.version = (version || 1 ) + 1
|
32
|
-
@modifications["versions"] = [
|
38
|
+
@modifications["versions"] = [ old_versions, @attributes['versions'] ] if @modifications
|
33
39
|
end
|
34
40
|
end
|
35
41
|
end
|
data/lib/rails/mongoid.rb
CHANGED
@@ -7,7 +7,7 @@ module Rails #:nodoc:
|
|
7
7
|
# that indexing and inheritance work in both development and production
|
8
8
|
# with the same results.
|
9
9
|
def load_models(app)
|
10
|
-
app.config.paths
|
10
|
+
app.config.paths['app/models'].each do |path|
|
11
11
|
Dir.glob("#{path}/**/*.rb").sort.each do |file|
|
12
12
|
require_dependency(file)
|
13
13
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 62196427
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
-
|
12
|
-
version: 2.0.0.beta.
|
11
|
+
- 20
|
12
|
+
version: 2.0.0.beta.20
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Durran Jordan
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2010-
|
20
|
+
date: 2010-11-02 00:00:00 -07:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -71,14 +71,13 @@ dependencies:
|
|
71
71
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ~>
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
hash:
|
76
|
+
hash: 13
|
77
77
|
segments:
|
78
78
|
- 1
|
79
|
-
-
|
80
|
-
|
81
|
-
version: 1.0.9
|
79
|
+
- 1
|
80
|
+
version: "1.1"
|
82
81
|
requirement: *id004
|
83
82
|
type: :runtime
|
84
83
|
name: mongo
|
@@ -87,14 +86,13 @@ dependencies:
|
|
87
86
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
88
87
|
none: false
|
89
88
|
requirements:
|
90
|
-
- -
|
89
|
+
- - ~>
|
91
90
|
- !ruby/object:Gem::Version
|
92
|
-
hash:
|
91
|
+
hash: 13
|
93
92
|
segments:
|
94
93
|
- 1
|
95
|
-
-
|
96
|
-
|
97
|
-
version: 1.0.9
|
94
|
+
- 1
|
95
|
+
version: "1.1"
|
98
96
|
requirement: *id005
|
99
97
|
type: :development
|
100
98
|
name: bson_ext
|
@@ -121,14 +119,12 @@ dependencies:
|
|
121
119
|
requirements:
|
122
120
|
- - "="
|
123
121
|
- !ruby/object:Gem::Version
|
124
|
-
hash:
|
122
|
+
hash: 13
|
125
123
|
segments:
|
126
124
|
- 2
|
127
125
|
- 0
|
128
|
-
-
|
129
|
-
|
130
|
-
- 22
|
131
|
-
version: 2.0.0.beta.22
|
126
|
+
- 1
|
127
|
+
version: 2.0.1
|
132
128
|
requirement: *id007
|
133
129
|
type: :development
|
134
130
|
name: rspec
|