mongoid 2.8.1 → 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 +802 -58
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +2 -8
- data/lib/config/locales/en.yml +441 -51
- data/lib/mongoid.rb +24 -39
- data/lib/mongoid/atomic.rb +16 -33
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- 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/root.rb +4 -5
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/callbacks.rb +90 -27
- data/lib/mongoid/collections/retry.rb +2 -3
- data/lib/mongoid/components.rb +11 -23
- data/lib/mongoid/config.rb +87 -233
- data/lib/mongoid/config/environment.rb +5 -6
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/contextual.rb +50 -0
- 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/copyable.rb +3 -34
- data/lib/mongoid/criteria.rb +436 -250
- 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 +69 -50
- data/lib/mongoid/errors.rb +22 -1
- 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/extensions.rb +28 -76
- 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/factory.rb +1 -1
- data/lib/mongoid/fields.rb +129 -194
- 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.rb +2 -0
- data/lib/mongoid/fields/validators/macro.rb +83 -0
- 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.rb +66 -15
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- 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.rb +1 -1
- 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/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.rb +43 -39
- data/lib/mongoid/persistence/atomic.rb +2 -2
- 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/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.rb +6 -19
- 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/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations.rb +4 -6
- 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.rb +19 -16
- 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/cascading.rb +6 -4
- 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/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 -161
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -61
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +200 -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 +117 -132
- 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/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +329 -0
- data/lib/mongoid/serialization.rb +8 -27
- data/lib/mongoid/sessions.rb +359 -0
- data/lib/mongoid/sessions/factory.rb +106 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded.rb +167 -59
- data/lib/mongoid/threaded/lifecycle.rb +21 -22
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/timestamps.rb +1 -1
- 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/unit_of_work.rb +61 -0
- data/lib/mongoid/validations.rb +27 -19
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +31 -5
- data/lib/mongoid/validations/uniqueness.rb +9 -12
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- 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 +110 -137
- checksums.yaml +0 -7
- 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.rb +0 -120
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/mongo.rb +0 -487
- 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 -110
- 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 -77
- 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.rb +0 -89
- 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/referenced/batch.rb +0 -73
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
@@ -0,0 +1,106 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "mongoid/sessions/mongo_uri"
|
3
|
+
|
4
|
+
module Mongoid
|
5
|
+
module Sessions
|
6
|
+
module Factory
|
7
|
+
extend self
|
8
|
+
|
9
|
+
# Create a new session given the named configuration. If no name is
|
10
|
+
# provided, return a new session with the default configuration. If a
|
11
|
+
# name is provided for which no configuration exists, an error will be
|
12
|
+
# raised.
|
13
|
+
#
|
14
|
+
# @example Create the session.
|
15
|
+
# Factory.create(:secondary)
|
16
|
+
#
|
17
|
+
# @param [ String, Symbol ] name The named session configuration.
|
18
|
+
#
|
19
|
+
# @raise [ Errors::NoSessionConfig ] If no config could be found.
|
20
|
+
#
|
21
|
+
# @return [ Moped::Session ] The new session.
|
22
|
+
#
|
23
|
+
# @since 3.0.0
|
24
|
+
def create(name = nil)
|
25
|
+
return default unless name
|
26
|
+
config = Mongoid.sessions[name]
|
27
|
+
raise Errors::NoSessionConfig.new(name) unless config
|
28
|
+
create_session(config)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Get the default session.
|
32
|
+
#
|
33
|
+
# @example Get the default session.
|
34
|
+
# Factory.default
|
35
|
+
#
|
36
|
+
# @raise [ Errors::NoSessionConfig ] If no default configuration is
|
37
|
+
# found.
|
38
|
+
#
|
39
|
+
# @return [ Moped::Session ] The default session.
|
40
|
+
#
|
41
|
+
# @since 3.0.0
|
42
|
+
def default
|
43
|
+
create_session(Mongoid.sessions[:default])
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
# Create the session for the provided config.
|
49
|
+
#
|
50
|
+
# @api private
|
51
|
+
#
|
52
|
+
# @example Create the session.
|
53
|
+
# Factory.create_session(config)
|
54
|
+
#
|
55
|
+
# @param [ Hash ] configuration The session config.
|
56
|
+
#
|
57
|
+
# @return [ Moped::Session ] The session.
|
58
|
+
#
|
59
|
+
# @since 3.0.0
|
60
|
+
def create_session(configuration)
|
61
|
+
config, options = parse(configuration)
|
62
|
+
session = Moped::Session.new(config[:hosts], options)
|
63
|
+
session.use(config[:database])
|
64
|
+
if authenticated?(config)
|
65
|
+
session.login(config[:username], config[:password])
|
66
|
+
end
|
67
|
+
session
|
68
|
+
end
|
69
|
+
|
70
|
+
# Are we authenticated with this session config?
|
71
|
+
#
|
72
|
+
# @api private
|
73
|
+
#
|
74
|
+
# @example Is this session authenticated?
|
75
|
+
# Factory.authenticated?(config)
|
76
|
+
#
|
77
|
+
# @param [ Hash ] config The session config.
|
78
|
+
#
|
79
|
+
# @return [ true, false ] If we are authenticated.
|
80
|
+
#
|
81
|
+
# @since 3.0.0
|
82
|
+
def authenticated?(config)
|
83
|
+
config.has_key?(:username) && config.has_key?(:password)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Parse the configuration. If a uri is provided we need to extract the
|
87
|
+
# elements of it, otherwise the options are left alone.
|
88
|
+
#
|
89
|
+
# @api private
|
90
|
+
#
|
91
|
+
# @example Parse the config.
|
92
|
+
# Factory.parse(config)
|
93
|
+
#
|
94
|
+
# @param [ Hash ] config The configuration.
|
95
|
+
#
|
96
|
+
# @return [ Array<Hash> ] The configuration, parsed.
|
97
|
+
#
|
98
|
+
# @since 3.0.0
|
99
|
+
def parse(config)
|
100
|
+
options = config[:options].try(:dup) || {}
|
101
|
+
parsed = config.has_key?(:uri) ? MongoUri.new(config[:uri]).to_hash : config
|
102
|
+
[ parsed, options ]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Sessions
|
4
|
+
class MongoUri
|
5
|
+
|
6
|
+
SCHEME = /(mongodb:\/\/)/
|
7
|
+
USER = /([-.\w:]+)/
|
8
|
+
PASS = /([^@,]+)/
|
9
|
+
NODES = /((([-.\w]+)(?::(\w+))?,?)+)/
|
10
|
+
DATABASE = /(?:\/([-\w]+))?/
|
11
|
+
|
12
|
+
URI = /#{SCHEME}(#{USER}:#{PASS}@)?#{NODES}#{DATABASE}/
|
13
|
+
|
14
|
+
attr_reader :match
|
15
|
+
|
16
|
+
# Get the database provided in the URI.
|
17
|
+
#
|
18
|
+
# @example Get the database.
|
19
|
+
# uri.database
|
20
|
+
#
|
21
|
+
# @return [ String ] The database.
|
22
|
+
#
|
23
|
+
# @since 3.0.0
|
24
|
+
def database
|
25
|
+
@database ||= match[9]
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get the hosts provided in the URI.
|
29
|
+
#
|
30
|
+
# @example Get the hosts.
|
31
|
+
# uri.hosts
|
32
|
+
#
|
33
|
+
# @return [ Array<String> ] The hosts.
|
34
|
+
#
|
35
|
+
# @since 3.0.0
|
36
|
+
def hosts
|
37
|
+
@hosts ||= match[5].split(",")
|
38
|
+
end
|
39
|
+
|
40
|
+
# Create the new uri from the provided string.
|
41
|
+
#
|
42
|
+
# @example Create the new uri.
|
43
|
+
# MongoUri.new(uri)
|
44
|
+
#
|
45
|
+
# @param [ String ] string The uri string.
|
46
|
+
#
|
47
|
+
# @since 3.0.0
|
48
|
+
def initialize(string)
|
49
|
+
@match = string.match(URI)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Get the password provided in the URI.
|
53
|
+
#
|
54
|
+
# @example Get the password.
|
55
|
+
# uri.password
|
56
|
+
#
|
57
|
+
# @return [ String ] The password.
|
58
|
+
#
|
59
|
+
# @since 3.0.0
|
60
|
+
def password
|
61
|
+
@password ||= match[4]
|
62
|
+
end
|
63
|
+
|
64
|
+
# Get the uri as a Mongoid friendly configuration hash.
|
65
|
+
#
|
66
|
+
# @example Get the uri as a hash.
|
67
|
+
# uri.to_hash
|
68
|
+
#
|
69
|
+
# @return [ Hash ] The uri as options.
|
70
|
+
#
|
71
|
+
# @since 3.0.0
|
72
|
+
def to_hash
|
73
|
+
config = { database: database, hosts: hosts }
|
74
|
+
if username && password
|
75
|
+
config.merge!(username: username, password: password)
|
76
|
+
end
|
77
|
+
config
|
78
|
+
end
|
79
|
+
|
80
|
+
# Get the username provided in the URI.
|
81
|
+
#
|
82
|
+
# @example Get the username.
|
83
|
+
# uri.username
|
84
|
+
#
|
85
|
+
# @return [ String ] The username.
|
86
|
+
#
|
87
|
+
# @since 3.0.0
|
88
|
+
def username
|
89
|
+
@username ||= match[3]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Sessions
|
4
|
+
module Validators
|
5
|
+
|
6
|
+
# Validates the options passed to :store_in.
|
7
|
+
module Storage
|
8
|
+
extend self
|
9
|
+
|
10
|
+
VALID_OPTIONS = [ :collection, :database, :session ]
|
11
|
+
|
12
|
+
# Validate the options provided to :store_in.
|
13
|
+
#
|
14
|
+
# @example Validate the options.
|
15
|
+
# Storage.validate(:collection_name)
|
16
|
+
#
|
17
|
+
# @param [ Class ] klass The model class.
|
18
|
+
# @param [ Hash, String, Symbol ] options The provided options.
|
19
|
+
#
|
20
|
+
# @since 3.0.0
|
21
|
+
def validate(klass, options)
|
22
|
+
if !options.is_a?(::Hash) || !valid_keys?(options)
|
23
|
+
raise Errors::InvalidStorageOptions.new(klass, options)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
# Determine if all keys in the options hash are valid.
|
30
|
+
#
|
31
|
+
# @api private
|
32
|
+
#
|
33
|
+
# @example Are all keys valid?
|
34
|
+
# validator.valid_keys?({ collection: "name" })
|
35
|
+
#
|
36
|
+
# @param [ Hash ] options The options hash.
|
37
|
+
#
|
38
|
+
# @return [ true, false ] If all keys are valid.
|
39
|
+
#
|
40
|
+
# @since 3.0.0
|
41
|
+
def valid_keys?(options)
|
42
|
+
options.keys.all? do |key|
|
43
|
+
VALID_OPTIONS.include?(key)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/mongoid/sharding.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
2
|
+
module Mongoid
|
3
3
|
|
4
4
|
# This module contains behaviour for adding shard key fields to updates.
|
5
5
|
module Sharding
|
@@ -31,14 +31,14 @@ module Mongoid #:nodoc
|
|
31
31
|
#
|
32
32
|
# @since 2.0.0
|
33
33
|
def shard_key_selector
|
34
|
-
{}
|
35
|
-
|
36
|
-
|
37
|
-
end
|
34
|
+
selector = {}
|
35
|
+
shard_key_fields.each do |field|
|
36
|
+
selector[field.to_s] = send(field)
|
38
37
|
end
|
38
|
+
selector
|
39
39
|
end
|
40
40
|
|
41
|
-
module ClassMethods
|
41
|
+
module ClassMethods
|
42
42
|
|
43
43
|
# Specifies a shard key with the field(s) specified.
|
44
44
|
#
|
data/lib/mongoid/state.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
2
|
+
module Mongoid
|
3
3
|
|
4
4
|
# This module contains the behaviour for getting the various states a
|
5
5
|
# document can transition through.
|
@@ -16,9 +16,8 @@ module Mongoid #:nodoc:
|
|
16
16
|
#
|
17
17
|
# @return [ true, false ] True if new, false if not.
|
18
18
|
def new_record?
|
19
|
-
@new_record
|
19
|
+
@new_record ||= false
|
20
20
|
end
|
21
|
-
alias :new? :new_record?
|
22
21
|
|
23
22
|
# Checks if the document has been saved to the database. Returns false
|
24
23
|
# if the document has been destroyed.
|
@@ -41,7 +40,7 @@ module Mongoid #:nodoc:
|
|
41
40
|
#
|
42
41
|
# @since 2.3.2
|
43
42
|
def flagged_for_destroy?
|
44
|
-
|
43
|
+
@flagged_for_destroy ||= false
|
45
44
|
end
|
46
45
|
|
47
46
|
# Returns true if the +Document+ has been succesfully destroyed, and false
|
@@ -53,7 +52,7 @@ module Mongoid #:nodoc:
|
|
53
52
|
#
|
54
53
|
# @return [ true, false ] True if destroyed, false if not.
|
55
54
|
def destroyed?
|
56
|
-
@destroyed
|
55
|
+
@destroyed ||= false
|
57
56
|
end
|
58
57
|
alias :deleted? :destroyed?
|
59
58
|
|
@@ -64,7 +63,7 @@ module Mongoid #:nodoc:
|
|
64
63
|
#
|
65
64
|
# @return [ true, false ] Is the document new and embedded?
|
66
65
|
def pushable?
|
67
|
-
|
66
|
+
new_record? &&
|
68
67
|
embedded_many? &&
|
69
68
|
_parent.persisted? &&
|
70
69
|
!_parent.delayed_atomic_sets[atomic_path]
|
@@ -79,7 +78,7 @@ module Mongoid #:nodoc:
|
|
79
78
|
#
|
80
79
|
# @since 2.1.0
|
81
80
|
def settable?
|
82
|
-
|
81
|
+
new_record? && embedded_one? && _parent.persisted?
|
83
82
|
end
|
84
83
|
|
85
84
|
# Is the document updateable?
|
data/lib/mongoid/threaded.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "mongoid/threaded/lifecycle"
|
3
3
|
|
4
|
-
module Mongoid
|
4
|
+
module Mongoid
|
5
5
|
|
6
6
|
# This module contains logic for easy access to objects that have a lifecycle
|
7
7
|
# on the current thread.
|
@@ -13,7 +13,7 @@ module Mongoid #:nodoc:
|
|
13
13
|
# @example Begin entry into the stack.
|
14
14
|
# Threaded.begin(:create)
|
15
15
|
#
|
16
|
-
# @param [
|
16
|
+
# @param [ String ] name The name of the stack
|
17
17
|
#
|
18
18
|
# @return [ true ] True.
|
19
19
|
#
|
@@ -22,6 +22,18 @@ module Mongoid #:nodoc:
|
|
22
22
|
stack(name).push(true)
|
23
23
|
end
|
24
24
|
|
25
|
+
# Get the database sessions from the current thread.
|
26
|
+
#
|
27
|
+
# @example Get the database sessions.
|
28
|
+
# Threaded.sessions
|
29
|
+
#
|
30
|
+
# @return [ Hash ] The sessions.
|
31
|
+
#
|
32
|
+
# @since 3.0.0
|
33
|
+
def sessions
|
34
|
+
Thread.current["[mongoid]:sessions"] ||= {}
|
35
|
+
end
|
36
|
+
|
25
37
|
# Are in the middle of executing the named stack
|
26
38
|
#
|
27
39
|
# @example Are we in the stack execution?
|
@@ -61,7 +73,19 @@ module Mongoid #:nodoc:
|
|
61
73
|
#
|
62
74
|
# @since 2.4.0
|
63
75
|
def stack(name)
|
64
|
-
Thread.current[
|
76
|
+
Thread.current["[mongoid]:#{name}-stack"] ||= []
|
77
|
+
end
|
78
|
+
|
79
|
+
# Begin autosaving a document on the current thread.
|
80
|
+
#
|
81
|
+
# @example Begin autosave.
|
82
|
+
# Threaded.begin_autosave(doc)
|
83
|
+
#
|
84
|
+
# @param [ Document ] document The document to autosave.
|
85
|
+
#
|
86
|
+
# @since 3.0.0
|
87
|
+
def begin_autosave(document)
|
88
|
+
autosaves_for(document.class).push(document.id)
|
65
89
|
end
|
66
90
|
|
67
91
|
# Begin validating a document on the current thread.
|
@@ -76,16 +100,19 @@ module Mongoid #:nodoc:
|
|
76
100
|
validations_for(document.class).push(document.id)
|
77
101
|
end
|
78
102
|
|
79
|
-
# Clear out all the
|
103
|
+
# Clear out all the persistence options.
|
80
104
|
#
|
81
|
-
# @example Clear out the options.
|
82
|
-
# Threaded.
|
105
|
+
# @example Clear out the persistence options.
|
106
|
+
# Threaded.clear_persistence_options(Band)
|
83
107
|
#
|
84
|
-
# @
|
108
|
+
# @param [ Class ] klass The model class.
|
85
109
|
#
|
86
|
-
# @
|
87
|
-
|
88
|
-
|
110
|
+
# @return [ true ] true.
|
111
|
+
#
|
112
|
+
# @since 2.0.0
|
113
|
+
def clear_persistence_options(klass)
|
114
|
+
Thread.current["[mongoid][#{klass}]:persistence-options"] = nil
|
115
|
+
true
|
89
116
|
end
|
90
117
|
|
91
118
|
# Clear out all options set on a one-time basis.
|
@@ -95,10 +122,21 @@ module Mongoid #:nodoc:
|
|
95
122
|
#
|
96
123
|
# @since 2.3.0
|
97
124
|
def clear_options!
|
98
|
-
clear_safety_options!
|
99
125
|
self.timeless = false
|
100
126
|
end
|
101
127
|
|
128
|
+
# Exit autosaving a document on the current thread.
|
129
|
+
#
|
130
|
+
# @example Exit autosave.
|
131
|
+
# Threaded.exit_autosave(doc)
|
132
|
+
#
|
133
|
+
# @param [ Document ] document The document to autosave.
|
134
|
+
#
|
135
|
+
# @since 3.0.0
|
136
|
+
def exit_autosave(document)
|
137
|
+
autosaves_for(document.class).delete_one(document.id)
|
138
|
+
end
|
139
|
+
|
102
140
|
# Exit validating a document on the current thread.
|
103
141
|
#
|
104
142
|
# @example Exit validation.
|
@@ -120,7 +158,61 @@ module Mongoid #:nodoc:
|
|
120
158
|
#
|
121
159
|
# @since 2.1.0
|
122
160
|
def identity_map
|
123
|
-
Thread.current[
|
161
|
+
Thread.current["[mongoid]:identity-map"] ||= IdentityMap.new
|
162
|
+
end
|
163
|
+
|
164
|
+
# Is the identity map enabled on the current thread?
|
165
|
+
#
|
166
|
+
# @example Is the identity map enabled?
|
167
|
+
# Threaded.identity_map_enabled?
|
168
|
+
#
|
169
|
+
# @return [ true, false ] If the identity map is enabled.
|
170
|
+
#
|
171
|
+
# @since 3.0.0
|
172
|
+
def identity_map_enabled?
|
173
|
+
Thread.current["[mongoid]:identity-map-enabled"] != false
|
174
|
+
end
|
175
|
+
|
176
|
+
# Disable the identity map on either the current thread or all threads.
|
177
|
+
#
|
178
|
+
# @example Disable the identity map on all threads.
|
179
|
+
# Threaded.disable_identity_map(:all)
|
180
|
+
#
|
181
|
+
# @example Disable the identity map on the current thread.
|
182
|
+
# Threaded.disable_identity_map(:current)
|
183
|
+
#
|
184
|
+
# @param [ Symbol ] option The disabling option.
|
185
|
+
#
|
186
|
+
# @since 3.0.0
|
187
|
+
def disable_identity_map(option)
|
188
|
+
if option == :all
|
189
|
+
Thread.list.each do |thread|
|
190
|
+
thread["[mongoid]:identity-map-enabled"] = false
|
191
|
+
end
|
192
|
+
else
|
193
|
+
Thread.current["[mongoid]:identity-map-enabled"] = false
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
# Enable the identity map on either the current thread or all threads.
|
198
|
+
#
|
199
|
+
# @example Enable the identity map on all threads.
|
200
|
+
# Threaded.enable_identity_map(:all)
|
201
|
+
#
|
202
|
+
# @example Enable the identity map on the current thread.
|
203
|
+
# Threaded.enable_identity_map(:current)
|
204
|
+
#
|
205
|
+
# @param [ Symbol ] option The disabling option.
|
206
|
+
#
|
207
|
+
# @since 3.0.0
|
208
|
+
def enable_identity_map(option)
|
209
|
+
if option == :all
|
210
|
+
Thread.list.each do |thread|
|
211
|
+
thread["[mongoid]:identity-map-enabled"] = true
|
212
|
+
end
|
213
|
+
else
|
214
|
+
Thread.current["[mongoid]:identity-map-enabled"] = true
|
215
|
+
end
|
124
216
|
end
|
125
217
|
|
126
218
|
# Get the insert consumer from the current thread.
|
@@ -132,7 +224,7 @@ module Mongoid #:nodoc:
|
|
132
224
|
#
|
133
225
|
# @since 2.1.0
|
134
226
|
def insert(name)
|
135
|
-
Thread.current[
|
227
|
+
Thread.current["[mongoid][#{name}]:insert-consumer"]
|
136
228
|
end
|
137
229
|
|
138
230
|
# Set the insert consumer on the current thread.
|
@@ -146,33 +238,36 @@ module Mongoid #:nodoc:
|
|
146
238
|
#
|
147
239
|
# @since 2.1.0
|
148
240
|
def set_insert(name, consumer)
|
149
|
-
Thread.current[
|
241
|
+
Thread.current["[mongoid][#{name}]:insert-consumer"] = consumer
|
150
242
|
end
|
151
243
|
|
152
|
-
# Get the
|
244
|
+
# Get the persistence options for the current thread.
|
245
|
+
#
|
246
|
+
# @example Get the persistence options.
|
247
|
+
# Threaded.persistence_options(Band)
|
153
248
|
#
|
154
|
-
# @
|
155
|
-
# Threaded.safety_options
|
249
|
+
# @param [ Class ] klass The model class.
|
156
250
|
#
|
157
|
-
# @return [ Hash ] The current
|
251
|
+
# @return [ Hash ] The current persistence options.
|
158
252
|
#
|
159
253
|
# @since 2.1.0
|
160
|
-
def
|
161
|
-
Thread.current[
|
254
|
+
def persistence_options(klass)
|
255
|
+
Thread.current["[mongoid][#{klass}]:persistence-options"]
|
162
256
|
end
|
163
257
|
|
164
|
-
# Set the
|
258
|
+
# Set the persistence options on the current thread.
|
165
259
|
#
|
166
|
-
# @example Set the
|
167
|
-
# Threaded.
|
260
|
+
# @example Set the persistence options.
|
261
|
+
# Threaded.set_persistence_options(Band, { safe: { fsync: true }})
|
168
262
|
#
|
169
|
-
# @param [
|
263
|
+
# @param [ Class ] klass The model class.
|
264
|
+
# @param [ Hash ] options The persistence options.
|
170
265
|
#
|
171
|
-
# @return [ Hash ] The
|
266
|
+
# @return [ Hash ] The persistence options.
|
172
267
|
#
|
173
268
|
# @since 2.1.0
|
174
|
-
def
|
175
|
-
Thread.current[
|
269
|
+
def set_persistence_options(klass, options)
|
270
|
+
Thread.current["[mongoid][#{klass}]:persistence-options"] = options
|
176
271
|
end
|
177
272
|
|
178
273
|
# Get the field selection options from the current thread.
|
@@ -184,7 +279,7 @@ module Mongoid #:nodoc:
|
|
184
279
|
#
|
185
280
|
# @since 2.4.4
|
186
281
|
def selection
|
187
|
-
Thread.current[
|
282
|
+
Thread.current["[mongoid]:selection"]
|
188
283
|
end
|
189
284
|
|
190
285
|
# Set the field selection on the current thread.
|
@@ -198,7 +293,7 @@ module Mongoid #:nodoc:
|
|
198
293
|
#
|
199
294
|
# @since 2.4.4
|
200
295
|
def selection=(value)
|
201
|
-
Thread.current[
|
296
|
+
Thread.current["[mongoid]:selection"] = value
|
202
297
|
end
|
203
298
|
|
204
299
|
# Get the mongoid scope stack for chained criteria.
|
@@ -210,7 +305,7 @@ module Mongoid #:nodoc:
|
|
210
305
|
#
|
211
306
|
# @since 2.1.0
|
212
307
|
def scope_stack
|
213
|
-
Thread.current[
|
308
|
+
Thread.current["[mongoid]:scope-stack"] ||= {}
|
214
309
|
end
|
215
310
|
|
216
311
|
# Get the value of the one-off timeless call.
|
@@ -222,7 +317,7 @@ module Mongoid #:nodoc:
|
|
222
317
|
#
|
223
318
|
# @since 2.3.0
|
224
319
|
def timeless
|
225
|
-
!!Thread.current[
|
320
|
+
!!Thread.current["[mongoid]:timeless"]
|
226
321
|
end
|
227
322
|
|
228
323
|
# Set the value of the one-off timeless call.
|
@@ -234,33 +329,7 @@ module Mongoid #:nodoc:
|
|
234
329
|
#
|
235
330
|
# @since 2.3.0
|
236
331
|
def timeless=(value)
|
237
|
-
Thread.current[
|
238
|
-
end
|
239
|
-
|
240
|
-
# Get the update consumer from the current thread.
|
241
|
-
#
|
242
|
-
# @example Get the update consumer.
|
243
|
-
# Threaded.update
|
244
|
-
#
|
245
|
-
# @return [ Object ] The atomic update consumer.
|
246
|
-
#
|
247
|
-
# @since 2.1.0
|
248
|
-
def update_consumer(klass)
|
249
|
-
Thread.current[:"[mongoid][#{klass}]:update-consumer"]
|
250
|
-
end
|
251
|
-
|
252
|
-
# Set the update consumer on the current thread.
|
253
|
-
#
|
254
|
-
# @example Set the update consumer.
|
255
|
-
# Threaded.update = consumer
|
256
|
-
#
|
257
|
-
# @param [ Object ] consumer The update consumer.
|
258
|
-
#
|
259
|
-
# @return [ Object ] The update consumer.
|
260
|
-
#
|
261
|
-
# @since 2.1.0
|
262
|
-
def set_update_consumer(klass, consumer)
|
263
|
-
Thread.current[:"[mongoid][#{klass}]:update-consumer"] = consumer
|
332
|
+
Thread.current["[mongoid]:timeless"] = value
|
264
333
|
end
|
265
334
|
|
266
335
|
# Is the current thread setting timestamps?
|
@@ -275,6 +344,20 @@ module Mongoid #:nodoc:
|
|
275
344
|
!timeless
|
276
345
|
end
|
277
346
|
|
347
|
+
# Is the document autosaved on the current thread?
|
348
|
+
#
|
349
|
+
# @example Is the document autosaved?
|
350
|
+
# Threaded.autosaved?(doc)
|
351
|
+
#
|
352
|
+
# @param [ Document ] document The document to check.
|
353
|
+
#
|
354
|
+
# @return [ true, false ] If the document is autosaved.
|
355
|
+
#
|
356
|
+
# @since 2.1.9
|
357
|
+
def autosaved?(document)
|
358
|
+
autosaves_for(document.class).include?(document.id)
|
359
|
+
end
|
360
|
+
|
278
361
|
# Is the document validated on the current thread?
|
279
362
|
#
|
280
363
|
# @example Is the document validated?
|
@@ -289,6 +372,18 @@ module Mongoid #:nodoc:
|
|
289
372
|
validations_for(document.class).include?(document.id)
|
290
373
|
end
|
291
374
|
|
375
|
+
# Get all autosaves on the current thread.
|
376
|
+
#
|
377
|
+
# @example Get all autosaves.
|
378
|
+
# Threaded.autosaves
|
379
|
+
#
|
380
|
+
# @return [ Hash ] The current autosaves.
|
381
|
+
#
|
382
|
+
# @since 3.0.0
|
383
|
+
def autosaves
|
384
|
+
Thread.current["[mongoid]:autosaves"] ||= {}
|
385
|
+
end
|
386
|
+
|
292
387
|
# Get all validations on the current thread.
|
293
388
|
#
|
294
389
|
# @example Get all validations.
|
@@ -298,9 +393,22 @@ module Mongoid #:nodoc:
|
|
298
393
|
#
|
299
394
|
# @since 2.1.9
|
300
395
|
def validations
|
301
|
-
Thread.current[
|
396
|
+
Thread.current["[mongoid]:validations"] ||= {}
|
302
397
|
end
|
303
398
|
|
399
|
+
# Get all autosaves on the current thread for the class.
|
400
|
+
#
|
401
|
+
# @example Get all autosaves.
|
402
|
+
# Threaded.autosaves_for(Person)
|
403
|
+
#
|
404
|
+
# @param [ Class ] The class to check.
|
405
|
+
#
|
406
|
+
# @return [ Array ] The current autosaves.
|
407
|
+
#
|
408
|
+
# @since 3.0.0
|
409
|
+
def autosaves_for(klass)
|
410
|
+
autosaves[klass] ||= []
|
411
|
+
end
|
304
412
|
# Get all validations on the current thread for the class.
|
305
413
|
#
|
306
414
|
# @example Get all validations.
|