mongoid 7.6.2 → 8.0.1
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +2 -0
- data/README.md +3 -3
- data/Rakefile +21 -85
- data/lib/config/locales/en.yml +46 -56
- data/lib/mongoid/association/accessors.rb +32 -3
- data/lib/mongoid/association/bindable.rb +48 -0
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/depending.rb +4 -8
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +28 -5
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +40 -18
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
- data/lib/mongoid/association/macros.rb +2 -1
- data/lib/mongoid/association/many.rb +5 -0
- data/lib/mongoid/association/nested/many.rb +5 -39
- data/lib/mongoid/association/nested/nested_buildable.rb +0 -14
- data/lib/mongoid/association/proxy.rb +12 -0
- data/lib/mongoid/association/referenced/auto_save.rb +3 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -18
- data/lib/mongoid/association/referenced/has_many/proxy.rb +11 -107
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
- data/lib/mongoid/association/referenced/syncable.rb +2 -2
- data/lib/mongoid/association/relatable.rb +38 -4
- data/lib/mongoid/attributes/processing.rb +9 -2
- data/lib/mongoid/attributes.rb +30 -27
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +37 -2
- data/lib/mongoid/clients/factory.rb +0 -4
- data/lib/mongoid/clients/options.rb +4 -0
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/config.rb +15 -73
- data/lib/mongoid/contextual/aggregable/memory.rb +22 -20
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +63 -47
- data/lib/mongoid/contextual/mongo.rb +173 -287
- data/lib/mongoid/contextual/none.rb +33 -15
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/includable.rb +24 -20
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -15
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -16
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +0 -12
- data/lib/mongoid/criteria/queryable/optional.rb +3 -9
- data/lib/mongoid/criteria/queryable/options.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +2 -133
- data/lib/mongoid/criteria/queryable/selector.rb +90 -5
- data/lib/mongoid/criteria/queryable/smash.rb +39 -6
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +11 -6
- data/lib/mongoid/criteria.rb +1 -28
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +88 -33
- data/lib/mongoid/equality.rb +4 -4
- data/lib/mongoid/errors/document_not_found.rb +6 -2
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +5 -1
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors.rb +2 -3
- data/lib/mongoid/extensions/array.rb +8 -6
- data/lib/mongoid/extensions/big_decimal.rb +29 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/float.rb +4 -5
- data/lib/mongoid/extensions/hash.rb +13 -32
- data/lib/mongoid/extensions/integer.rb +4 -5
- data/lib/mongoid/extensions/object.rb +2 -0
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +2 -13
- data/lib/mongoid/extensions/symbol.rb +3 -14
- data/lib/mongoid/extensions/time.rb +27 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +42 -7
- data/lib/mongoid/fields/foreign_key.rb +7 -0
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +49 -7
- data/lib/mongoid/findable.rb +21 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +4 -1
- data/lib/mongoid/interceptable.rb +69 -9
- data/lib/mongoid/matchable.rb +1 -6
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +5 -3
- data/lib/mongoid/matcher/regex.rb +9 -8
- data/lib/mongoid/matcher.rb +0 -1
- data/lib/mongoid/persistable/creatable.rb +14 -5
- data/lib/mongoid/persistable/updatable.rb +12 -5
- data/lib/mongoid/persistence_context.rb +8 -42
- data/lib/mongoid/query_cache.rb +6 -258
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +7 -3
- data/lib/mongoid/scopable.rb +9 -11
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/shardable.rb +11 -35
- data/lib/mongoid/stateful.rb +27 -1
- data/lib/mongoid/threaded.rb +0 -3
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +1 -0
- data/lib/mongoid/validatable/uniqueness.rb +2 -1
- data/lib/mongoid/version.rb +1 -5
- data/lib/mongoid/warnings.rb +3 -5
- data/lib/mongoid.rb +1 -0
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -20
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +95 -1
- data/spec/integration/callbacks_spec.rb +226 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -15
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/regex.yml +0 -21
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +198 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +36 -51
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +60 -156
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +14 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +73 -198
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +480 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +22 -60
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +2 -2
- data/spec/mongoid/config_spec.rb +52 -15
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +371 -231
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +467 -156
- data/spec/mongoid/contextual/mongo_spec.rb +566 -426
- data/spec/mongoid/contextual/none_spec.rb +11 -19
- data/spec/mongoid/copyable_spec.rb +451 -2
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -2
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +0 -200
- data/spec/mongoid/criteria/queryable/selector_spec.rb +16 -77
- data/spec/mongoid/criteria/queryable/storable_spec.rb +0 -72
- data/spec/mongoid/criteria_spec.rb +469 -1203
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +48 -76
- data/spec/mongoid/extensions/hash_spec.rb +30 -236
- data/spec/mongoid/extensions/integer_spec.rb +45 -66
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields_spec.rb +321 -50
- data/spec/mongoid/findable_spec.rb +64 -29
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +16 -19
- data/spec/mongoid/interceptable_spec.rb +584 -5
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +24 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +1 -156
- data/spec/mongoid/reloadable_spec.rb +35 -2
- data/spec/mongoid/scopable_spec.rb +36 -34
- data/spec/mongoid/serializable_spec.rb +14 -7
- data/spec/mongoid/shardable_models.rb +0 -14
- data/spec/mongoid/shardable_spec.rb +61 -153
- data/spec/mongoid/stateful_spec.rb +28 -0
- data/spec/mongoid/timestamps_spec.rb +390 -0
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +116 -0
- data/spec/mongoid/touchable_spec_models.rb +12 -8
- data/spec/mongoid/traversable_spec.rb +4 -11
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +1 -7
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/cluster_config.rb +40 -5
- data/spec/shared/lib/mrss/constraints.rb +46 -7
- data/spec/shared/lib/mrss/docker_runner.rb +21 -17
- data/spec/shared/lib/mrss/eg_config_utils.rb +31 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
- data/spec/shared/lib/mrss/lite_constraints.rb +2 -10
- data/spec/shared/lib/mrss/server_version_registry.rb +29 -18
- data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
- data/spec/shared/lib/mrss/utils.rb +6 -28
- data/spec/shared/share/Dockerfile.erb +114 -38
- data/spec/shared/shlib/distro.sh +0 -10
- data/spec/shared/shlib/server.sh +83 -64
- data/spec/shared/shlib/set_env.sh +81 -16
- data/spec/support/constraints.rb +24 -0
- data/spec/support/expectations.rb +17 -20
- data/spec/support/macros.rb +30 -0
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +3 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +1 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +0 -0
- metadata +695 -650
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/in_memory_regexp_timeout.rb +0 -26
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/lib/mongoid/field_readable.rb +0 -70
- data/lib/mongoid/matcher/regexp_budget.rb +0 -389
- data/spec/integration/matcher_regexp_timeout_spec.rb +0 -215
- data/spec/integration/query_operator_guard_spec.rb +0 -89
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
- data/spec/mongoid/matcher/regexp_budget_spec.rb +0 -570
- data/spec/shared/CANDIDATE.md +0 -28
- data/spec/shared/lib/mrss/release/candidate.rb +0 -287
- data/spec/shared/lib/mrss/release/product_data.rb +0 -144
- data/spec/shared/lib/tasks/candidate.rake +0 -64
data/lib/mongoid/document.rb
CHANGED
|
@@ -100,21 +100,8 @@ module Mongoid
|
|
|
100
100
|
# @param [ Hash ] attrs The attributes to set up the document with.
|
|
101
101
|
#
|
|
102
102
|
# @return [ Document ] A new document.
|
|
103
|
-
def initialize(attrs = nil)
|
|
104
|
-
|
|
105
|
-
_building do
|
|
106
|
-
@new_record = true
|
|
107
|
-
@attributes ||= {}
|
|
108
|
-
apply_pre_processed_defaults
|
|
109
|
-
apply_default_scoping
|
|
110
|
-
process_attributes(attrs) do
|
|
111
|
-
yield(self) if block_given?
|
|
112
|
-
end
|
|
113
|
-
apply_post_processed_defaults
|
|
114
|
-
# @todo: #2586: Need to have access to parent document in these
|
|
115
|
-
# callbacks.
|
|
116
|
-
run_callbacks(:initialize) unless _initialize_callbacks.empty?
|
|
117
|
-
end
|
|
103
|
+
def initialize(attrs = nil, &block)
|
|
104
|
+
construct_document(attrs, execute_callbacks: true, &block)
|
|
118
105
|
end
|
|
119
106
|
|
|
120
107
|
# Return the model name of the document.
|
|
@@ -137,18 +124,6 @@ module Mongoid
|
|
|
137
124
|
(persisted? || destroyed?) ? [ _id.to_s ] : nil
|
|
138
125
|
end
|
|
139
126
|
|
|
140
|
-
# Return an array with this +Document+ only in it.
|
|
141
|
-
#
|
|
142
|
-
# @example Return the document in an array.
|
|
143
|
-
# document.to_a
|
|
144
|
-
#
|
|
145
|
-
# @return [ Array<Document> ] An array with the document as its only item.
|
|
146
|
-
#
|
|
147
|
-
# @deprecated
|
|
148
|
-
def to_a
|
|
149
|
-
[ self ]
|
|
150
|
-
end
|
|
151
|
-
|
|
152
127
|
# Return a hash of the entire document hierarchy from this document and
|
|
153
128
|
# below. Used when the attributes are needed for everything and not just
|
|
154
129
|
# the current document.
|
|
@@ -182,7 +157,7 @@ module Mongoid
|
|
|
182
157
|
def as_json(options = nil)
|
|
183
158
|
rv = super
|
|
184
159
|
if options && options[:compact]
|
|
185
|
-
Mongoid.
|
|
160
|
+
Mongoid::Warnings.warn_as_json_compact_deprecated
|
|
186
161
|
rv = rv.compact
|
|
187
162
|
end
|
|
188
163
|
rv
|
|
@@ -230,6 +205,38 @@ module Mongoid
|
|
|
230
205
|
|
|
231
206
|
private
|
|
232
207
|
|
|
208
|
+
# Does the construction of a document.
|
|
209
|
+
#
|
|
210
|
+
# @param [ Hash ] attrs The attributes to set up the document with.
|
|
211
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
|
212
|
+
# should be run.
|
|
213
|
+
#
|
|
214
|
+
# @return [ Document ] A new document.
|
|
215
|
+
#
|
|
216
|
+
# @api private
|
|
217
|
+
def construct_document(attrs = nil, execute_callbacks: true)
|
|
218
|
+
@__parent = nil
|
|
219
|
+
_building do
|
|
220
|
+
@new_record = true
|
|
221
|
+
@attributes ||= {}
|
|
222
|
+
apply_pre_processed_defaults
|
|
223
|
+
apply_default_scoping
|
|
224
|
+
process_attributes(attrs) do
|
|
225
|
+
yield(self) if block_given?
|
|
226
|
+
end
|
|
227
|
+
@attributes_before_type_cast = @attributes.merge(attributes_before_type_cast)
|
|
228
|
+
|
|
229
|
+
if execute_callbacks
|
|
230
|
+
apply_post_processed_defaults
|
|
231
|
+
run_callbacks(:initialize) unless _initialize_callbacks.empty?
|
|
232
|
+
else
|
|
233
|
+
pending_callbacks << :apply_post_processed_defaults
|
|
234
|
+
pending_callbacks << :initialize
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
self
|
|
238
|
+
end
|
|
239
|
+
|
|
233
240
|
# Returns the logger
|
|
234
241
|
#
|
|
235
242
|
# @return [ Logger ] The configured logger or a default Logger instance.
|
|
@@ -247,6 +254,14 @@ module Mongoid
|
|
|
247
254
|
@model_cache_key ||= self.class.model_name.cache_key
|
|
248
255
|
end
|
|
249
256
|
|
|
257
|
+
# Returns a hash of the attributes.
|
|
258
|
+
#
|
|
259
|
+
# Note this method modifies the attributes hash that already exists on the
|
|
260
|
+
# class and returns it. This means that the hash returned by this method
|
|
261
|
+
# refers to the same hash as calling #attributes on the instance. See
|
|
262
|
+
# MONGOID-4476 for an explanation on how this is used.
|
|
263
|
+
#
|
|
264
|
+
# @return [ Hash ] The attributes hash.
|
|
250
265
|
def as_attributes
|
|
251
266
|
return attributes if frozen?
|
|
252
267
|
embedded_relations.each_pair do |name, meta|
|
|
@@ -275,11 +290,26 @@ module Mongoid
|
|
|
275
290
|
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
|
276
291
|
# @param [ Integer ] selected_fields The selected fields from the
|
|
277
292
|
# criteria.
|
|
293
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
|
294
|
+
# should be run.
|
|
295
|
+
#
|
|
296
|
+
# @return [ Document ] A new document.
|
|
297
|
+
def instantiate(attrs = nil, selected_fields = nil, &block)
|
|
298
|
+
instantiate_document(attrs, selected_fields, execute_callbacks: true, &block)
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
# Instantiate the document.
|
|
302
|
+
#
|
|
303
|
+
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
|
304
|
+
# @param [ Integer ] selected_fields The selected fields from the
|
|
305
|
+
# criteria.
|
|
306
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
|
307
|
+
# should be run.
|
|
278
308
|
#
|
|
279
309
|
# @return [ Document ] A new document.
|
|
280
310
|
#
|
|
281
311
|
# @api private
|
|
282
|
-
def
|
|
312
|
+
def instantiate_document(attrs = nil, selected_fields = nil, execute_callbacks: true)
|
|
283
313
|
attributes = if Mongoid.legacy_attributes
|
|
284
314
|
attrs
|
|
285
315
|
else
|
|
@@ -289,13 +319,38 @@ module Mongoid
|
|
|
289
319
|
doc = allocate
|
|
290
320
|
doc.__selected_fields = selected_fields
|
|
291
321
|
doc.instance_variable_set(:@attributes, attributes)
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
doc.
|
|
322
|
+
# TODO: remove the to_h when the legacy_attributes flag is removed.
|
|
323
|
+
# The to_h ensures that we don't accidentally make attributes_before_type_cast
|
|
324
|
+
# a BSON::Document.
|
|
325
|
+
doc.instance_variable_set(:@attributes_before_type_cast, attributes&.to_h.dup)
|
|
326
|
+
|
|
327
|
+
if execute_callbacks
|
|
328
|
+
doc.apply_defaults
|
|
329
|
+
yield(doc) if block_given?
|
|
330
|
+
doc.run_callbacks(:find) unless doc._find_callbacks.empty?
|
|
331
|
+
doc.run_callbacks(:initialize) unless doc._initialize_callbacks.empty?
|
|
332
|
+
else
|
|
333
|
+
yield(doc) if block_given?
|
|
334
|
+
doc.pending_callbacks += [:apply_defaults, :find, :initialize]
|
|
335
|
+
end
|
|
336
|
+
|
|
296
337
|
doc
|
|
297
338
|
end
|
|
298
339
|
|
|
340
|
+
# Allocates and constructs a document.
|
|
341
|
+
#
|
|
342
|
+
# @param [ Hash ] attrs The attributes to set up the document with.
|
|
343
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
|
344
|
+
# should be run.
|
|
345
|
+
#
|
|
346
|
+
# @return [ Document ] A new document.
|
|
347
|
+
#
|
|
348
|
+
# @api private
|
|
349
|
+
def construct_document(attrs = nil, execute_callbacks: true)
|
|
350
|
+
doc = allocate
|
|
351
|
+
doc.send(:construct_document, attrs, execute_callbacks: execute_callbacks)
|
|
352
|
+
end
|
|
353
|
+
|
|
299
354
|
# Returns all types to query for when using this class as the base.
|
|
300
355
|
#
|
|
301
356
|
# @example Get the types.
|
data/lib/mongoid/equality.rb
CHANGED
|
@@ -44,9 +44,9 @@ module Mongoid
|
|
|
44
44
|
# @return [ true, false ] True if the classes are equal, false if not.
|
|
45
45
|
def ===(other)
|
|
46
46
|
if Mongoid.legacy_triple_equals
|
|
47
|
-
other.class == Class ? self.class === other : self == other
|
|
48
|
-
else
|
|
49
47
|
super
|
|
48
|
+
else
|
|
49
|
+
other.class == Class ? self.class === other : self == other
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
|
|
@@ -73,9 +73,9 @@ module Mongoid
|
|
|
73
73
|
# @return [ true, false ] True if the classes are equal, false if not.
|
|
74
74
|
def ===(other)
|
|
75
75
|
if Mongoid.legacy_triple_equals
|
|
76
|
-
other.class == Class ? self <= other : other.is_a?(self)
|
|
77
|
-
else
|
|
78
76
|
other.is_a?(self)
|
|
77
|
+
else
|
|
78
|
+
other.class == Class ? self <= other : other.is_a?(self)
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
end
|
|
@@ -20,7 +20,8 @@ module Mongoid
|
|
|
20
20
|
#
|
|
21
21
|
# @param [ Class ] klass The model class.
|
|
22
22
|
# @param [ Hash, Array, Object ] params The attributes or ids.
|
|
23
|
-
# @param [ Array ] unmatched The unmatched ids, if appropriate
|
|
23
|
+
# @param [ Array, Hash ] unmatched The unmatched ids, if appropriate. If
|
|
24
|
+
# there is a shard key this will be a hash.
|
|
24
25
|
def initialize(klass, params, unmatched = nil)
|
|
25
26
|
if !unmatched && !params.is_a?(Hash)
|
|
26
27
|
unmatched = Array(params) if params
|
|
@@ -35,7 +36,8 @@ module Mongoid
|
|
|
35
36
|
searched: searched(params),
|
|
36
37
|
attributes: params,
|
|
37
38
|
total: total(params),
|
|
38
|
-
missing: missing(unmatched)
|
|
39
|
+
missing: missing(unmatched),
|
|
40
|
+
shard_key: shard_key(unmatched)
|
|
39
41
|
}
|
|
40
42
|
)
|
|
41
43
|
)
|
|
@@ -54,6 +56,8 @@ module Mongoid
|
|
|
54
56
|
def missing(unmatched)
|
|
55
57
|
if unmatched.is_a?(::Array)
|
|
56
58
|
unmatched.join(", ")
|
|
59
|
+
elsif unmatched.is_a?(::Hash)
|
|
60
|
+
unmatched[:_id] || unmatched["_id"]
|
|
57
61
|
else
|
|
58
62
|
unmatched
|
|
59
63
|
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongoid
|
|
4
|
+
module Errors
|
|
5
|
+
|
|
6
|
+
# This error is raised when trying to use the setter for a field that starts
|
|
7
|
+
# with a dollar sign ($) or contains a dot/period (.).
|
|
8
|
+
class InvalidDotDollarAssignment < MongoidError
|
|
9
|
+
|
|
10
|
+
# Create the new error.
|
|
11
|
+
#
|
|
12
|
+
# @param [ Class ] klass The class of the document.
|
|
13
|
+
# @param [ Class ] attr The attribute attempted to be written.
|
|
14
|
+
#
|
|
15
|
+
# @api private
|
|
16
|
+
def initialize(klass, attr)
|
|
17
|
+
super(
|
|
18
|
+
compose_message("invalid_dot_dollar_assignment", { klass: klass, attr: attr })
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -12,14 +12,18 @@ module Mongoid
|
|
|
12
12
|
# @example Create the error.
|
|
13
13
|
# InvalidField.new(person, :crazy_method_name)
|
|
14
14
|
#
|
|
15
|
+
# @api private
|
|
16
|
+
#
|
|
15
17
|
# @param [ Class ] klass The document class.
|
|
18
|
+
# @param [ Symbol ] field The field name.
|
|
16
19
|
# @param [ Symbol ] name The method name.
|
|
17
|
-
def initialize(klass, name)
|
|
20
|
+
def initialize(klass, field, name)
|
|
18
21
|
super(
|
|
19
22
|
compose_message(
|
|
20
23
|
"invalid_field",
|
|
21
24
|
{
|
|
22
25
|
name: name,
|
|
26
|
+
field: field,
|
|
23
27
|
origin: origin(klass, name),
|
|
24
28
|
file: location(klass, name)[0],
|
|
25
29
|
line: location(klass, name)[1]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongoid
|
|
4
|
+
module Errors
|
|
5
|
+
|
|
6
|
+
# This error is raised when trying to define a field using a :type option value
|
|
7
|
+
# that is not present in the field type mapping.
|
|
8
|
+
class InvalidFieldType < MongoidError
|
|
9
|
+
|
|
10
|
+
# Create the new error.
|
|
11
|
+
#
|
|
12
|
+
# @example Instantiate the error.
|
|
13
|
+
# InvalidFieldType.new('Person', 'first_name', 'stringgy')
|
|
14
|
+
#
|
|
15
|
+
# @param [ String ] klass The model class.
|
|
16
|
+
# @param [ String ] field The field on which the invalid type is used.
|
|
17
|
+
# @param [ Symbol | String ] type The value of the field :type option.
|
|
18
|
+
def initialize(klass, field, type)
|
|
19
|
+
super(
|
|
20
|
+
compose_message('invalid_field_type',
|
|
21
|
+
klass: klass, field: field, type_inspection: type.inspect)
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
data/lib/mongoid/errors.rb
CHANGED
|
@@ -6,16 +6,15 @@ require "mongoid/errors/callback"
|
|
|
6
6
|
require "mongoid/errors/criteria_argument_required"
|
|
7
7
|
require "mongoid/errors/document_not_destroyed"
|
|
8
8
|
require "mongoid/errors/document_not_found"
|
|
9
|
-
require "mongoid/errors/eager_load"
|
|
10
9
|
require "mongoid/errors/empty_config_file"
|
|
11
10
|
require "mongoid/errors/in_memory_collation_not_supported"
|
|
12
|
-
require "mongoid/errors/in_memory_regexp_timeout"
|
|
13
11
|
require "mongoid/errors/invalid_collection"
|
|
14
12
|
require "mongoid/errors/invalid_config_file"
|
|
15
13
|
require "mongoid/errors/invalid_config_option"
|
|
16
14
|
require "mongoid/errors/invalid_dependent_strategy"
|
|
17
15
|
require "mongoid/errors/invalid_field"
|
|
18
16
|
require "mongoid/errors/invalid_field_option"
|
|
17
|
+
require "mongoid/errors/invalid_field_type"
|
|
19
18
|
require "mongoid/errors/invalid_find"
|
|
20
19
|
require "mongoid/errors/invalid_includes"
|
|
21
20
|
require "mongoid/errors/invalid_index"
|
|
@@ -25,6 +24,7 @@ require "mongoid/errors/invalid_persistence_option"
|
|
|
25
24
|
require "mongoid/errors/invalid_query"
|
|
26
25
|
# Must be after invalid_query.
|
|
27
26
|
require "mongoid/errors/invalid_discriminator_key_target"
|
|
27
|
+
require "mongoid/errors/invalid_dot_dollar_assignment"
|
|
28
28
|
require "mongoid/errors/invalid_elem_match_operator"
|
|
29
29
|
require "mongoid/errors/invalid_estimated_count_criteria"
|
|
30
30
|
require "mongoid/errors/invalid_expression_operator"
|
|
@@ -37,7 +37,6 @@ require "mongoid/errors/invalid_set_polymorphic_relation"
|
|
|
37
37
|
require "mongoid/errors/invalid_storage_options"
|
|
38
38
|
require "mongoid/errors/invalid_storage_parent"
|
|
39
39
|
require "mongoid/errors/invalid_time"
|
|
40
|
-
require "mongoid/errors/invalid_value"
|
|
41
40
|
require "mongoid/errors/inverse_not_found"
|
|
42
41
|
require "mongoid/errors/mixed_relations"
|
|
43
42
|
require "mongoid/errors/mixed_client_configuration"
|
|
@@ -87,7 +87,7 @@ module Mongoid
|
|
|
87
87
|
# @example Mongoize the object.
|
|
88
88
|
# object.mongoize
|
|
89
89
|
#
|
|
90
|
-
# @return [ Array ] The object.
|
|
90
|
+
# @return [ Array | nil ] The object or nil.
|
|
91
91
|
def mongoize
|
|
92
92
|
::Array.mongoize(self)
|
|
93
93
|
end
|
|
@@ -144,12 +144,12 @@ module Mongoid
|
|
|
144
144
|
#
|
|
145
145
|
# @param [ Object ] object The object to mongoize.
|
|
146
146
|
#
|
|
147
|
-
# @return [ Array ] The object mongoized.
|
|
147
|
+
# @return [ Array | nil ] The object mongoized or nil.
|
|
148
148
|
def mongoize(object)
|
|
149
|
-
if object.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
149
|
+
return if object.nil?
|
|
150
|
+
case object
|
|
151
|
+
when ::Array, ::Set
|
|
152
|
+
object.map(&:mongoize)
|
|
153
153
|
end
|
|
154
154
|
end
|
|
155
155
|
|
|
@@ -169,3 +169,5 @@ end
|
|
|
169
169
|
|
|
170
170
|
::Array.__send__(:include, Mongoid::Extensions::Array)
|
|
171
171
|
::Array.extend(Mongoid::Extensions::Array::ClassMethods)
|
|
172
|
+
|
|
173
|
+
::Mongoid.deprecate(Array, :blank_criteria)
|
|
@@ -20,9 +20,9 @@ module Mongoid
|
|
|
20
20
|
# @example Mongoize the object.
|
|
21
21
|
# object.mongoize
|
|
22
22
|
#
|
|
23
|
-
# @return [
|
|
23
|
+
# @return [ String | BSON::Decimal128 | nil ] The object or nil.
|
|
24
24
|
def mongoize
|
|
25
|
-
|
|
25
|
+
::BigDecimal.mongoize(self)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
# Is the BigDecimal a number?
|
|
@@ -39,26 +39,45 @@ module Mongoid
|
|
|
39
39
|
|
|
40
40
|
# Convert the object from its mongo friendly ruby type to this type.
|
|
41
41
|
#
|
|
42
|
-
# @example Demongoize the object.
|
|
43
|
-
# Object.demongoize(object)
|
|
44
|
-
#
|
|
45
42
|
# @param [ Object ] object The object to demongoize.
|
|
46
43
|
#
|
|
47
|
-
# @return [ BigDecimal
|
|
44
|
+
# @return [ BigDecimal | nil ] A BigDecimal derived from the object or nil.
|
|
48
45
|
def demongoize(object)
|
|
49
|
-
|
|
46
|
+
return if object.blank?
|
|
47
|
+
if object.is_a?(BSON::Decimal128)
|
|
48
|
+
object.to_big_decimal
|
|
49
|
+
elsif object.numeric?
|
|
50
|
+
BigDecimal(object.to_s)
|
|
51
|
+
elsif object.numeric?
|
|
52
|
+
object.to_d
|
|
53
|
+
end
|
|
50
54
|
end
|
|
51
55
|
|
|
52
|
-
# Mongoize an object of any type to how it's stored in the db
|
|
56
|
+
# Mongoize an object of any type to how it's stored in the db.
|
|
53
57
|
#
|
|
54
58
|
# @example Mongoize the object.
|
|
55
59
|
# BigDecimal.mongoize(123)
|
|
56
60
|
#
|
|
57
61
|
# @param [ Object ] object The object to Mongoize
|
|
58
62
|
#
|
|
59
|
-
# @return [ String
|
|
63
|
+
# @return [ String | BSON::Decimal128 | nil ] A String or Decimal128
|
|
64
|
+
# representing the object or nil. String if Mongoid.map_big_decimal_to_decimal128
|
|
65
|
+
# is false, BSON::Decimal128 otherwise.
|
|
60
66
|
def mongoize(object)
|
|
61
|
-
|
|
67
|
+
return if object.blank?
|
|
68
|
+
if Mongoid.map_big_decimal_to_decimal128
|
|
69
|
+
if object.is_a?(BSON::Decimal128)
|
|
70
|
+
object
|
|
71
|
+
elsif object.is_a?(BigDecimal)
|
|
72
|
+
BSON::Decimal128.new(object)
|
|
73
|
+
elsif object.numeric?
|
|
74
|
+
BSON::Decimal128.new(object.to_s)
|
|
75
|
+
end
|
|
76
|
+
else
|
|
77
|
+
if object.is_a?(BSON::Decimal128) || object.numeric?
|
|
78
|
+
object.to_s
|
|
79
|
+
end
|
|
80
|
+
end
|
|
62
81
|
end
|
|
63
82
|
end
|
|
64
83
|
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongoid
|
|
4
|
+
module Extensions
|
|
5
|
+
module Binary
|
|
6
|
+
|
|
7
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
8
|
+
# type.
|
|
9
|
+
#
|
|
10
|
+
# @example Mongoize the object.
|
|
11
|
+
# object.mongoize
|
|
12
|
+
#
|
|
13
|
+
# @return [ BSON::Binary | nil ] The object.
|
|
14
|
+
def mongoize
|
|
15
|
+
BSON::Binary.mongoize(self)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
module ClassMethods
|
|
19
|
+
|
|
20
|
+
# Mongoize an object of any type to how it's stored in the db.
|
|
21
|
+
#
|
|
22
|
+
# @example Mongoize the object.
|
|
23
|
+
# BigDecimal.mongoize(123)
|
|
24
|
+
#
|
|
25
|
+
# @param [ Object ] object The object to Mongoize
|
|
26
|
+
#
|
|
27
|
+
# @return [ BSON::Binary | nil ] A Binary representing the object or nil.
|
|
28
|
+
def mongoize(object)
|
|
29
|
+
return if object.nil?
|
|
30
|
+
case object
|
|
31
|
+
when BSON::Binary then object
|
|
32
|
+
when String, Symbol then BSON::Binary.new(object.to_s)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
alias :demongoize :mongoize
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
BSON::Binary.__send__(:include, Mongoid::Extensions::Binary)
|
|
42
|
+
BSON::Binary.extend(Mongoid::Extensions::Binary::ClassMethods)
|
|
@@ -11,10 +11,16 @@ module Mongoid
|
|
|
11
11
|
# @example Mongoize the object.
|
|
12
12
|
# Boolean.mongoize("123.11")
|
|
13
13
|
#
|
|
14
|
-
# @return [
|
|
14
|
+
# @return [ true | false | nil ] The object mongoized or nil.
|
|
15
15
|
def mongoize(object)
|
|
16
|
-
|
|
16
|
+
return if object.nil?
|
|
17
|
+
if object.to_s =~ (/\A(true|t|yes|y|on|1|1.0)\z/i)
|
|
18
|
+
true
|
|
19
|
+
elsif object.to_s =~ (/\A(false|f|no|n|off|0|0.0)\z/i)
|
|
20
|
+
false
|
|
21
|
+
end
|
|
17
22
|
end
|
|
23
|
+
alias :demongoize :mongoize
|
|
18
24
|
end
|
|
19
25
|
end
|
|
20
26
|
end
|
|
@@ -4,12 +4,6 @@ module Mongoid
|
|
|
4
4
|
module Extensions
|
|
5
5
|
module Date
|
|
6
6
|
|
|
7
|
-
# Constant for epoch - used when passing invalid times.
|
|
8
|
-
#
|
|
9
|
-
# @deprecated No longer used as a return value from #mongoize passed
|
|
10
|
-
# an invalid date string.
|
|
11
|
-
EPOCH = ::Date.new(1970, 1, 1)
|
|
12
|
-
|
|
13
7
|
# Convert the date into a time.
|
|
14
8
|
#
|
|
15
9
|
# @example Convert the date to a time.
|
|
@@ -43,9 +37,20 @@ module Mongoid
|
|
|
43
37
|
#
|
|
44
38
|
# @param [ Time ] object The time from Mongo.
|
|
45
39
|
#
|
|
46
|
-
# @return [ Date ] The object as a date.
|
|
40
|
+
# @return [ Date | nil ] The object as a date or nil.
|
|
47
41
|
def demongoize(object)
|
|
48
|
-
|
|
42
|
+
return if object.nil?
|
|
43
|
+
if object.is_a?(String)
|
|
44
|
+
object = begin
|
|
45
|
+
object.__mongoize_time__
|
|
46
|
+
rescue ArgumentError
|
|
47
|
+
nil
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
if object.acts_like?(:time) || object.acts_like?(:date)
|
|
52
|
+
::Date.new(object.year, object.month, object.day)
|
|
53
|
+
end
|
|
49
54
|
end
|
|
50
55
|
|
|
51
56
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
@@ -56,20 +61,21 @@ module Mongoid
|
|
|
56
61
|
#
|
|
57
62
|
# @param [ Object ] object The object to mongoize.
|
|
58
63
|
#
|
|
59
|
-
# @return [ Time ] The object mongoized.
|
|
64
|
+
# @return [ Time | nil ] The object mongoized or nil.
|
|
60
65
|
def mongoize(object)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
end
|
|
69
|
-
::Time.utc(time.year, time.month, time.day)
|
|
70
|
-
rescue ArgumentError
|
|
71
|
-
nil
|
|
66
|
+
return if object.blank?
|
|
67
|
+
begin
|
|
68
|
+
if object.is_a?(String)
|
|
69
|
+
# https://jira.mongodb.org/browse/MONGOID-4460
|
|
70
|
+
time = ::Time.parse(object)
|
|
71
|
+
else
|
|
72
|
+
time = object.__mongoize_time__
|
|
72
73
|
end
|
|
74
|
+
rescue ArgumentError
|
|
75
|
+
nil
|
|
76
|
+
end
|
|
77
|
+
if time.acts_like?(:time)
|
|
78
|
+
::Time.utc(time.year, time.month, time.day)
|
|
73
79
|
end
|
|
74
80
|
end
|
|
75
81
|
end
|
|
@@ -39,7 +39,7 @@ module Mongoid
|
|
|
39
39
|
#
|
|
40
40
|
# @param [ Time ] object The time from Mongo.
|
|
41
41
|
#
|
|
42
|
-
# @return [ DateTime ] The object as a
|
|
42
|
+
# @return [ DateTime | nil ] The object as a datetime or nil.
|
|
43
43
|
def demongoize(object)
|
|
44
44
|
::Time.demongoize(object).try(:to_datetime)
|
|
45
45
|
end
|
|
@@ -34,12 +34,11 @@ module Mongoid
|
|
|
34
34
|
#
|
|
35
35
|
# @param [ Object ] object The object to mongoize.
|
|
36
36
|
#
|
|
37
|
-
# @return [
|
|
37
|
+
# @return [ Float | nil ] The object mongoized or nil.
|
|
38
38
|
def mongoize(object)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
nil
|
|
39
|
+
return if object.blank?
|
|
40
|
+
if object.numeric?
|
|
41
|
+
object.to_f
|
|
43
42
|
end
|
|
44
43
|
end
|
|
45
44
|
alias :demongoize :mongoize
|