mongoid 2.4.3 → 2.4.4
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/CHANGELOG.md +33 -1
- data/lib/mongoid/collections/retry.rb +1 -1
- data/lib/mongoid/contexts/mongo.rb +37 -9
- data/lib/mongoid/criteria.rb +1 -0
- data/lib/mongoid/criterion/inclusion.rb +1 -1
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +1 -0
- data/lib/mongoid/fields/internal/foreign_keys/array.rb +4 -0
- data/lib/mongoid/fields/mappings.rb +14 -13
- data/lib/mongoid/fields/serializable.rb +41 -3
- data/lib/mongoid/relations/bindings/referenced/in.rb +23 -3
- data/lib/mongoid/relations/embedded/many.rb +1 -0
- data/lib/mongoid/threaded.rb +26 -0
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/validations/uniqueness.rb +77 -27
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/versioning.rb +1 -1
- data/lib/rails/mongoid.rb +10 -3
- metadata +21 -21
data/CHANGELOG.md
CHANGED
@@ -3,7 +3,39 @@
|
|
3
3
|
For instructions on upgrading to newer versions, visit
|
4
4
|
[mongoid.org](http://mongoid.org/docs/upgrading.html).
|
5
5
|
|
6
|
-
## 2.4.
|
6
|
+
## 2.4.4 (branch: 2.4.0-stable)
|
7
|
+
|
8
|
+
### Resolved Issues
|
9
|
+
|
10
|
+
* \#1705 Allow changing the order of many to many foreign keys.
|
11
|
+
|
12
|
+
* \#1703 Updated at is now versioned again. (Lucas Souza)
|
13
|
+
|
14
|
+
* \#1686 Set the base metadata on unbind as well as bind for belongs to
|
15
|
+
relations.
|
16
|
+
|
17
|
+
* \#1681 Attempt to create indexes for models without namespacing if the
|
18
|
+
namespace does not exist for the subdirectory.
|
19
|
+
|
20
|
+
* \#1676 Allow eager loading to work as a default scope.
|
21
|
+
|
22
|
+
* \#1665/#1672 Expand complex criteria in nested criteria selectors, like
|
23
|
+
#matches. (Hans Hasselberg)
|
24
|
+
|
25
|
+
* \#1668 Ensure Mongoid logger exists before calling warn. (Rémy Coutable)
|
26
|
+
|
27
|
+
* \#1661 Ensure uniqueness validation works on cloned documents.
|
28
|
+
|
29
|
+
* \#1659 Clear delayed atomic sets when resetting the same embedded relation.
|
30
|
+
|
31
|
+
* \#1656/#1657 Don't hit database for uniqueness validation if BOTH scope
|
32
|
+
and attribute hasn't changed. (priyaaank)
|
33
|
+
|
34
|
+
* \#1205/#1642 When limiting fields returned from the database via
|
35
|
+
`Criteria#only` and `Criteria#without` and then subsequently saving
|
36
|
+
the document. Default values no longer override excluded fields.
|
37
|
+
|
38
|
+
## 2.4.3
|
7
39
|
|
8
40
|
### Resolved Issues
|
9
41
|
|
@@ -51,7 +51,7 @@ module Mongoid #:nodoc:
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def log_retry(retry_number, ex)
|
54
|
-
Mongoid.logger.warn "A #{ex.class.name} was raised. Retry attempt ##{retry_number}."
|
54
|
+
Mongoid.logger.warn "A #{ex.class.name} was raised. Retry attempt ##{retry_number}." if Mongoid.logger
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
@@ -166,12 +166,14 @@ module Mongoid #:nodoc:
|
|
166
166
|
# @return [ Cursor ] An enumerable +Cursor+ of results.
|
167
167
|
def execute
|
168
168
|
collection, options = klass.collection, process_options
|
169
|
-
|
170
|
-
|
171
|
-
|
169
|
+
selecting do
|
170
|
+
if criteria.inclusions.any?
|
171
|
+
collection.find(selector, options).entries.tap do |docs|
|
172
|
+
eager_load(docs)
|
173
|
+
end
|
174
|
+
else
|
175
|
+
collection.find(selector, options)
|
172
176
|
end
|
173
|
-
else
|
174
|
-
collection.find(selector, options)
|
175
177
|
end
|
176
178
|
end
|
177
179
|
|
@@ -202,8 +204,10 @@ module Mongoid #:nodoc:
|
|
202
204
|
def first
|
203
205
|
attributes = klass.collection.find_one(selector, options_with_default_sorting)
|
204
206
|
return nil unless attributes
|
205
|
-
|
206
|
-
|
207
|
+
selecting do
|
208
|
+
Mongoid::Factory.from_db(klass, attributes).tap do |doc|
|
209
|
+
eager_load([ doc ]) if criteria.inclusions.any?
|
210
|
+
end
|
207
211
|
end
|
208
212
|
end
|
209
213
|
alias :one :first
|
@@ -271,8 +275,10 @@ module Mongoid #:nodoc:
|
|
271
275
|
opts[:sort] = opts[:sort].map{ |option| [ option[0], option[1].invert ] }.uniq
|
272
276
|
attributes = klass.collection.find_one(selector, opts)
|
273
277
|
return nil unless attributes
|
274
|
-
|
275
|
-
|
278
|
+
selecting do
|
279
|
+
Mongoid::Factory.from_db(klass, attributes).tap do |doc|
|
280
|
+
eager_load([ doc ]) if criteria.inclusions.any?
|
281
|
+
end
|
276
282
|
end
|
277
283
|
end
|
278
284
|
|
@@ -452,6 +458,28 @@ module Mongoid #:nodoc:
|
|
452
458
|
end
|
453
459
|
options.dup
|
454
460
|
end
|
461
|
+
|
462
|
+
# If we are limiting results, we need to set the field limitations on a
|
463
|
+
# thread local to avoid overriding the default values.
|
464
|
+
#
|
465
|
+
# @example Execute with selection.
|
466
|
+
# context.selecting do
|
467
|
+
# collection.find
|
468
|
+
# end
|
469
|
+
#
|
470
|
+
# @return [ Object ] The yielded value.
|
471
|
+
#
|
472
|
+
# @since 2.4.4
|
473
|
+
def selecting
|
474
|
+
begin
|
475
|
+
unless options[:fields].blank?
|
476
|
+
Threaded.selection = options[:fields]
|
477
|
+
end
|
478
|
+
yield
|
479
|
+
ensure
|
480
|
+
Threaded.selection = nil
|
481
|
+
end
|
482
|
+
end
|
455
483
|
end
|
456
484
|
end
|
457
485
|
end
|
data/lib/mongoid/criteria.rb
CHANGED
@@ -262,6 +262,7 @@ module Mongoid #:nodoc:
|
|
262
262
|
scope_options = @options.dup
|
263
263
|
sorting = scope_options.delete(:sort)
|
264
264
|
scope_options[:order_by] = sorting if sorting
|
265
|
+
scope_options[:includes] = inclusions.map(&:name) if inclusions.any?
|
265
266
|
{ :where => @selector }.merge(scope_options)
|
266
267
|
end
|
267
268
|
alias :to_ary :to_a
|
@@ -13,6 +13,8 @@ module Mongoid #:nodoc:
|
|
13
13
|
# @example Add the atomic changes.
|
14
14
|
# field.add_atomic_changes(doc, "key", {}, [], [])
|
15
15
|
#
|
16
|
+
# @todo: Durran: Refactor, big time.
|
17
|
+
#
|
16
18
|
# @param [ Document ] document The document to add to.
|
17
19
|
# @param [ String ] name The name of the field.
|
18
20
|
# @param [ String ] key The atomic location of the field.
|
@@ -32,6 +34,8 @@ module Mongoid #:nodoc:
|
|
32
34
|
document.atomic_array_add_to_sets[key] = pushes
|
33
35
|
elsif !pulls.empty?
|
34
36
|
document.atomic_array_pulls[key] = pulls
|
37
|
+
elsif new != old
|
38
|
+
mods[key] = document.attributes[name]
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|
@@ -2,13 +2,14 @@
|
|
2
2
|
module Mongoid #:nodoc
|
3
3
|
module Fields #:nodoc:
|
4
4
|
|
5
|
+
module Internal #:nodoc:
|
6
|
+
end
|
7
|
+
|
5
8
|
# This module maps classes used in field type definitions to the custom
|
6
9
|
# definable field in Mongoid.
|
7
10
|
module Mappings
|
8
11
|
extend self
|
9
12
|
|
10
|
-
MODULE = "Mongoid::Fields::Internal"
|
11
|
-
|
12
13
|
# Get the custom field type for the provided class used in the field
|
13
14
|
# definition.
|
14
15
|
#
|
@@ -21,21 +22,21 @@ module Mongoid #:nodoc
|
|
21
22
|
#
|
22
23
|
# @since 2.1.0
|
23
24
|
def for(klass, foreign_key = false)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
modules = "
|
30
|
-
|
31
|
-
|
25
|
+
if klass.nil?
|
26
|
+
Internal::Object
|
27
|
+
elsif foreign_key
|
28
|
+
Internal::ForeignKeys.const_get(klass.to_s)
|
29
|
+
else
|
30
|
+
modules = "BSON::|ActiveSupport::"
|
31
|
+
match = klass.to_s.match(Regexp.new("^(#{ modules })?(\\w+)$"))
|
32
|
+
if match and Internal.const_defined?(match[2])
|
33
|
+
Internal.const_get(match[2])
|
32
34
|
else
|
33
|
-
klass
|
35
|
+
klass
|
34
36
|
end
|
35
|
-
rescue NameError
|
36
|
-
klass
|
37
37
|
end
|
38
38
|
end
|
39
|
+
|
39
40
|
end
|
40
41
|
end
|
41
42
|
end
|
@@ -74,10 +74,10 @@ module Mongoid #:nodoc:
|
|
74
74
|
#
|
75
75
|
# @since 2.1.8
|
76
76
|
def eval_default(doc)
|
77
|
-
if
|
78
|
-
|
77
|
+
if fields = Threaded.selection
|
78
|
+
evaluated_default(doc) if included?(fields)
|
79
79
|
else
|
80
|
-
|
80
|
+
evaluated_default(doc)
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
@@ -188,6 +188,44 @@ module Mongoid #:nodoc:
|
|
188
188
|
@versioned ||= (options[:versioned].nil? ? true : options[:versioned])
|
189
189
|
end
|
190
190
|
|
191
|
+
private
|
192
|
+
|
193
|
+
# Is the field included in the fields that were returned from the
|
194
|
+
# database? We can apply the default if:
|
195
|
+
# 1. The field is included in an only limitation (field: 1)
|
196
|
+
# 2. The field is not excluded in a without limitation (field: 0)
|
197
|
+
#
|
198
|
+
# @example Is the field included?
|
199
|
+
# field.included?(fields)
|
200
|
+
#
|
201
|
+
# @param [ Hash ] fields The field limitations.
|
202
|
+
#
|
203
|
+
# @return [ true, false ] If the field was included.
|
204
|
+
#
|
205
|
+
# @since 2.4.4
|
206
|
+
def included?(fields)
|
207
|
+
(fields.values.first == 1 && fields[name.to_sym] == 1) ||
|
208
|
+
(fields.values.first == 0 && !fields.has_key?(name.to_sym))
|
209
|
+
end
|
210
|
+
|
211
|
+
# Get the evaluated default.
|
212
|
+
#
|
213
|
+
# @example Get the evaluated default.
|
214
|
+
# field.evaluated_default.
|
215
|
+
#
|
216
|
+
# @param [ Document ] doc The doc being applied to.
|
217
|
+
#
|
218
|
+
# @return [ Object ] The default value.
|
219
|
+
#
|
220
|
+
# @since 2.4.4
|
221
|
+
def evaluated_default(doc)
|
222
|
+
if default_val.respond_to?(:call)
|
223
|
+
serialize(doc.instance_exec(&default_val))
|
224
|
+
else
|
225
|
+
serialize(default_val.duplicable? ? default_val.dup : default_val)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
191
229
|
module ClassMethods #:nodoc:
|
192
230
|
|
193
231
|
# Create the new field with a name and optional additional options.
|
@@ -27,9 +27,7 @@ module Mongoid # :nodoc:
|
|
27
27
|
base.you_must(metadata.inverse_type_setter, target.class.model_name)
|
28
28
|
end
|
29
29
|
if inverse
|
30
|
-
|
31
|
-
if inverse_metadata != metadata && !inverse_metadata.nil?
|
32
|
-
base.metadata = inverse_metadata
|
30
|
+
if set_base_metadata
|
33
31
|
if base.referenced_many?
|
34
32
|
target.send(inverse).push(base) unless Mongoid.identity_map_enabled?
|
35
33
|
else
|
@@ -59,6 +57,7 @@ module Mongoid # :nodoc:
|
|
59
57
|
base.you_must(metadata.inverse_type_setter, nil)
|
60
58
|
end
|
61
59
|
if inverse
|
60
|
+
set_base_metadata
|
62
61
|
if base.referenced_many?
|
63
62
|
target.send(inverse).delete(base)
|
64
63
|
else
|
@@ -69,6 +68,27 @@ module Mongoid # :nodoc:
|
|
69
68
|
end
|
70
69
|
end
|
71
70
|
alias :unbind_one :unbind
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
# Ensure that the metadata on the base is correct, for the cases
|
75
|
+
# where we have multiple belongs to definitions and were are setting
|
76
|
+
# different parents in memory in order.
|
77
|
+
#
|
78
|
+
# @api private
|
79
|
+
#
|
80
|
+
# @example Set the base metadata.
|
81
|
+
# binding.set_base_metadata
|
82
|
+
#
|
83
|
+
# @return [ true, false ] If the metadata changed.
|
84
|
+
#
|
85
|
+
# @since 2.4.4
|
86
|
+
def set_base_metadata
|
87
|
+
inverse_metadata = metadata.inverse_metadata(target)
|
88
|
+
if inverse_metadata != metadata && !inverse_metadata.nil?
|
89
|
+
base.metadata = inverse_metadata
|
90
|
+
end
|
91
|
+
end
|
72
92
|
end
|
73
93
|
end
|
74
94
|
end
|
data/lib/mongoid/threaded.rb
CHANGED
@@ -175,6 +175,32 @@ module Mongoid #:nodoc:
|
|
175
175
|
Thread.current[:"[mongoid]:safety-options"] = options
|
176
176
|
end
|
177
177
|
|
178
|
+
# Get the field selection options from the current thread.
|
179
|
+
#
|
180
|
+
# @example Get the field selection options.
|
181
|
+
# Threaded.selection
|
182
|
+
#
|
183
|
+
# @return [ Hash ] The field selection.
|
184
|
+
#
|
185
|
+
# @since 2.4.4
|
186
|
+
def selection
|
187
|
+
Thread.current[:"[mongoid]:selection"]
|
188
|
+
end
|
189
|
+
|
190
|
+
# Set the field selection on the current thread.
|
191
|
+
#
|
192
|
+
# @example Set the field selection.
|
193
|
+
# Threaded.selection = { field: 1 }
|
194
|
+
#
|
195
|
+
# @param [ Hash ] value The current field selection.
|
196
|
+
#
|
197
|
+
# @return [ Hash ] The field selection.
|
198
|
+
#
|
199
|
+
# @since 2.4.4
|
200
|
+
def selection=(value)
|
201
|
+
Thread.current[:"[mongoid]:selection"] = value
|
202
|
+
end
|
203
|
+
|
178
204
|
# Get the mongoid scope stack for chained criteria.
|
179
205
|
#
|
180
206
|
# @example Get the scope stack.
|
@@ -41,32 +41,28 @@ module Mongoid #:nodoc:
|
|
41
41
|
#
|
42
42
|
# @since 1.0.0
|
43
43
|
def validate_each(document, attribute, value)
|
44
|
-
|
44
|
+
attrib, val = to_validate(document, attribute, value)
|
45
|
+
return unless validation_required?(document, attrib)
|
45
46
|
if document.embedded?
|
46
47
|
return if skip_validation?(document)
|
47
48
|
relation = document._parent.send(document.metadata.name)
|
48
|
-
criteria = relation.where(criterion(document,
|
49
|
-
criteria = scope(criteria, document,
|
50
|
-
if
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
57
|
-
else
|
58
|
-
if criteria.exists?
|
59
|
-
document.errors.add(
|
60
|
-
attribute,
|
61
|
-
:taken,
|
62
|
-
options.except(:case_sensitive, :scope).merge(:value => value)
|
63
|
-
)
|
64
|
-
end
|
49
|
+
criteria = relation.where(criterion(document, attrib, val))
|
50
|
+
criteria = scope(criteria, document, attrib)
|
51
|
+
if criteria.count > 1
|
52
|
+
document.errors.add(
|
53
|
+
attrib,
|
54
|
+
:taken,
|
55
|
+
options.except(:case_sensitive, :scope).merge(:val => val)
|
56
|
+
)
|
65
57
|
end
|
66
58
|
else
|
67
|
-
criteria = klass.where(criterion(document,
|
68
|
-
criteria = scope(criteria, document,
|
69
|
-
|
59
|
+
criteria = klass.where(criterion(document, attrib, val))
|
60
|
+
criteria = scope(criteria, document, attrib)
|
61
|
+
if criteria.exists?
|
62
|
+
document.errors.add(
|
63
|
+
attrib, :taken, options.except(:case_sensitive, :scope).merge(:val => val)
|
64
|
+
)
|
65
|
+
end
|
70
66
|
end
|
71
67
|
end
|
72
68
|
|
@@ -98,8 +94,7 @@ module Mongoid #:nodoc:
|
|
98
94
|
# @since 2.3.0
|
99
95
|
def criterion(document, attribute, value)
|
100
96
|
{ attribute => filter(value) }.tap do |selector|
|
101
|
-
if document.persisted?
|
102
|
-
(document.embedded? && (document.primary_key != Array.wrap(attribute)))
|
97
|
+
if document.persisted? && !document.embedded?
|
103
98
|
selector.merge!(:_id => { "$ne" => document.id })
|
104
99
|
end
|
105
100
|
end
|
@@ -131,10 +126,8 @@ module Mongoid #:nodoc:
|
|
131
126
|
#
|
132
127
|
# @since 2.3.0
|
133
128
|
def scope(criteria, document, attribute)
|
134
|
-
|
135
|
-
|
136
|
-
criteria = criteria.where(item => document.attributes[item.to_s])
|
137
|
-
end
|
129
|
+
Array.wrap(options[:scope]).each do |item|
|
130
|
+
criteria = criteria.where(item => document.attributes[item.to_s])
|
138
131
|
end
|
139
132
|
criteria
|
140
133
|
end
|
@@ -152,6 +145,63 @@ module Mongoid #:nodoc:
|
|
152
145
|
def skip_validation?(document)
|
153
146
|
!document._parent || document.embedded_one?
|
154
147
|
end
|
148
|
+
|
149
|
+
# Scope reference has changed?
|
150
|
+
#
|
151
|
+
# @example Has scope reference changed?
|
152
|
+
# validator.scope_value_changed?(doc)
|
153
|
+
#
|
154
|
+
# @param [ Document ] document The embedded document.
|
155
|
+
#
|
156
|
+
# @return [ true, false ] If the scope reference has changed.
|
157
|
+
#
|
158
|
+
# @since
|
159
|
+
def scope_value_changed?(document)
|
160
|
+
Array.wrap(options[:scope]).any? do |item|
|
161
|
+
document.send("attribute_changed?", item.to_s)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
# Get the name of the field and the value to validate. This is for the
|
166
|
+
# case when we validate a relation via the relation name and not the key,
|
167
|
+
# we need to send the key name and value to the db, not the relation
|
168
|
+
# object.
|
169
|
+
#
|
170
|
+
# @example Get the name and key to validate.
|
171
|
+
# validator.to_validate(doc, :parent, Parent.new)
|
172
|
+
#
|
173
|
+
# @param [ Document ] document The doc getting validated.
|
174
|
+
# @param [ Symbol ] attribute The attribute getting validated.
|
175
|
+
# @param [ Object ] value The value of the attribute.
|
176
|
+
#
|
177
|
+
# @return [ Array<Object, Object> ] The field and value.
|
178
|
+
#
|
179
|
+
# @since 2.4.4
|
180
|
+
def to_validate(document, attribute, value)
|
181
|
+
metadata = document.relations[attribute.to_s]
|
182
|
+
if metadata && metadata.stores_foreign_key?
|
183
|
+
[ metadata.foreign_key, value.id ]
|
184
|
+
else
|
185
|
+
[ attribute, value ]
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
# Are we required to validate the document?
|
190
|
+
#
|
191
|
+
# @example Is validation needed?
|
192
|
+
# validator.validation_required?(doc, :field)
|
193
|
+
#
|
194
|
+
# @param [ Document ] document The document getting validated.
|
195
|
+
# @param [ Symbol ] attribute The attribute to validate.
|
196
|
+
#
|
197
|
+
# @return [ true, false ] If we need to validate.
|
198
|
+
#
|
199
|
+
# @since 2.4.4
|
200
|
+
def validation_required?(document, attribute)
|
201
|
+
document.new_record? ||
|
202
|
+
document.send("attribute_changed?", attribute.to_s) ||
|
203
|
+
scope_value_changed?(document)
|
204
|
+
end
|
155
205
|
end
|
156
206
|
end
|
157
207
|
end
|
data/lib/mongoid/version.rb
CHANGED
data/lib/mongoid/versioning.rb
CHANGED
data/lib/rails/mongoid.rb
CHANGED
@@ -18,7 +18,7 @@ module Rails #:nodoc:
|
|
18
18
|
Dir.glob(pattern).each do |file|
|
19
19
|
logger = Logger.new($stdout)
|
20
20
|
begin
|
21
|
-
model = determine_model(file)
|
21
|
+
model = determine_model(file, logger)
|
22
22
|
rescue => e
|
23
23
|
logger.error(%Q{Failed to determine model from #{file}:
|
24
24
|
#{e.class}:#{e.message}
|
@@ -83,10 +83,17 @@ module Rails #:nodoc:
|
|
83
83
|
# @return [ Class ] The model.
|
84
84
|
#
|
85
85
|
# @since 2.1.0
|
86
|
-
def determine_model(file)
|
86
|
+
def determine_model(file, logger)
|
87
87
|
if file =~ /app\/models\/(.*).rb$/
|
88
88
|
model_path = $1.split('/')
|
89
|
-
|
89
|
+
begin
|
90
|
+
parts = model_path.map { |path| path.camelize }
|
91
|
+
name = parts.join("::")
|
92
|
+
klass = name.constantize
|
93
|
+
rescue NameError => e
|
94
|
+
logger.info("Attempted to constantize #{name}, trying without namespacing.")
|
95
|
+
klass = parts.last.constantize
|
96
|
+
end
|
90
97
|
if klass.ancestors.include?(::Mongoid::Document) && !klass.embedded
|
91
98
|
return klass
|
92
99
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-02-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
|
-
requirement: &
|
16
|
+
requirement: &70339260281720 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70339260281720
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: tzinfo
|
27
|
-
requirement: &
|
27
|
+
requirement: &70339260281240 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.3.22
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70339260281240
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mongo
|
38
|
-
requirement: &
|
38
|
+
requirement: &70339260280760 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '1.3'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70339260280760
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rdoc
|
49
|
-
requirement: &
|
49
|
+
requirement: &70339260280280 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 3.5.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70339260280280
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bson_ext
|
60
|
-
requirement: &
|
60
|
+
requirement: &70339260279800 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '1.3'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70339260279800
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mocha
|
71
|
-
requirement: &
|
71
|
+
requirement: &70339260279320 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0.10'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70339260279320
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec
|
82
|
-
requirement: &
|
82
|
+
requirement: &70339260278840 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '2.6'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70339260278840
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: guard-rspec
|
93
|
-
requirement: &
|
93
|
+
requirement: &70339260278360 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0.6'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70339260278360
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: ammeter
|
104
|
-
requirement: &
|
104
|
+
requirement: &70339260277880 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: 0.1.3
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70339260277880
|
113
113
|
description: Mongoid is an ODM (Object Document Mapper) Framework for MongoDB, written
|
114
114
|
in Ruby.
|
115
115
|
email:
|
@@ -414,7 +414,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
414
414
|
version: '0'
|
415
415
|
segments:
|
416
416
|
- 0
|
417
|
-
hash:
|
417
|
+
hash: -632008619262652936
|
418
418
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
419
419
|
none: false
|
420
420
|
requirements:
|