mongoid 2.4.9 → 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 +869 -8
- 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 -6
- 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 +4 -4
- 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 +39 -12
- 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 +12 -4
- 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 -148
- 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 +14 -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 -122
- 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 +103 -25
- data/lib/mongoid/validations.rb +62 -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 +93 -155
- 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 -485
- 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 -31
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Validations
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Validations
|
|
4
4
|
|
|
5
5
|
# Validates whether or not a field is unique against the documents in the
|
|
6
6
|
# database.
|
|
@@ -44,32 +44,36 @@ module Mongoid #:nodoc:
|
|
|
44
44
|
attrib, val = to_validate(document, attribute, value)
|
|
45
45
|
return unless validation_required?(document, attrib)
|
|
46
46
|
if document.embedded?
|
|
47
|
-
|
|
48
|
-
relation = document._parent.send(document.metadata.name)
|
|
49
|
-
criteria = relation.where(criterion(document, attrib, val))
|
|
50
|
-
criteria = scope(criteria, document, attrib)
|
|
51
|
-
if criteria.count > 1
|
|
52
|
-
document.errors.add(
|
|
53
|
-
attrib,
|
|
54
|
-
:taken,
|
|
55
|
-
options.except(:case_sensitive, :scope).merge(:val => val)
|
|
56
|
-
)
|
|
57
|
-
end
|
|
47
|
+
validate_embedded(document, attrib, val)
|
|
58
48
|
else
|
|
59
|
-
|
|
60
|
-
criteria = scope(criteria, document, attrib)
|
|
61
|
-
if criteria.exists?
|
|
62
|
-
document.errors.add(
|
|
63
|
-
attrib, :taken, options.except(:case_sensitive, :scope).merge(:val => val)
|
|
64
|
-
)
|
|
65
|
-
end
|
|
49
|
+
validate_root(document, attrib, val)
|
|
66
50
|
end
|
|
67
51
|
end
|
|
68
52
|
|
|
69
|
-
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
# Add the error to the document.
|
|
56
|
+
#
|
|
57
|
+
# @api private
|
|
58
|
+
#
|
|
59
|
+
# @example Add the error.
|
|
60
|
+
# validator.add_error(doc, :name, "test")
|
|
61
|
+
#
|
|
62
|
+
# @param [ Document ] document The document to validate.
|
|
63
|
+
# @param [ Symbol ] attribute The name of the attribute.
|
|
64
|
+
# @param [ Object ] value The value of the object.
|
|
65
|
+
#
|
|
66
|
+
# @since 2.4.10
|
|
67
|
+
def add_error(document, attribute, value)
|
|
68
|
+
document.errors.add(
|
|
69
|
+
attribute, :taken, options.except(:case_sensitive, :scope).merge(value: value)
|
|
70
|
+
)
|
|
71
|
+
end
|
|
70
72
|
|
|
71
73
|
# Should the uniqueness validation be case sensitive?
|
|
72
74
|
#
|
|
75
|
+
# @api private
|
|
76
|
+
#
|
|
73
77
|
# @example Is the validation case sensitive?
|
|
74
78
|
# validator.case_sensitive?
|
|
75
79
|
#
|
|
@@ -80,8 +84,36 @@ module Mongoid #:nodoc:
|
|
|
80
84
|
!(options[:case_sensitive] == false)
|
|
81
85
|
end
|
|
82
86
|
|
|
87
|
+
# Create the validation criteria.
|
|
88
|
+
#
|
|
89
|
+
# @api private
|
|
90
|
+
#
|
|
91
|
+
# @example Create the criteria.
|
|
92
|
+
# validator.create_criteria(User, user, :name, "syd")
|
|
93
|
+
#
|
|
94
|
+
# @param [ Class, Proxy ] base The base to execute the criteria from.
|
|
95
|
+
# @param [ Document ] document The document to validate.
|
|
96
|
+
# @param [ Symbol ] attribute The name of the attribute.
|
|
97
|
+
# @param [ Object ] value The value of the object.
|
|
98
|
+
#
|
|
99
|
+
# @return [ Criteria ] The criteria.
|
|
100
|
+
#
|
|
101
|
+
# @since 2.4.10
|
|
102
|
+
def create_criteria(base, document, attribute, value)
|
|
103
|
+
field = document.fields[attribute.to_s]
|
|
104
|
+
criteria = base.unscoped
|
|
105
|
+
if field.try(:localized?)
|
|
106
|
+
criteria.selector.update(criterion(document, attribute, value))
|
|
107
|
+
else
|
|
108
|
+
criteria = criteria.where(criterion(document, attribute, value))
|
|
109
|
+
end
|
|
110
|
+
scope(criteria, document, attribute)
|
|
111
|
+
end
|
|
112
|
+
|
|
83
113
|
# Get the default criteria for checking uniqueness.
|
|
84
114
|
#
|
|
115
|
+
# @api private
|
|
116
|
+
#
|
|
85
117
|
# @example Get the criteria.
|
|
86
118
|
# validator.criterion(person, :title, "Sir")
|
|
87
119
|
#
|
|
@@ -93,15 +125,17 @@ module Mongoid #:nodoc:
|
|
|
93
125
|
#
|
|
94
126
|
# @since 2.3.0
|
|
95
127
|
def criterion(document, attribute, value)
|
|
96
|
-
{ attribute => filter(value) }
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
end
|
|
128
|
+
selector = { attribute => filter(value) }
|
|
129
|
+
if document.persisted? && !document.embedded?
|
|
130
|
+
selector.merge!(_id: { "$ne" => document.id })
|
|
100
131
|
end
|
|
132
|
+
selector
|
|
101
133
|
end
|
|
102
134
|
|
|
103
135
|
# Filter the value based on whether the check is case sensitive or not.
|
|
104
136
|
#
|
|
137
|
+
# @api private
|
|
138
|
+
#
|
|
105
139
|
# @example Filter the value.
|
|
106
140
|
# validator.filter("testing")
|
|
107
141
|
#
|
|
@@ -116,6 +150,8 @@ module Mongoid #:nodoc:
|
|
|
116
150
|
|
|
117
151
|
# Scope the criteria to the scope options provided.
|
|
118
152
|
#
|
|
153
|
+
# @api private
|
|
154
|
+
#
|
|
119
155
|
# @example Scope the criteria.
|
|
120
156
|
# validator.scope(criteria, document)
|
|
121
157
|
#
|
|
@@ -134,6 +170,8 @@ module Mongoid #:nodoc:
|
|
|
134
170
|
|
|
135
171
|
# Should validation be skipped?
|
|
136
172
|
#
|
|
173
|
+
# @api private
|
|
174
|
+
#
|
|
137
175
|
# @example Should the validation be skipped?
|
|
138
176
|
# validator.skip_validation?(doc)
|
|
139
177
|
#
|
|
@@ -148,6 +186,8 @@ module Mongoid #:nodoc:
|
|
|
148
186
|
|
|
149
187
|
# Scope reference has changed?
|
|
150
188
|
#
|
|
189
|
+
# @api private
|
|
190
|
+
#
|
|
151
191
|
# @example Has scope reference changed?
|
|
152
192
|
# validator.scope_value_changed?(doc)
|
|
153
193
|
#
|
|
@@ -167,6 +207,8 @@ module Mongoid #:nodoc:
|
|
|
167
207
|
# we need to send the key name and value to the db, not the relation
|
|
168
208
|
# object.
|
|
169
209
|
#
|
|
210
|
+
# @api private
|
|
211
|
+
#
|
|
170
212
|
# @example Get the name and key to validate.
|
|
171
213
|
# validator.to_validate(doc, :parent, Parent.new)
|
|
172
214
|
#
|
|
@@ -186,6 +228,42 @@ module Mongoid #:nodoc:
|
|
|
186
228
|
end
|
|
187
229
|
end
|
|
188
230
|
|
|
231
|
+
# Validate an embedded document.
|
|
232
|
+
#
|
|
233
|
+
# @api private
|
|
234
|
+
#
|
|
235
|
+
# @example Validate the embedded document.
|
|
236
|
+
# validator.validate_embedded(doc, :name, "test")
|
|
237
|
+
#
|
|
238
|
+
# @param [ Document ] document The document.
|
|
239
|
+
# @param [ Symbol ] attribute The attribute name.
|
|
240
|
+
# @param [ Object ] value The value.
|
|
241
|
+
#
|
|
242
|
+
# @since 2.4.10
|
|
243
|
+
def validate_embedded(document, attribute, value)
|
|
244
|
+
return if skip_validation?(document)
|
|
245
|
+
relation = document._parent.send(document.metadata.name)
|
|
246
|
+
criteria = create_criteria(relation, document, attribute, value)
|
|
247
|
+
add_error(document, attribute, value) if criteria.count > 1
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
# Validate a root document.
|
|
251
|
+
#
|
|
252
|
+
# @api private
|
|
253
|
+
#
|
|
254
|
+
# @example Validate the root document.
|
|
255
|
+
# validator.validate_root(doc, :name, "test")
|
|
256
|
+
#
|
|
257
|
+
# @param [ Document ] document The document.
|
|
258
|
+
# @param [ Symbol ] attribute The attribute name.
|
|
259
|
+
# @param [ Object ] value The value.
|
|
260
|
+
#
|
|
261
|
+
# @since 2.4.10
|
|
262
|
+
def validate_root(document, attribute, value)
|
|
263
|
+
criteria = create_criteria(klass, document, attribute, value)
|
|
264
|
+
add_error(document, attribute, value) if criteria.exists?
|
|
265
|
+
end
|
|
266
|
+
|
|
189
267
|
# Are we required to validate the document?
|
|
190
268
|
#
|
|
191
269
|
# @example Is validation needed?
|
data/lib/mongoid/validations.rb
CHANGED
|
@@ -6,7 +6,7 @@ require "mongoid/validations/length"
|
|
|
6
6
|
require "mongoid/validations/presence"
|
|
7
7
|
require "mongoid/validations/uniqueness"
|
|
8
8
|
|
|
9
|
-
module Mongoid
|
|
9
|
+
module Mongoid
|
|
10
10
|
|
|
11
11
|
# This module provides additional validations that ActiveModel does not
|
|
12
12
|
# provide: validates_associated and validates_uniqueness_of.
|
|
@@ -48,12 +48,12 @@ module Mongoid #:nodoc:
|
|
|
48
48
|
# @since 2.0.0.rc.1
|
|
49
49
|
def read_attribute_for_validation(attr)
|
|
50
50
|
attribute = attr.to_s
|
|
51
|
-
if relations
|
|
51
|
+
if relations.has_key?(attribute)
|
|
52
52
|
begin_validate
|
|
53
53
|
relation = send(attr)
|
|
54
54
|
exit_validate
|
|
55
55
|
relation.do_or_do_not(:in_memory) || relation
|
|
56
|
-
elsif fields[attribute]
|
|
56
|
+
elsif fields[attribute].try(:localized?)
|
|
57
57
|
attributes[attribute]
|
|
58
58
|
else
|
|
59
59
|
send(attr)
|
|
@@ -74,7 +74,7 @@ module Mongoid #:nodoc:
|
|
|
74
74
|
#
|
|
75
75
|
# @since 2.0.0.rc.6
|
|
76
76
|
def valid?(context = nil)
|
|
77
|
-
super context ? context : (
|
|
77
|
+
super context ? context : (new_record? ? :create : :update)
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
# Used to prevent infinite loops in associated validations.
|
|
@@ -89,22 +89,7 @@ module Mongoid #:nodoc:
|
|
|
89
89
|
Threaded.validated?(self)
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
-
module ClassMethods
|
|
93
|
-
|
|
94
|
-
# Validates whether or not a field matches a certain regular expression.
|
|
95
|
-
#
|
|
96
|
-
# @example
|
|
97
|
-
# class Person
|
|
98
|
-
# include Mongoid::Document
|
|
99
|
-
# field :website
|
|
100
|
-
#
|
|
101
|
-
# validates_format_of :website, :with => URI.regexp
|
|
102
|
-
# end
|
|
103
|
-
#
|
|
104
|
-
# @param [ Array ] *args The arguments to pass to the validator.
|
|
105
|
-
def validates_format_of(*args)
|
|
106
|
-
validates_with(FormatValidator, _merge_attributes(args))
|
|
107
|
-
end
|
|
92
|
+
module ClassMethods
|
|
108
93
|
|
|
109
94
|
# Validates whether or not an association is valid or not. Will correctly
|
|
110
95
|
# handle has one and has many associations.
|
|
@@ -141,6 +126,40 @@ module Mongoid #:nodoc:
|
|
|
141
126
|
validates_with(UniquenessValidator, _merge_attributes(args))
|
|
142
127
|
end
|
|
143
128
|
|
|
129
|
+
# Validates the format of a field.
|
|
130
|
+
#
|
|
131
|
+
# @example
|
|
132
|
+
# class Person
|
|
133
|
+
# include Mongoid::Document
|
|
134
|
+
# field :title
|
|
135
|
+
#
|
|
136
|
+
# validates_format_of :title, with: /^[a-z0-9 \-_]*$/i
|
|
137
|
+
# end
|
|
138
|
+
#
|
|
139
|
+
# @param [ Array ] args The names of the fields to validate.
|
|
140
|
+
#
|
|
141
|
+
# @since 2.4.0
|
|
142
|
+
def validates_format_of(*args)
|
|
143
|
+
validates_with(Mongoid::Validations::FormatValidator, _merge_attributes(args))
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Validates the length of a field.
|
|
147
|
+
#
|
|
148
|
+
# @example
|
|
149
|
+
# class Person
|
|
150
|
+
# include Mongoid::Document
|
|
151
|
+
# field :title
|
|
152
|
+
#
|
|
153
|
+
# validates_length_of :title, minimum: 100
|
|
154
|
+
# end
|
|
155
|
+
#
|
|
156
|
+
# @param [ Array ] args The names of the fields to validate.
|
|
157
|
+
#
|
|
158
|
+
# @since 2.4.0
|
|
159
|
+
def validates_length_of(*args)
|
|
160
|
+
validates_with(Mongoid::Validations::LengthValidator, _merge_attributes(args))
|
|
161
|
+
end
|
|
162
|
+
|
|
144
163
|
# Validates whether or not a field is present - meaning nil or empty.
|
|
145
164
|
#
|
|
146
165
|
# @example
|
|
@@ -158,6 +177,29 @@ module Mongoid #:nodoc:
|
|
|
158
177
|
validates_with(PresenceValidator, _merge_attributes(args))
|
|
159
178
|
end
|
|
160
179
|
|
|
180
|
+
# Add validation with the supplied validators forthe provided fields
|
|
181
|
+
# with options.
|
|
182
|
+
#
|
|
183
|
+
# @example Validate with a specific validator.
|
|
184
|
+
# validates_with MyValidator, on: :create
|
|
185
|
+
#
|
|
186
|
+
# @param [ Class<Array>, Hash ] *args The validator classes and options.
|
|
187
|
+
#
|
|
188
|
+
# @note See ActiveModel::Validations::With for full options. This is
|
|
189
|
+
# overridden to add autosave functionality when presence validation is
|
|
190
|
+
# added.
|
|
191
|
+
#
|
|
192
|
+
# @since 3.0.0
|
|
193
|
+
def validates_with(*args, &block)
|
|
194
|
+
if args.first == PresenceValidator
|
|
195
|
+
args.last[:attributes].each do |name|
|
|
196
|
+
metadata = relations[name.to_s]
|
|
197
|
+
autosave(metadata.merge!(autosave: true)) if metadata
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
super
|
|
201
|
+
end
|
|
202
|
+
|
|
161
203
|
protected
|
|
162
204
|
|
|
163
205
|
# Adds an associated validator for the relation if the validate option
|
data/lib/mongoid/version.rb
CHANGED
data/lib/mongoid/versioning.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
|
|
4
4
|
# Include this module to get automatic versioning of root level documents.
|
|
5
5
|
# This will add a version field to the +Document+ and a has_many association
|
|
@@ -8,17 +8,17 @@ module Mongoid #:nodoc:
|
|
|
8
8
|
extend ActiveSupport::Concern
|
|
9
9
|
|
|
10
10
|
included do
|
|
11
|
-
field :version, :
|
|
11
|
+
field :version, type: Integer, default: 1
|
|
12
12
|
|
|
13
13
|
embeds_many \
|
|
14
14
|
:versions,
|
|
15
|
-
:
|
|
16
|
-
:
|
|
17
|
-
:
|
|
18
|
-
:
|
|
19
|
-
:
|
|
15
|
+
class_name: self.name,
|
|
16
|
+
validate: false,
|
|
17
|
+
cyclic: true,
|
|
18
|
+
inverse_of: nil,
|
|
19
|
+
versioned: true
|
|
20
20
|
|
|
21
|
-
set_callback :save, :before, :revise, :
|
|
21
|
+
set_callback :save, :before, :revise, if: :revisable?
|
|
22
22
|
|
|
23
23
|
class_attribute :version_max
|
|
24
24
|
self.cyclic = true
|
|
@@ -36,17 +36,16 @@ module Mongoid #:nodoc:
|
|
|
36
36
|
def revise
|
|
37
37
|
previous = previous_revision
|
|
38
38
|
if previous && versioned_attributes_changed?
|
|
39
|
-
versions.build(
|
|
40
|
-
previous.versioned_attributes, :
|
|
41
|
-
)
|
|
39
|
+
new_version = versions.build(
|
|
40
|
+
previous.versioned_attributes, without_protection: true
|
|
41
|
+
)
|
|
42
|
+
new_version._id = nil
|
|
42
43
|
if version_max.present? && versions.length > version_max
|
|
43
44
|
deleted = versions.first
|
|
44
45
|
if deleted.paranoid?
|
|
45
46
|
versions.delete_one(deleted)
|
|
46
|
-
collection.
|
|
47
|
-
|
|
48
|
-
{ "$pull" => { "versions" => { "version" => deleted.version }}}
|
|
49
|
-
)
|
|
47
|
+
collection.find(atomic_selector).
|
|
48
|
+
update({ "$pull" => { "versions" => { "version" => deleted.version }}})
|
|
50
49
|
else
|
|
51
50
|
versions.delete(deleted)
|
|
52
51
|
end
|
|
@@ -63,8 +62,8 @@ module Mongoid #:nodoc:
|
|
|
63
62
|
#
|
|
64
63
|
# @since 2.2.1
|
|
65
64
|
def revise!
|
|
66
|
-
|
|
67
|
-
(previous_revision || self).versioned_attributes, :
|
|
65
|
+
versions.build(
|
|
66
|
+
(previous_revision || self).versioned_attributes, without_protection: true
|
|
68
67
|
)
|
|
69
68
|
versions.shift if version_max.present? && versions.length > version_max
|
|
70
69
|
self.version = (version || 1 ) + 1
|
|
@@ -132,8 +131,8 @@ module Mongoid #:nodoc:
|
|
|
132
131
|
def previous_revision
|
|
133
132
|
_loading_revision do
|
|
134
133
|
self.class.unscoped.
|
|
135
|
-
where(:
|
|
136
|
-
any_of({ :
|
|
134
|
+
where(_id: id).
|
|
135
|
+
any_of({ version: version }, { version: nil }).first
|
|
137
136
|
end
|
|
138
137
|
end
|
|
139
138
|
|
|
@@ -160,7 +159,7 @@ module Mongoid #:nodoc:
|
|
|
160
159
|
#
|
|
161
160
|
# @since 2.0.0
|
|
162
161
|
def versionless?
|
|
163
|
-
|
|
162
|
+
@versionless ||= false
|
|
164
163
|
end
|
|
165
164
|
|
|
166
165
|
# Filters fields that should not be versioned out of an attributes hash.
|
|
@@ -172,15 +171,15 @@ module Mongoid #:nodoc:
|
|
|
172
171
|
#
|
|
173
172
|
# @since 2.1.0
|
|
174
173
|
def only_versioned_attributes(hash)
|
|
175
|
-
{}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
end
|
|
174
|
+
versioned = {}
|
|
175
|
+
hash.except("versions").each_pair do |name, value|
|
|
176
|
+
field = fields[name]
|
|
177
|
+
versioned[name] = value if !field || field.versioned?
|
|
180
178
|
end
|
|
179
|
+
versioned
|
|
181
180
|
end
|
|
182
181
|
|
|
183
|
-
module ClassMethods
|
|
182
|
+
module ClassMethods
|
|
184
183
|
|
|
185
184
|
# Sets the maximum number of versions to store.
|
|
186
185
|
#
|
data/lib/mongoid.rb
CHANGED
|
@@ -22,13 +22,18 @@
|
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
23
|
require "delegate"
|
|
24
24
|
require "time"
|
|
25
|
+
require "set"
|
|
26
|
+
|
|
25
27
|
require "active_support/core_ext"
|
|
26
28
|
require 'active_support/json'
|
|
27
29
|
require "active_support/inflector"
|
|
28
|
-
require "active_support/lazy_load_hooks"
|
|
29
30
|
require "active_support/time_with_zone"
|
|
30
31
|
require "active_model"
|
|
31
|
-
|
|
32
|
+
|
|
33
|
+
require "origin"
|
|
34
|
+
require "moped"
|
|
35
|
+
BSON = Moped::BSON
|
|
36
|
+
|
|
32
37
|
require "mongoid/extensions"
|
|
33
38
|
require "mongoid/errors"
|
|
34
39
|
require "mongoid/threaded"
|
|
@@ -36,42 +41,34 @@ require "mongoid/relations"
|
|
|
36
41
|
require "mongoid/atomic"
|
|
37
42
|
require "mongoid/attributes"
|
|
38
43
|
require "mongoid/callbacks"
|
|
39
|
-
require "mongoid/collection"
|
|
40
|
-
require "mongoid/collections"
|
|
41
44
|
require "mongoid/config"
|
|
42
|
-
require "mongoid/
|
|
45
|
+
require "mongoid/contextual"
|
|
43
46
|
require "mongoid/copyable"
|
|
44
47
|
require "mongoid/criteria"
|
|
45
|
-
require "mongoid/cursor"
|
|
46
|
-
require "mongoid/default_scope"
|
|
47
48
|
require "mongoid/dirty"
|
|
48
|
-
require "mongoid/extras"
|
|
49
49
|
require "mongoid/factory"
|
|
50
50
|
require "mongoid/fields"
|
|
51
51
|
require "mongoid/finders"
|
|
52
52
|
require "mongoid/hierarchy"
|
|
53
|
-
require "mongoid/identity"
|
|
54
53
|
require "mongoid/identity_map"
|
|
55
54
|
require "mongoid/indexes"
|
|
56
55
|
require "mongoid/inspection"
|
|
57
56
|
require "mongoid/javascript"
|
|
58
57
|
require "mongoid/json"
|
|
59
|
-
require "mongoid/
|
|
60
|
-
require "mongoid/logger"
|
|
58
|
+
require "mongoid/loggable"
|
|
61
59
|
require "mongoid/matchers"
|
|
62
60
|
require "mongoid/multi_parameter_attributes"
|
|
63
|
-
require "mongoid/multi_database"
|
|
64
|
-
require "mongoid/named_scope"
|
|
65
61
|
require "mongoid/nested_attributes"
|
|
66
62
|
require "mongoid/observer"
|
|
67
63
|
require "mongoid/persistence"
|
|
68
64
|
require "mongoid/reloading"
|
|
69
|
-
require "mongoid/
|
|
70
|
-
require "mongoid/scope"
|
|
65
|
+
require "mongoid/scoping"
|
|
71
66
|
require "mongoid/serialization"
|
|
67
|
+
require "mongoid/sessions"
|
|
72
68
|
require "mongoid/sharding"
|
|
73
69
|
require "mongoid/state"
|
|
74
70
|
require "mongoid/timestamps"
|
|
71
|
+
require "mongoid/unit_of_work"
|
|
75
72
|
require "mongoid/validations"
|
|
76
73
|
require "mongoid/version"
|
|
77
74
|
require "mongoid/versioning"
|
|
@@ -94,7 +91,9 @@ end
|
|
|
94
91
|
# add english load path by default
|
|
95
92
|
I18n.load_path << File.join(File.dirname(__FILE__), "config", "locales", "en.yml")
|
|
96
93
|
|
|
97
|
-
module Mongoid
|
|
94
|
+
module Mongoid
|
|
95
|
+
extend Loggable
|
|
96
|
+
extend UnitOfWork
|
|
98
97
|
extend self
|
|
99
98
|
|
|
100
99
|
MONGODB_VERSION = "2.0.0"
|
|
@@ -103,10 +102,8 @@ module Mongoid #:nodoc
|
|
|
103
102
|
#
|
|
104
103
|
# @example Set up configuration options.
|
|
105
104
|
# Mongoid.configure do |config|
|
|
106
|
-
# name = "mongoid_test"
|
|
107
|
-
# host = "localhost"
|
|
108
105
|
# config.allow_dynamic_fields = false
|
|
109
|
-
# config.
|
|
106
|
+
# config.use(name: "mongoid_test", host: "localhost", port: 27017)
|
|
110
107
|
# end
|
|
111
108
|
#
|
|
112
109
|
# @return [ Config ] The configuration obejct.
|
|
@@ -115,25 +112,13 @@ module Mongoid #:nodoc
|
|
|
115
112
|
def configure
|
|
116
113
|
block_given? ? yield(Config) : Config
|
|
117
114
|
end
|
|
118
|
-
alias :config :configure
|
|
119
115
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
# end
|
|
127
|
-
#
|
|
128
|
-
# @return [ Object ] The result of the block.
|
|
129
|
-
#
|
|
130
|
-
# @since 2.1.0
|
|
131
|
-
def unit_of_work
|
|
132
|
-
begin
|
|
133
|
-
yield if block_given?
|
|
134
|
-
ensure
|
|
135
|
-
IdentityMap.clear
|
|
136
|
-
end
|
|
116
|
+
def default_session
|
|
117
|
+
Sessions.default
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def session(name)
|
|
121
|
+
Sessions.with_name(name)
|
|
137
122
|
end
|
|
138
123
|
|
|
139
124
|
# Take all the public instance methods from the Config singleton and allow
|
|
@@ -143,7 +128,7 @@ module Mongoid #:nodoc
|
|
|
143
128
|
# Mongoid.database = Mongo::Connection.new.db("test")
|
|
144
129
|
#
|
|
145
130
|
# @since 1.0.0
|
|
146
|
-
delegate
|
|
131
|
+
delegate(*(Config.public_instance_methods(false) +
|
|
147
132
|
ActiveModel::Observing::ClassMethods.public_instance_methods(false) <<
|
|
148
|
-
{ :
|
|
133
|
+
{ to: Config }))
|
|
149
134
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Rack
|
|
3
|
-
module Mongoid
|
|
4
|
-
module Middleware
|
|
2
|
+
module Rack
|
|
3
|
+
module Mongoid
|
|
4
|
+
module Middleware
|
|
5
5
|
|
|
6
6
|
# This middleware contains the behaviour needed to properly use the
|
|
7
7
|
# identity map in Rack based applications.
|
|
@@ -6,7 +6,7 @@ module Mongoid
|
|
|
6
6
|
class ConfigGenerator < Rails::Generators::Base
|
|
7
7
|
desc "Creates a Mongoid configuration file at config/mongoid.yml"
|
|
8
8
|
|
|
9
|
-
argument :database_name, :
|
|
9
|
+
argument :database_name, type: :string, optional: true
|
|
10
10
|
|
|
11
11
|
def self.source_root
|
|
12
12
|
@_mongoid_source_root ||= File.expand_path("../templates", __FILE__)
|
|
@@ -1,20 +1,60 @@
|
|
|
1
1
|
development:
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
2
|
+
# Configure available database sessions. (required)
|
|
3
|
+
sessions:
|
|
4
|
+
# Defines the default session. (required)
|
|
5
|
+
default:
|
|
6
|
+
# Defines the name of the default database that Mongoid can connect to.
|
|
7
|
+
# (required).
|
|
8
|
+
database: <%= database_name || app_name %>_development
|
|
9
|
+
# Provides the hosts the default session can connect to. Must be an array
|
|
10
|
+
# of host:port pairs. (required)
|
|
11
|
+
hosts:
|
|
12
|
+
- localhost:27017
|
|
13
|
+
options:
|
|
14
|
+
# Change whether the session persists in safe mode by default.
|
|
15
|
+
# (default: false)
|
|
16
|
+
# safe: false
|
|
17
|
+
|
|
18
|
+
# Change the default consistency model to :eventual or :strong.
|
|
19
|
+
# :eventual will send reads to secondaries, :strong sends everything
|
|
20
|
+
# to master. (default: :eventual)
|
|
21
|
+
consistency: :strong
|
|
22
|
+
# Configure Mongoid specific options. (optional)
|
|
23
|
+
options:
|
|
24
|
+
# Configuration for whether or not to allow access to fields that do
|
|
25
|
+
# not have a field definition on the model. (default: true)
|
|
26
|
+
# allow_dynamic_fields: true
|
|
27
|
+
|
|
28
|
+
# Enable the identity map, needed for eager loading. (default: false)
|
|
29
|
+
# identity_map_enabled: false
|
|
30
|
+
|
|
31
|
+
# Includes the root model name in json serialization. (default: false)
|
|
32
|
+
# include_root_in_json: false
|
|
33
|
+
|
|
34
|
+
# Include the _type field in serializaion. (default: false)
|
|
35
|
+
# include_type_for_serialization: false
|
|
36
|
+
|
|
37
|
+
# Preload all models in development, needed when models use
|
|
38
|
+
# inheritance. (default: false)
|
|
39
|
+
# preload_models: false
|
|
40
|
+
|
|
41
|
+
# Protect id and type from mass assignment. (default: true)
|
|
42
|
+
# protect_sensitive_fields: true
|
|
43
|
+
|
|
44
|
+
# Raise an error when performing a #find and the document is not found.
|
|
45
|
+
# (default: true)
|
|
46
|
+
# raise_not_found_error: true
|
|
47
|
+
|
|
48
|
+
# Raise an error when defining a scope with the same name as an
|
|
49
|
+
# existing method. (default: false)
|
|
50
|
+
# scope_overwrite_exception: false
|
|
51
|
+
|
|
52
|
+
# Skip the database version check, used when connecting to a db without
|
|
53
|
+
# admin access. (default: false)
|
|
54
|
+
# skip_version_check: false
|
|
55
|
+
|
|
56
|
+
# User Active Support's time zone in conversions. (default: true)
|
|
57
|
+
# use_activesupport_time_zone: true
|
|
58
|
+
|
|
59
|
+
# Ensure all times are UTC in the app side. (default: false)
|
|
60
|
+
# use_utc: false
|