mongoid 6.4.2 → 7.0.3
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
- data/README.md +1 -1
- data/lib/config/locales/en.yml +17 -0
- data/lib/mongoid/association/accessors.rb +339 -0
- data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
- data/lib/mongoid/association/builders.rb +92 -0
- data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
- data/lib/mongoid/association/depending.rb +137 -0
- data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
- data/lib/mongoid/{relations → association}/embedded/batchable.rb +19 -19
- data/lib/mongoid/association/embedded/cyclic.rb +109 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
- data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
- data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
- data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +552 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
- data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
- data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
- data/lib/mongoid/association/embedded.rb +4 -0
- data/lib/mongoid/association/macros.rb +204 -0
- data/lib/mongoid/{relations → association}/many.rb +19 -49
- data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
- data/lib/mongoid/association/nested/many.rb +200 -0
- data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
- data/lib/mongoid/association/nested/one.rb +127 -0
- data/lib/mongoid/association/nested.rb +15 -0
- data/lib/mongoid/{relations → association}/one.rb +6 -6
- data/lib/mongoid/association/options.rb +152 -0
- data/lib/mongoid/{relations → association}/proxy.rb +31 -58
- data/lib/mongoid/association/referenced/auto_save.rb +79 -0
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
- data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
- data/lib/mongoid/association/referenced/eager.rb +162 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +312 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
- data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +510 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +578 -0
- data/lib/mongoid/association/referenced/has_many.rb +275 -0
- data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
- data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
- data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
- data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
- data/lib/mongoid/association/referenced/has_one.rb +204 -0
- data/lib/mongoid/association/referenced/syncable.rb +170 -0
- data/lib/mongoid/association/referenced.rb +7 -0
- data/lib/mongoid/{relations → association}/reflections.rb +21 -17
- data/lib/mongoid/association/relatable.rb +509 -0
- data/lib/mongoid/{relations.rb → association.rb} +57 -56
- data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
- data/lib/mongoid/atomic.rb +4 -4
- data/lib/mongoid/attributes/dynamic.rb +2 -2
- data/lib/mongoid/attributes/nested.rb +22 -11
- data/lib/mongoid/attributes/processing.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +2 -4
- data/lib/mongoid/attributes.rb +22 -13
- data/lib/mongoid/changeable.rb +1 -1
- data/lib/mongoid/clients/options.rb +7 -5
- data/lib/mongoid/composable.rb +4 -4
- data/lib/mongoid/config.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +1 -1
- data/lib/mongoid/contextual/memory.rb +21 -3
- data/lib/mongoid/contextual/mongo.rb +10 -8
- data/lib/mongoid/copyable.rb +7 -6
- data/lib/mongoid/criteria/includable.rb +14 -14
- data/lib/mongoid/criteria/modifiable.rb +8 -14
- data/lib/mongoid/criteria/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/string.rb +1 -1
- data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
- data/lib/mongoid/criteria/queryable/selectable.rb +37 -7
- data/lib/mongoid/criteria.rb +2 -2
- data/lib/mongoid/document.rb +15 -6
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
- data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
- data/lib/mongoid/errors/unknown_model.rb +25 -0
- data/lib/mongoid/errors.rb +3 -0
- data/lib/mongoid/extensions/array.rb +5 -5
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +5 -2
- data/lib/mongoid/extensions/object.rb +4 -4
- data/lib/mongoid/extensions/range.rb +1 -0
- data/lib/mongoid/extensions/regexp.rb +1 -0
- data/lib/mongoid/extensions.rb +0 -4
- data/lib/mongoid/factory.rb +13 -3
- data/lib/mongoid/fields/foreign_key.rb +5 -5
- data/lib/mongoid/fields/standard.rb +2 -14
- data/lib/mongoid/fields/validators/macro.rb +1 -1
- data/lib/mongoid/fields.rb +3 -3
- data/lib/mongoid/indexable.rb +4 -1
- data/lib/mongoid/interceptable.rb +5 -5
- data/lib/mongoid/matchable/and.rb +1 -1
- data/lib/mongoid/matchable/elem_match.rb +9 -3
- data/lib/mongoid/matchable/eq.rb +22 -0
- data/lib/mongoid/matchable/ne.rb +1 -1
- data/lib/mongoid/matchable.rb +3 -1
- data/lib/mongoid/persistable/deletable.rb +7 -6
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +57 -12
- data/lib/mongoid/persistable.rb +4 -5
- data/lib/mongoid/persistence_context.rb +20 -5
- data/lib/mongoid/query_cache.rb +8 -4
- data/lib/mongoid/railtie.rb +17 -0
- data/lib/mongoid/railties/controller_runtime.rb +86 -0
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +4 -4
- data/lib/mongoid/shardable.rb +1 -1
- data/lib/mongoid/threaded.rb +36 -0
- data/lib/mongoid/touchable.rb +102 -0
- data/lib/mongoid/traversable.rb +3 -3
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +4 -4
- data/lib/mongoid/validatable.rb +8 -8
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -0
- data/spec/app/models/animal.rb +2 -1
- data/spec/app/models/bomb.rb +1 -1
- data/spec/app/models/message.rb +1 -1
- data/spec/app/models/minim.rb +7 -0
- data/spec/app/models/person.rb +5 -2
- data/spec/app/models/shipment_address.rb +1 -0
- data/spec/app/models/store_as_dup_test3.rb +7 -0
- data/spec/app/models/store_as_dup_test4.rb +7 -0
- data/spec/app/models/updatable.rb +7 -0
- data/spec/app/models/vertex.rb +6 -0
- data/spec/app/models/wiki_page.rb +1 -1
- data/spec/config/mongoid.yml +13 -3
- data/spec/integration/associations/belongs_to_spec.rb +13 -0
- data/spec/lite_spec_helper.rb +56 -0
- data/spec/mongoid/{relations → association}/accessors_spec.rb +40 -1
- data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
- data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
- data/spec/mongoid/association/constrainable_spec.rb +115 -0
- data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +866 -0
- data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
- data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
- data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
- data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
- data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
- data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
- data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
- data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +124 -182
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
- data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
- data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
- data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
- data/spec/mongoid/{relations → association}/macros_spec.rb +148 -73
- data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
- data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
- data/spec/mongoid/association/options_spec.rb +1321 -0
- data/spec/mongoid/{relations → association}/polymorphic_spec.rb +66 -34
- data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
- data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
- data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +33 -14
- data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2006 -0
- data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
- data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +26 -7
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +56 -0
- data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
- data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
- data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +26 -11
- data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +122 -1
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
- data/spec/mongoid/association/referenced/has_many_models.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
- data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
- data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
- data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
- data/spec/mongoid/association/referenced/has_one_models.rb +48 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1350 -0
- data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
- data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
- data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +2 -2
- data/spec/mongoid/atomic_spec.rb +4 -4
- data/spec/mongoid/attributes/nested_spec.rb +29 -11
- data/spec/mongoid/attributes/readonly_spec.rb +80 -125
- data/spec/mongoid/attributes_spec.rb +38 -2
- data/spec/mongoid/clients/factory_spec.rb +24 -18
- data/spec/mongoid/clients/options_spec.rb +58 -44
- data/spec/mongoid/clients/sessions_spec.rb +1 -1
- data/spec/mongoid/clients/transactions_spec.rb +369 -0
- data/spec/mongoid/clients_spec.rb +68 -8
- data/spec/mongoid/config_spec.rb +27 -1
- data/spec/mongoid/contextual/memory_spec.rb +19 -0
- data/spec/mongoid/contextual/mongo_spec.rb +33 -5
- data/spec/mongoid/copyable_spec.rb +90 -6
- data/spec/mongoid/copyable_spec_models.rb +17 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +43 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +42 -3
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
- data/spec/mongoid/criteria/scopable_spec.rb +81 -0
- data/spec/mongoid/criteria_spec.rb +33 -18
- data/spec/mongoid/document_spec.rb +83 -4
- data/spec/mongoid/extensions/array_spec.rb +11 -15
- data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
- data/spec/mongoid/extensions/hash_spec.rb +18 -1
- data/spec/mongoid/extensions/object_spec.rb +7 -11
- data/spec/mongoid/extensions/range_spec.rb +7 -0
- data/spec/mongoid/extensions/regexp_spec.rb +23 -0
- data/spec/mongoid/factory_spec.rb +19 -1
- data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
- data/spec/mongoid/fields_spec.rb +2 -2
- data/spec/mongoid/findable_spec.rb +1 -1
- data/spec/mongoid/indexable_spec.rb +18 -8
- data/spec/mongoid/interceptable_spec.rb +22 -1
- data/spec/mongoid/matchable/elem_match_spec.rb +20 -0
- data/spec/mongoid/matchable/eq_spec.rb +48 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
- data/spec/mongoid/persistable/savable_spec.rb +2 -2
- data/spec/mongoid/persistable/settable_spec.rb +95 -10
- data/spec/mongoid/persistable_spec.rb +21 -6
- data/spec/mongoid/persistence_context_spec.rb +1 -1
- data/spec/mongoid/query_cache_spec.rb +61 -22
- data/spec/mongoid/relations/proxy_spec.rb +124 -124
- data/spec/mongoid/scopable_spec.rb +13 -0
- data/spec/mongoid/shardable_spec.rb +32 -12
- data/spec/mongoid/threaded_spec.rb +68 -0
- data/spec/mongoid/{relations/touchable_spec.rb → touchable_spec.rb} +40 -1
- data/spec/mongoid/validatable/associated_spec.rb +1 -1
- data/spec/mongoid/validatable/presence_spec.rb +7 -6
- data/spec/mongoid/validatable_spec.rb +1 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +110 -0
- data/spec/spec_helper.rb +51 -25
- data/spec/support/constraints.rb +101 -0
- data/spec/support/macros.rb +20 -0
- data/spec/support/spec_config.rb +39 -0
- metadata +602 -582
- checksums.yaml.gz.sig +0 -2
- data/lib/mongoid/relations/accessors.rb +0 -267
- data/lib/mongoid/relations/auto_save.rb +0 -94
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
- data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
- data/lib/mongoid/relations/bindings.rb +0 -9
- data/lib/mongoid/relations/builder.rb +0 -57
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
- data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
- data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
- data/lib/mongoid/relations/builders.rb +0 -106
- data/lib/mongoid/relations/cascading/delete.rb +0 -44
- data/lib/mongoid/relations/cascading/destroy.rb +0 -43
- data/lib/mongoid/relations/cascading/nullify.rb +0 -35
- data/lib/mongoid/relations/cascading/restrict.rb +0 -39
- data/lib/mongoid/relations/cascading.rb +0 -56
- data/lib/mongoid/relations/conversions.rb +0 -34
- data/lib/mongoid/relations/counter_cache.rb +0 -160
- data/lib/mongoid/relations/cyclic.rb +0 -107
- data/lib/mongoid/relations/eager/base.rb +0 -153
- data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
- data/lib/mongoid/relations/eager/has_many.rb +0 -38
- data/lib/mongoid/relations/eager/has_one.rb +0 -30
- data/lib/mongoid/relations/embedded/in.rb +0 -241
- data/lib/mongoid/relations/embedded/many.rb +0 -683
- data/lib/mongoid/relations/embedded/one.rb +0 -235
- data/lib/mongoid/relations/macros.rb +0 -367
- data/lib/mongoid/relations/metadata.rb +0 -1179
- data/lib/mongoid/relations/nested_builder.rb +0 -74
- data/lib/mongoid/relations/options.rb +0 -49
- data/lib/mongoid/relations/polymorphic.rb +0 -39
- data/lib/mongoid/relations/referenced/in.rb +0 -304
- data/lib/mongoid/relations/referenced/many.rb +0 -812
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
- data/lib/mongoid/relations/referenced/one.rb +0 -290
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets/enumerable.rb +0 -493
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -97
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
- data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
- data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
- data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
- data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
- data/spec/mongoid/relations/cascading_spec.rb +0 -355
- data/spec/mongoid/relations/constraint_spec.rb +0 -75
- data/spec/mongoid/relations/conversions_spec.rb +0 -128
- data/spec/mongoid/relations/metadata_spec.rb +0 -1985
- data/spec/mongoid/relations/options_spec.rb +0 -35
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -0
- /data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
require "spec_helper"
|
|
3
3
|
|
|
4
|
+
require_relative './copyable_spec_models'
|
|
5
|
+
|
|
4
6
|
describe Mongoid::Copyable do
|
|
5
7
|
|
|
6
8
|
[ :clone, :dup ].each do |method|
|
|
@@ -35,6 +37,10 @@ describe Mongoid::Copyable do
|
|
|
35
37
|
person.build_game(name: "Tron")
|
|
36
38
|
end
|
|
37
39
|
|
|
40
|
+
let!(:name_translations) do
|
|
41
|
+
person.name.translations.build(language: 'en')
|
|
42
|
+
end
|
|
43
|
+
|
|
38
44
|
context "when the document has an id field in the database" do
|
|
39
45
|
|
|
40
46
|
let!(:band) do
|
|
@@ -86,16 +92,48 @@ describe Mongoid::Copyable do
|
|
|
86
92
|
|
|
87
93
|
context "and dynamic attributes are not set" do
|
|
88
94
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
context 'embeds_one' do
|
|
96
|
+
|
|
97
|
+
it "clones" do
|
|
98
|
+
t = StoreAsDupTest1.new(:name => "hi")
|
|
99
|
+
t.build_store_as_dup_test2(:name => "there")
|
|
100
|
+
t.save
|
|
101
|
+
copy = t.send(method)
|
|
102
|
+
expect(copy.object_id).not_to eq(t.object_id)
|
|
103
|
+
expect(copy.store_as_dup_test2.name).to eq(t.store_as_dup_test2.name)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context 'embeds_many' do
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
it "clones" do
|
|
111
|
+
t = StoreAsDupTest3.new(:name => "hi")
|
|
112
|
+
t.store_as_dup_test4s << StoreAsDupTest4.new
|
|
113
|
+
t.save
|
|
114
|
+
copy = t.send(method)
|
|
115
|
+
expect(copy.object_id).not_to eq(t.object_id)
|
|
116
|
+
expect(copy.store_as_dup_test4s).not_to be_empty
|
|
117
|
+
expect(copy.store_as_dup_test4s.first.object_id).not_to eq(t.store_as_dup_test4s.first.object_id)
|
|
118
|
+
end
|
|
95
119
|
end
|
|
96
120
|
end
|
|
97
121
|
end
|
|
98
122
|
|
|
123
|
+
context 'nested embeds_many' do
|
|
124
|
+
it 'works' do
|
|
125
|
+
a = CopyableSpec::A.new
|
|
126
|
+
a.locations << CopyableSpec::Location.new
|
|
127
|
+
a.locations.first.buildings << CopyableSpec::Building.new
|
|
128
|
+
a.save!
|
|
129
|
+
|
|
130
|
+
new_a = a.send(method)
|
|
131
|
+
|
|
132
|
+
expect(new_a.locations.length).to be 1
|
|
133
|
+
expect(new_a.locations.first.buildings.length).to be 1
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
99
137
|
context "when cloning a document with multiple languages field" do
|
|
100
138
|
|
|
101
139
|
before do
|
|
@@ -144,6 +182,40 @@ describe Mongoid::Copyable do
|
|
|
144
182
|
end
|
|
145
183
|
end
|
|
146
184
|
|
|
185
|
+
context "when cloning a document with polymorphic embedded documents with multiple language field" do
|
|
186
|
+
|
|
187
|
+
let!(:shipment_address) do
|
|
188
|
+
person.addresses.build({ shipping_name: "Title" }, ShipmentAddress)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
before do
|
|
192
|
+
I18n.enforce_available_locales = false
|
|
193
|
+
I18n.locale = 'pt_BR'
|
|
194
|
+
person.addresses.type(ShipmentAddress).each { |address| address.shipping_name = "Título" }
|
|
195
|
+
person.save
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
after do
|
|
199
|
+
I18n.locale = :en
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
let!(:from_db) do
|
|
203
|
+
Person.find(person.id)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
let(:copy) do
|
|
207
|
+
from_db.send(method)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it 'sets embedded translations' do
|
|
211
|
+
I18n.locale = 'pt_BR'
|
|
212
|
+
copy.addresses.type(ShipmentAddress).each do |address|
|
|
213
|
+
expect(address.shipping_name).to eq("Título")
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
end
|
|
218
|
+
|
|
147
219
|
context "when cloning a loaded document" do
|
|
148
220
|
|
|
149
221
|
before do
|
|
@@ -211,14 +283,26 @@ describe Mongoid::Copyable do
|
|
|
211
283
|
expect(copy.addresses).to eq(person.addresses)
|
|
212
284
|
end
|
|
213
285
|
|
|
286
|
+
it "copys deep embeds many documents" do
|
|
287
|
+
expect(copy.name.translations).to eq(person.name.translations)
|
|
288
|
+
end
|
|
289
|
+
|
|
214
290
|
it "sets the embedded many documents as new" do
|
|
215
291
|
expect(copy.addresses.first).to be_new_record
|
|
216
292
|
end
|
|
217
293
|
|
|
294
|
+
it "sets the deep embedded many documents as new" do
|
|
295
|
+
expect(copy.name.translations.first).to be_new_record
|
|
296
|
+
end
|
|
297
|
+
|
|
218
298
|
it "creates new embeds many instances" do
|
|
219
299
|
expect(copy.addresses).to_not equal(person.addresses)
|
|
220
300
|
end
|
|
221
301
|
|
|
302
|
+
it "creates new deep embeds many instances" do
|
|
303
|
+
expect(copy.name.translations).to_not equal(person.name.translations)
|
|
304
|
+
end
|
|
305
|
+
|
|
222
306
|
it "copys embeds one documents" do
|
|
223
307
|
expect(copy.name).to eq(person.name)
|
|
224
308
|
end
|
|
@@ -49,6 +49,29 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
|
+
|
|
53
|
+
context 'when the object is polymorphic' do
|
|
54
|
+
|
|
55
|
+
let(:movie) do
|
|
56
|
+
Movie.new
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
let(:criteria) do
|
|
60
|
+
Rating.where(ratable: movie)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
let(:document) do
|
|
64
|
+
criteria.create
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'sets the polymorphic id' do
|
|
68
|
+
expect(document.ratable_id).to eq(movie.id)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'sets the type field' do
|
|
72
|
+
expect(document.ratable_type).to eq('Movie')
|
|
73
|
+
end
|
|
74
|
+
end
|
|
52
75
|
end
|
|
53
76
|
|
|
54
77
|
describe "#create!" do
|
|
@@ -65,6 +88,29 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
65
88
|
}.to raise_error(Mongoid::Errors::Validations)
|
|
66
89
|
end
|
|
67
90
|
end
|
|
91
|
+
|
|
92
|
+
context 'when the object is polymorphic' do
|
|
93
|
+
|
|
94
|
+
let(:movie) do
|
|
95
|
+
Movie.new
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
let(:criteria) do
|
|
99
|
+
Rating.where(ratable: movie)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
let(:document) do
|
|
103
|
+
criteria.create!
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it 'sets the polymorphic id' do
|
|
107
|
+
expect(document.ratable_id).to eq(movie.id)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it 'sets the type field' do
|
|
111
|
+
expect(document.ratable_type).to eq('Movie')
|
|
112
|
+
end
|
|
113
|
+
end
|
|
68
114
|
end
|
|
69
115
|
|
|
70
116
|
[ :delete, :delete_all, :destroy, :destroy_all ].each do |method|
|
|
@@ -295,6 +341,25 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
295
341
|
expect(person.pets).to be true
|
|
296
342
|
end
|
|
297
343
|
end
|
|
344
|
+
|
|
345
|
+
context 'when the object is polymorphic' do
|
|
346
|
+
|
|
347
|
+
let(:movie) do
|
|
348
|
+
Movie.new
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
let(:document) do
|
|
352
|
+
Rating.find_or_create_by(ratable: movie)
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
it 'sets the polymorphic id' do
|
|
356
|
+
expect(document.ratable_id).to eq(movie.id)
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
it 'sets the type field' do
|
|
360
|
+
expect(document.ratable_type).to eq('Movie')
|
|
361
|
+
end
|
|
362
|
+
end
|
|
298
363
|
end
|
|
299
364
|
end
|
|
300
365
|
|
|
@@ -447,6 +512,25 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
447
512
|
end
|
|
448
513
|
end
|
|
449
514
|
end
|
|
515
|
+
|
|
516
|
+
context 'when the object is polymorphic' do
|
|
517
|
+
|
|
518
|
+
let(:movie) do
|
|
519
|
+
Movie.new
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
let(:document) do
|
|
523
|
+
Rating.find_or_create_by!(ratable: movie)
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
it 'sets the polymorphic id' do
|
|
527
|
+
expect(document.ratable_id).to eq(movie.id)
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
it 'sets the type field' do
|
|
531
|
+
expect(document.ratable_type).to eq('Movie')
|
|
532
|
+
end
|
|
533
|
+
end
|
|
450
534
|
end
|
|
451
535
|
|
|
452
536
|
describe ".find_or_initialize_by" do
|
|
@@ -500,6 +584,25 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
500
584
|
end
|
|
501
585
|
end
|
|
502
586
|
end
|
|
587
|
+
|
|
588
|
+
context 'when the object is polymorphic' do
|
|
589
|
+
|
|
590
|
+
let(:movie) do
|
|
591
|
+
Movie.new
|
|
592
|
+
end
|
|
593
|
+
|
|
594
|
+
let(:document) do
|
|
595
|
+
Rating.find_or_initialize_by(ratable: movie)
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
it 'sets the polymorphic id' do
|
|
599
|
+
expect(document.ratable_id).to eq(movie.id)
|
|
600
|
+
end
|
|
601
|
+
|
|
602
|
+
it 'sets the type field' do
|
|
603
|
+
expect(document.ratable_type).to eq('Movie')
|
|
604
|
+
end
|
|
605
|
+
end
|
|
503
606
|
end
|
|
504
607
|
|
|
505
608
|
describe "first_or_create" do
|
|
@@ -649,7 +752,7 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
649
752
|
band = Band.create
|
|
650
753
|
Mongoid::Criteria.new(Record) do |criteria|
|
|
651
754
|
criteria.embedded = true
|
|
652
|
-
criteria.
|
|
755
|
+
criteria.association = Band.reflect_on_association(:records)
|
|
653
756
|
criteria.parent_document = band
|
|
654
757
|
criteria.selector = { "records" => { "producers"=>{"$in"=>["nonexistent"] } } }
|
|
655
758
|
end
|
|
@@ -703,6 +806,29 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
703
806
|
end
|
|
704
807
|
end
|
|
705
808
|
|
|
809
|
+
context 'when the object is polymorphic' do
|
|
810
|
+
|
|
811
|
+
let(:movie) do
|
|
812
|
+
Movie.new
|
|
813
|
+
end
|
|
814
|
+
|
|
815
|
+
let(:criteria) do
|
|
816
|
+
Rating.where(ratable: movie)
|
|
817
|
+
end
|
|
818
|
+
|
|
819
|
+
let(:document) do
|
|
820
|
+
criteria.first_or_create
|
|
821
|
+
end
|
|
822
|
+
|
|
823
|
+
it 'sets the polymorphic id' do
|
|
824
|
+
expect(document.ratable_id).to eq(movie.id)
|
|
825
|
+
end
|
|
826
|
+
|
|
827
|
+
it 'sets the type field' do
|
|
828
|
+
expect(document.ratable_type).to eq('Movie')
|
|
829
|
+
end
|
|
830
|
+
end
|
|
831
|
+
|
|
706
832
|
context "when a block is provided" do
|
|
707
833
|
|
|
708
834
|
let(:document) do
|
|
@@ -919,6 +1045,29 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
919
1045
|
end
|
|
920
1046
|
end
|
|
921
1047
|
end
|
|
1048
|
+
|
|
1049
|
+
context 'when the object is polymorphic' do
|
|
1050
|
+
|
|
1051
|
+
let(:movie) do
|
|
1052
|
+
Movie.new
|
|
1053
|
+
end
|
|
1054
|
+
|
|
1055
|
+
let(:criteria) do
|
|
1056
|
+
Rating.where(ratable: movie)
|
|
1057
|
+
end
|
|
1058
|
+
|
|
1059
|
+
let(:document) do
|
|
1060
|
+
criteria.first_or_create!
|
|
1061
|
+
end
|
|
1062
|
+
|
|
1063
|
+
it 'sets the polymorphic id' do
|
|
1064
|
+
expect(document.ratable_id).to eq(movie.id)
|
|
1065
|
+
end
|
|
1066
|
+
|
|
1067
|
+
it 'sets the type field' do
|
|
1068
|
+
expect(document.ratable_type).to eq('Movie')
|
|
1069
|
+
end
|
|
1070
|
+
end
|
|
922
1071
|
end
|
|
923
1072
|
|
|
924
1073
|
describe "first_or_initialize" do
|
|
@@ -938,6 +1087,29 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
938
1087
|
end
|
|
939
1088
|
end
|
|
940
1089
|
|
|
1090
|
+
context 'when the object is polymorphic' do
|
|
1091
|
+
|
|
1092
|
+
let(:movie) do
|
|
1093
|
+
Movie.new
|
|
1094
|
+
end
|
|
1095
|
+
|
|
1096
|
+
let(:criteria) do
|
|
1097
|
+
Rating.where(ratable: movie)
|
|
1098
|
+
end
|
|
1099
|
+
|
|
1100
|
+
let(:document) do
|
|
1101
|
+
criteria.first_or_initialize
|
|
1102
|
+
end
|
|
1103
|
+
|
|
1104
|
+
it 'sets the polymorphic id' do
|
|
1105
|
+
expect(document.ratable_id).to eq(movie.id)
|
|
1106
|
+
end
|
|
1107
|
+
|
|
1108
|
+
it 'sets the type field' do
|
|
1109
|
+
expect(document.ratable_type).to eq('Movie')
|
|
1110
|
+
end
|
|
1111
|
+
end
|
|
1112
|
+
|
|
941
1113
|
context "when the document is not found" do
|
|
942
1114
|
|
|
943
1115
|
context "when attributes are provided" do
|
|
@@ -1471,15 +1643,11 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
1471
1643
|
{ 'username' => 'Turnip' }
|
|
1472
1644
|
end
|
|
1473
1645
|
|
|
1474
|
-
it '
|
|
1475
|
-
expect(Person.create_with(attrs).selector
|
|
1476
|
-
end
|
|
1477
|
-
|
|
1478
|
-
it 'create_attrs is modified' do
|
|
1479
|
-
expect(Person.create_with(attrs).create_attrs).to eq(attrs)
|
|
1646
|
+
it 'returns a criteria with the defined attributes' do
|
|
1647
|
+
expect(Person.create_with(attrs).selector).to eq(attrs)
|
|
1480
1648
|
end
|
|
1481
1649
|
|
|
1482
|
-
context 'when a
|
|
1650
|
+
context 'when a method is chained' do
|
|
1483
1651
|
|
|
1484
1652
|
context 'when a write method is chained' do
|
|
1485
1653
|
|
|
@@ -1503,25 +1671,6 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
1503
1671
|
expect(new_person.age).to eq(50)
|
|
1504
1672
|
end
|
|
1505
1673
|
|
|
1506
|
-
context 'when a matching document is already in the collection' do
|
|
1507
|
-
let(:query) do
|
|
1508
|
-
{ 'username' => 'foo', 'age' => 12 }
|
|
1509
|
-
end
|
|
1510
|
-
|
|
1511
|
-
let(:person) do
|
|
1512
|
-
Person.create!(query)
|
|
1513
|
-
end
|
|
1514
|
-
|
|
1515
|
-
let(:found_person) do
|
|
1516
|
-
Person.create_with(attrs).find_or_create_by(query)
|
|
1517
|
-
end
|
|
1518
|
-
|
|
1519
|
-
it 'finds the matching document' do
|
|
1520
|
-
person
|
|
1521
|
-
expect(found_person.id).to eq(person.id)
|
|
1522
|
-
end
|
|
1523
|
-
end
|
|
1524
|
-
|
|
1525
1674
|
context 'when the attributes are shared with the write method args' do
|
|
1526
1675
|
|
|
1527
1676
|
let(:query) do
|
|
@@ -1532,7 +1681,7 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
1532
1681
|
Person.create_with(attrs).find_or_create_by(query)
|
|
1533
1682
|
end
|
|
1534
1683
|
|
|
1535
|
-
it 'gives the
|
|
1684
|
+
it 'gives the write method args precedence' do
|
|
1536
1685
|
expect(new_person.username).to eq('Beet')
|
|
1537
1686
|
expect(new_person.age).to eq(50)
|
|
1538
1687
|
end
|
|
@@ -1559,12 +1708,8 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
1559
1708
|
{ 'username' => 'Beet', 'age' => 50 }
|
|
1560
1709
|
end
|
|
1561
1710
|
|
|
1562
|
-
it 'does not modify the selector' do
|
|
1563
|
-
expect(criteria.create_with(attrs).selector).to eq(criteria_selector)
|
|
1564
|
-
end
|
|
1565
|
-
|
|
1566
1711
|
it 'overwrites all the original attributes' do
|
|
1567
|
-
expect(criteria.create_with(attrs).
|
|
1712
|
+
expect(criteria.create_with(attrs).selector).to eq(attrs)
|
|
1568
1713
|
end
|
|
1569
1714
|
end
|
|
1570
1715
|
end
|
|
@@ -1575,12 +1720,8 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
1575
1720
|
{ 'username' => 'Beet' }
|
|
1576
1721
|
end
|
|
1577
1722
|
|
|
1578
|
-
it 'does not modify the selector' do
|
|
1579
|
-
expect(criteria.create_with(attrs).selector).to eq(criteria_selector)
|
|
1580
|
-
end
|
|
1581
|
-
|
|
1582
1723
|
it 'only overwrites the shared attributes' do
|
|
1583
|
-
expect(criteria.create_with(attrs).
|
|
1724
|
+
expect(criteria.create_with(attrs).selector).to eq(criteria_selector.merge!(attrs))
|
|
1584
1725
|
end
|
|
1585
1726
|
end
|
|
1586
1727
|
|
|
@@ -1589,11 +1730,12 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
1589
1730
|
let(:attrs) do
|
|
1590
1731
|
{ 'username' => 'Turnip' }
|
|
1591
1732
|
end
|
|
1733
|
+
|
|
1592
1734
|
let(:query) do
|
|
1593
1735
|
{ 'username' => 'Beet', 'age' => 50 }
|
|
1594
1736
|
end
|
|
1595
1737
|
|
|
1596
|
-
context 'when a
|
|
1738
|
+
context 'when a write method is chained' do
|
|
1597
1739
|
|
|
1598
1740
|
it 'executes the method' do
|
|
1599
1741
|
expect(criteria.create_with(attrs).new.username).to eq('Turnip')
|
|
@@ -1607,28 +1749,9 @@ describe Mongoid::Criteria::Modifiable do
|
|
|
1607
1749
|
criteria.create_with(attrs).find_or_create_by(query)
|
|
1608
1750
|
end
|
|
1609
1751
|
|
|
1610
|
-
it '
|
|
1752
|
+
it 'executes the query' do
|
|
1611
1753
|
expect(new_person.username).to eq('Beet')
|
|
1612
|
-
expect(new_person.age).to
|
|
1613
|
-
end
|
|
1614
|
-
|
|
1615
|
-
context 'when a matching document is already in the collection' do
|
|
1616
|
-
let(:query) do
|
|
1617
|
-
{ 'username' => 'foo', 'age' => 12 }
|
|
1618
|
-
end
|
|
1619
|
-
|
|
1620
|
-
let(:person) do
|
|
1621
|
-
Person.create!(query)
|
|
1622
|
-
end
|
|
1623
|
-
|
|
1624
|
-
let(:found_person) do
|
|
1625
|
-
criteria.create_with(attrs).find_or_create_by(query)
|
|
1626
|
-
end
|
|
1627
|
-
|
|
1628
|
-
it 'finds the matching document' do
|
|
1629
|
-
person
|
|
1630
|
-
expect(found_person.id).to eq(person.id)
|
|
1631
|
-
end
|
|
1754
|
+
expect(new_person.age).to eq(50)
|
|
1632
1755
|
end
|
|
1633
1756
|
end
|
|
1634
1757
|
end
|
|
@@ -7,7 +7,7 @@ describe BigDecimal do
|
|
|
7
7
|
context "when provided a big decimal" do
|
|
8
8
|
|
|
9
9
|
let(:big_decimal) do
|
|
10
|
-
BigDecimal
|
|
10
|
+
BigDecimal("123456.789")
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
it "returns the decimal as a string" do
|
|
@@ -25,11 +25,11 @@ describe BigDecimal do
|
|
|
25
25
|
context "when provided an array of big decimals" do
|
|
26
26
|
|
|
27
27
|
let(:bd_one) do
|
|
28
|
-
BigDecimal
|
|
28
|
+
BigDecimal("123456.789")
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
let(:bd_two) do
|
|
32
|
-
BigDecimal
|
|
32
|
+
BigDecimal("123333.789")
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
let(:array) do
|
|
@@ -66,6 +66,49 @@ describe String do
|
|
|
66
66
|
expect(evolved).to eq(Time.new(2010, 1, 1, 11, 0, 0, 0).utc)
|
|
67
67
|
end
|
|
68
68
|
end
|
|
69
|
+
|
|
70
|
+
context "when the string without timezone" do
|
|
71
|
+
|
|
72
|
+
context "when using active support's time zone" do
|
|
73
|
+
|
|
74
|
+
before do
|
|
75
|
+
Mongoid.use_activesupport_time_zone = true
|
|
76
|
+
::Time.zone = "Tokyo"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
let(:date) do
|
|
80
|
+
"2010-01-01 5:00:00"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
let(:evolved) do
|
|
84
|
+
date.__evolve_time__
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "parses string using active support's time zone" do
|
|
88
|
+
expect(evolved).to eq(Time.zone.parse(date).utc)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
context "when not using active support's time zone" do
|
|
93
|
+
|
|
94
|
+
before do
|
|
95
|
+
Mongoid.use_activesupport_time_zone = false
|
|
96
|
+
::Time.zone = nil
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
let(:date) do
|
|
100
|
+
"2010-01-01 5:00:00"
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
let(:evolved) do
|
|
104
|
+
date.__evolve_time__
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "parses string using system time zone" do
|
|
108
|
+
expect(evolved).to eq(Time.parse(date).utc)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
69
112
|
end
|
|
70
113
|
|
|
71
114
|
describe "#__sort_option__" do
|
|
@@ -196,5 +196,17 @@ describe Mongoid::Criteria::Queryable::Pipeline do
|
|
|
196
196
|
end
|
|
197
197
|
end
|
|
198
198
|
end
|
|
199
|
+
|
|
200
|
+
context "when provided a hash" do
|
|
201
|
+
before do
|
|
202
|
+
pipeline.unwind(path: "$author", "includeArrayIndex" => "author_index", preserveNullAndEmptyArrays: true)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it "sets the hash" do
|
|
206
|
+
expect(pipeline).to eq([
|
|
207
|
+
{ "$unwind" => { path: "$author", "includeArrayIndex" => "author_index", preserveNullAndEmptyArrays: true } }
|
|
208
|
+
])
|
|
209
|
+
end
|
|
210
|
+
end
|
|
199
211
|
end
|
|
200
212
|
end
|
|
@@ -1073,6 +1073,26 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
1073
1073
|
})
|
|
1074
1074
|
end
|
|
1075
1075
|
|
|
1076
|
+
context "when used with the $box operator ($geoWithin query) " do
|
|
1077
|
+
let(:selection) do
|
|
1078
|
+
query.geo_spacial(
|
|
1079
|
+
:location.within_box => [[ 1, 10 ], [ 2, 10 ]]
|
|
1080
|
+
)
|
|
1081
|
+
end
|
|
1082
|
+
|
|
1083
|
+
it "adds the $geoIntersects expression" do
|
|
1084
|
+
expect(selection.selector).to eq({
|
|
1085
|
+
"location" => {
|
|
1086
|
+
"$geoWithin" => {
|
|
1087
|
+
"$box" => [
|
|
1088
|
+
[ 1, 10 ], [ 2, 10 ]
|
|
1089
|
+
]
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
})
|
|
1093
|
+
end
|
|
1094
|
+
end
|
|
1095
|
+
|
|
1076
1096
|
it_behaves_like "a cloning selection"
|
|
1077
1097
|
end
|
|
1078
1098
|
end
|
|
@@ -3369,7 +3389,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
3369
3389
|
end
|
|
3370
3390
|
|
|
3371
3391
|
it "constructs a text search document" do
|
|
3372
|
-
expect(selection.selector).to eq({
|
|
3392
|
+
expect(selection.selector).to eq({ '$text' => { '$search' => "testing" }})
|
|
3373
3393
|
end
|
|
3374
3394
|
|
|
3375
3395
|
it "returns the cloned selectable" do
|
|
@@ -3383,16 +3403,35 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
3383
3403
|
end
|
|
3384
3404
|
|
|
3385
3405
|
it "constructs a text search document" do
|
|
3386
|
-
expect(selection.selector[
|
|
3406
|
+
expect(selection.selector['$text']['$search']).to eq("essais")
|
|
3387
3407
|
end
|
|
3388
3408
|
|
|
3389
3409
|
it "add the options to the text search document" do
|
|
3390
|
-
expect(selection.selector[
|
|
3410
|
+
expect(selection.selector['$text'][:$language]).to eq("fr")
|
|
3391
3411
|
end
|
|
3392
3412
|
|
|
3393
3413
|
it_behaves_like "a cloning selection"
|
|
3394
3414
|
end
|
|
3395
3415
|
end
|
|
3416
|
+
|
|
3417
|
+
context 'when given more than once' do
|
|
3418
|
+
let(:selection) do
|
|
3419
|
+
query.text_search("one").text_search('two')
|
|
3420
|
+
end
|
|
3421
|
+
|
|
3422
|
+
# MongoDB server can only handle one text expression at a time,
|
|
3423
|
+
# per https://docs.mongodb.com/manual/reference/operator/query/text/.
|
|
3424
|
+
# Nonetheless we test that the query is built correctly when
|
|
3425
|
+
# a user supplies more than one text condition.
|
|
3426
|
+
it 'merges conditions' do
|
|
3427
|
+
expect(Mongoid.logger).to receive(:warn)
|
|
3428
|
+
expect(selection.selector).to eq('$and' => [
|
|
3429
|
+
{'$text' => {'$search' => 'one'}}
|
|
3430
|
+
],
|
|
3431
|
+
'$text' => {'$search' => 'two'},
|
|
3432
|
+
)
|
|
3433
|
+
end
|
|
3434
|
+
end
|
|
3396
3435
|
end
|
|
3397
3436
|
|
|
3398
3437
|
describe "#where" do
|
|
@@ -370,11 +370,11 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
370
370
|
context "when providing an array" do
|
|
371
371
|
|
|
372
372
|
let(:big_one) do
|
|
373
|
-
BigDecimal
|
|
373
|
+
BigDecimal("1.2321")
|
|
374
374
|
end
|
|
375
375
|
|
|
376
376
|
let(:big_two) do
|
|
377
|
-
BigDecimal
|
|
377
|
+
BigDecimal("4.2222")
|
|
378
378
|
end
|
|
379
379
|
|
|
380
380
|
let(:array) do
|