mongoid 7.6.0 → 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 -30
- 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/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 +2 -1
- 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 +12 -9
- 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/options.rb +4 -0
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/config.rb +15 -11
- data/lib/mongoid/contextual/aggregable/memory.rb +23 -15
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +55 -28
- 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/optional.rb +3 -9
- data/lib/mongoid/criteria/queryable/options.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +2 -24
- 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 -2
- 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 +12 -5
- 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/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/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 -4
- data/lib/mongoid.rb +1 -0
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -12
- 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/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 +38 -5
- 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 +62 -13
- 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 +80 -11
- 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 +23 -30
- 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 +396 -158
- 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 +521 -14
- 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 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
- 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 -1201
- 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 -0
- 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/docker_runner.rb +1 -8
- 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 +24 -17
- 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 +107 -33
- data/spec/shared/shlib/distro.sh +0 -10
- data/spec/shared/shlib/server.sh +33 -64
- data/spec/shared/shlib/set_env.sh +71 -12
- 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 -641
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
- data/spec/shared/CANDIDATE.md +0 -28
- data/spec/shared/lib/mrss/release/candidate.rb +0 -281
- data/spec/shared/lib/mrss/release/product_data.rb +0 -144
- data/spec/shared/lib/tasks/candidate.rake +0 -64
data/lib/mongoid/query_cache.rb
CHANGED
|
@@ -4,28 +4,8 @@ module Mongoid
|
|
|
4
4
|
|
|
5
5
|
# A cache of database queries on a per-request basis.
|
|
6
6
|
module QueryCache
|
|
7
|
-
# @api private
|
|
8
|
-
LEGACY_WARNING = <<~DOC
|
|
9
|
-
You are using the legacy Mongoid query cache which has known issues.
|
|
10
|
-
Please upgrade the `mongo' gem to at least 2.14.0 to use the improved driver query cache.
|
|
11
|
-
Refer to: https://docs.mongodb.com/mongoid/current/tutorials/mongoid-queries/#the-improved-driver-query-cache
|
|
12
|
-
DOC
|
|
13
7
|
|
|
14
8
|
class << self
|
|
15
|
-
# Get the cached queries.
|
|
16
|
-
#
|
|
17
|
-
# @example Get the cached queries from the current thread.
|
|
18
|
-
# QueryCache.cache_table
|
|
19
|
-
#
|
|
20
|
-
# @return [ Hash ] The hash of cached queries.
|
|
21
|
-
# @api private
|
|
22
|
-
def cache_table
|
|
23
|
-
if defined?(Mongo::QueryCache)
|
|
24
|
-
raise NotImplementedError, "Mongoid does not expose driver's query cache table"
|
|
25
|
-
else
|
|
26
|
-
Thread.current["[mongoid]:query_cache"] ||= {}
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
9
|
|
|
30
10
|
# Clear the query cache.
|
|
31
11
|
#
|
|
@@ -34,11 +14,7 @@ module Mongoid
|
|
|
34
14
|
#
|
|
35
15
|
# @return [ nil ] Always nil.
|
|
36
16
|
def clear_cache
|
|
37
|
-
|
|
38
|
-
Mongo::QueryCache.clear
|
|
39
|
-
else
|
|
40
|
-
Thread.current["[mongoid]:query_cache"] = nil
|
|
41
|
-
end
|
|
17
|
+
Mongo::QueryCache.clear
|
|
42
18
|
end
|
|
43
19
|
|
|
44
20
|
# Set whether the cache is enabled.
|
|
@@ -48,11 +24,7 @@ module Mongoid
|
|
|
48
24
|
#
|
|
49
25
|
# @param [ true, false ] value The enabled value.
|
|
50
26
|
def enabled=(value)
|
|
51
|
-
|
|
52
|
-
Mongo::QueryCache.enabled = value
|
|
53
|
-
else
|
|
54
|
-
Thread.current["[mongoid]:query_cache:enabled"] = value
|
|
55
|
-
end
|
|
27
|
+
Mongo::QueryCache.enabled = value
|
|
56
28
|
end
|
|
57
29
|
|
|
58
30
|
# Is the query cache enabled on the current thread?
|
|
@@ -62,11 +34,7 @@ module Mongoid
|
|
|
62
34
|
#
|
|
63
35
|
# @return [ true, false ] If the cache is enabled.
|
|
64
36
|
def enabled?
|
|
65
|
-
|
|
66
|
-
Mongo::QueryCache.enabled?
|
|
67
|
-
else
|
|
68
|
-
!!Thread.current["[mongoid]:query_cache:enabled"]
|
|
69
|
-
end
|
|
37
|
+
Mongo::QueryCache.enabled?
|
|
70
38
|
end
|
|
71
39
|
|
|
72
40
|
# Execute the block while using the query cache.
|
|
@@ -76,21 +44,7 @@ module Mongoid
|
|
|
76
44
|
#
|
|
77
45
|
# @return [ Object ] The result of the block.
|
|
78
46
|
def cache(&block)
|
|
79
|
-
|
|
80
|
-
Mongo::QueryCache.cache(&block)
|
|
81
|
-
else
|
|
82
|
-
@legacy_query_cache_warned ||= begin
|
|
83
|
-
Mongoid.logger.warn(LEGACY_WARNING)
|
|
84
|
-
true
|
|
85
|
-
end
|
|
86
|
-
enabled = QueryCache.enabled?
|
|
87
|
-
QueryCache.enabled = true
|
|
88
|
-
begin
|
|
89
|
-
yield
|
|
90
|
-
ensure
|
|
91
|
-
QueryCache.enabled = enabled
|
|
92
|
-
end
|
|
93
|
-
end
|
|
47
|
+
Mongo::QueryCache.cache(&block)
|
|
94
48
|
end
|
|
95
49
|
|
|
96
50
|
# Execute the block with the query cache disabled.
|
|
@@ -100,217 +54,11 @@ module Mongoid
|
|
|
100
54
|
#
|
|
101
55
|
# @return [ Object ] The result of the block.
|
|
102
56
|
def uncached(&block)
|
|
103
|
-
|
|
104
|
-
Mongo::QueryCache.uncached(&block)
|
|
105
|
-
else
|
|
106
|
-
enabled = QueryCache.enabled?
|
|
107
|
-
QueryCache.enabled = false
|
|
108
|
-
begin
|
|
109
|
-
yield
|
|
110
|
-
ensure
|
|
111
|
-
QueryCache.enabled = enabled
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
if defined?(Mongo::QueryCache::Middleware)
|
|
118
|
-
Middleware = Mongo::QueryCache::Middleware
|
|
119
|
-
else
|
|
120
|
-
# The middleware to be added to a rack application in order to activate the
|
|
121
|
-
# query cache.
|
|
122
|
-
class Middleware
|
|
123
|
-
|
|
124
|
-
# Instantiate the middleware.
|
|
125
|
-
#
|
|
126
|
-
# @example Create the new middleware.
|
|
127
|
-
# Middleware.new(app)
|
|
128
|
-
#
|
|
129
|
-
# @param [ Object ] app The rack application stack.
|
|
130
|
-
def initialize(app)
|
|
131
|
-
@app = app
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
# Execute the request, wrapping in a query cache.
|
|
135
|
-
#
|
|
136
|
-
# @example Execute the request.
|
|
137
|
-
# middleware.call(env)
|
|
138
|
-
#
|
|
139
|
-
# @param [ Object ] env The environment.
|
|
140
|
-
#
|
|
141
|
-
# @return [ Object ] The result of the call.
|
|
142
|
-
def call(env)
|
|
143
|
-
QueryCache.cache do
|
|
144
|
-
@app.call(env)
|
|
145
|
-
end
|
|
146
|
-
ensure
|
|
147
|
-
QueryCache.clear_cache
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
# A Cursor that attempts to load documents from memory first before hitting
|
|
153
|
-
# the database if the same query has already been executed.
|
|
154
|
-
# @deprecated This class is only used with driver versions 2.13 and lower.
|
|
155
|
-
class CachedCursor < Mongo::Cursor
|
|
156
|
-
|
|
157
|
-
# We iterate over the cached documents if they exist already in the
|
|
158
|
-
# cursor otherwise proceed as normal.
|
|
159
|
-
#
|
|
160
|
-
# @example Iterate over the documents.
|
|
161
|
-
# cursor.each do |doc|
|
|
162
|
-
# # ...
|
|
163
|
-
# end
|
|
164
|
-
def each
|
|
165
|
-
if @cached_documents
|
|
166
|
-
@cached_documents.each do |doc|
|
|
167
|
-
yield doc
|
|
168
|
-
end
|
|
169
|
-
else
|
|
170
|
-
super
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
# Get a human-readable string representation of +Cursor+.
|
|
175
|
-
#
|
|
176
|
-
# @example Inspect the cursor.
|
|
177
|
-
# cursor.inspect
|
|
178
|
-
#
|
|
179
|
-
# @return [ String ] A string representation of a +Cursor+ instance.
|
|
180
|
-
def inspect
|
|
181
|
-
"#<Mongoid::QueryCache::CachedCursor:0x#{object_id} @view=#{@view.inspect}>"
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
private
|
|
185
|
-
|
|
186
|
-
def process(result)
|
|
187
|
-
documents = super
|
|
188
|
-
if @cursor_id.zero? && !@after_first_batch
|
|
189
|
-
@cached_documents ||= []
|
|
190
|
-
@cached_documents.concat(documents)
|
|
191
|
-
end
|
|
192
|
-
@after_first_batch = true
|
|
193
|
-
documents
|
|
194
|
-
end
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
# Included to add behavior for clearing out the query cache on certain
|
|
198
|
-
# operations.
|
|
199
|
-
# @deprecated This module is only used with driver versions 2.13 and lower.
|
|
200
|
-
module Base
|
|
201
|
-
|
|
202
|
-
def alias_query_cache_clear(*method_names)
|
|
203
|
-
method_names.each do |method_name|
|
|
204
|
-
define_method("#{method_name}_with_clear_cache") do |*args|
|
|
205
|
-
QueryCache.clear_cache
|
|
206
|
-
send("#{method_name}_without_clear_cache", *args)
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
alias_method "#{method_name}_without_clear_cache", method_name
|
|
210
|
-
alias_method method_name, "#{method_name}_with_clear_cache"
|
|
211
|
-
end
|
|
57
|
+
Mongo::QueryCache.uncached(&block)
|
|
212
58
|
end
|
|
213
59
|
end
|
|
214
60
|
|
|
215
|
-
|
|
216
|
-
# cached cursor or a regular cursor on iteration.
|
|
217
|
-
# @deprecated This module is only used with driver versions 2.13 and lower.
|
|
218
|
-
module View
|
|
219
|
-
extend ActiveSupport::Concern
|
|
220
|
-
|
|
221
|
-
included do
|
|
222
|
-
extend QueryCache::Base
|
|
223
|
-
alias_query_cache_clear :delete_one,
|
|
224
|
-
:delete_many,
|
|
225
|
-
:update_one,
|
|
226
|
-
:update_many,
|
|
227
|
-
:replace_one,
|
|
228
|
-
:find_one_and_delete,
|
|
229
|
-
:find_one_and_replace,
|
|
230
|
-
:find_one_and_update
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
# Override the default enumeration to handle if the cursor can be cached
|
|
234
|
-
# or not.
|
|
235
|
-
#
|
|
236
|
-
# @example Iterate over the view.
|
|
237
|
-
# view.each do |doc|
|
|
238
|
-
# # ...
|
|
239
|
-
# end
|
|
240
|
-
def each
|
|
241
|
-
if system_collection? || !QueryCache.enabled? || (respond_to?(:write?, true) && write?)
|
|
242
|
-
super
|
|
243
|
-
else
|
|
244
|
-
@cursor = nil
|
|
245
|
-
unless @cursor = cached_cursor
|
|
246
|
-
session = client.send(:get_session, @options)
|
|
247
|
-
read_with_retry(session, server_selector) do |server|
|
|
248
|
-
result = send_initial_query(server, session)
|
|
249
|
-
if result.cursor_id == 0 || result.cursor_id.nil?
|
|
250
|
-
@cursor = CachedCursor.new(view, result, server, session: session)
|
|
251
|
-
QueryCache.cache_table[cache_key] = @cursor
|
|
252
|
-
else
|
|
253
|
-
@cursor = Mongo::Cursor.new(view, result, server, session: session)
|
|
254
|
-
end
|
|
255
|
-
end
|
|
256
|
-
end
|
|
257
|
-
if block_given?
|
|
258
|
-
if limit
|
|
259
|
-
@cursor.to_a[0...limit].each do |doc|
|
|
260
|
-
yield doc
|
|
261
|
-
end
|
|
262
|
-
else
|
|
263
|
-
@cursor.each do |doc|
|
|
264
|
-
yield doc
|
|
265
|
-
end
|
|
266
|
-
end
|
|
267
|
-
else
|
|
268
|
-
@cursor.to_enum
|
|
269
|
-
end
|
|
270
|
-
end
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
private
|
|
274
|
-
|
|
275
|
-
def cached_cursor
|
|
276
|
-
if limit
|
|
277
|
-
key = [ collection.namespace, selector, nil, skip, sort, projection, collation ]
|
|
278
|
-
cursor = QueryCache.cache_table[key]
|
|
279
|
-
end
|
|
280
|
-
cursor || QueryCache.cache_table[cache_key]
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
def cache_key
|
|
284
|
-
[ collection.namespace, selector, limit, skip, sort, projection, collation ]
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
def system_collection?
|
|
288
|
-
collection.name.start_with?('system.')
|
|
289
|
-
end
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
# Adds behavior to the query cache for collections.
|
|
293
|
-
# @deprecated This module is only used with driver versions 2.13 and lower.
|
|
294
|
-
module Collection
|
|
295
|
-
extend ActiveSupport::Concern
|
|
296
|
-
|
|
297
|
-
included do
|
|
298
|
-
extend QueryCache::Base
|
|
299
|
-
alias_query_cache_clear :insert_one, :insert_many
|
|
300
|
-
end
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
# Bypass the query cache when reloading a document.
|
|
304
|
-
module Document
|
|
305
|
-
def reload
|
|
306
|
-
QueryCache.uncached { super }
|
|
307
|
-
end
|
|
308
|
-
end
|
|
61
|
+
Middleware = Mongo::QueryCache::Middleware
|
|
309
62
|
end
|
|
310
63
|
end
|
|
311
64
|
|
|
312
|
-
unless defined?(Mongo::QueryCache)
|
|
313
|
-
Mongo::Collection.__send__(:include, Mongoid::QueryCache::Collection)
|
|
314
|
-
Mongo::Collection::View.__send__(:include, Mongoid::QueryCache::View)
|
|
315
|
-
Mongoid::Document.__send__(:include, Mongoid::QueryCache::Document)
|
|
316
|
-
end
|
data/lib/mongoid/reloadable.rb
CHANGED
|
@@ -23,11 +23,15 @@ module Mongoid
|
|
|
23
23
|
|
|
24
24
|
reloaded = _reload
|
|
25
25
|
if Mongoid.raise_not_found_error && (reloaded.nil? || reloaded.empty?)
|
|
26
|
-
|
|
26
|
+
shard_keys = atomic_selector.with_indifferent_access.slice(*shard_key_fields, :_id)
|
|
27
|
+
raise Errors::DocumentNotFound.new(self.class, _id, shard_keys)
|
|
27
28
|
end
|
|
28
29
|
@attributes = reloaded
|
|
29
|
-
@attributes_before_type_cast =
|
|
30
|
-
changed_attributes
|
|
30
|
+
@attributes_before_type_cast = @attributes.dup
|
|
31
|
+
@changed_attributes = {}
|
|
32
|
+
@previous_changes = {}
|
|
33
|
+
@previous_attributes = {}
|
|
34
|
+
@previously_new_record = false
|
|
31
35
|
reset_readonly
|
|
32
36
|
apply_defaults
|
|
33
37
|
reload_relations
|
data/lib/mongoid/scopable.rb
CHANGED
|
@@ -289,17 +289,15 @@ module Mongoid
|
|
|
289
289
|
# @return [ Method ] The defined method.
|
|
290
290
|
def define_scope_method(name)
|
|
291
291
|
singleton_class.class_eval do
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
end
|
|
302
|
-
)
|
|
292
|
+
define_method(name) do |*args|
|
|
293
|
+
scoping = _declared_scopes[name]
|
|
294
|
+
scope = instance_exec(*args, &scoping[:scope])
|
|
295
|
+
extension = scoping[:extension]
|
|
296
|
+
to_merge = scope || queryable
|
|
297
|
+
criteria = to_merge.empty_and_chainable? ? to_merge : with_default_scope.merge(to_merge)
|
|
298
|
+
criteria.extend(extension)
|
|
299
|
+
criteria
|
|
300
|
+
end
|
|
303
301
|
end
|
|
304
302
|
end
|
|
305
303
|
|
data/lib/mongoid/selectable.rb
CHANGED
|
@@ -15,8 +15,7 @@ module Mongoid
|
|
|
15
15
|
#
|
|
16
16
|
# @return [ Hash ] The document's selector.
|
|
17
17
|
def atomic_selector
|
|
18
|
-
|
|
19
|
-
(embedded? ? embedded_atomic_selector : root_atomic_selector_in_db)
|
|
18
|
+
embedded? ? embedded_atomic_selector : root_atomic_selector_in_db
|
|
20
19
|
end
|
|
21
20
|
|
|
22
21
|
private
|
data/lib/mongoid/shardable.rb
CHANGED
|
@@ -47,22 +47,18 @@ module Mongoid
|
|
|
47
47
|
self.class.shard_key_fields
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
# Returns the selector that would match the
|
|
51
|
-
#
|
|
52
|
-
# of the specified shard keys, otherwise, it will try to use whatever value
|
|
53
|
-
# was most recently persisted.
|
|
54
|
-
#
|
|
55
|
-
# @param [ true | false ] prefer_persisted Whether to use the current
|
|
56
|
-
# value of the shard key fields, or to use their most recently persisted
|
|
57
|
-
# values.
|
|
50
|
+
# Returns the selector that would match the current version of this
|
|
51
|
+
# document.
|
|
58
52
|
#
|
|
59
53
|
# @return [ Hash ] The shard key selector.
|
|
60
54
|
#
|
|
61
55
|
# @api private
|
|
62
|
-
def shard_key_selector
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
def shard_key_selector
|
|
57
|
+
selector = {}
|
|
58
|
+
shard_key_fields.each do |field|
|
|
59
|
+
selector[field.to_s] = send(field)
|
|
65
60
|
end
|
|
61
|
+
selector
|
|
66
62
|
end
|
|
67
63
|
|
|
68
64
|
# Returns the selector that would match the existing version of this
|
|
@@ -76,31 +72,11 @@ module Mongoid
|
|
|
76
72
|
#
|
|
77
73
|
# @api private
|
|
78
74
|
def shard_key_selector_in_db
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
# Returns the value for the named shard key. If the field identifies
|
|
83
|
-
# an embedded document, the key will be parsed and recursively evaluated.
|
|
84
|
-
# If `prefer_persisted` is true, the value last persisted to the database
|
|
85
|
-
# will be returned, regardless of what the current value of the attribute
|
|
86
|
-
# may be.
|
|
87
|
-
#
|
|
88
|
-
# @param [String] field The name of the field to evaluate
|
|
89
|
-
# @param [ true|false ] prefer_persisted Whether or not to prefer the
|
|
90
|
-
# persisted value over the current value.
|
|
91
|
-
#
|
|
92
|
-
# @return [ Object ] The value of the named field.
|
|
93
|
-
#
|
|
94
|
-
# @api private
|
|
95
|
-
def shard_key_field_value(field, prefer_persisted:)
|
|
96
|
-
if field.include?(".")
|
|
97
|
-
relation, remaining = field.split(".", 2)
|
|
98
|
-
send(relation)&.shard_key_field_value(remaining, prefer_persisted: prefer_persisted)
|
|
99
|
-
elsif prefer_persisted && !new_record?
|
|
100
|
-
attribute_was(field)
|
|
101
|
-
else
|
|
102
|
-
send(field)
|
|
75
|
+
selector = {}
|
|
76
|
+
shard_key_fields.each do |field|
|
|
77
|
+
selector[field.to_s] = new_record? ? send(field) : attribute_was(field)
|
|
103
78
|
end
|
|
79
|
+
selector
|
|
104
80
|
end
|
|
105
81
|
|
|
106
82
|
module ClassMethods
|
data/lib/mongoid/stateful.rb
CHANGED
|
@@ -6,7 +6,15 @@ module Mongoid
|
|
|
6
6
|
# document can transition through.
|
|
7
7
|
module Stateful
|
|
8
8
|
|
|
9
|
-
attr_writer :destroyed, :flagged_for_destroy, :
|
|
9
|
+
attr_writer :destroyed, :flagged_for_destroy, :previously_new_record
|
|
10
|
+
|
|
11
|
+
def new_record=(new_value)
|
|
12
|
+
@new_record ||= false
|
|
13
|
+
if @new_record && !new_value
|
|
14
|
+
@previously_new_record = true
|
|
15
|
+
end
|
|
16
|
+
@new_record = new_value
|
|
17
|
+
end
|
|
10
18
|
|
|
11
19
|
# Returns true if the +Document+ has not been persisted to the database,
|
|
12
20
|
# false if it has. This is determined by the variable @new_record
|
|
@@ -20,6 +28,15 @@ module Mongoid
|
|
|
20
28
|
@new_record ||= false
|
|
21
29
|
end
|
|
22
30
|
|
|
31
|
+
# Returns true if this document was just created -- that is, prior to the last
|
|
32
|
+
# save, the object didn't exist in the database and new_record? would have
|
|
33
|
+
# returned true.
|
|
34
|
+
#
|
|
35
|
+
# @return [ true, false ] True if was just created, false if not.
|
|
36
|
+
def previously_new_record?
|
|
37
|
+
@previously_new_record ||= false
|
|
38
|
+
end
|
|
39
|
+
|
|
23
40
|
# Checks if the document has been saved to the database. Returns false
|
|
24
41
|
# if the document has been destroyed.
|
|
25
42
|
#
|
|
@@ -31,6 +48,15 @@ module Mongoid
|
|
|
31
48
|
!new_record? && !destroyed?
|
|
32
49
|
end
|
|
33
50
|
|
|
51
|
+
# Checks if the document was previously saved to the database
|
|
52
|
+
# but now it has been deleted.
|
|
53
|
+
#
|
|
54
|
+
# @return [ true, false ] True if was persisted but now destroyed,
|
|
55
|
+
# otherwise false.
|
|
56
|
+
def previously_persisted?
|
|
57
|
+
!new_record? && destroyed?
|
|
58
|
+
end
|
|
59
|
+
|
|
34
60
|
# Returns whether or not the document has been flagged for deletion, but
|
|
35
61
|
# not destroyed yet. Used for atomic pulls of child documents.
|
|
36
62
|
#
|
data/lib/mongoid/touchable.rb
CHANGED
|
@@ -19,10 +19,10 @@ module Mongoid
|
|
|
19
19
|
#
|
|
20
20
|
# @param [ Symbol ] field The name of an additional field to update.
|
|
21
21
|
#
|
|
22
|
-
# @return [ true/false ] false if
|
|
22
|
+
# @return [ true/false ] false if document is new_record otherwise true.
|
|
23
23
|
def touch(field = nil)
|
|
24
24
|
return false if _root.new_record?
|
|
25
|
-
current = Time.now
|
|
25
|
+
current = Time.configured.now
|
|
26
26
|
field = database_field_name(field)
|
|
27
27
|
write_attribute(:updated_at, current) if respond_to?("updated_at=")
|
|
28
28
|
write_attribute(field, current) if field
|
|
@@ -60,7 +60,6 @@ module Mongoid
|
|
|
60
60
|
|
|
61
61
|
# Callbacks are invoked on the composition root first and on the
|
|
62
62
|
# leaf-most embedded document last.
|
|
63
|
-
# TODO add tests, see MONGOID-5015.
|
|
64
63
|
run_callbacks(:touch)
|
|
65
64
|
true
|
|
66
65
|
end
|
data/lib/mongoid/traversable.rb
CHANGED
|
@@ -16,7 +16,7 @@ module Mongoid
|
|
|
16
16
|
# end
|
|
17
17
|
#
|
|
18
18
|
# It is also possible to limit the uniqueness constraint to a set of
|
|
19
|
-
#
|
|
19
|
+
# documents matching certain conditions:
|
|
20
20
|
# class Person
|
|
21
21
|
# include Mongoid::Document
|
|
22
22
|
# field :title
|
|
@@ -242,6 +242,7 @@ module Mongoid
|
|
|
242
242
|
relation = document._parent.send(document.association_name)
|
|
243
243
|
criteria = create_criteria(relation, document, attribute, value)
|
|
244
244
|
criteria = criteria.merge(options[:conditions].call) if options[:conditions]
|
|
245
|
+
criteria = criteria.limit(2)
|
|
245
246
|
add_error(document, attribute, value) if criteria.count > 1
|
|
246
247
|
end
|
|
247
248
|
|
data/lib/mongoid/version.rb
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Mongoid
|
|
4
|
-
|
|
5
|
-
#
|
|
6
|
-
# Note that this file is automatically updated via `rake candidate:create`.
|
|
7
|
-
# Manual changes to this file will be overwritten by that rake task.
|
|
8
|
-
VERSION = '7.6.0'
|
|
4
|
+
VERSION = "8.0.1"
|
|
9
5
|
end
|
data/lib/mongoid/warnings.rb
CHANGED
|
@@ -21,9 +21,8 @@ module Mongoid
|
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
warning :
|
|
25
|
-
warning :
|
|
26
|
-
warning :
|
|
24
|
+
warning :geo_haystack_deprecated, 'The geoHaystack type is deprecated.'
|
|
25
|
+
warning :as_json_compact_deprecated, '#as_json :compact option is deprecated. Please call #compact on the returned Hash object instead.'
|
|
26
|
+
warning :symbol_type_deprecated, 'The BSON Symbol type is deprecated by MongoDB. Please use String or StringifiedSymbol field types instead of the Symbol field type'
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
|
-
|
data/lib/mongoid.rb
CHANGED
data/spec/config/mongoid.yml
CHANGED
|
@@ -40,6 +40,22 @@ test:
|
|
|
40
40
|
app_name: 'testing'
|
|
41
41
|
background_indexing: false
|
|
42
42
|
join_contexts: false
|
|
43
|
+
driver_options:
|
|
44
|
+
broken_view_options: false
|
|
45
|
+
# Don't set validate_update_replace here, as it is used to check if the
|
|
46
|
+
# default driver options are kept in Mongoid.
|
|
47
|
+
test_nil:
|
|
48
|
+
clients:
|
|
49
|
+
default:
|
|
50
|
+
database: mongoid_test
|
|
51
|
+
hosts:
|
|
52
|
+
<% SpecConfig.instance.addresses.each do |address| %>
|
|
53
|
+
- <%= address %>
|
|
54
|
+
<% end %>
|
|
55
|
+
driver_options:
|
|
56
|
+
broken_view_options:
|
|
57
|
+
validate_update_replace: false
|
|
58
|
+
|
|
43
59
|
test_with_max_staleness:
|
|
44
60
|
clients:
|
|
45
61
|
default:
|
|
@@ -163,6 +163,14 @@ describe 'Mongoid application tests' do
|
|
|
163
163
|
before do
|
|
164
164
|
Dir.chdir(APP_PATH) do
|
|
165
165
|
remove_bundler_req
|
|
166
|
+
|
|
167
|
+
if BSON::Environment.jruby?
|
|
168
|
+
# Remove existing Gemfile.lock - see
|
|
169
|
+
# https://github.com/rubygems/rubygems/issues/3231
|
|
170
|
+
require 'fileutils'
|
|
171
|
+
FileUtils.rm_f('Gemfile.lock')
|
|
172
|
+
end
|
|
173
|
+
|
|
166
174
|
check_call(%w(bundle install), env: env)
|
|
167
175
|
write_mongoid_yml
|
|
168
176
|
end
|
|
@@ -287,18 +295,6 @@ describe 'Mongoid application tests' do
|
|
|
287
295
|
f << lines.join
|
|
288
296
|
end
|
|
289
297
|
end
|
|
290
|
-
|
|
291
|
-
if rails_version == '5.1'
|
|
292
|
-
secrets = {
|
|
293
|
-
'development' => {
|
|
294
|
-
'secret_key_base' => 'abracadabra',
|
|
295
|
-
'my_secret_token' => 'very_secret',
|
|
296
|
-
},
|
|
297
|
-
}
|
|
298
|
-
File.open('config/secrets.yml', 'w') do |f|
|
|
299
|
-
f << YAML.dump(secrets)
|
|
300
|
-
end
|
|
301
|
-
end
|
|
302
298
|
end
|
|
303
299
|
|
|
304
300
|
def remove_bundler_req
|
|
@@ -12,4 +12,22 @@ describe 'belongs_to associations' do
|
|
|
12
12
|
expect(child).to be_valid
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
|
+
|
|
16
|
+
context 'when an anonymous class defines a belongs_to association' do
|
|
17
|
+
let(:klass) do
|
|
18
|
+
Class.new do
|
|
19
|
+
include Mongoid::Document
|
|
20
|
+
belongs_to :movie
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'loads the association correctly' do
|
|
25
|
+
expect { klass }.to_not raise_error
|
|
26
|
+
expect { klass.new.movie }.to_not raise_error
|
|
27
|
+
instance = klass.new
|
|
28
|
+
movie = Movie.new
|
|
29
|
+
instance.movie = movie
|
|
30
|
+
expect(instance.movie).to eq movie
|
|
31
|
+
end
|
|
32
|
+
end
|
|
15
33
|
end
|