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
data/lib/mongoid/identity.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
class Identity #:nodoc:
|
4
|
-
|
5
|
-
attr_reader :document
|
6
|
-
|
7
|
-
# Create the identity for the document. The id will be set in either in
|
8
|
-
# the form of a Mongo object id or a composite key set up by defining
|
9
|
-
# a key on the document. The _type will be set to the document's class
|
10
|
-
# name.
|
11
|
-
#
|
12
|
-
# @example Create the id and set the type.
|
13
|
-
# identity.create
|
14
|
-
def create
|
15
|
-
identify.tap { type }
|
16
|
-
end
|
17
|
-
|
18
|
-
# Create the new identity generator - this will be expanded in the future
|
19
|
-
# to support pk generators.
|
20
|
-
#
|
21
|
-
# @example
|
22
|
-
# Identity.new(document)
|
23
|
-
#
|
24
|
-
# @param [ Document ] document The document to generate an id for.
|
25
|
-
#
|
26
|
-
# @return [ Identity ] The new identity object.
|
27
|
-
def initialize(document)
|
28
|
-
@document = document
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
# Return the proper id for the document. Will be an object id or its string
|
34
|
-
# representation depending on the configuration.
|
35
|
-
#
|
36
|
-
# @example Generate the id.
|
37
|
-
# identity.generate_id
|
38
|
-
#
|
39
|
-
# @return [ Object ] The bson object id or its string equivalent.
|
40
|
-
def generate_id
|
41
|
-
id = BSON::ObjectId.new
|
42
|
-
document.using_object_ids? ? id : id.to_s
|
43
|
-
end
|
44
|
-
|
45
|
-
# Sets the id on the document. Will either set a newly generated id or
|
46
|
-
# build the composite key.
|
47
|
-
#
|
48
|
-
# @example Set the id.
|
49
|
-
# identity.identify
|
50
|
-
def identify
|
51
|
-
document.id = compose.join(" ").identify if document.primary_key
|
52
|
-
document.id = generate_id if document.id.blank?
|
53
|
-
document.id
|
54
|
-
end
|
55
|
-
|
56
|
-
# Set the _type field on the document if the document is hereditary or in a
|
57
|
-
# polymorphic relation.
|
58
|
-
#
|
59
|
-
# @example Set the type.
|
60
|
-
# identity.type
|
61
|
-
def type
|
62
|
-
document._type = document.class.name if typed?
|
63
|
-
end
|
64
|
-
|
65
|
-
# Generates the array of keys to build the id.
|
66
|
-
#
|
67
|
-
# @example Build the array for the keys.
|
68
|
-
# identity.compose.
|
69
|
-
#
|
70
|
-
# @return [ Array<Object> ] The array of keys.
|
71
|
-
def compose
|
72
|
-
kf = document.key_formatter
|
73
|
-
document.primary_key.collect do |key|
|
74
|
-
val = document.attributes[key.to_s]
|
75
|
-
val && kf ? kf.call(val) : val
|
76
|
-
end.compact
|
77
|
-
end
|
78
|
-
|
79
|
-
# Determines if the document stores the type information. This is if it is
|
80
|
-
# in a hierarchy, has subclasses, or is in a polymorphic relation.
|
81
|
-
#
|
82
|
-
# @example Check if the document is typed.
|
83
|
-
# identity.typed?
|
84
|
-
#
|
85
|
-
# @return [ true, false ] True if typed, false if not.
|
86
|
-
def typed?
|
87
|
-
document.hereditary? ||
|
88
|
-
document.class.descendants.any? ||
|
89
|
-
document.polymorphic?
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
data/lib/mongoid/keys.rb
DELETED
@@ -1,144 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
|
4
|
-
# This module defines the behaviour for overriding the default ids on
|
5
|
-
# documents.
|
6
|
-
module Keys
|
7
|
-
extend ActiveSupport::Concern
|
8
|
-
|
9
|
-
attr_reader :identifier
|
10
|
-
|
11
|
-
included do
|
12
|
-
cattr_accessor :primary_key, :using_object_ids, :key_formatter
|
13
|
-
self.using_object_ids = true
|
14
|
-
end
|
15
|
-
|
16
|
-
# Get the document's primary key.
|
17
|
-
#
|
18
|
-
# @note Refactored from using delegate for class load performance.
|
19
|
-
#
|
20
|
-
# @example Get the primary key.
|
21
|
-
# model.primary_key
|
22
|
-
#
|
23
|
-
# @return [ Array ] The primary key
|
24
|
-
def primary_key
|
25
|
-
self.class.primary_key
|
26
|
-
end
|
27
|
-
|
28
|
-
# Is the document using object ids?
|
29
|
-
#
|
30
|
-
# @note Refactored from using delegate for class load performance.
|
31
|
-
#
|
32
|
-
# @example Is the document using object ids?
|
33
|
-
# model.using_object_ids?
|
34
|
-
#
|
35
|
-
# @return [ true, false ] Using object ids.
|
36
|
-
def using_object_ids?
|
37
|
-
self.class.using_object_ids?
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
# Determines if any field that the document id is composed of has changed.
|
43
|
-
#
|
44
|
-
# @example Has any key field changed?
|
45
|
-
# document.key_field_changed?
|
46
|
-
#
|
47
|
-
# @return [ true, false ] Has a key field changed?
|
48
|
-
#
|
49
|
-
# @since 2.0.0
|
50
|
-
def key_field_changed?
|
51
|
-
primary_key.any? { |field| changed.include?(field.to_s) }
|
52
|
-
end
|
53
|
-
|
54
|
-
# Sits around a save when composite keys are in play to handle the id magic
|
55
|
-
# if a key field has changed.
|
56
|
-
#
|
57
|
-
# @example Set the composite key.
|
58
|
-
# document.set_composite_key
|
59
|
-
#
|
60
|
-
# @param [ Proc ] block The block this surrounds.
|
61
|
-
#
|
62
|
-
# @since 2.0.0
|
63
|
-
def set_composite_key(&block)
|
64
|
-
if persisted? && key_field_changed?
|
65
|
-
swap_composite_keys(&block)
|
66
|
-
else
|
67
|
-
identify and block.call
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# Swap out the composite key only after the document has been saved.
|
72
|
-
#
|
73
|
-
# @example Swap out the keys.
|
74
|
-
# document.swap_composite_keys
|
75
|
-
#
|
76
|
-
# @param [ Proc ] block The save block getting called.
|
77
|
-
#
|
78
|
-
# @since 2.0.0
|
79
|
-
def swap_composite_keys(&block)
|
80
|
-
@identifier, new_id = id.dup, identify
|
81
|
-
block.call
|
82
|
-
@identifier = nil
|
83
|
-
end
|
84
|
-
|
85
|
-
module ClassMethods #:nodoc:
|
86
|
-
|
87
|
-
# Used for telling Mongoid on a per model basis whether to override the
|
88
|
-
# default +BSON::ObjectId+ and use a different type. This will be
|
89
|
-
# expanded in the future for requiring a PkFactory if the type is not a
|
90
|
-
# +BSON::ObjectId+ or +String+.
|
91
|
-
#
|
92
|
-
# @example Change the documents key type.
|
93
|
-
# class Person
|
94
|
-
# include Mongoid::Document
|
95
|
-
# identity :type => String
|
96
|
-
# end
|
97
|
-
#
|
98
|
-
# @param [ Hash ] options The options.
|
99
|
-
#
|
100
|
-
# @option options [ Class ] :type The type of the id.
|
101
|
-
#
|
102
|
-
# @since 2.0.0.beta.1
|
103
|
-
def identity(options = {})
|
104
|
-
type = options[:type]
|
105
|
-
replace_field("_id", type)
|
106
|
-
self.using_object_ids = (type == BSON::ObjectId)
|
107
|
-
end
|
108
|
-
|
109
|
-
# Defines the field that will be used for the id of this +Document+. This
|
110
|
-
# set the id of this +Document+ before save to a parameterized version of
|
111
|
-
# the field that was supplied. This is good for use for readable URLS in
|
112
|
-
# web applications.
|
113
|
-
#
|
114
|
-
# @example Create a composite id.
|
115
|
-
# class Person
|
116
|
-
# include Mongoid::Document
|
117
|
-
# key :first_name, :last_name
|
118
|
-
# end
|
119
|
-
#
|
120
|
-
# @param [ Array<Symbol> ] The fields the key is composed of.
|
121
|
-
#
|
122
|
-
# @since 1.0.0
|
123
|
-
def key(*fields)
|
124
|
-
self.primary_key = fields
|
125
|
-
self.key_formatter = block_given? ? Proc.new : nil
|
126
|
-
identity(:type => String)
|
127
|
-
set_callback(:save, :around, :set_composite_key)
|
128
|
-
end
|
129
|
-
|
130
|
-
# Convenience method for determining if we are using +BSON::ObjectIds+ as
|
131
|
-
# our id.
|
132
|
-
#
|
133
|
-
# @example Does this class use object ids?
|
134
|
-
# person.using_object_ids?
|
135
|
-
#
|
136
|
-
# @return [ true, false ] If the class uses BSON::ObjectIds for the id.
|
137
|
-
#
|
138
|
-
# @since 1.0.0
|
139
|
-
def using_object_ids?
|
140
|
-
using_object_ids
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
data/lib/mongoid/logger.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
|
4
|
-
# The Mongoid logger which wraps some other ruby compliant logger class.
|
5
|
-
class Logger
|
6
|
-
|
7
|
-
delegate \
|
8
|
-
:info,
|
9
|
-
:debug,
|
10
|
-
:error,
|
11
|
-
:fatal,
|
12
|
-
:level,
|
13
|
-
:unknown, :to => :logger, :allow_nil => true
|
14
|
-
|
15
|
-
# Emit a warning log message.
|
16
|
-
#
|
17
|
-
# @example Log a warning.
|
18
|
-
# logger.warn("Danger")
|
19
|
-
#
|
20
|
-
# @param [ String ] message The warning message.
|
21
|
-
def warn(message)
|
22
|
-
logger.warn(message) if logger && logger.respond_to?(:warn)
|
23
|
-
end
|
24
|
-
|
25
|
-
# Get the mongoid logger.
|
26
|
-
#
|
27
|
-
# @example Get the global logger.
|
28
|
-
# logger.logger
|
29
|
-
#
|
30
|
-
# @return [ Logger ] The logger.
|
31
|
-
def logger
|
32
|
-
Mongoid.logger
|
33
|
-
end
|
34
|
-
|
35
|
-
# Inspect the logger.
|
36
|
-
#
|
37
|
-
# @example Inspect the logger.
|
38
|
-
# logger.inspect
|
39
|
-
#
|
40
|
-
# @return [ String ] The logger, inspected.
|
41
|
-
def inspect
|
42
|
-
"#<Mongoid::Logger:0x#{object_id.to_s(16)} @logger=#{logger.inspect}>"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
|
4
|
-
# Adds multiple database support to documents.
|
5
|
-
module MultiDatabase
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
module ClassMethods #:nodoc:
|
9
|
-
|
10
|
-
# Gets the database from the class.
|
11
|
-
#
|
12
|
-
# @example Get the database.
|
13
|
-
# Model.database
|
14
|
-
#
|
15
|
-
# @return [ Mongo::DB ] The database.
|
16
|
-
def database; @database end
|
17
|
-
|
18
|
-
# Set the database name.
|
19
|
-
#
|
20
|
-
# @example Set the database name.
|
21
|
-
# Model.set_database(:testing)
|
22
|
-
#
|
23
|
-
# @param [ Symbol ] name The database name.
|
24
|
-
#
|
25
|
-
# @return [ String ] The database name.
|
26
|
-
def set_database(name)
|
27
|
-
@database = name.to_s
|
28
|
-
end
|
29
|
-
|
30
|
-
def inherited(subclass)
|
31
|
-
super
|
32
|
-
subclass.set_database(database.dup) if database
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
data/lib/mongoid/named_scope.rb
DELETED
@@ -1,166 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
|
4
|
-
# This module contains the named scoping behaviour.
|
5
|
-
module NamedScope
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
included do
|
9
|
-
class_attribute :scopes
|
10
|
-
self.scopes = {}
|
11
|
-
end
|
12
|
-
|
13
|
-
module ClassMethods #:nodoc:
|
14
|
-
|
15
|
-
# Gets either the last scope on the stack or creates a new criteria.
|
16
|
-
#
|
17
|
-
# @example Get the last or new.
|
18
|
-
# Person.scoping(true)
|
19
|
-
#
|
20
|
-
# @param [ true, false ] embedded Is this scope for an embedded doc?
|
21
|
-
# @param [ true, false ] scoped Are we applying default scoping?
|
22
|
-
#
|
23
|
-
# @return [ Criteria ] The last scope or a new one.
|
24
|
-
#
|
25
|
-
# @since 2.0.0
|
26
|
-
def criteria(embedded = false, scoped = true)
|
27
|
-
(scope_stack.last || Criteria.new(self, embedded)).tap do |crit|
|
28
|
-
return crit.apply_default_scope if scoped
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# Creates a named_scope for the +Document+, similar to ActiveRecord's
|
33
|
-
# named_scopes. +NamedScopes+ are proxied +Criteria+ objects that can be
|
34
|
-
# chained.
|
35
|
-
#
|
36
|
-
# @example Create named scopes.
|
37
|
-
#
|
38
|
-
# class Person
|
39
|
-
# include Mongoid::Document
|
40
|
-
# field :active, :type => Boolean
|
41
|
-
# field :count, :type => Integer
|
42
|
-
#
|
43
|
-
# scope :active, :where => { :active => true }
|
44
|
-
# scope :count_gt_one, :where => { :count.gt => 1 }
|
45
|
-
# scope :at_least_count, lambda { |count| { :where => { :count.gt => count } } }
|
46
|
-
# end
|
47
|
-
#
|
48
|
-
# @param [ Symbol ] name The name of the scope.
|
49
|
-
# @param [ Hash, Criteria ] conditions The conditions of the scope.
|
50
|
-
#
|
51
|
-
# @since 1.0.0
|
52
|
-
def scope(name, conditions = {}, &block)
|
53
|
-
name = name.to_sym
|
54
|
-
valid_scope_name?(name)
|
55
|
-
scopes[name] = Scope.new(conditions, &block)
|
56
|
-
(class << self; self; end).class_eval <<-EOT
|
57
|
-
def #{name}(*args)
|
58
|
-
scope = scopes[:#{name}]
|
59
|
-
conditions = scope.conditions.as_conditions(*args)
|
60
|
-
scope.extend(criteria.fuse(conditions))
|
61
|
-
end
|
62
|
-
EOT
|
63
|
-
end
|
64
|
-
alias :named_scope :scope
|
65
|
-
|
66
|
-
# Get a criteria object for the class, scoped to the default if defined.
|
67
|
-
#
|
68
|
-
# @example Get a scoped criteria.
|
69
|
-
# Person.scoped
|
70
|
-
#
|
71
|
-
# @param [ true, false ] embedded Is the criteria for embedded docs?
|
72
|
-
#
|
73
|
-
# @return [ Criteria ] The scoped criteria.
|
74
|
-
#
|
75
|
-
# @since 2.0.0
|
76
|
-
def scoped(embedded = false)
|
77
|
-
criteria(embedded).scoped
|
78
|
-
end
|
79
|
-
|
80
|
-
# Initializes and returns the current scope stack.
|
81
|
-
#
|
82
|
-
# @example Get the scope stack.
|
83
|
-
# Person.scope_stack
|
84
|
-
#
|
85
|
-
# @return [ Array<Criteria> ] The scope stack.
|
86
|
-
#
|
87
|
-
# @since 1.0.0
|
88
|
-
def scope_stack
|
89
|
-
Threaded.scope_stack[object_id] ||= []
|
90
|
-
end
|
91
|
-
|
92
|
-
# Get a criteria object for the class, ignoring default scoping.
|
93
|
-
#
|
94
|
-
# @example Get an unscoped criteria.
|
95
|
-
# Person.scoped
|
96
|
-
#
|
97
|
-
# @param [ true, false ] embedded Is the criteria for embedded docs?
|
98
|
-
#
|
99
|
-
# @return [ Criteria ] The unscoped criteria.
|
100
|
-
#
|
101
|
-
# @since 2.0.0
|
102
|
-
def unscoped(embedded = false)
|
103
|
-
criteria(embedded).unscoped
|
104
|
-
end
|
105
|
-
|
106
|
-
# Pushes the provided criteria onto the scope stack, and removes it after the
|
107
|
-
# provided block is yielded.
|
108
|
-
#
|
109
|
-
# @example Yield to the criteria.
|
110
|
-
# Person.with_scope(criteria)
|
111
|
-
#
|
112
|
-
# @param [ Criteria ] criteria The criteria to apply.
|
113
|
-
#
|
114
|
-
# @return [ Criteria ] The yielded criteria.
|
115
|
-
#
|
116
|
-
# @since 1.0.0
|
117
|
-
def with_scope(criteria)
|
118
|
-
scope_stack = self.scope_stack
|
119
|
-
scope_stack << criteria
|
120
|
-
begin
|
121
|
-
yield criteria
|
122
|
-
ensure
|
123
|
-
scope_stack.pop
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# When inheriting, we want to copy the scopes from the parent class and
|
128
|
-
# set the on the child to start, mimicking the behaviour of the old
|
129
|
-
# class_inheritable_accessor that was deprecated in Rails edge.
|
130
|
-
#
|
131
|
-
# @example Inherit from this class.
|
132
|
-
# Person.inherited(Doctor)
|
133
|
-
#
|
134
|
-
# @param [ Class ] subclass The inheriting class.
|
135
|
-
#
|
136
|
-
# @since 2.0.0.rc.6
|
137
|
-
def inherited(subclass)
|
138
|
-
super
|
139
|
-
subclass.scopes = scopes.dup
|
140
|
-
end
|
141
|
-
|
142
|
-
protected
|
143
|
-
|
144
|
-
# Warns or raises exception if overriding another scope or method.
|
145
|
-
#
|
146
|
-
# @example Warn or raise error if name exists.
|
147
|
-
# Model.valid_scope_name?("test")
|
148
|
-
#
|
149
|
-
# @param [ String, Symbol ] name The name of the scope.
|
150
|
-
def valid_scope_name?(name)
|
151
|
-
if scopes[name] || respond_to?(name, true)
|
152
|
-
if Mongoid.scope_overwrite_exception
|
153
|
-
raise Errors::ScopeOverwrite.new(self.name,name)
|
154
|
-
else
|
155
|
-
if Mongoid.logger
|
156
|
-
Mongoid.logger.warn(
|
157
|
-
"Creating scope :#{name}. " +
|
158
|
-
"Overwriting existing method #{self.name}.#{name}."
|
159
|
-
)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|