mongoid 2.4.10 → 3.0.0.rc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +843 -9
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +2 -17
- data/lib/config/locales/en.yml +441 -51
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- data/lib/mongoid/atomic/paths/root.rb +4 -5
- data/lib/mongoid/atomic.rb +16 -9
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/callbacks.rb +100 -42
- data/lib/mongoid/collections/retry.rb +2 -3
- data/lib/mongoid/components.rb +10 -22
- data/lib/mongoid/config/environment.rb +4 -3
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config.rb +87 -233
- data/lib/mongoid/contextual/aggregable/memory.rb +98 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
- data/lib/mongoid/contextual/atomic.rb +179 -0
- data/lib/mongoid/contextual/command.rb +43 -0
- data/lib/mongoid/contextual/find_and_modify.rb +66 -0
- data/lib/mongoid/contextual/map_reduce.rb +273 -0
- data/lib/mongoid/contextual/memory.rb +383 -0
- data/lib/mongoid/contextual/mongo.rb +543 -0
- data/lib/mongoid/contextual.rb +50 -0
- data/lib/mongoid/copyable.rb +2 -2
- data/lib/mongoid/criteria.rb +436 -248
- data/lib/mongoid/criterion/inspection.rb +14 -8
- data/lib/mongoid/criterion/scoping.rb +114 -44
- data/lib/mongoid/dirty.rb +152 -67
- data/lib/mongoid/document.rb +68 -49
- data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
- data/lib/mongoid/errors/callback.rb +5 -6
- data/lib/mongoid/errors/delete_restriction.rb +29 -0
- data/lib/mongoid/errors/document_not_found.rb +98 -17
- data/lib/mongoid/errors/eager_load.rb +3 -6
- data/lib/mongoid/errors/invalid_collection.rb +3 -3
- data/lib/mongoid/errors/invalid_config_option.rb +27 -0
- data/lib/mongoid/errors/invalid_database.rb +3 -3
- data/lib/mongoid/errors/invalid_field.rb +54 -8
- data/lib/mongoid/errors/invalid_field_option.rb +35 -0
- data/lib/mongoid/errors/invalid_find.rb +3 -3
- data/lib/mongoid/errors/invalid_index.rb +28 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -4
- data/lib/mongoid/errors/invalid_scope.rb +24 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
- data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
- data/lib/mongoid/errors/invalid_time.rb +3 -6
- data/lib/mongoid/errors/inverse_not_found.rb +29 -0
- data/lib/mongoid/errors/mixed_relations.rb +4 -9
- data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
- data/lib/mongoid/errors/mongoid_error.rb +54 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
- data/lib/mongoid/errors/no_default_session.rb +23 -0
- data/lib/mongoid/errors/no_environment.rb +3 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
- data/lib/mongoid/errors/no_parent.rb +24 -0
- data/lib/mongoid/errors/no_session_config.rb +22 -0
- data/lib/mongoid/errors/no_session_database.rb +27 -0
- data/lib/mongoid/errors/no_session_hosts.rb +27 -0
- data/lib/mongoid/errors/no_sessions_config.rb +20 -0
- data/lib/mongoid/errors/readonly_attribute.rb +25 -0
- data/lib/mongoid/errors/scope_overwrite.rb +4 -4
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
- data/lib/mongoid/errors/unknown_attribute.rb +25 -0
- data/lib/mongoid/errors/unsaved_document.rb +4 -8
- data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
- data/lib/mongoid/errors/unsupported_version.rb +4 -4
- data/lib/mongoid/errors/validations.rb +7 -6
- data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
- data/lib/mongoid/errors.rb +22 -1
- data/lib/mongoid/extensions/array.rb +127 -0
- data/lib/mongoid/extensions/big_decimal.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +24 -0
- data/lib/mongoid/extensions/date.rb +70 -0
- data/lib/mongoid/extensions/date_time.rb +68 -0
- data/lib/mongoid/extensions/false_class.rb +26 -0
- data/lib/mongoid/extensions/float.rb +44 -0
- data/lib/mongoid/extensions/hash.rb +91 -0
- data/lib/mongoid/extensions/integer.rb +54 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +21 -0
- data/lib/mongoid/extensions/object.rb +188 -0
- data/lib/mongoid/extensions/object_id.rb +53 -0
- data/lib/mongoid/extensions/range.rb +55 -0
- data/lib/mongoid/extensions/regexp.rb +27 -0
- data/lib/mongoid/extensions/set.rb +55 -0
- data/lib/mongoid/extensions/string.rb +155 -0
- data/lib/mongoid/extensions/symbol.rb +54 -0
- data/lib/mongoid/extensions/time.rb +78 -0
- data/lib/mongoid/extensions/time_with_zone.rb +55 -0
- data/lib/mongoid/extensions/true_class.rb +26 -0
- data/lib/mongoid/extensions.rb +28 -76
- data/lib/mongoid/factory.rb +1 -1
- data/lib/mongoid/fields/foreign_key.rb +134 -0
- data/lib/mongoid/fields/localized.rb +73 -0
- data/lib/mongoid/fields/standard.rb +268 -0
- data/lib/mongoid/fields/validators/macro.rb +83 -0
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields.rb +129 -194
- data/lib/mongoid/finders.rb +42 -43
- data/lib/mongoid/hierarchy.rb +25 -14
- data/lib/mongoid/identity_map.rb +31 -19
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- data/lib/mongoid/indexes.rb +66 -15
- data/lib/mongoid/inspection.rb +1 -1
- data/lib/mongoid/javascript.rb +1 -1
- data/lib/mongoid/json.rb +2 -2
- data/lib/mongoid/loggable.rb +69 -0
- data/lib/mongoid/matchers/all.rb +7 -8
- data/lib/mongoid/matchers/and.rb +3 -3
- data/lib/mongoid/matchers/default.rb +6 -4
- data/lib/mongoid/matchers/exists.rb +2 -2
- data/lib/mongoid/matchers/gt.rb +2 -2
- data/lib/mongoid/matchers/gte.rb +2 -2
- data/lib/mongoid/matchers/in.rb +3 -7
- data/lib/mongoid/matchers/lt.rb +2 -2
- data/lib/mongoid/matchers/lte.rb +2 -2
- data/lib/mongoid/matchers/ne.rb +2 -2
- data/lib/mongoid/matchers/nin.rb +2 -2
- data/lib/mongoid/matchers/or.rb +2 -2
- data/lib/mongoid/matchers/size.rb +2 -2
- data/lib/mongoid/matchers/strategies.rb +3 -3
- data/lib/mongoid/matchers.rb +1 -1
- data/lib/mongoid/multi_parameter_attributes.rb +8 -10
- data/lib/mongoid/nested_attributes.rb +17 -9
- data/lib/mongoid/observer.rb +1 -2
- data/lib/mongoid/paranoia.rb +13 -18
- data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
- data/lib/mongoid/persistence/atomic/bit.rb +5 -7
- data/lib/mongoid/persistence/atomic/inc.rb +5 -7
- data/lib/mongoid/persistence/atomic/operation.rb +45 -6
- data/lib/mongoid/persistence/atomic/pop.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
- data/lib/mongoid/persistence/atomic/push.rb +4 -10
- data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
- data/lib/mongoid/persistence/atomic/rename.rb +6 -7
- data/lib/mongoid/persistence/atomic/sets.rb +5 -7
- data/lib/mongoid/persistence/atomic/unset.rb +4 -5
- data/lib/mongoid/persistence/atomic.rb +2 -2
- data/lib/mongoid/persistence/deletion.rb +2 -2
- data/lib/mongoid/persistence/insertion.rb +10 -16
- data/lib/mongoid/persistence/modification.rb +5 -9
- data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
- data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
- data/lib/mongoid/persistence/operations/insert.rb +4 -4
- data/lib/mongoid/persistence/operations/remove.rb +4 -4
- data/lib/mongoid/persistence/operations/update.rb +5 -5
- data/lib/mongoid/persistence/operations.rb +6 -19
- data/lib/mongoid/persistence.rb +64 -27
- data/lib/mongoid/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations/accessors.rb +119 -19
- data/lib/mongoid/relations/auto_save.rb +59 -5
- data/lib/mongoid/relations/binding.rb +211 -2
- data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
- data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
- data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
- data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
- data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
- data/lib/mongoid/relations/builder.rb +3 -3
- data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
- data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
- data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/many.rb +5 -5
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
- data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
- data/lib/mongoid/relations/builders.rb +19 -16
- data/lib/mongoid/relations/cascading/delete.rb +3 -5
- data/lib/mongoid/relations/cascading/destroy.rb +3 -3
- data/lib/mongoid/relations/cascading/nullify.rb +3 -3
- data/lib/mongoid/relations/cascading/restrict.rb +37 -0
- data/lib/mongoid/relations/cascading.rb +6 -4
- data/lib/mongoid/relations/constraint.rb +4 -3
- data/lib/mongoid/relations/conversions.rb +5 -6
- data/lib/mongoid/relations/cyclic.rb +7 -7
- data/lib/mongoid/relations/embedded/batchable.rb +346 -0
- data/lib/mongoid/relations/embedded/in.rb +23 -12
- data/lib/mongoid/relations/embedded/many.rb +99 -160
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -60
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +231 -45
- data/lib/mongoid/relations/nested_builder.rb +3 -5
- data/lib/mongoid/relations/one.rb +2 -2
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/polymorphic.rb +9 -9
- data/lib/mongoid/relations/proxy.rb +60 -31
- data/lib/mongoid/relations/referenced/in.rb +40 -15
- data/lib/mongoid/relations/referenced/many.rb +116 -128
- data/lib/mongoid/relations/referenced/many_to_many.rb +101 -46
- data/lib/mongoid/relations/referenced/one.rb +34 -13
- data/lib/mongoid/relations/reflections.rb +3 -3
- data/lib/mongoid/relations/synchronization.rb +19 -23
- data/lib/mongoid/relations/targets/enumerable.rb +86 -57
- data/lib/mongoid/relations/touchable.rb +32 -0
- data/lib/mongoid/relations.rb +6 -6
- data/lib/mongoid/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +329 -0
- data/lib/mongoid/serialization.rb +13 -30
- data/lib/mongoid/sessions/factory.rb +106 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions.rb +359 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded/lifecycle.rb +21 -21
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/threaded.rb +167 -59
- data/lib/mongoid/timestamps/created.rb +8 -4
- data/lib/mongoid/timestamps/timeless.rb +6 -4
- data/lib/mongoid/timestamps/updated.rb +3 -3
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/unit_of_work.rb +61 -0
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +34 -4
- data/lib/mongoid/validations/uniqueness.rb +8 -10
- data/lib/mongoid/validations.rb +28 -20
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- data/lib/mongoid.rb +24 -39
- data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
- data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +59 -19
- data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
- data/lib/rails/generators/mongoid_generator.rb +5 -5
- data/lib/rails/mongoid.rb +69 -25
- metadata +92 -154
- data/lib/config/locales/bg.yml +0 -61
- data/lib/config/locales/de.yml +0 -61
- data/lib/config/locales/en-GB.yml +0 -64
- data/lib/config/locales/es.yml +0 -59
- data/lib/config/locales/fr.yml +0 -62
- data/lib/config/locales/hi.yml +0 -53
- data/lib/config/locales/hu.yml +0 -64
- data/lib/config/locales/id.yml +0 -62
- data/lib/config/locales/it.yml +0 -59
- data/lib/config/locales/ja.yml +0 -57
- data/lib/config/locales/kr.yml +0 -54
- data/lib/config/locales/nl.yml +0 -61
- data/lib/config/locales/pl.yml +0 -59
- data/lib/config/locales/pt-BR.yml +0 -60
- data/lib/config/locales/pt.yml +0 -60
- data/lib/config/locales/ro.yml +0 -66
- data/lib/config/locales/ru.yml +0 -61
- data/lib/config/locales/sv.yml +0 -60
- data/lib/config/locales/vi.yml +0 -62
- data/lib/config/locales/zh-CN.yml +0 -53
- data/lib/mongoid/collection.rb +0 -157
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/collections.rb +0 -120
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/mongo.rb +0 -487
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/criterion/builder.rb +0 -34
- data/lib/mongoid/criterion/complex.rb +0 -84
- data/lib/mongoid/criterion/creational.rb +0 -34
- data/lib/mongoid/criterion/exclusion.rb +0 -108
- data/lib/mongoid/criterion/inclusion.rb +0 -290
- data/lib/mongoid/criterion/optional.rb +0 -259
- data/lib/mongoid/criterion/selector.rb +0 -177
- data/lib/mongoid/cursor.rb +0 -88
- data/lib/mongoid/default_scope.rb +0 -36
- data/lib/mongoid/errors/invalid_type.rb +0 -25
- data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/array/deletion.rb +0 -29
- data/lib/mongoid/extensions/false_class/equality.rb +0 -26
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
- data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/hash/scoping.rb +0 -25
- data/lib/mongoid/extensions/integer/checks.rb +0 -23
- data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
- data/lib/mongoid/extensions/object/checks.rb +0 -29
- data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
- data/lib/mongoid/extensions/object/reflections.rb +0 -48
- data/lib/mongoid/extensions/object/substitutable.rb +0 -15
- data/lib/mongoid/extensions/object/yoda.rb +0 -44
- data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
- data/lib/mongoid/extensions/proc/scoping.rb +0 -25
- data/lib/mongoid/extensions/string/checks.rb +0 -36
- data/lib/mongoid/extensions/string/conversions.rb +0 -22
- data/lib/mongoid/extensions/string/inflections.rb +0 -118
- data/lib/mongoid/extensions/symbol/checks.rb +0 -23
- data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
- data/lib/mongoid/extensions/true_class/equality.rb +0 -26
- data/lib/mongoid/extras.rb +0 -31
- data/lib/mongoid/fields/internal/array.rb +0 -76
- data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
- data/lib/mongoid/fields/internal/bignum.rb +0 -10
- data/lib/mongoid/fields/internal/binary.rb +0 -11
- data/lib/mongoid/fields/internal/boolean.rb +0 -58
- data/lib/mongoid/fields/internal/date.rb +0 -51
- data/lib/mongoid/fields/internal/date_time.rb +0 -28
- data/lib/mongoid/fields/internal/false_class.rb +0 -10
- data/lib/mongoid/fields/internal/fixnum.rb +0 -10
- data/lib/mongoid/fields/internal/float.rb +0 -47
- data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
- data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
- data/lib/mongoid/fields/internal/hash.rb +0 -11
- data/lib/mongoid/fields/internal/integer.rb +0 -59
- data/lib/mongoid/fields/internal/localized.rb +0 -62
- data/lib/mongoid/fields/internal/nil_class.rb +0 -53
- data/lib/mongoid/fields/internal/object.rb +0 -11
- data/lib/mongoid/fields/internal/object_id.rb +0 -46
- data/lib/mongoid/fields/internal/range.rb +0 -61
- data/lib/mongoid/fields/internal/set.rb +0 -57
- data/lib/mongoid/fields/internal/string.rb +0 -42
- data/lib/mongoid/fields/internal/symbol.rb +0 -43
- data/lib/mongoid/fields/internal/time.rb +0 -23
- data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
- data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
- data/lib/mongoid/fields/internal/true_class.rb +0 -10
- data/lib/mongoid/fields/mappings.rb +0 -42
- data/lib/mongoid/fields/serializable.rb +0 -270
- data/lib/mongoid/identity.rb +0 -92
- data/lib/mongoid/keys.rb +0 -144
- data/lib/mongoid/logger.rb +0 -45
- data/lib/mongoid/multi_database.rb +0 -36
- data/lib/mongoid/named_scope.rb +0 -166
- data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
- data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
- data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
- data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
- data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
- data/lib/mongoid/relations/embedded/atomic.rb +0 -89
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/relations/referenced/batch.rb +0 -73
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module Time
|
|
5
|
+
|
|
6
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
7
|
+
# type.
|
|
8
|
+
#
|
|
9
|
+
# @example Mongoize the object.
|
|
10
|
+
# time.mongoize
|
|
11
|
+
#
|
|
12
|
+
# @return [ Time ] The object mongoized.
|
|
13
|
+
#
|
|
14
|
+
# @since 3.0.0
|
|
15
|
+
def mongoize
|
|
16
|
+
::Time.mongoize(self)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
module ClassMethods
|
|
20
|
+
|
|
21
|
+
# Get the configured time to use when converting - either the time zone
|
|
22
|
+
# or the time.
|
|
23
|
+
#
|
|
24
|
+
# @example Get the configured time.
|
|
25
|
+
# ::Time.configured
|
|
26
|
+
#
|
|
27
|
+
# @retun [ Time ] The configured time.
|
|
28
|
+
#
|
|
29
|
+
# @since 3.0.0
|
|
30
|
+
def configured
|
|
31
|
+
Mongoid.use_activesupport_time_zone? ? (::Time.zone || ::Time) : ::Time
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Convert the object from it's mongo friendly ruby type to this type.
|
|
35
|
+
#
|
|
36
|
+
# @example Demongoize the object.
|
|
37
|
+
# Time.demongoize(object)
|
|
38
|
+
#
|
|
39
|
+
# @param [ Time ] object The time from Mongo.
|
|
40
|
+
#
|
|
41
|
+
# @return [ Time ] The object as a date.
|
|
42
|
+
#
|
|
43
|
+
# @since 3.0.0
|
|
44
|
+
def demongoize(object)
|
|
45
|
+
return nil if object.blank?
|
|
46
|
+
object = object.getlocal unless Mongoid::Config.use_utc?
|
|
47
|
+
if Mongoid::Config.use_activesupport_time_zone?
|
|
48
|
+
object = object.in_time_zone(Mongoid.time_zone)
|
|
49
|
+
end
|
|
50
|
+
object
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
54
|
+
# type.
|
|
55
|
+
#
|
|
56
|
+
# @example Mongoize the object.
|
|
57
|
+
# Time.mongoize("2012-1-1")
|
|
58
|
+
#
|
|
59
|
+
# @param [ Object ] object The object to mongoize.
|
|
60
|
+
#
|
|
61
|
+
# @return [ Time ] The object mongoized.
|
|
62
|
+
#
|
|
63
|
+
# @since 3.0.0
|
|
64
|
+
def mongoize(object)
|
|
65
|
+
return nil if object.blank?
|
|
66
|
+
begin
|
|
67
|
+
::Time.at(object.__mongoize_time__.to_f).utc
|
|
68
|
+
rescue ArgumentError
|
|
69
|
+
raise Errors::InvalidTime.new(object)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
::Time.__send__(:include, Mongoid::Extensions::Time)
|
|
78
|
+
::Time.__send__(:extend, Mongoid::Extensions::Time::ClassMethods)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module TimeWithZone
|
|
5
|
+
|
|
6
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
7
|
+
# type.
|
|
8
|
+
#
|
|
9
|
+
# @example Mongoize the object.
|
|
10
|
+
# date_time.mongoize
|
|
11
|
+
#
|
|
12
|
+
# @return [ Time ] The object mongoized.
|
|
13
|
+
#
|
|
14
|
+
# @since 3.0.0
|
|
15
|
+
def mongoize
|
|
16
|
+
::ActiveSupport::TimeWithZone.mongoize(self)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
module ClassMethods
|
|
20
|
+
|
|
21
|
+
# Convert the object from it's mongo friendly ruby type to this type.
|
|
22
|
+
#
|
|
23
|
+
# @example Demongoize the object.
|
|
24
|
+
# TimeWithZone.demongoize(object)
|
|
25
|
+
#
|
|
26
|
+
# @param [ Time ] object The time from Mongo.
|
|
27
|
+
#
|
|
28
|
+
# @return [ TimeWithZone ] The object as a date.
|
|
29
|
+
#
|
|
30
|
+
# @since 3.0.0
|
|
31
|
+
def demongoize(object)
|
|
32
|
+
::Time.demongoize(object).in_time_zone
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
36
|
+
# type.
|
|
37
|
+
#
|
|
38
|
+
# @example Mongoize the object.
|
|
39
|
+
# TimeWithZone.mongoize("2012-1-1")
|
|
40
|
+
#
|
|
41
|
+
# @param [ Object ] object The object to convert.
|
|
42
|
+
#
|
|
43
|
+
# @return [ Time ] The object mongoized.
|
|
44
|
+
#
|
|
45
|
+
# @since 3.0.0
|
|
46
|
+
def mongoize(object)
|
|
47
|
+
::Time.mongoize(object)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
::ActiveSupport::TimeWithZone.__send__(:include, Mongoid::Extensions::TimeWithZone)
|
|
55
|
+
::ActiveSupport::TimeWithZone.__send__(:extend, Mongoid::Extensions::TimeWithZone::ClassMethods)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module TrueClass
|
|
5
|
+
|
|
6
|
+
# Is the passed value a boolean?
|
|
7
|
+
#
|
|
8
|
+
# @example Is the value a boolean type?
|
|
9
|
+
# true.is_a?(Boolean)
|
|
10
|
+
#
|
|
11
|
+
# @param [ Class ] other The class to check.
|
|
12
|
+
#
|
|
13
|
+
# @return [ true, false ] If the other is a boolean.
|
|
14
|
+
#
|
|
15
|
+
# @since 1.0.0
|
|
16
|
+
def is_a?(other)
|
|
17
|
+
if other == ::Boolean || other.class == ::Boolean
|
|
18
|
+
return true
|
|
19
|
+
end
|
|
20
|
+
super(other)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
::TrueClass.__send__(:include, Mongoid::Extensions::TrueClass)
|
data/lib/mongoid/extensions.rb
CHANGED
|
@@ -1,84 +1,10 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
require "mongoid/extensions/array/deep_copy"
|
|
3
|
-
require "mongoid/extensions/array/deletion"
|
|
4
|
-
require "mongoid/extensions/false_class/equality"
|
|
5
|
-
require "mongoid/extensions/hash/deep_copy"
|
|
6
|
-
require "mongoid/extensions/hash/criteria_helpers"
|
|
7
|
-
require "mongoid/extensions/hash/scoping"
|
|
8
|
-
require "mongoid/extensions/integer/checks"
|
|
9
|
-
require "mongoid/extensions/nil/collectionization"
|
|
10
|
-
require "mongoid/extensions/object/checks"
|
|
11
|
-
require "mongoid/extensions/object/deep_copy"
|
|
12
|
-
require "mongoid/extensions/object/reflections"
|
|
13
|
-
require "mongoid/extensions/object/substitutable"
|
|
14
|
-
require "mongoid/extensions/object/yoda"
|
|
15
|
-
require "mongoid/extensions/proc/scoping"
|
|
16
|
-
require "mongoid/extensions/string/checks"
|
|
17
|
-
require "mongoid/extensions/string/conversions"
|
|
18
|
-
require "mongoid/extensions/string/inflections"
|
|
19
|
-
require "mongoid/extensions/symbol/checks"
|
|
20
|
-
require "mongoid/extensions/symbol/inflections"
|
|
21
|
-
require "mongoid/extensions/true_class/equality"
|
|
22
|
-
require "mongoid/extensions/object_id/conversions"
|
|
23
|
-
|
|
24
|
-
class Array #:nodoc
|
|
25
|
-
include Mongoid::Extensions::Array::DeepCopy
|
|
26
|
-
include Mongoid::Extensions::Array::Deletion
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
class Binary; end #:nodoc:
|
|
30
2
|
unless defined?(Boolean)
|
|
31
3
|
class Boolean; end
|
|
32
4
|
end
|
|
33
5
|
|
|
34
|
-
class
|
|
35
|
-
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
class Hash #:nodoc
|
|
39
|
-
include Mongoid::Extensions::Hash::DeepCopy
|
|
40
|
-
include Mongoid::Extensions::Hash::CriteriaHelpers
|
|
41
|
-
include Mongoid::Extensions::Hash::Scoping
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
class Integer #:nodoc
|
|
45
|
-
include Mongoid::Extensions::Integer::Checks
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
class NilClass #:nodoc
|
|
49
|
-
include Mongoid::Extensions::Nil::Collectionization
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
class Object #:nodoc:
|
|
53
|
-
include Mongoid::Extensions::Object::Checks
|
|
54
|
-
include Mongoid::Extensions::Object::DeepCopy
|
|
55
|
-
include Mongoid::Extensions::Object::Reflections
|
|
56
|
-
include Mongoid::Extensions::Object::Substitutable
|
|
57
|
-
include Mongoid::Extensions::Object::Yoda
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
class Proc #:nodoc:
|
|
61
|
-
include Mongoid::Extensions::Proc::Scoping
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
class String #:nodoc
|
|
65
|
-
include Mongoid::Extensions::String::Checks
|
|
66
|
-
include Mongoid::Extensions::String::Conversions
|
|
67
|
-
include Mongoid::Extensions::String::Inflections
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
class Symbol #:nodoc
|
|
71
|
-
remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
|
|
72
|
-
include Mongoid::Extensions::Symbol::Checks
|
|
73
|
-
include Mongoid::Extensions::Symbol::Inflections
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
class TrueClass #:nodoc
|
|
77
|
-
include Mongoid::Extensions::TrueClass::Equality
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
class BSON::ObjectId #:nodoc
|
|
81
|
-
extend Mongoid::Extensions::ObjectId::Conversions
|
|
6
|
+
class BSON::ObjectId
|
|
7
|
+
undef :as_json
|
|
82
8
|
def as_json(options = nil)
|
|
83
9
|
to_s
|
|
84
10
|
end
|
|
@@ -86,3 +12,29 @@ class BSON::ObjectId #:nodoc
|
|
|
86
12
|
ActiveSupport::XmlMini.to_tag(options[:root], self.to_s, options)
|
|
87
13
|
end
|
|
88
14
|
end
|
|
15
|
+
|
|
16
|
+
class Symbol
|
|
17
|
+
remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
require "mongoid/extensions/array"
|
|
21
|
+
require "mongoid/extensions/big_decimal"
|
|
22
|
+
require "mongoid/extensions/boolean"
|
|
23
|
+
require "mongoid/extensions/date"
|
|
24
|
+
require "mongoid/extensions/date_time"
|
|
25
|
+
require "mongoid/extensions/false_class"
|
|
26
|
+
require "mongoid/extensions/float"
|
|
27
|
+
require "mongoid/extensions/hash"
|
|
28
|
+
require "mongoid/extensions/integer"
|
|
29
|
+
require "mongoid/extensions/module"
|
|
30
|
+
require "mongoid/extensions/nil_class"
|
|
31
|
+
require "mongoid/extensions/object"
|
|
32
|
+
require "mongoid/extensions/object_id"
|
|
33
|
+
require "mongoid/extensions/range"
|
|
34
|
+
require "mongoid/extensions/regexp"
|
|
35
|
+
require "mongoid/extensions/set"
|
|
36
|
+
require "mongoid/extensions/string"
|
|
37
|
+
require "mongoid/extensions/symbol"
|
|
38
|
+
require "mongoid/extensions/time"
|
|
39
|
+
require "mongoid/extensions/time_with_zone"
|
|
40
|
+
require "mongoid/extensions/true_class"
|
data/lib/mongoid/factory.rb
CHANGED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Fields
|
|
4
|
+
class ForeignKey < Standard
|
|
5
|
+
|
|
6
|
+
# Adds the atomic changes for this type of resizable field.
|
|
7
|
+
#
|
|
8
|
+
# @example Add the atomic changes.
|
|
9
|
+
# field.add_atomic_changes(doc, "key", {}, [], [])
|
|
10
|
+
#
|
|
11
|
+
# @todo: Durran: Refactor, big time.
|
|
12
|
+
#
|
|
13
|
+
# @param [ Document ] document The document to add to.
|
|
14
|
+
# @param [ String ] name The name of the field.
|
|
15
|
+
# @param [ String ] key The atomic location of the field.
|
|
16
|
+
# @param [ Hash ] mods The current modifications.
|
|
17
|
+
# @param [ Array ] new The new elements to add.
|
|
18
|
+
# @param [ Array ] old The old elements getting removed.
|
|
19
|
+
#
|
|
20
|
+
# @since 2.4.0
|
|
21
|
+
def add_atomic_changes(document, name, key, mods, new_elements, old_elements)
|
|
22
|
+
old = (old_elements || [])
|
|
23
|
+
new = (new_elements || [])
|
|
24
|
+
if new.length > old.length
|
|
25
|
+
if new.first(old.length) == old
|
|
26
|
+
document.atomic_array_add_to_sets[key] = new.drop(old.length)
|
|
27
|
+
else
|
|
28
|
+
mods[key] = document.attributes[name]
|
|
29
|
+
end
|
|
30
|
+
elsif new.length < old.length
|
|
31
|
+
pulls = old - new
|
|
32
|
+
if new == old - pulls
|
|
33
|
+
document.atomic_array_pulls[key] = pulls
|
|
34
|
+
else
|
|
35
|
+
mods[key] = document.attributes[name]
|
|
36
|
+
end
|
|
37
|
+
elsif new != old
|
|
38
|
+
mods[key] = document.attributes[name]
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Is this field a foreign key?
|
|
43
|
+
#
|
|
44
|
+
# @example Is the field a foreign key?
|
|
45
|
+
# field.foreign_key?
|
|
46
|
+
#
|
|
47
|
+
# @return [ true, false ] If the field is a foreign key.
|
|
48
|
+
#
|
|
49
|
+
# @since 2.4.0
|
|
50
|
+
def foreign_key?
|
|
51
|
+
true
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Evolve the object into an id compatible object.
|
|
55
|
+
#
|
|
56
|
+
# @example Evolve the object.
|
|
57
|
+
# field.evolve(object)
|
|
58
|
+
#
|
|
59
|
+
# @param [ Object ] object The object to evolve.
|
|
60
|
+
#
|
|
61
|
+
# @return [ Object ] The evolved object.
|
|
62
|
+
#
|
|
63
|
+
# @since 3.0.0
|
|
64
|
+
def evolve(object)
|
|
65
|
+
return object.id if object.is_a?(Document)
|
|
66
|
+
evolved = mongoize(object)
|
|
67
|
+
type.resizable? ? evolved.first : evolved
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Mongoize the object into the Mongo friendly value.
|
|
71
|
+
#
|
|
72
|
+
# @example Mongoize the object.
|
|
73
|
+
# field.mongoize(object)
|
|
74
|
+
#
|
|
75
|
+
# @param [ Object ] object The object to Mongoize.
|
|
76
|
+
#
|
|
77
|
+
# @return [ Object ] The mongoized object.
|
|
78
|
+
#
|
|
79
|
+
# @since 3.0.0
|
|
80
|
+
def mongoize(object)
|
|
81
|
+
if type.resizable? || object_id_field?
|
|
82
|
+
type.__mongoize_fk__(constraint, object)
|
|
83
|
+
else
|
|
84
|
+
metadata.klass.fields["_id"].mongoize(object)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Is the field a BSON::ObjectId?
|
|
89
|
+
#
|
|
90
|
+
# @example Is the field a BSON::ObjectId?
|
|
91
|
+
# field.object_id_field?
|
|
92
|
+
#
|
|
93
|
+
# @return [ true, false ] If the field is a BSON::ObjectId.
|
|
94
|
+
#
|
|
95
|
+
# @since 2.2.0
|
|
96
|
+
def object_id_field?
|
|
97
|
+
@object_id_field ||=
|
|
98
|
+
metadata.polymorphic? ? true : metadata.klass.using_object_ids?
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
private
|
|
102
|
+
|
|
103
|
+
# Evaluate the default proc. In some cases we need to instance exec,
|
|
104
|
+
# in others we don't.
|
|
105
|
+
#
|
|
106
|
+
# @example Eval the default proc.
|
|
107
|
+
# field.evaluate_default_proc(band)
|
|
108
|
+
#
|
|
109
|
+
# @param [ Document ] doc The document.
|
|
110
|
+
#
|
|
111
|
+
# @return [ Object ] The called proc.
|
|
112
|
+
#
|
|
113
|
+
# @since 3.0.0
|
|
114
|
+
def evaluate_default_proc(doc)
|
|
115
|
+
serialize_default(default_val[])
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# This is used when default values need to be serialized. Most of the
|
|
119
|
+
# time just return the object.
|
|
120
|
+
#
|
|
121
|
+
# @api private
|
|
122
|
+
#
|
|
123
|
+
# @example Serialize the default value.
|
|
124
|
+
# field.serialize_default(obj)
|
|
125
|
+
#
|
|
126
|
+
# @param [ Object ] object The default.
|
|
127
|
+
#
|
|
128
|
+
# @return [ Object ] The serialized default.
|
|
129
|
+
#
|
|
130
|
+
# @since 3.0.0
|
|
131
|
+
def serialize_default(object); object; end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Fields
|
|
4
|
+
class Localized < Standard
|
|
5
|
+
|
|
6
|
+
# Demongoize the object based on the current locale. Will look in the
|
|
7
|
+
# hash for the current locale.
|
|
8
|
+
#
|
|
9
|
+
# @example Get the demongoized value.
|
|
10
|
+
# field.demongoize({ "en" => "testing" })
|
|
11
|
+
#
|
|
12
|
+
# @param [ Hash ] object The hash of translations.
|
|
13
|
+
#
|
|
14
|
+
# @return [ Object ] The value for the current locale.
|
|
15
|
+
#
|
|
16
|
+
# @since 2.3.0
|
|
17
|
+
def demongoize(object)
|
|
18
|
+
if object
|
|
19
|
+
type.demongoize(lookup(object))
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Is the field localized or not?
|
|
24
|
+
#
|
|
25
|
+
# @example Is the field localized?
|
|
26
|
+
# field.localized?
|
|
27
|
+
#
|
|
28
|
+
# @return [ true, false ] If the field is localized.
|
|
29
|
+
#
|
|
30
|
+
# @since 2.3.0
|
|
31
|
+
def localized?
|
|
32
|
+
true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Convert the provided string into a hash for the locale.
|
|
36
|
+
#
|
|
37
|
+
# @example Serialize the value.
|
|
38
|
+
# field.mongoize("testing")
|
|
39
|
+
#
|
|
40
|
+
# @param [ String ] object The string to convert.
|
|
41
|
+
#
|
|
42
|
+
# @return [ Hash ] The locale with string translation.
|
|
43
|
+
#
|
|
44
|
+
# @since 2.3.0
|
|
45
|
+
def mongoize(object)
|
|
46
|
+
{ ::I18n.locale.to_s => type.mongoize(object) }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
# Lookup the value from the provided object.
|
|
52
|
+
#
|
|
53
|
+
# @api private
|
|
54
|
+
#
|
|
55
|
+
# @example Lookup the value.
|
|
56
|
+
# field.lookup({ "en" => "test" })
|
|
57
|
+
#
|
|
58
|
+
# @param [ Hash ] object The localized object.
|
|
59
|
+
#
|
|
60
|
+
# @return [ Object ] The object for the locale.
|
|
61
|
+
#
|
|
62
|
+
# @since 3.0.0
|
|
63
|
+
def lookup(object)
|
|
64
|
+
locale = ::I18n.locale
|
|
65
|
+
if ::I18n.respond_to?(:fallbacks)
|
|
66
|
+
object[::I18n.fallbacks[locale].map(&:to_s).find{ |loc| object[loc] }]
|
|
67
|
+
else
|
|
68
|
+
object[locale.to_s]
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|