mongoid 2.0.0.beta.19 → 2.0.0.beta.20
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/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
|