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,80 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Indexes
|
4
|
+
module Validators
|
5
|
+
|
6
|
+
# Validates the options passed to the index macro.
|
7
|
+
module Options
|
8
|
+
extend self
|
9
|
+
|
10
|
+
VALID_OPTIONS = [ :background, :drop_dups, :name, :sparse, :unique ]
|
11
|
+
VALID_TYPES = [ 1, -1, "2d" ]
|
12
|
+
|
13
|
+
# Validate the index specification.
|
14
|
+
#
|
15
|
+
# @example Validate the index spec.
|
16
|
+
# Options.validate(Band, name: 1)
|
17
|
+
#
|
18
|
+
# @param [ Class ] klass The model class.
|
19
|
+
# @param [ Hash ] spec The index specification.
|
20
|
+
# @param [ Hash ] options The index options.
|
21
|
+
#
|
22
|
+
# @raise [ Errors::InvalidIndex ] If validation failed.
|
23
|
+
#
|
24
|
+
# @since 3.0.0
|
25
|
+
def validate(klass, spec, options)
|
26
|
+
validate_spec(klass, spec, options)
|
27
|
+
validate_options(klass, spec, options)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Validates the options of the index spec.
|
33
|
+
#
|
34
|
+
# @api private
|
35
|
+
#
|
36
|
+
# @example Validate the options.
|
37
|
+
# Options.validate_options(Band, name: 1)
|
38
|
+
#
|
39
|
+
# @param [ Class ] klass The model class.
|
40
|
+
# @param [ Hash ] spec The index specification.
|
41
|
+
# @param [ Hash ] options The index options.
|
42
|
+
#
|
43
|
+
# @raise [ Errors::InvalidIndex ] If validation failed.
|
44
|
+
#
|
45
|
+
# @since 3.0.0
|
46
|
+
def validate_options(klass, spec, options)
|
47
|
+
options.each_pair do |name, value|
|
48
|
+
unless VALID_OPTIONS.include?(name)
|
49
|
+
raise Errors::InvalidIndex.new(klass, spec, options)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Validates the index spec.
|
55
|
+
#
|
56
|
+
# @api private
|
57
|
+
#
|
58
|
+
# @example Validate the spec.
|
59
|
+
# Options.validate_spec(Band, name: 1)
|
60
|
+
#
|
61
|
+
# @param [ Class ] klass The model class.
|
62
|
+
# @param [ Hash ] spec The index specification.
|
63
|
+
# @param [ Hash ] options The index options.
|
64
|
+
#
|
65
|
+
# @raise [ Errors::InvalidIndex ] If validation failed.
|
66
|
+
#
|
67
|
+
# @since 3.0.0
|
68
|
+
def validate_spec(klass, spec, options)
|
69
|
+
raise Errors::InvalidIndex.new(klass, spec, options) if !spec.is_a?(::Hash)
|
70
|
+
spec.each_pair do |name, value|
|
71
|
+
next if name == :options
|
72
|
+
unless VALID_TYPES.include?(value)
|
73
|
+
raise Errors::InvalidIndex.new(klass, spec, options)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
data/lib/mongoid/inspection.rb
CHANGED
data/lib/mongoid/javascript.rb
CHANGED
data/lib/mongoid/json.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
2
|
+
module Mongoid
|
3
3
|
# This module is for hooking in to +ActiveModel+s serialization to let
|
4
4
|
# configuring the ability to include the root in JSON happen from the Mongoid
|
5
5
|
# config.
|
@@ -10,7 +10,7 @@ module Mongoid #:nodoc:
|
|
10
10
|
# similar to +ActiveRecord+.
|
11
11
|
included do
|
12
12
|
undef_method :include_root_in_json
|
13
|
-
delegate :include_root_in_json, :
|
13
|
+
delegate :include_root_in_json, to: ::Mongoid
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
|
4
|
+
# Contains logging behaviour.
|
5
|
+
module Loggable
|
6
|
+
|
7
|
+
# Get the logger.
|
8
|
+
#
|
9
|
+
# @note Will try to grab Rails' logger first before creating a new logger
|
10
|
+
# with stdout.
|
11
|
+
#
|
12
|
+
# @example Get the logger.
|
13
|
+
# Loggable.logger
|
14
|
+
#
|
15
|
+
# @return [ Logger ] The logger.
|
16
|
+
#
|
17
|
+
# @since 3.0.0
|
18
|
+
def logger
|
19
|
+
return @logger if defined?(@logger)
|
20
|
+
@logger = rails_logger || default_logger
|
21
|
+
end
|
22
|
+
|
23
|
+
# Set the logger.
|
24
|
+
#
|
25
|
+
# @example Set the logger.
|
26
|
+
# Loggable.logger = Logger.new($stdout)
|
27
|
+
#
|
28
|
+
# @param [ Logger ] The logger to set.
|
29
|
+
#
|
30
|
+
# @return [ Logger ] The new logger.
|
31
|
+
#
|
32
|
+
# @since 3.0.0
|
33
|
+
def logger=(logger)
|
34
|
+
@logger = logger
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
# Gets the default Mongoid logger - stdout.
|
40
|
+
#
|
41
|
+
# @api private
|
42
|
+
#
|
43
|
+
# @example Get the default logger.
|
44
|
+
# Loggable.default_logger
|
45
|
+
#
|
46
|
+
# @return [ Logger ] The default logger.
|
47
|
+
#
|
48
|
+
# @since 3.0.0
|
49
|
+
def default_logger
|
50
|
+
logger = Logger.new($stdout)
|
51
|
+
logger.level = Logger::INFO
|
52
|
+
logger
|
53
|
+
end
|
54
|
+
|
55
|
+
# Get the Rails logger if it's defined.
|
56
|
+
#
|
57
|
+
# @api private
|
58
|
+
#
|
59
|
+
# @example Get Rails' logger.
|
60
|
+
# Loggable.rails_logger
|
61
|
+
#
|
62
|
+
# @return [ Logger ] The Rails logger.
|
63
|
+
#
|
64
|
+
# @since 3.0.0
|
65
|
+
def rails_logger
|
66
|
+
defined?(::Rails) && ::Rails.respond_to?(:logger) && ::Rails.logger
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/mongoid/matchers.rb
CHANGED
data/lib/mongoid/matchers/all.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Matchers
|
2
|
+
module Mongoid
|
3
|
+
module Matchers
|
4
4
|
|
5
5
|
# Checks that all values match.
|
6
6
|
class All < Default
|
@@ -14,13 +14,12 @@ module Mongoid #:nodoc:
|
|
14
14
|
#
|
15
15
|
# @return [ true, false ] If the values match.
|
16
16
|
def matches?(value)
|
17
|
+
first = first(value)
|
18
|
+
return false if first.is_a?(Array) && first.empty?
|
19
|
+
|
17
20
|
attribute_array = Array.wrap(@attribute)
|
18
|
-
|
19
|
-
|
20
|
-
attribute_array.any? { |_attribute| _attribute =~ e }
|
21
|
-
else
|
22
|
-
attribute_array.include?(e)
|
23
|
-
end
|
21
|
+
first.all? do |e|
|
22
|
+
attribute_array.any? { |_attribute| e === _attribute }
|
24
23
|
end
|
25
24
|
end
|
26
25
|
end
|
data/lib/mongoid/matchers/and.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Matchers
|
2
|
+
module Mongoid
|
3
|
+
module Matchers
|
4
4
|
|
5
5
|
# Defines behavior for handling $or expressions in embedded documents.
|
6
6
|
class And < Default
|
@@ -8,7 +8,7 @@ module Mongoid #:nodoc:
|
|
8
8
|
# Does the supplied query match the attribute?
|
9
9
|
#
|
10
10
|
# @example Does this match?
|
11
|
-
# matcher.matches?(
|
11
|
+
# matcher.matches?([ { field => value } ])
|
12
12
|
#
|
13
13
|
# @param [ Array ] conditions The or expression.
|
14
14
|
#
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Matchers
|
2
|
+
module Mongoid
|
3
|
+
module Matchers
|
4
4
|
|
5
5
|
# Contains all the default behavior for checking for matching documents
|
6
6
|
# given MongoDB expressions.
|
@@ -32,7 +32,7 @@ module Mongoid #:nodoc:
|
|
32
32
|
#
|
33
33
|
# @since 1.0.0
|
34
34
|
def matches?(value)
|
35
|
-
attribute.is_a?(Array) && !value.is_a?(Array) ? attribute.
|
35
|
+
attribute.is_a?(Array) && !value.is_a?(Array) ? attribute.any? { |_attribute| value === _attribute } : value === attribute
|
36
36
|
end
|
37
37
|
|
38
38
|
protected
|
@@ -63,7 +63,9 @@ module Mongoid #:nodoc:
|
|
63
63
|
#
|
64
64
|
# @since 1.0.0
|
65
65
|
def determine(value, operator)
|
66
|
-
attribute
|
66
|
+
attribute.__array__.any? {|attr|
|
67
|
+
attr ? attr.send(operator, first(value)) : false
|
68
|
+
}
|
67
69
|
end
|
68
70
|
end
|
69
71
|
end
|
data/lib/mongoid/matchers/gt.rb
CHANGED
data/lib/mongoid/matchers/gte.rb
CHANGED
data/lib/mongoid/matchers/in.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Matchers
|
2
|
+
module Mongoid
|
3
|
+
module Matchers
|
4
4
|
|
5
5
|
# Performs matching for any value in an array.
|
6
6
|
class In < Default
|
@@ -16,11 +16,7 @@ module Mongoid #:nodoc:
|
|
16
16
|
def matches?(value)
|
17
17
|
attribute_array = Array.wrap(@attribute)
|
18
18
|
value.values.first.any? do |e|
|
19
|
-
|
20
|
-
attribute_array.any? { |_attribute| _attribute =~ e }
|
21
|
-
else
|
22
|
-
attribute_array.include?(e)
|
23
|
-
end
|
19
|
+
attribute_array.any? { |_attribute| e === _attribute }
|
24
20
|
end
|
25
21
|
end
|
26
22
|
end
|
data/lib/mongoid/matchers/lt.rb
CHANGED
data/lib/mongoid/matchers/lte.rb
CHANGED
data/lib/mongoid/matchers/ne.rb
CHANGED
data/lib/mongoid/matchers/nin.rb
CHANGED
data/lib/mongoid/matchers/or.rb
CHANGED
@@ -13,8 +13,8 @@ require "mongoid/matchers/nin"
|
|
13
13
|
require "mongoid/matchers/or"
|
14
14
|
require "mongoid/matchers/size"
|
15
15
|
|
16
|
-
module Mongoid
|
17
|
-
module Matchers
|
16
|
+
module Mongoid
|
17
|
+
module Matchers
|
18
18
|
|
19
19
|
# This module is responsible for returning the correct matcher given a
|
20
20
|
# MongoDB query expression.
|
@@ -81,7 +81,7 @@ module Mongoid #:nodoc:
|
|
81
81
|
# @since 2.2.1
|
82
82
|
def extract_attribute(document, key)
|
83
83
|
if (key_string = key.to_s) =~ /.+\..+/
|
84
|
-
key_string.split('.').inject(document.
|
84
|
+
key_string.split('.').inject(document.as_document) do |_attribs, _key|
|
85
85
|
if _attribs.is_a?(::Array)
|
86
86
|
_attribs.map { |doc| doc.try(:[], _key) }
|
87
87
|
else
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
2
|
+
module Mongoid
|
3
3
|
|
4
4
|
# Adds Rails' multi-parameter attribute support to Mongoid.
|
5
5
|
#
|
6
6
|
# @todo: Durran: This module needs an overhaul.
|
7
7
|
module MultiParameterAttributes
|
8
8
|
|
9
|
-
module Errors
|
9
|
+
module Errors
|
10
10
|
|
11
11
|
# Raised when an error occurred while doing a mass assignment to an
|
12
12
|
# attribute through the <tt>attributes=</tt> method. The exception
|
@@ -41,14 +41,14 @@ module Mongoid #:nodoc:
|
|
41
41
|
# put into the document's attributes.
|
42
42
|
#
|
43
43
|
# @example Process the attributes.
|
44
|
-
# person.
|
44
|
+
# person.process_attributes(:title => "sir", :age => 40)
|
45
45
|
#
|
46
46
|
# @param [ Hash ] attrs The attributes to set.
|
47
47
|
# @param [ Symbol ] role A role for scoped mass assignment.
|
48
48
|
# @param [ Boolean ] guard_protected_attributes False to skip mass assignment protection.
|
49
49
|
#
|
50
50
|
# @since 2.0.0.rc.7
|
51
|
-
def
|
51
|
+
def process_attributes(attrs = nil, role = :default, guard_protected_attributes = true)
|
52
52
|
if attrs
|
53
53
|
errors = []
|
54
54
|
attributes = {}
|
@@ -66,7 +66,7 @@ module Mongoid #:nodoc:
|
|
66
66
|
multi_parameter_attributes.each_pair do |key, values|
|
67
67
|
begin
|
68
68
|
values = (values.keys.min..values.keys.max).map { |i| values[i] }
|
69
|
-
field = self.class.fields[key]
|
69
|
+
field = self.class.fields[aliased_fields[key] || key]
|
70
70
|
attributes[key] = instantiate_object(field, values)
|
71
71
|
rescue => e
|
72
72
|
errors << Errors::AttributeAssignmentError.new(
|
@@ -76,10 +76,8 @@ module Mongoid #:nodoc:
|
|
76
76
|
end
|
77
77
|
|
78
78
|
unless errors.empty?
|
79
|
-
raise(
|
80
|
-
Errors::MultiparameterAssignmentErrors.new(errors),
|
79
|
+
raise Errors::MultiparameterAssignmentErrors.new(errors),
|
81
80
|
"#{errors.size} error(s) on assignment of multiparameter attributes"
|
82
|
-
)
|
83
81
|
end
|
84
82
|
|
85
83
|
super attributes, role, guard_protected_attributes
|
@@ -95,9 +93,9 @@ module Mongoid #:nodoc:
|
|
95
93
|
values = values_with_empty_parameters.collect { |v| v.nil? ? 1 : v }
|
96
94
|
klass = field.type
|
97
95
|
if klass == DateTime || klass == Date || klass == Time
|
98
|
-
field.
|
96
|
+
field.mongoize(values)
|
99
97
|
elsif klass
|
100
|
-
klass.new
|
98
|
+
klass.new(*values)
|
101
99
|
else
|
102
100
|
values
|
103
101
|
end
|