mongoid 2.4.10 → 3.0.0.rc
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 +843 -9
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +2 -17
- data/lib/config/locales/en.yml +441 -51
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- data/lib/mongoid/atomic/paths/root.rb +4 -5
- data/lib/mongoid/atomic.rb +16 -9
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/callbacks.rb +100 -42
- data/lib/mongoid/collections/retry.rb +2 -3
- data/lib/mongoid/components.rb +10 -22
- data/lib/mongoid/config/environment.rb +4 -3
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config.rb +87 -233
- data/lib/mongoid/contextual/aggregable/memory.rb +98 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
- data/lib/mongoid/contextual/atomic.rb +179 -0
- data/lib/mongoid/contextual/command.rb +43 -0
- data/lib/mongoid/contextual/find_and_modify.rb +66 -0
- data/lib/mongoid/contextual/map_reduce.rb +273 -0
- data/lib/mongoid/contextual/memory.rb +383 -0
- data/lib/mongoid/contextual/mongo.rb +543 -0
- data/lib/mongoid/contextual.rb +50 -0
- data/lib/mongoid/copyable.rb +2 -2
- data/lib/mongoid/criteria.rb +436 -248
- data/lib/mongoid/criterion/inspection.rb +14 -8
- data/lib/mongoid/criterion/scoping.rb +114 -44
- data/lib/mongoid/dirty.rb +152 -67
- data/lib/mongoid/document.rb +68 -49
- data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
- data/lib/mongoid/errors/callback.rb +5 -6
- data/lib/mongoid/errors/delete_restriction.rb +29 -0
- data/lib/mongoid/errors/document_not_found.rb +98 -17
- data/lib/mongoid/errors/eager_load.rb +3 -6
- data/lib/mongoid/errors/invalid_collection.rb +3 -3
- data/lib/mongoid/errors/invalid_config_option.rb +27 -0
- data/lib/mongoid/errors/invalid_database.rb +3 -3
- data/lib/mongoid/errors/invalid_field.rb +54 -8
- data/lib/mongoid/errors/invalid_field_option.rb +35 -0
- data/lib/mongoid/errors/invalid_find.rb +3 -3
- data/lib/mongoid/errors/invalid_index.rb +28 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -4
- data/lib/mongoid/errors/invalid_scope.rb +24 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
- data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
- data/lib/mongoid/errors/invalid_time.rb +3 -6
- data/lib/mongoid/errors/inverse_not_found.rb +29 -0
- data/lib/mongoid/errors/mixed_relations.rb +4 -9
- data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
- data/lib/mongoid/errors/mongoid_error.rb +54 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
- data/lib/mongoid/errors/no_default_session.rb +23 -0
- data/lib/mongoid/errors/no_environment.rb +3 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
- data/lib/mongoid/errors/no_parent.rb +24 -0
- data/lib/mongoid/errors/no_session_config.rb +22 -0
- data/lib/mongoid/errors/no_session_database.rb +27 -0
- data/lib/mongoid/errors/no_session_hosts.rb +27 -0
- data/lib/mongoid/errors/no_sessions_config.rb +20 -0
- data/lib/mongoid/errors/readonly_attribute.rb +25 -0
- data/lib/mongoid/errors/scope_overwrite.rb +4 -4
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
- data/lib/mongoid/errors/unknown_attribute.rb +25 -0
- data/lib/mongoid/errors/unsaved_document.rb +4 -8
- data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
- data/lib/mongoid/errors/unsupported_version.rb +4 -4
- data/lib/mongoid/errors/validations.rb +7 -6
- data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
- data/lib/mongoid/errors.rb +22 -1
- data/lib/mongoid/extensions/array.rb +127 -0
- data/lib/mongoid/extensions/big_decimal.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +24 -0
- data/lib/mongoid/extensions/date.rb +70 -0
- data/lib/mongoid/extensions/date_time.rb +68 -0
- data/lib/mongoid/extensions/false_class.rb +26 -0
- data/lib/mongoid/extensions/float.rb +44 -0
- data/lib/mongoid/extensions/hash.rb +91 -0
- data/lib/mongoid/extensions/integer.rb +54 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +21 -0
- data/lib/mongoid/extensions/object.rb +188 -0
- data/lib/mongoid/extensions/object_id.rb +53 -0
- data/lib/mongoid/extensions/range.rb +55 -0
- data/lib/mongoid/extensions/regexp.rb +27 -0
- data/lib/mongoid/extensions/set.rb +55 -0
- data/lib/mongoid/extensions/string.rb +155 -0
- data/lib/mongoid/extensions/symbol.rb +54 -0
- data/lib/mongoid/extensions/time.rb +78 -0
- data/lib/mongoid/extensions/time_with_zone.rb +55 -0
- data/lib/mongoid/extensions/true_class.rb +26 -0
- data/lib/mongoid/extensions.rb +28 -76
- data/lib/mongoid/factory.rb +1 -1
- data/lib/mongoid/fields/foreign_key.rb +134 -0
- data/lib/mongoid/fields/localized.rb +73 -0
- data/lib/mongoid/fields/standard.rb +268 -0
- data/lib/mongoid/fields/validators/macro.rb +83 -0
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields.rb +129 -194
- data/lib/mongoid/finders.rb +42 -43
- data/lib/mongoid/hierarchy.rb +25 -14
- data/lib/mongoid/identity_map.rb +31 -19
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- data/lib/mongoid/indexes.rb +66 -15
- data/lib/mongoid/inspection.rb +1 -1
- data/lib/mongoid/javascript.rb +1 -1
- data/lib/mongoid/json.rb +2 -2
- data/lib/mongoid/loggable.rb +69 -0
- data/lib/mongoid/matchers/all.rb +7 -8
- data/lib/mongoid/matchers/and.rb +3 -3
- data/lib/mongoid/matchers/default.rb +6 -4
- data/lib/mongoid/matchers/exists.rb +2 -2
- data/lib/mongoid/matchers/gt.rb +2 -2
- data/lib/mongoid/matchers/gte.rb +2 -2
- data/lib/mongoid/matchers/in.rb +3 -7
- data/lib/mongoid/matchers/lt.rb +2 -2
- data/lib/mongoid/matchers/lte.rb +2 -2
- data/lib/mongoid/matchers/ne.rb +2 -2
- data/lib/mongoid/matchers/nin.rb +2 -2
- data/lib/mongoid/matchers/or.rb +2 -2
- data/lib/mongoid/matchers/size.rb +2 -2
- data/lib/mongoid/matchers/strategies.rb +3 -3
- data/lib/mongoid/matchers.rb +1 -1
- data/lib/mongoid/multi_parameter_attributes.rb +8 -10
- data/lib/mongoid/nested_attributes.rb +17 -9
- data/lib/mongoid/observer.rb +1 -2
- data/lib/mongoid/paranoia.rb +13 -18
- data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
- data/lib/mongoid/persistence/atomic/bit.rb +5 -7
- data/lib/mongoid/persistence/atomic/inc.rb +5 -7
- data/lib/mongoid/persistence/atomic/operation.rb +45 -6
- data/lib/mongoid/persistence/atomic/pop.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
- data/lib/mongoid/persistence/atomic/push.rb +4 -10
- data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
- data/lib/mongoid/persistence/atomic/rename.rb +6 -7
- data/lib/mongoid/persistence/atomic/sets.rb +5 -7
- data/lib/mongoid/persistence/atomic/unset.rb +4 -5
- data/lib/mongoid/persistence/atomic.rb +2 -2
- data/lib/mongoid/persistence/deletion.rb +2 -2
- data/lib/mongoid/persistence/insertion.rb +10 -16
- data/lib/mongoid/persistence/modification.rb +5 -9
- data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
- data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
- data/lib/mongoid/persistence/operations/insert.rb +4 -4
- data/lib/mongoid/persistence/operations/remove.rb +4 -4
- data/lib/mongoid/persistence/operations/update.rb +5 -5
- data/lib/mongoid/persistence/operations.rb +6 -19
- data/lib/mongoid/persistence.rb +64 -27
- data/lib/mongoid/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations/accessors.rb +119 -19
- data/lib/mongoid/relations/auto_save.rb +59 -5
- data/lib/mongoid/relations/binding.rb +211 -2
- data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
- data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
- data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
- data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
- data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
- data/lib/mongoid/relations/builder.rb +3 -3
- data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
- data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
- data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/many.rb +5 -5
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
- data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
- data/lib/mongoid/relations/builders.rb +19 -16
- data/lib/mongoid/relations/cascading/delete.rb +3 -5
- data/lib/mongoid/relations/cascading/destroy.rb +3 -3
- data/lib/mongoid/relations/cascading/nullify.rb +3 -3
- data/lib/mongoid/relations/cascading/restrict.rb +37 -0
- data/lib/mongoid/relations/cascading.rb +6 -4
- data/lib/mongoid/relations/constraint.rb +4 -3
- data/lib/mongoid/relations/conversions.rb +5 -6
- data/lib/mongoid/relations/cyclic.rb +7 -7
- data/lib/mongoid/relations/embedded/batchable.rb +346 -0
- data/lib/mongoid/relations/embedded/in.rb +23 -12
- data/lib/mongoid/relations/embedded/many.rb +99 -160
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -60
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +231 -45
- data/lib/mongoid/relations/nested_builder.rb +3 -5
- data/lib/mongoid/relations/one.rb +2 -2
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/polymorphic.rb +9 -9
- data/lib/mongoid/relations/proxy.rb +60 -31
- data/lib/mongoid/relations/referenced/in.rb +40 -15
- data/lib/mongoid/relations/referenced/many.rb +116 -128
- data/lib/mongoid/relations/referenced/many_to_many.rb +101 -46
- data/lib/mongoid/relations/referenced/one.rb +34 -13
- data/lib/mongoid/relations/reflections.rb +3 -3
- data/lib/mongoid/relations/synchronization.rb +19 -23
- data/lib/mongoid/relations/targets/enumerable.rb +86 -57
- data/lib/mongoid/relations/touchable.rb +32 -0
- data/lib/mongoid/relations.rb +6 -6
- data/lib/mongoid/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +329 -0
- data/lib/mongoid/serialization.rb +13 -30
- data/lib/mongoid/sessions/factory.rb +106 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions.rb +359 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded/lifecycle.rb +21 -21
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/threaded.rb +167 -59
- data/lib/mongoid/timestamps/created.rb +8 -4
- data/lib/mongoid/timestamps/timeless.rb +6 -4
- data/lib/mongoid/timestamps/updated.rb +3 -3
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/unit_of_work.rb +61 -0
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +34 -4
- data/lib/mongoid/validations/uniqueness.rb +8 -10
- data/lib/mongoid/validations.rb +28 -20
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- data/lib/mongoid.rb +24 -39
- data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
- data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +59 -19
- data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
- data/lib/rails/generators/mongoid_generator.rb +5 -5
- data/lib/rails/mongoid.rb +69 -25
- metadata +92 -154
- data/lib/config/locales/bg.yml +0 -61
- data/lib/config/locales/de.yml +0 -61
- data/lib/config/locales/en-GB.yml +0 -64
- data/lib/config/locales/es.yml +0 -59
- data/lib/config/locales/fr.yml +0 -62
- data/lib/config/locales/hi.yml +0 -53
- data/lib/config/locales/hu.yml +0 -64
- data/lib/config/locales/id.yml +0 -62
- data/lib/config/locales/it.yml +0 -59
- data/lib/config/locales/ja.yml +0 -57
- data/lib/config/locales/kr.yml +0 -54
- data/lib/config/locales/nl.yml +0 -61
- data/lib/config/locales/pl.yml +0 -59
- data/lib/config/locales/pt-BR.yml +0 -60
- data/lib/config/locales/pt.yml +0 -60
- data/lib/config/locales/ro.yml +0 -66
- data/lib/config/locales/ru.yml +0 -61
- data/lib/config/locales/sv.yml +0 -60
- data/lib/config/locales/vi.yml +0 -62
- data/lib/config/locales/zh-CN.yml +0 -53
- data/lib/mongoid/collection.rb +0 -157
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/collections.rb +0 -120
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/mongo.rb +0 -487
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/criterion/builder.rb +0 -34
- data/lib/mongoid/criterion/complex.rb +0 -84
- data/lib/mongoid/criterion/creational.rb +0 -34
- data/lib/mongoid/criterion/exclusion.rb +0 -108
- data/lib/mongoid/criterion/inclusion.rb +0 -290
- data/lib/mongoid/criterion/optional.rb +0 -259
- data/lib/mongoid/criterion/selector.rb +0 -177
- data/lib/mongoid/cursor.rb +0 -88
- data/lib/mongoid/default_scope.rb +0 -36
- data/lib/mongoid/errors/invalid_type.rb +0 -25
- data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/array/deletion.rb +0 -29
- data/lib/mongoid/extensions/false_class/equality.rb +0 -26
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
- data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/hash/scoping.rb +0 -25
- data/lib/mongoid/extensions/integer/checks.rb +0 -23
- data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
- data/lib/mongoid/extensions/object/checks.rb +0 -29
- data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
- data/lib/mongoid/extensions/object/reflections.rb +0 -48
- data/lib/mongoid/extensions/object/substitutable.rb +0 -15
- data/lib/mongoid/extensions/object/yoda.rb +0 -44
- data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
- data/lib/mongoid/extensions/proc/scoping.rb +0 -25
- data/lib/mongoid/extensions/string/checks.rb +0 -36
- data/lib/mongoid/extensions/string/conversions.rb +0 -22
- data/lib/mongoid/extensions/string/inflections.rb +0 -118
- data/lib/mongoid/extensions/symbol/checks.rb +0 -23
- data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
- data/lib/mongoid/extensions/true_class/equality.rb +0 -26
- data/lib/mongoid/extras.rb +0 -31
- data/lib/mongoid/fields/internal/array.rb +0 -76
- data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
- data/lib/mongoid/fields/internal/bignum.rb +0 -10
- data/lib/mongoid/fields/internal/binary.rb +0 -11
- data/lib/mongoid/fields/internal/boolean.rb +0 -58
- data/lib/mongoid/fields/internal/date.rb +0 -51
- data/lib/mongoid/fields/internal/date_time.rb +0 -28
- data/lib/mongoid/fields/internal/false_class.rb +0 -10
- data/lib/mongoid/fields/internal/fixnum.rb +0 -10
- data/lib/mongoid/fields/internal/float.rb +0 -47
- data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
- data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
- data/lib/mongoid/fields/internal/hash.rb +0 -11
- data/lib/mongoid/fields/internal/integer.rb +0 -59
- data/lib/mongoid/fields/internal/localized.rb +0 -62
- data/lib/mongoid/fields/internal/nil_class.rb +0 -53
- data/lib/mongoid/fields/internal/object.rb +0 -11
- data/lib/mongoid/fields/internal/object_id.rb +0 -46
- data/lib/mongoid/fields/internal/range.rb +0 -61
- data/lib/mongoid/fields/internal/set.rb +0 -57
- data/lib/mongoid/fields/internal/string.rb +0 -42
- data/lib/mongoid/fields/internal/symbol.rb +0 -43
- data/lib/mongoid/fields/internal/time.rb +0 -23
- data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
- data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
- data/lib/mongoid/fields/internal/true_class.rb +0 -10
- data/lib/mongoid/fields/mappings.rb +0 -42
- data/lib/mongoid/fields/serializable.rb +0 -270
- data/lib/mongoid/identity.rb +0 -92
- data/lib/mongoid/keys.rb +0 -144
- data/lib/mongoid/logger.rb +0 -45
- data/lib/mongoid/multi_database.rb +0 -36
- data/lib/mongoid/named_scope.rb +0 -166
- data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
- data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
- data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
- data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
- data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
- data/lib/mongoid/relations/embedded/atomic.rb +0 -89
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/relations/referenced/batch.rb +0 -73
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
data/lib/mongoid/collections.rb
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc
|
|
3
|
-
|
|
4
|
-
# The collections module is used for providing functionality around setting
|
|
5
|
-
# up and updating collections.
|
|
6
|
-
module Collections
|
|
7
|
-
extend ActiveSupport::Concern
|
|
8
|
-
|
|
9
|
-
included do
|
|
10
|
-
cattr_accessor :_collection, :collection_name
|
|
11
|
-
self.collection_name = self.name.collectionize
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# Get the collection for the class.
|
|
15
|
-
#
|
|
16
|
-
# @note Defining methods instead of delegate to avoid calls to
|
|
17
|
-
# Kernel.caller for class load performance reasons.
|
|
18
|
-
#
|
|
19
|
-
# @example Get the collection.
|
|
20
|
-
# person.collection
|
|
21
|
-
#
|
|
22
|
-
# @return [ Collection ] The class collection.
|
|
23
|
-
#
|
|
24
|
-
# @since 1.0.0
|
|
25
|
-
def collection
|
|
26
|
-
self.class.collection
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Get the database for the class.
|
|
30
|
-
#
|
|
31
|
-
# @note Defining methods instead of delegate to avoid calls to
|
|
32
|
-
# Kernel.caller for class load performance reasons.
|
|
33
|
-
#
|
|
34
|
-
# @example Get the database.
|
|
35
|
-
# person.db
|
|
36
|
-
#
|
|
37
|
-
# @return [ DB ] The class db.
|
|
38
|
-
#
|
|
39
|
-
# @since 1.0.0
|
|
40
|
-
def db
|
|
41
|
-
self.class.db
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
module ClassMethods #:nodoc:
|
|
45
|
-
|
|
46
|
-
# Returns the collection associated with this +Document+. If the
|
|
47
|
-
# document is embedded, there will be no collection associated
|
|
48
|
-
# with it unless it's in a cyclic relation.
|
|
49
|
-
#
|
|
50
|
-
# @example Get the collection.
|
|
51
|
-
# Model.collection
|
|
52
|
-
#
|
|
53
|
-
# @return [ Collection ] The Mongoid collection wrapper.
|
|
54
|
-
def collection
|
|
55
|
-
raise Errors::InvalidCollection.new(self) if embedded? && !cyclic
|
|
56
|
-
self._collection || set_collection
|
|
57
|
-
add_indexes; self._collection
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# Return the database associated with this collection.
|
|
61
|
-
#
|
|
62
|
-
# @example Get the database object.
|
|
63
|
-
# Model.db
|
|
64
|
-
#
|
|
65
|
-
# @return [ Mongo::DB ] The Mongo daatabase object.
|
|
66
|
-
def db
|
|
67
|
-
collection.db
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# Convenience method for getting index information from the collection.
|
|
71
|
-
#
|
|
72
|
-
# @example Get the index information from the collection.
|
|
73
|
-
# Model.index_information
|
|
74
|
-
#
|
|
75
|
-
# @return [ Array ] The collection index information.
|
|
76
|
-
def index_information
|
|
77
|
-
collection.index_information
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# Macro for setting the collection name to store in.
|
|
81
|
-
#
|
|
82
|
-
# @example Store in a separate collection than the default.
|
|
83
|
-
# Model.store_in :population
|
|
84
|
-
#
|
|
85
|
-
# @example Store in a capped collection.
|
|
86
|
-
# Model.store_in :population, :capped => true, :max => 10000
|
|
87
|
-
#
|
|
88
|
-
# @param [ Symbol ] name The name of the collection.
|
|
89
|
-
# @param [ Hash ] options The collection options.
|
|
90
|
-
#
|
|
91
|
-
# @option options [ true, false ] :capped If the collection is capped.
|
|
92
|
-
# @option options [ Integer ] :size The capped collection size.
|
|
93
|
-
# @option options [ Integer ] :max The maximum number of docs in the
|
|
94
|
-
# capped collection.
|
|
95
|
-
def store_in(name, options = {})
|
|
96
|
-
self.collection_name = name.to_s
|
|
97
|
-
set_collection(options)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
protected
|
|
101
|
-
|
|
102
|
-
# Set the collection on the class.
|
|
103
|
-
#
|
|
104
|
-
# @example Set the collection.
|
|
105
|
-
# Model.set_collection
|
|
106
|
-
#
|
|
107
|
-
# @param [ Hash ] options The collection options.
|
|
108
|
-
#
|
|
109
|
-
# @option options [ true, false ] :capped If the collection is capped.
|
|
110
|
-
# @option options [ Integer ] :size The capped collection size.
|
|
111
|
-
# @option options [ Integer ] :max The maximum number of docs in the
|
|
112
|
-
# capped collection.
|
|
113
|
-
|
|
114
|
-
# @return [ Collection ] The Mongoid collection wrapper.
|
|
115
|
-
def set_collection(options = {})
|
|
116
|
-
self._collection = Collection.new(self, self.collection_name, options)
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Config #:nodoc:
|
|
4
|
-
|
|
5
|
-
# This class handles the configuration and initialization of a mongodb
|
|
6
|
-
# database from options.
|
|
7
|
-
class Database < Hash
|
|
8
|
-
|
|
9
|
-
# Configure the database connections. This will return an array
|
|
10
|
-
# containing the master and an array of slaves.
|
|
11
|
-
#
|
|
12
|
-
# @example Configure the connection.
|
|
13
|
-
# db.configure
|
|
14
|
-
#
|
|
15
|
-
# @return [ Array<Mongo::DB, Array<Mongo:DB>> ] The Mongo databases.
|
|
16
|
-
#
|
|
17
|
-
# @since 2.0.0.rc.1
|
|
18
|
-
def configure
|
|
19
|
-
[ master.db(name), slaves.map { |slave| slave.db(name) } ]
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# Create the new db configuration class.
|
|
23
|
-
#
|
|
24
|
-
# @example Initialize the class.
|
|
25
|
-
# Config::Database.new(
|
|
26
|
-
# false, "uri" => { "mongodb://durran:password@localhost:27017/mongoid" }
|
|
27
|
-
# )
|
|
28
|
-
#
|
|
29
|
-
# @param [ Hash ] options The configuration options.
|
|
30
|
-
#
|
|
31
|
-
# @option options [ String ] :database The database name.
|
|
32
|
-
# @option options [ String ] :host The database host.
|
|
33
|
-
# @option options [ String ] :password The password for authentication.
|
|
34
|
-
# @option options [ Integer ] :port The port for the database.
|
|
35
|
-
# @option options [ String ] :uri The uri for the database.
|
|
36
|
-
# @option options [ String ] :username The user for authentication.
|
|
37
|
-
#
|
|
38
|
-
# @since 2.0.0.rc.1
|
|
39
|
-
def initialize(options = {})
|
|
40
|
-
merge!(options)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
private
|
|
44
|
-
|
|
45
|
-
# Do we need to authenticate against the database?
|
|
46
|
-
#
|
|
47
|
-
# @example Are we authenticating?
|
|
48
|
-
# db.authenticating?
|
|
49
|
-
#
|
|
50
|
-
# @return [ true, false ] True if auth is needed, false if not.
|
|
51
|
-
#
|
|
52
|
-
# @since 2.0.0.rc.1
|
|
53
|
-
def authenticating?
|
|
54
|
-
username || password
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# Takes the supplied options in the hash and created a URI from them to
|
|
58
|
-
# pass to the Mongo connection object.
|
|
59
|
-
#
|
|
60
|
-
# @example Build the URI.
|
|
61
|
-
# db.build_uri
|
|
62
|
-
#
|
|
63
|
-
# @param [ Hash ] options The options to build with.
|
|
64
|
-
#
|
|
65
|
-
# @return [ String ] A mongo compliant URI string.
|
|
66
|
-
#
|
|
67
|
-
# @since 2.0.0.rc.1
|
|
68
|
-
def build_uri(options = {})
|
|
69
|
-
"mongodb://".tap do |base|
|
|
70
|
-
base << "#{username}:#{password}@" if authenticating?
|
|
71
|
-
base << "#{options["host"] || "localhost"}:#{options["port"] || 27017}"
|
|
72
|
-
base << "/#{self["database"]}" if authenticating?
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
# Create the mongo master connection from either the supplied URI
|
|
77
|
-
# or a generated one, while setting pool size and logging.
|
|
78
|
-
#
|
|
79
|
-
# @example Create the connection.
|
|
80
|
-
# db.connection
|
|
81
|
-
#
|
|
82
|
-
# @return [ Mongo::Connection ] The mongo connection.
|
|
83
|
-
#
|
|
84
|
-
# @since 2.0.0.rc.1
|
|
85
|
-
def master
|
|
86
|
-
Mongo::Connection.from_uri(uri(self), optional.symbolize_keys).tap do |conn|
|
|
87
|
-
conn.apply_saved_authentication
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# Create the mongo slave connections from either the supplied URI
|
|
92
|
-
# or a generated one, while setting pool size and logging.
|
|
93
|
-
#
|
|
94
|
-
# @example Create the connection.
|
|
95
|
-
# db.connection
|
|
96
|
-
#
|
|
97
|
-
# @return [ Array<Mongo::Connection> ] The mongo slave connections.
|
|
98
|
-
#
|
|
99
|
-
# @since 2.0.0.rc.1
|
|
100
|
-
def slaves
|
|
101
|
-
(self["slaves"] || []).map do |options|
|
|
102
|
-
Mongo::Connection.from_uri(uri(options), optional(true).symbolize_keys).tap do |conn|
|
|
103
|
-
conn.apply_saved_authentication
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
# Should we use a logger?
|
|
109
|
-
#
|
|
110
|
-
# @example Should we use a logger?
|
|
111
|
-
# database.logger?
|
|
112
|
-
#
|
|
113
|
-
# @return [ true, false ] Defaults to true, false if specifically
|
|
114
|
-
# defined.
|
|
115
|
-
#
|
|
116
|
-
# @since 2.2.0
|
|
117
|
-
def logger?
|
|
118
|
-
self[:logger].nil? || self[:logger] ? true : false
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
# Convenience for accessing the hash via dot notation.
|
|
122
|
-
#
|
|
123
|
-
# @example Access a value in alternate syntax.
|
|
124
|
-
# db.host
|
|
125
|
-
#
|
|
126
|
-
# @return [ Object ] The value in the hash.
|
|
127
|
-
#
|
|
128
|
-
# @since 2.0.0.rc.1
|
|
129
|
-
def method_missing(name, *args, &block)
|
|
130
|
-
self[name.to_s]
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
# Get the name of the database, from either the URI supplied or the
|
|
134
|
-
# database value in the options.
|
|
135
|
-
#
|
|
136
|
-
# @example Get the database name.
|
|
137
|
-
# db.name
|
|
138
|
-
#
|
|
139
|
-
# @return [ String ] The database name.
|
|
140
|
-
#
|
|
141
|
-
# @since 2.0.0.rc.1
|
|
142
|
-
def name
|
|
143
|
-
db_name = URI.parse(uri(self)).path.to_s.sub("/", "")
|
|
144
|
-
db_name.blank? ? database : db_name
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
# Get the options used in creating the database connection.
|
|
148
|
-
#
|
|
149
|
-
# @example Get the options.
|
|
150
|
-
# db.options
|
|
151
|
-
#
|
|
152
|
-
# @param [ true, false ] slave Are the options for a slave db?
|
|
153
|
-
#
|
|
154
|
-
# @return [ Hash ] The hash of configuration options.
|
|
155
|
-
#
|
|
156
|
-
# @since 2.0.0.rc.1
|
|
157
|
-
def optional(slave = false)
|
|
158
|
-
({
|
|
159
|
-
:pool_size => pool_size,
|
|
160
|
-
:logger => logger? ? Mongoid::Logger.new : nil,
|
|
161
|
-
:slave_ok => slave
|
|
162
|
-
}).merge(self).reject { |k,v| Config.blacklisted_options.include? k }.
|
|
163
|
-
inject({}) { |memo, (k, v)| memo[k.to_sym] = v; memo}
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
# Get a Mongo compliant URI for the database connection.
|
|
167
|
-
#
|
|
168
|
-
# @example Get the URI.
|
|
169
|
-
# db.uri
|
|
170
|
-
#
|
|
171
|
-
# @param [ Hash ] options The options hash.
|
|
172
|
-
#
|
|
173
|
-
# @return [ String ] The URI for the connection.
|
|
174
|
-
#
|
|
175
|
-
# @since 2.0.0.rc.1
|
|
176
|
-
def uri(options = {})
|
|
177
|
-
options["uri"] || build_uri(options)
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
end
|
|
181
|
-
end
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Config #:nodoc:
|
|
4
|
-
class ReplsetDatabase < Hash
|
|
5
|
-
|
|
6
|
-
# Configure the database connections. This will return an array
|
|
7
|
-
# containing one Mongo::DB and nil (to keep compatibility with Mongoid::Config::Database)
|
|
8
|
-
# If you want the reads to go to a secondary node use the :read_secondary(true): option
|
|
9
|
-
#
|
|
10
|
-
# @example Configure the connection.
|
|
11
|
-
# db.configure
|
|
12
|
-
#
|
|
13
|
-
# @return [ Array<Mongo::DB, nil ] The Mongo databases.
|
|
14
|
-
#
|
|
15
|
-
# @since 2.0.0.rc.5
|
|
16
|
-
def configure
|
|
17
|
-
# yes, construction is weird but the driver wants
|
|
18
|
-
# "A list of host-port pairs ending with a hash containing any options"
|
|
19
|
-
# mongo likes symbols
|
|
20
|
-
options = reject{ |key, value| Config.blacklisted_options.include?(key.to_s) }
|
|
21
|
-
options["logger"] = Mongoid::Logger.new
|
|
22
|
-
connection = Mongo::ReplSetConnection.new(*(hosts.clone << options.symbolize_keys))
|
|
23
|
-
|
|
24
|
-
if authenticating?
|
|
25
|
-
connection.add_auth(database, username, password)
|
|
26
|
-
connection.apply_saved_authentication
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
[ connection.db(database), nil ]
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Do we need to authenticate against the database?
|
|
33
|
-
#
|
|
34
|
-
# @example Are we authenticating?
|
|
35
|
-
# db.authenticating?
|
|
36
|
-
#
|
|
37
|
-
# @return [ true, false ] True if auth is needed, false if not.
|
|
38
|
-
#
|
|
39
|
-
# @since 2.0.2
|
|
40
|
-
def authenticating?
|
|
41
|
-
username || password
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Convenience for accessing the hash via dot notation.
|
|
45
|
-
#
|
|
46
|
-
# @example Access a value in alternate syntax.
|
|
47
|
-
# db.host
|
|
48
|
-
#
|
|
49
|
-
# @return [ Object ] The value in the hash.
|
|
50
|
-
#
|
|
51
|
-
# @since 2.0.2
|
|
52
|
-
def method_missing(name, *args, &block)
|
|
53
|
-
self[name.to_s]
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# Create the new db configuration class.
|
|
57
|
-
#
|
|
58
|
-
# @example Initialize the class.
|
|
59
|
-
# Config::ReplsetDatabase.new(
|
|
60
|
-
# "hosts" => [[host1,port1],[host2,port2]]
|
|
61
|
-
# )
|
|
62
|
-
#
|
|
63
|
-
# replSet does not supports auth
|
|
64
|
-
#
|
|
65
|
-
# @param [ Hash ] options The configuration options.
|
|
66
|
-
#
|
|
67
|
-
# @option options [ Array ] :hosts The database host.
|
|
68
|
-
# @option options [ String ] :database The database name.
|
|
69
|
-
# @option options [ Boolean ] :read_secondary Tells the driver to read from secondaries.
|
|
70
|
-
# ...
|
|
71
|
-
#
|
|
72
|
-
# @see Mongo::ReplSetConnection for all options
|
|
73
|
-
#
|
|
74
|
-
# @since 2.0.0.rc.5
|
|
75
|
-
def initialize(options = {})
|
|
76
|
-
merge!(options)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Contexts #:nodoc:
|
|
4
|
-
class Enumerable
|
|
5
|
-
class Sort
|
|
6
|
-
attr_reader :value, :direction
|
|
7
|
-
|
|
8
|
-
# Create a new sorting object. This requires a value and a sort
|
|
9
|
-
# direction of +:asc+ or +:desc+.
|
|
10
|
-
def initialize(value, direction)
|
|
11
|
-
@value = value
|
|
12
|
-
@direction = direction
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# Return +true+ if the direction is +:asc+, otherwise false.
|
|
16
|
-
def ascending?
|
|
17
|
-
direction == :asc
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Compare two +Sort+ objects against each other, taking into
|
|
21
|
-
# consideration the direction of the sorting.
|
|
22
|
-
def <=>(other)
|
|
23
|
-
cmp = compare(value, other.value)
|
|
24
|
-
ascending? ? cmp : cmp * -1
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
# Compare two values allowing for nil values.
|
|
30
|
-
def compare(a, b)
|
|
31
|
-
case
|
|
32
|
-
when a.nil?
|
|
33
|
-
b.nil? ? 0 : 1
|
|
34
|
-
when b.nil?
|
|
35
|
-
-1
|
|
36
|
-
else
|
|
37
|
-
a <=> b
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|