mongoid 2.0.2 → 2.1.0
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/README.rdoc +3 -1
- data/Rakefile +3 -2
- data/lib/config/locales/bg.yml +6 -0
- data/lib/config/locales/de.yml +6 -0
- data/lib/config/locales/en-GB.yml +48 -0
- data/lib/config/locales/en.yml +6 -3
- data/lib/config/locales/es.yml +6 -0
- data/lib/config/locales/fr.yml +6 -0
- data/lib/config/locales/hi.yml +39 -0
- data/lib/config/locales/hu.yml +13 -7
- data/lib/config/locales/id.yml +3 -0
- data/lib/config/locales/it.yml +7 -1
- data/lib/config/locales/ja.yml +4 -1
- data/lib/config/locales/kr.yml +9 -34
- data/lib/config/locales/nl.yml +6 -0
- data/lib/config/locales/pl.yml +6 -0
- data/lib/config/locales/pt-BR.yml +6 -0
- data/lib/config/locales/pt.yml +6 -0
- data/lib/config/locales/ro.yml +6 -0
- data/lib/config/locales/ru.yml +6 -0
- data/lib/config/locales/sv.yml +6 -0
- data/lib/config/locales/vi.yml +3 -0
- data/lib/config/locales/zh-CN.yml +6 -0
- data/lib/mongoid.rb +51 -45
- data/lib/mongoid/atomic.rb +145 -0
- data/lib/mongoid/atomic/modifiers.rb +109 -0
- data/lib/mongoid/atomic/paths.rb +3 -0
- data/lib/mongoid/atomic/paths/embedded.rb +43 -0
- data/lib/mongoid/atomic/paths/embedded/many.rb +44 -0
- data/lib/mongoid/atomic/paths/embedded/one.rb +43 -0
- data/lib/mongoid/atomic/paths/root.rb +40 -0
- data/lib/mongoid/attributes.rb +12 -23
- data/lib/mongoid/attributes/processing.rb +5 -5
- data/lib/mongoid/callbacks.rb +2 -0
- data/lib/mongoid/collection.rb +12 -59
- data/lib/mongoid/collections.rb +23 -20
- data/lib/mongoid/collections/master.rb +6 -4
- data/lib/mongoid/collections/operations.rb +1 -0
- data/lib/mongoid/collections/retry.rb +7 -0
- data/lib/mongoid/components.rb +2 -2
- data/lib/mongoid/config.rb +42 -55
- data/lib/mongoid/config/database.rb +6 -2
- data/lib/mongoid/config/replset_database.rb +7 -3
- data/lib/mongoid/contexts.rb +9 -3
- data/lib/mongoid/contexts/enumerable.rb +7 -3
- data/lib/mongoid/contexts/mongo.rb +139 -101
- data/lib/mongoid/criteria.rb +86 -69
- data/lib/mongoid/criterion/complex.rb +32 -5
- data/lib/mongoid/criterion/inclusion.rb +4 -2
- data/lib/mongoid/criterion/optional.rb +111 -86
- data/lib/mongoid/criterion/selector.rb +8 -4
- data/lib/mongoid/cursor.rb +27 -27
- data/lib/mongoid/dirty.rb +54 -214
- data/lib/mongoid/document.rb +37 -39
- data/lib/mongoid/errors/document_not_found.rb +3 -4
- data/lib/mongoid/errors/invalid_collection.rb +2 -3
- data/lib/mongoid/errors/invalid_database.rb +2 -3
- data/lib/mongoid/errors/invalid_field.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +19 -7
- data/lib/mongoid/errors/invalid_type.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +5 -6
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -3
- data/lib/mongoid/errors/unsupported_version.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -3
- data/lib/mongoid/extensions.rb +8 -62
- data/lib/mongoid/extensions/array/deletion.rb +29 -0
- data/lib/mongoid/extensions/false_class/equality.rb +14 -1
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +21 -10
- data/lib/mongoid/extensions/hash/scoping.rb +14 -1
- data/lib/mongoid/extensions/nil/collectionization.rb +12 -1
- data/lib/mongoid/extensions/object/reflections.rb +33 -2
- data/lib/mongoid/extensions/object_id/conversions.rb +2 -36
- data/lib/mongoid/extensions/proc/scoping.rb +14 -1
- data/lib/mongoid/extensions/string/conversions.rb +4 -16
- data/lib/mongoid/extensions/string/inflections.rb +35 -14
- data/lib/mongoid/extensions/symbol/inflections.rb +38 -12
- data/lib/mongoid/extensions/true_class/equality.rb +14 -1
- data/lib/mongoid/extras.rb +11 -30
- data/lib/mongoid/factory.rb +1 -1
- data/lib/mongoid/fields.rb +121 -29
- data/lib/mongoid/fields/mappings.rb +36 -0
- data/lib/mongoid/fields/serializable.rb +131 -0
- data/lib/mongoid/fields/serializable/array.rb +64 -0
- data/lib/mongoid/fields/serializable/big_decimal.rb +42 -0
- data/lib/mongoid/fields/serializable/bignum.rb +10 -0
- data/lib/mongoid/fields/serializable/binary.rb +11 -0
- data/lib/mongoid/fields/serializable/boolean.rb +44 -0
- data/lib/mongoid/fields/serializable/date.rb +51 -0
- data/lib/mongoid/fields/serializable/date_time.rb +28 -0
- data/lib/mongoid/fields/serializable/fixnum.rb +10 -0
- data/lib/mongoid/fields/serializable/float.rb +33 -0
- data/lib/mongoid/fields/serializable/foreign_keys/array.rb +56 -0
- data/lib/mongoid/fields/serializable/foreign_keys/object.rb +43 -0
- data/lib/mongoid/fields/serializable/hash.rb +25 -0
- data/lib/mongoid/fields/serializable/integer.rb +33 -0
- data/lib/mongoid/fields/serializable/object.rb +11 -0
- data/lib/mongoid/fields/serializable/object_id.rb +32 -0
- data/lib/mongoid/fields/serializable/range.rb +42 -0
- data/lib/mongoid/fields/serializable/set.rb +42 -0
- data/lib/mongoid/fields/serializable/string.rb +28 -0
- data/lib/mongoid/fields/serializable/symbol.rb +28 -0
- data/lib/mongoid/fields/serializable/time.rb +12 -0
- data/lib/mongoid/fields/serializable/time_with_zone.rb +12 -0
- data/lib/mongoid/fields/serializable/timekeeping.rb +102 -0
- data/lib/mongoid/finders.rb +61 -37
- data/lib/mongoid/hierarchy.rb +43 -8
- data/lib/mongoid/identity_map.rb +106 -0
- data/lib/mongoid/indexes.rb +17 -1
- data/lib/mongoid/javascript.rb +2 -3
- data/lib/mongoid/keys.rb +10 -21
- data/lib/mongoid/logger.rb +22 -1
- data/lib/mongoid/matchers/all.rb +10 -0
- data/lib/mongoid/matchers/default.rb +1 -1
- data/lib/mongoid/matchers/exists.rb +10 -0
- data/lib/mongoid/matchers/gt.rb +10 -0
- data/lib/mongoid/matchers/gte.rb +10 -0
- data/lib/mongoid/matchers/in.rb +10 -0
- data/lib/mongoid/matchers/lt.rb +10 -0
- data/lib/mongoid/matchers/lte.rb +10 -0
- data/lib/mongoid/matchers/ne.rb +10 -0
- data/lib/mongoid/matchers/nin.rb +10 -0
- data/lib/mongoid/matchers/or.rb +7 -4
- data/lib/mongoid/matchers/size.rb +10 -0
- data/lib/mongoid/multi_database.rb +26 -6
- data/lib/mongoid/multi_parameter_attributes.rb +40 -17
- data/lib/mongoid/named_scope.rb +1 -2
- data/lib/mongoid/nested_attributes.rb +4 -1
- data/lib/mongoid/observer.rb +108 -5
- data/lib/mongoid/paranoia.rb +26 -26
- data/lib/mongoid/persistence.rb +15 -21
- data/lib/mongoid/persistence/atomic.rb +135 -0
- data/lib/mongoid/persistence/atomic/add_to_set.rb +11 -8
- data/lib/mongoid/persistence/atomic/bit.rb +37 -0
- data/lib/mongoid/persistence/atomic/inc.rb +9 -6
- data/lib/mongoid/persistence/atomic/operation.rb +48 -7
- data/lib/mongoid/persistence/atomic/pop.rb +34 -0
- data/lib/mongoid/persistence/atomic/pull.rb +34 -0
- data/lib/mongoid/persistence/atomic/pull_all.rb +10 -9
- data/lib/mongoid/persistence/atomic/push.rb +8 -5
- data/lib/mongoid/persistence/atomic/push_all.rb +31 -0
- data/lib/mongoid/persistence/atomic/rename.rb +31 -0
- data/lib/mongoid/persistence/atomic/set.rb +30 -0
- data/lib/mongoid/persistence/atomic/unset.rb +28 -0
- data/lib/mongoid/persistence/deletion.rb +32 -0
- data/lib/mongoid/persistence/insertion.rb +41 -0
- data/lib/mongoid/persistence/modification.rb +37 -0
- data/lib/mongoid/persistence/operations.rb +214 -0
- data/lib/mongoid/persistence/operations/embedded/insert.rb +42 -0
- data/lib/mongoid/persistence/operations/embedded/remove.rb +40 -0
- data/lib/mongoid/persistence/operations/insert.rb +34 -0
- data/lib/mongoid/persistence/operations/remove.rb +33 -0
- data/lib/mongoid/persistence/operations/update.rb +53 -0
- data/lib/mongoid/railtie.rb +21 -33
- data/lib/mongoid/railties/database.rake +12 -12
- data/lib/mongoid/relations.rb +9 -5
- data/lib/mongoid/relations/accessors.rb +15 -36
- data/lib/mongoid/relations/auto_save.rb +2 -2
- data/lib/mongoid/relations/binding.rb +28 -1
- data/lib/mongoid/relations/bindings/embedded/in.rb +17 -30
- data/lib/mongoid/relations/bindings/embedded/many.rb +16 -21
- data/lib/mongoid/relations/bindings/embedded/one.rb +11 -16
- data/lib/mongoid/relations/bindings/referenced/in.rb +31 -32
- data/lib/mongoid/relations/bindings/referenced/many.rb +19 -61
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -63
- data/lib/mongoid/relations/bindings/referenced/one.rb +18 -26
- data/lib/mongoid/relations/builder.rb +4 -2
- data/lib/mongoid/relations/builders.rb +21 -2
- data/lib/mongoid/relations/builders/embedded/in.rb +5 -1
- data/lib/mongoid/relations/builders/embedded/many.rb +12 -4
- data/lib/mongoid/relations/builders/embedded/one.rb +5 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +2 -2
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +1 -1
- data/lib/mongoid/relations/builders/referenced/in.rb +2 -5
- data/lib/mongoid/relations/builders/referenced/many.rb +2 -3
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +14 -5
- data/lib/mongoid/relations/builders/referenced/one.rb +2 -3
- data/lib/mongoid/relations/embedded/atomic.rb +2 -2
- data/lib/mongoid/relations/embedded/in.rb +72 -41
- data/lib/mongoid/relations/embedded/many.rb +116 -120
- data/lib/mongoid/relations/embedded/one.rb +59 -41
- data/lib/mongoid/relations/embedded/sort.rb +31 -0
- data/lib/mongoid/relations/macros.rb +28 -24
- data/lib/mongoid/relations/many.rb +10 -103
- data/lib/mongoid/relations/metadata.rb +335 -38
- data/lib/mongoid/relations/one.rb +7 -32
- data/lib/mongoid/relations/options.rb +47 -0
- data/lib/mongoid/relations/proxy.rb +29 -28
- data/lib/mongoid/relations/referenced/batch.rb +2 -3
- data/lib/mongoid/relations/referenced/in.rb +66 -53
- data/lib/mongoid/relations/referenced/many.rb +216 -143
- data/lib/mongoid/relations/referenced/many_to_many.rb +132 -163
- data/lib/mongoid/relations/referenced/one.rb +76 -58
- data/lib/mongoid/relations/synchronization.rb +113 -0
- data/lib/mongoid/relations/targets.rb +2 -0
- data/lib/mongoid/relations/targets/enumerable.rb +329 -0
- data/lib/mongoid/safety.rb +24 -156
- data/lib/mongoid/serialization.rb +21 -0
- data/lib/mongoid/state.rb +34 -0
- data/lib/mongoid/threaded.rb +175 -0
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/validations.rb +3 -7
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/versioning.rb +61 -7
- data/lib/rack/mongoid.rb +2 -0
- data/lib/rack/mongoid/middleware/identity_map.rb +38 -0
- data/lib/rails/generators/mongoid/model/model_generator.rb +1 -1
- data/lib/rails/generators/mongoid/model/templates/{model.rb → model.rb.tt} +0 -0
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +1 -1
- data/lib/rails/generators/mongoid/observer/templates/{observer.rb → observer.rb.tt} +0 -0
- data/lib/rails/mongoid.rb +17 -17
- metadata +136 -102
- data/lib/mongoid/atomicity.rb +0 -111
- data/lib/mongoid/collections/cyclic_iterator.rb +0 -34
- data/lib/mongoid/collections/slaves.rb +0 -61
- data/lib/mongoid/extensions/array/conversions.rb +0 -23
- data/lib/mongoid/extensions/array/parentization.rb +0 -13
- data/lib/mongoid/extensions/big_decimal/conversions.rb +0 -19
- data/lib/mongoid/extensions/binary/conversions.rb +0 -17
- data/lib/mongoid/extensions/boolean/conversions.rb +0 -27
- data/lib/mongoid/extensions/date/conversions.rb +0 -25
- data/lib/mongoid/extensions/datetime/conversions.rb +0 -12
- data/lib/mongoid/extensions/float/conversions.rb +0 -20
- data/lib/mongoid/extensions/hash/conversions.rb +0 -19
- data/lib/mongoid/extensions/integer/conversions.rb +0 -20
- data/lib/mongoid/extensions/object/conversions.rb +0 -25
- data/lib/mongoid/extensions/range/conversions.rb +0 -25
- data/lib/mongoid/extensions/set/conversions.rb +0 -20
- data/lib/mongoid/extensions/symbol/conversions.rb +0 -21
- data/lib/mongoid/extensions/time_conversions.rb +0 -38
- data/lib/mongoid/field.rb +0 -162
- data/lib/mongoid/paths.rb +0 -61
- data/lib/mongoid/persistence/command.rb +0 -71
- data/lib/mongoid/persistence/insert.rb +0 -53
- data/lib/mongoid/persistence/insert_embedded.rb +0 -43
- data/lib/mongoid/persistence/remove.rb +0 -44
- data/lib/mongoid/persistence/remove_all.rb +0 -40
- data/lib/mongoid/persistence/remove_embedded.rb +0 -48
- data/lib/mongoid/persistence/update.rb +0 -77
- data/lib/mongoid/safe.rb +0 -23
- data/lib/mongoid/validations/referenced.rb +0 -58
data/lib/mongoid/atomicity.rb
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
|
|
4
|
-
# This module contains the logic for supporting atomic operations against the
|
|
5
|
-
# database.
|
|
6
|
-
#
|
|
7
|
-
# @todo Durran: Refactor class out into separate objects for each type of
|
|
8
|
-
# update.
|
|
9
|
-
module Atomicity
|
|
10
|
-
extend ActiveSupport::Concern
|
|
11
|
-
|
|
12
|
-
# Get all the atomic updates that need to happen for the current
|
|
13
|
-
# +Document+. This includes all changes that need to happen in the
|
|
14
|
-
# entire hierarchy that exists below where the save call was made.
|
|
15
|
-
#
|
|
16
|
-
# @note
|
|
17
|
-
# MongoDB does not allow "conflicting modifications" to be
|
|
18
|
-
# performed in a single operation. Conflicting modifications are
|
|
19
|
-
# detected by the 'haveConflictingMod' function in MongoDB.
|
|
20
|
-
# Examination of the code suggests that two modifications (a $set
|
|
21
|
-
# and a $pushAll, for example) conflict if:
|
|
22
|
-
# (1) the key paths being modified are equal.
|
|
23
|
-
# (2) one key path is a prefix of the other.
|
|
24
|
-
# So a $set of 'addresses.0.street' will conflict with a $pushAll
|
|
25
|
-
# to 'addresses', and we will need to split our update into two
|
|
26
|
-
# pieces. We do not, however, attempt to match MongoDB's logic
|
|
27
|
-
# exactly. Instead, we assume that two updates conflict if the
|
|
28
|
-
# first component of the two key paths matches.
|
|
29
|
-
#
|
|
30
|
-
# @example Get the updates that need to occur.
|
|
31
|
-
# person._updates
|
|
32
|
-
#
|
|
33
|
-
# @return [ Hash ] The updates and their modifiers.
|
|
34
|
-
def _updates
|
|
35
|
-
processed = {}
|
|
36
|
-
|
|
37
|
-
_children.inject({ "$set" => _sets, "$pushAll" => {}, :other => {} }) do |updates, child|
|
|
38
|
-
changes = child._sets
|
|
39
|
-
updates["$set"].update(changes)
|
|
40
|
-
unless changes.empty?
|
|
41
|
-
processed[child._conflicting_modification_key] = true
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
if processed.has_key?(child._conflicting_modification_key)
|
|
45
|
-
target = :other
|
|
46
|
-
else
|
|
47
|
-
target = "$pushAll"
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
child._pushes.each do |attr, val|
|
|
51
|
-
if updates[target].has_key?(attr)
|
|
52
|
-
updates[target][attr] << val
|
|
53
|
-
else
|
|
54
|
-
updates[target].update({attr => [val]})
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
updates
|
|
58
|
-
end.delete_if do |key, value|
|
|
59
|
-
value.empty?
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
protected
|
|
64
|
-
|
|
65
|
-
# Get the key used to check for conflicting modifications. For now, we
|
|
66
|
-
# just use the first component of _path, and discard the first period
|
|
67
|
-
# and everything that follows.
|
|
68
|
-
#
|
|
69
|
-
# @example Get the key.
|
|
70
|
-
# person._conflicting_modification_key
|
|
71
|
-
#
|
|
72
|
-
# @return [ String ] The conflicting key.
|
|
73
|
-
def _conflicting_modification_key
|
|
74
|
-
_path.sub(/\..*/, '')
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Get all the push attributes that need to occur.
|
|
78
|
-
#
|
|
79
|
-
# @example Get the pushes.
|
|
80
|
-
# person._pushes
|
|
81
|
-
#
|
|
82
|
-
# @return [ Hash ] The $pushAll operations.
|
|
83
|
-
def _pushes
|
|
84
|
-
pushable? ? { _path => as_document } : {}
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
# Determine if the document can be pushed.
|
|
88
|
-
#
|
|
89
|
-
# @example Is this pushable?
|
|
90
|
-
# person.pushable?
|
|
91
|
-
#
|
|
92
|
-
# @return [ true, false ] Is the document new and embedded?
|
|
93
|
-
def pushable?
|
|
94
|
-
new_record? && embedded_many? && _parent.persisted?
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# Get all the attributes that need to be set.
|
|
98
|
-
#
|
|
99
|
-
# @example Get the sets.
|
|
100
|
-
# person._sets
|
|
101
|
-
#
|
|
102
|
-
# @return [ Hash ] The $set operations.
|
|
103
|
-
def _sets
|
|
104
|
-
if changed? && !new_record?
|
|
105
|
-
setters
|
|
106
|
-
else
|
|
107
|
-
embedded_one? && new_record? ? { _path => as_document } : {}
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Collections #:nodoc:
|
|
4
|
-
class CyclicIterator
|
|
5
|
-
|
|
6
|
-
attr_reader :counter
|
|
7
|
-
|
|
8
|
-
# Performs iteration over an array, if the array gets to the end then loop
|
|
9
|
-
# back to the first.
|
|
10
|
-
#
|
|
11
|
-
# Example:
|
|
12
|
-
#
|
|
13
|
-
# <tt>CyclicIterator.new([ first, second ])</tt>
|
|
14
|
-
def initialize(array)
|
|
15
|
-
@array, @counter = array, -1
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Get the next element in the array. If the element is the last in the
|
|
19
|
-
# array then return the first.
|
|
20
|
-
#
|
|
21
|
-
# Example:
|
|
22
|
-
#
|
|
23
|
-
# <tt>iterator.next</tt>
|
|
24
|
-
#
|
|
25
|
-
# Returns:
|
|
26
|
-
#
|
|
27
|
-
# The next element in the array.
|
|
28
|
-
def next
|
|
29
|
-
(@counter == @array.size - 1) ? @counter = 0 : @counter = @counter + 1
|
|
30
|
-
@array[@counter]
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Collections #:nodoc:
|
|
4
|
-
|
|
5
|
-
# This class wraps the MongoDB slaves databases.
|
|
6
|
-
class Slaves
|
|
7
|
-
include Mongoid::Collections::Retry
|
|
8
|
-
|
|
9
|
-
attr_reader :iterator
|
|
10
|
-
|
|
11
|
-
# All read operations should delegate to the slave connections.
|
|
12
|
-
# These operations mimic the methods on a Mongo:Collection.
|
|
13
|
-
#
|
|
14
|
-
# @example Proxy the driver save.
|
|
15
|
-
# collection.save({ :name => "Al" })
|
|
16
|
-
Operations::READ.each do |name|
|
|
17
|
-
define_method(name) do |*args|
|
|
18
|
-
retry_on_connection_failure do
|
|
19
|
-
collection.send(name, *args)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Is the collection of slaves empty or not?
|
|
25
|
-
#
|
|
26
|
-
# @example Is the collection empty?
|
|
27
|
-
# slaves.empty?
|
|
28
|
-
#
|
|
29
|
-
# @return [ true, false ] If the iterator is set or not.
|
|
30
|
-
def empty?
|
|
31
|
-
iterator.nil?
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Create the new database reader. Will create a collection from the
|
|
35
|
-
# slave databases and cycle through them on each read.
|
|
36
|
-
#
|
|
37
|
-
# @example Create the slaves.
|
|
38
|
-
# Reader.new(slaves, "mongoid_people")
|
|
39
|
-
#
|
|
40
|
-
# @param [ Array<Mongo::DB> ] slaves The slave databases.
|
|
41
|
-
# @param [ String ] name The database name.
|
|
42
|
-
def initialize(slaves, name)
|
|
43
|
-
unless slaves.blank?
|
|
44
|
-
@iterator = CyclicIterator.new(slaves.collect { |db| db.collection(name) })
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
protected
|
|
49
|
-
|
|
50
|
-
# Get the next database in the round-robin.
|
|
51
|
-
#
|
|
52
|
-
# @example Get the next database.
|
|
53
|
-
# slaves.collection
|
|
54
|
-
#
|
|
55
|
-
# @return [ Mongo::DB ] The next slave database to read from.
|
|
56
|
-
def collection
|
|
57
|
-
iterator.next
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Extensions #:nodoc:
|
|
4
|
-
module Array #:nodoc:
|
|
5
|
-
# This module converts arrays into mongoid related objects.
|
|
6
|
-
module Conversions #:nodoc:
|
|
7
|
-
extend ActiveSupport::Concern
|
|
8
|
-
|
|
9
|
-
module ClassMethods #:nodoc:
|
|
10
|
-
def raise_or_return(value)
|
|
11
|
-
unless value.nil? || value.is_a?(::Array)
|
|
12
|
-
raise Mongoid::Errors::InvalidType.new(::Array, value)
|
|
13
|
-
end
|
|
14
|
-
value
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
alias :get :raise_or_return
|
|
18
|
-
alias :set :raise_or_return
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Extensions #:nodoc:
|
|
4
|
-
module Array #:nodoc:
|
|
5
|
-
module Parentization #:nodoc:
|
|
6
|
-
# Adds the parent document to each element in the array.
|
|
7
|
-
def parentize(parent)
|
|
8
|
-
each { |obj| obj.parentize(parent) }
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
require "bigdecimal"
|
|
3
|
-
|
|
4
|
-
module Mongoid #:nodoc:
|
|
5
|
-
module Extensions #:nodoc:
|
|
6
|
-
module BigDecimal #:nodoc:
|
|
7
|
-
module Conversions #:nodoc:
|
|
8
|
-
# Get the string as a +BigDecimal+
|
|
9
|
-
def get(value)
|
|
10
|
-
value ? ::BigDecimal.new(value) : value
|
|
11
|
-
end
|
|
12
|
-
# Set the value in the hash as a string.
|
|
13
|
-
def set(value)
|
|
14
|
-
value ? value.to_s : value
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Extensions #:nodoc:
|
|
4
|
-
module Binary #:nodoc:
|
|
5
|
-
module Conversions #:nodoc:
|
|
6
|
-
# Get the value from the db hash.
|
|
7
|
-
def get(value)
|
|
8
|
-
value
|
|
9
|
-
end
|
|
10
|
-
# Set the value in the db hash.
|
|
11
|
-
def set(value)
|
|
12
|
-
value
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Extensions #:nodoc:
|
|
4
|
-
module Boolean #:nodoc:
|
|
5
|
-
module Conversions #:nodoc:
|
|
6
|
-
extend ActiveSupport::Concern
|
|
7
|
-
|
|
8
|
-
BOOLEAN_MAP = {
|
|
9
|
-
true => true, "true" => true, "TRUE" => true, "1" => true, 1 => true, 1.0 => true,
|
|
10
|
-
false => false, "false" => false, "FALSE" => false, "0" => false, 0 => false, 0.0 => false
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
module ClassMethods #:nodoc
|
|
14
|
-
|
|
15
|
-
def set(value)
|
|
16
|
-
value = BOOLEAN_MAP[value]
|
|
17
|
-
value.nil? ? nil : value
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def get(value)
|
|
21
|
-
value
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Extensions #:nodoc:
|
|
4
|
-
module Date #:nodoc:
|
|
5
|
-
module Conversions #:nodoc:
|
|
6
|
-
def get(value)
|
|
7
|
-
return nil if value.blank?
|
|
8
|
-
if Mongoid::Config.use_utc?
|
|
9
|
-
value.to_date
|
|
10
|
-
else
|
|
11
|
-
::Date.new(value.year, value.month, value.day)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
protected
|
|
16
|
-
|
|
17
|
-
def convert_to_time(value)
|
|
18
|
-
value = ::Date.parse(value) if value.is_a?(::String)
|
|
19
|
-
value = ::Date.civil(*value) if value.is_a?(::Array)
|
|
20
|
-
::Time.utc(value.year, value.month, value.day)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Extensions #:nodoc:
|
|
4
|
-
module Float #:nodoc:
|
|
5
|
-
module Conversions #:nodoc:
|
|
6
|
-
def set(value)
|
|
7
|
-
return nil if value.blank?
|
|
8
|
-
begin
|
|
9
|
-
Float(value)
|
|
10
|
-
rescue ArgumentError => e
|
|
11
|
-
value
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
def get(value)
|
|
15
|
-
value
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Extensions #:nodoc:
|
|
4
|
-
module Hash #:nodoc:
|
|
5
|
-
module Conversions #:nodoc:
|
|
6
|
-
extend ActiveSupport::Concern
|
|
7
|
-
|
|
8
|
-
module ClassMethods #:nodoc:
|
|
9
|
-
def get(value)
|
|
10
|
-
value
|
|
11
|
-
end
|
|
12
|
-
def set(value)
|
|
13
|
-
value
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Extensions #:nodoc:
|
|
4
|
-
module Integer #:nodoc:
|
|
5
|
-
module Conversions #:nodoc:
|
|
6
|
-
def set(value)
|
|
7
|
-
return nil if value.blank?
|
|
8
|
-
begin
|
|
9
|
-
value.to_s =~ /\./ ? Float(value) : Integer(value)
|
|
10
|
-
rescue
|
|
11
|
-
value
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
def get(value)
|
|
15
|
-
value
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Extensions #:nodoc:
|
|
4
|
-
module Object #:nodoc:
|
|
5
|
-
# This module converts objects into mongoid related objects.
|
|
6
|
-
module Conversions #:nodoc:
|
|
7
|
-
extend ActiveSupport::Concern
|
|
8
|
-
|
|
9
|
-
module ClassMethods
|
|
10
|
-
def set(value)
|
|
11
|
-
value.respond_to?(:attributes) ? value.attributes : value
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def get(value)
|
|
15
|
-
if value && respond_to?(:instantiate)
|
|
16
|
-
instantiate(value)
|
|
17
|
-
else
|
|
18
|
-
value
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|