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
|
@@ -438,32 +438,6 @@ describe Mongoid::Contextual::Memory do
|
|
|
438
438
|
}.to raise_exception(Mongoid::Errors::InMemoryCollationNotSupported)
|
|
439
439
|
end
|
|
440
440
|
end
|
|
441
|
-
|
|
442
|
-
context "when the field name is a method name" do
|
|
443
|
-
|
|
444
|
-
let!(:person) do
|
|
445
|
-
Person.create!(ssn: "secret-ssn")
|
|
446
|
-
end
|
|
447
|
-
|
|
448
|
-
let!(:address) do
|
|
449
|
-
person.addresses.create!(street: "hobrecht")
|
|
450
|
-
end
|
|
451
|
-
|
|
452
|
-
let(:criteria) do
|
|
453
|
-
Address.all.tap do |crit|
|
|
454
|
-
crit.documents = [ address ]
|
|
455
|
-
end
|
|
456
|
-
end
|
|
457
|
-
|
|
458
|
-
let(:context) do
|
|
459
|
-
described_class.new(criteria)
|
|
460
|
-
end
|
|
461
|
-
|
|
462
|
-
it "does not call the method" do
|
|
463
|
-
expect(address).not_to receive(:destroy)
|
|
464
|
-
expect(context.distinct(:destroy)).to eq([ nil ])
|
|
465
|
-
end
|
|
466
|
-
end
|
|
467
441
|
end
|
|
468
442
|
|
|
469
443
|
context "when legacy_pluck_distinct is false" do
|
|
@@ -658,28 +632,6 @@ describe Mongoid::Contextual::Memory do
|
|
|
658
632
|
expect(context.distinct("label.sales")).to eq([ BigDecimal("1E2") ])
|
|
659
633
|
end
|
|
660
634
|
end
|
|
661
|
-
|
|
662
|
-
context "when the field name is a method name" do
|
|
663
|
-
|
|
664
|
-
let!(:person) do
|
|
665
|
-
Person.create!(ssn: "secret-ssn")
|
|
666
|
-
end
|
|
667
|
-
|
|
668
|
-
let!(:address) do
|
|
669
|
-
person.addresses.create!(street: "hobrecht")
|
|
670
|
-
end
|
|
671
|
-
|
|
672
|
-
let(:criteria) do
|
|
673
|
-
Address.all.tap do |crit|
|
|
674
|
-
crit.documents = [ address ]
|
|
675
|
-
end
|
|
676
|
-
end
|
|
677
|
-
|
|
678
|
-
it "does not call the method" do
|
|
679
|
-
expect(address).not_to receive(:destroy)
|
|
680
|
-
expect(context.distinct(:destroy)).to eq([ nil ])
|
|
681
|
-
end
|
|
682
|
-
end
|
|
683
635
|
end
|
|
684
636
|
end
|
|
685
637
|
|
|
@@ -878,10 +830,6 @@ describe Mongoid::Contextual::Memory do
|
|
|
878
830
|
expect(context.send(method, 1)).to eq([ hobrecht ])
|
|
879
831
|
end
|
|
880
832
|
|
|
881
|
-
it "returns the matching document when passing deprecated options" do
|
|
882
|
-
expect(context.send(method, id_sort: :none)).to eq(hobrecht)
|
|
883
|
-
end
|
|
884
|
-
|
|
885
833
|
context 'when there is a collation on the criteria' do
|
|
886
834
|
|
|
887
835
|
let(:criteria) do
|
|
@@ -1134,10 +1082,6 @@ describe Mongoid::Contextual::Memory do
|
|
|
1134
1082
|
expect(context.last(1)).to eq([ friedel ])
|
|
1135
1083
|
end
|
|
1136
1084
|
|
|
1137
|
-
it "returns the matching document when passing deprecated options" do
|
|
1138
|
-
expect(context.last(id_sort: :none)).to eq(friedel)
|
|
1139
|
-
end
|
|
1140
|
-
|
|
1141
1085
|
context 'when there is a collation on the criteria' do
|
|
1142
1086
|
|
|
1143
1087
|
let(:criteria) do
|
|
@@ -1400,7 +1344,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
1400
1344
|
Band.create!(name: "Photek", likes: 1)
|
|
1401
1345
|
end
|
|
1402
1346
|
|
|
1403
|
-
let(:maniacs) do
|
|
1347
|
+
let!(:maniacs) do
|
|
1404
1348
|
Band.create!(name: "10,000 Maniacs", likes: 1, sales: "1E2")
|
|
1405
1349
|
end
|
|
1406
1350
|
|
|
@@ -1726,9 +1670,12 @@ describe Mongoid::Contextual::Memory do
|
|
|
1726
1670
|
Band.where(name: maniacs.name).pluck(:sales)
|
|
1727
1671
|
end
|
|
1728
1672
|
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1673
|
+
with_config_values :map_big_decimal_to_decimal128, true, false do
|
|
1674
|
+
|
|
1675
|
+
it "demongoizes the field" do
|
|
1676
|
+
expect(plucked.first).to be_a(BigDecimal)
|
|
1677
|
+
expect(plucked.first).to eq(BigDecimal("1E2"))
|
|
1678
|
+
end
|
|
1732
1679
|
end
|
|
1733
1680
|
end
|
|
1734
1681
|
|
|
@@ -1738,7 +1685,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
1738
1685
|
|
|
1739
1686
|
let(:plucked) do
|
|
1740
1687
|
Band.where(_id: band.id).tap do |crit|
|
|
1741
|
-
crit.documents = [band]
|
|
1688
|
+
crit.documents = [ band ]
|
|
1742
1689
|
end.pluck("label.sales")
|
|
1743
1690
|
end
|
|
1744
1691
|
|
|
@@ -1764,7 +1711,7 @@ describe Mongoid::Contextual::Memory do
|
|
|
1764
1711
|
|
|
1765
1712
|
let(:plucked) do
|
|
1766
1713
|
Band.where(_id: band.id).tap do |crit|
|
|
1767
|
-
crit.documents = band
|
|
1714
|
+
crit.documents = [ band ]
|
|
1768
1715
|
end.pluck("label.qwerty")
|
|
1769
1716
|
end
|
|
1770
1717
|
|
|
@@ -1795,174 +1742,538 @@ describe Mongoid::Contextual::Memory do
|
|
|
1795
1742
|
])
|
|
1796
1743
|
end
|
|
1797
1744
|
end
|
|
1745
|
+
end
|
|
1746
|
+
end
|
|
1798
1747
|
|
|
1799
|
-
|
|
1748
|
+
describe "#pick" do
|
|
1800
1749
|
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1750
|
+
let(:depeche) do
|
|
1751
|
+
Band.create!(name: "Depeche Mode", likes: 3)
|
|
1752
|
+
end
|
|
1753
|
+
|
|
1754
|
+
let(:tool) do
|
|
1755
|
+
Band.create!(name: "Tool", likes: 3)
|
|
1756
|
+
end
|
|
1757
|
+
|
|
1758
|
+
let(:criteria) do
|
|
1759
|
+
Band.all.tap do |crit|
|
|
1760
|
+
crit.documents = [ depeche, tool ]
|
|
1761
|
+
end
|
|
1762
|
+
end
|
|
1763
|
+
|
|
1764
|
+
let(:context) do
|
|
1765
|
+
described_class.new(criteria)
|
|
1766
|
+
end
|
|
1767
|
+
|
|
1768
|
+
context "when picking a field" do
|
|
1769
|
+
|
|
1770
|
+
let(:picked) do
|
|
1771
|
+
context.pick(:name)
|
|
1772
|
+
end
|
|
1773
|
+
|
|
1774
|
+
it "returns one element" do
|
|
1775
|
+
expect(picked).to eq("Depeche Mode")
|
|
1776
|
+
end
|
|
1777
|
+
end
|
|
1778
|
+
|
|
1779
|
+
context "when picking multiple fields" do
|
|
1780
|
+
|
|
1781
|
+
let(:picked) do
|
|
1782
|
+
context.pick(:name, :likes)
|
|
1783
|
+
end
|
|
1806
1784
|
|
|
1807
|
-
|
|
1808
|
-
|
|
1785
|
+
it "returns an array" do
|
|
1786
|
+
expect(picked).to eq([ "Depeche Mode", 3 ])
|
|
1787
|
+
end
|
|
1788
|
+
end
|
|
1789
|
+
|
|
1790
|
+
context "when no documents to pick" do
|
|
1791
|
+
|
|
1792
|
+
let(:criteria) do
|
|
1793
|
+
Band.all.tap do |crit|
|
|
1794
|
+
crit.documents = []
|
|
1809
1795
|
end
|
|
1810
1796
|
end
|
|
1811
1797
|
|
|
1812
|
-
|
|
1798
|
+
let(:picked) do
|
|
1799
|
+
context.pick(:name)
|
|
1800
|
+
end
|
|
1801
|
+
|
|
1802
|
+
it "returns nil" do
|
|
1803
|
+
expect(picked).to be_nil
|
|
1804
|
+
end
|
|
1805
|
+
end
|
|
1806
|
+
end
|
|
1807
|
+
|
|
1808
|
+
describe "#tally" do
|
|
1809
|
+
let(:fans1) { [ Fanatic.new(age:1), Fanatic.new(age:2) ] }
|
|
1810
|
+
let(:fans2) { [ Fanatic.new(age:1), Fanatic.new(age:2) ] }
|
|
1811
|
+
let(:fans3) { [ Fanatic.new(age:1), Fanatic.new(age:3) ] }
|
|
1812
|
+
|
|
1813
|
+
let(:genres1) { [ { x: 1, y: { z: 1 } }, { x: 2, y: { z: 2 } }, { y: 3 } ]}
|
|
1814
|
+
let(:genres2) { [ { x: 1, y: { z: 1 } }, { x: 2, y: { z: 2 } }, { y: 4 } ]}
|
|
1815
|
+
let(:genres3) { [ { x: 1, y: { z: 1 } }, { x: 3, y: { z: 3 } }, { y: 5 } ]}
|
|
1816
|
+
|
|
1817
|
+
let(:label1) { Label.new(name: "Atlantic") }
|
|
1818
|
+
let(:label2) { Label.new(name: "Atlantic") }
|
|
1819
|
+
let(:label3) { Label.new(name: "Columbia") }
|
|
1820
|
+
|
|
1821
|
+
|
|
1822
|
+
let(:band1) { Band.new(origin: "tally", name: "Depeche Mode", years: 30, sales: "1E2", label: label1, genres: genres1) }
|
|
1823
|
+
let(:band2) { Band.new(origin: "tally", name: "New Order", years: 30, sales: "2E3", label: label2, genres: genres2) }
|
|
1824
|
+
let(:band3) { Band.new(origin: "tally", name: "10,000 Maniacs", years: 30, sales: "1E2", label: label3, genres: genres3) }
|
|
1825
|
+
let(:band4) { Band.new(origin: "tally2", fanatics: fans1, genres: [1, 2]) }
|
|
1826
|
+
let(:band5) { Band.new(origin: "tally2", fanatics: fans2, genres: [1, 2]) }
|
|
1827
|
+
let(:band6) { Band.new(origin: "tally2", fanatics: fans3, genres: [1, 3]) }
|
|
1828
|
+
|
|
1829
|
+
let(:criteria) do
|
|
1830
|
+
Band.where(origin: "tally").all.tap do |crit|
|
|
1831
|
+
crit.documents = [ band1, band2, band3 ]
|
|
1832
|
+
end
|
|
1833
|
+
end
|
|
1834
|
+
|
|
1835
|
+
let(:criteria2) do
|
|
1836
|
+
Band.where(origin: "tally2").tap do |crit|
|
|
1837
|
+
crit.documents = [ band4, band5, band6 ]
|
|
1838
|
+
end
|
|
1839
|
+
end
|
|
1840
|
+
|
|
1841
|
+
let(:context) do
|
|
1842
|
+
described_class.new(criteria)
|
|
1843
|
+
end
|
|
1844
|
+
|
|
1845
|
+
let(:context2) do
|
|
1846
|
+
described_class.new(criteria2)
|
|
1847
|
+
end
|
|
1848
|
+
|
|
1849
|
+
context "when tallying a string" do
|
|
1850
|
+
let(:tally) do
|
|
1851
|
+
context.tally(:name)
|
|
1852
|
+
end
|
|
1853
|
+
|
|
1854
|
+
it "returns the correct hash" do
|
|
1855
|
+
expect(tally).to eq("Depeche Mode" => 1, "New Order" => 1, "10,000 Maniacs" => 1)
|
|
1856
|
+
end
|
|
1857
|
+
end
|
|
1858
|
+
|
|
1859
|
+
context "using an aliased field" do
|
|
1860
|
+
let(:tally) do
|
|
1861
|
+
context.tally(:years)
|
|
1862
|
+
end
|
|
1863
|
+
|
|
1864
|
+
it "returns the correct hash" do
|
|
1865
|
+
expect(tally).to eq(30 => 3)
|
|
1866
|
+
end
|
|
1867
|
+
end
|
|
1868
|
+
|
|
1869
|
+
context "when tallying a demongoizable field" do
|
|
1870
|
+
let(:tally) do
|
|
1871
|
+
context.tally(:sales)
|
|
1872
|
+
end
|
|
1873
|
+
|
|
1874
|
+
it "returns the correct hash" do
|
|
1875
|
+
expect(tally).to eq(BigDecimal("1E2") => 2, BigDecimal("2E3") => 1)
|
|
1876
|
+
end
|
|
1877
|
+
end
|
|
1878
|
+
|
|
1879
|
+
context "when tallying a localized field" do
|
|
1880
|
+
let(:d1) { Dictionary.new(description: 'en1') }
|
|
1881
|
+
let(:d2) { Dictionary.new(description: 'en1') }
|
|
1882
|
+
let(:d3) { Dictionary.new(description: 'en1') }
|
|
1883
|
+
let(:d4) { Dictionary.new(description: 'en2') }
|
|
1884
|
+
|
|
1885
|
+
before do
|
|
1886
|
+
I18n.locale = :en
|
|
1887
|
+
d1
|
|
1888
|
+
d2
|
|
1889
|
+
d3
|
|
1890
|
+
d4
|
|
1891
|
+
I18n.locale = :de
|
|
1892
|
+
d1.description = 'de1'
|
|
1893
|
+
d2.description = 'de1'
|
|
1894
|
+
d3.description = 'de2'
|
|
1895
|
+
d4.description = 'de3'
|
|
1896
|
+
I18n.locale = :en
|
|
1897
|
+
end
|
|
1813
1898
|
|
|
1814
|
-
|
|
1815
|
-
|
|
1899
|
+
let(:criteria) do
|
|
1900
|
+
Dictionary.all.tap do |crit|
|
|
1901
|
+
crit.documents = [ d1, d2, d3, d4 ]
|
|
1816
1902
|
end
|
|
1903
|
+
end
|
|
1817
1904
|
|
|
1818
|
-
|
|
1819
|
-
|
|
1905
|
+
context "when getting the demongoized field" do
|
|
1906
|
+
let(:tallied) do
|
|
1907
|
+
context.tally(:description)
|
|
1820
1908
|
end
|
|
1821
1909
|
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
crit.documents = [ address ]
|
|
1825
|
-
end
|
|
1910
|
+
it "returns the translation for the current locale" do
|
|
1911
|
+
expect(tallied).to eq("en1" => 3, "en2" => 1)
|
|
1826
1912
|
end
|
|
1913
|
+
end
|
|
1827
1914
|
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1915
|
+
context "when getting a specific locale" do
|
|
1916
|
+
let(:tallied) do
|
|
1917
|
+
context.tally("description.de")
|
|
1831
1918
|
end
|
|
1832
1919
|
|
|
1833
|
-
it "
|
|
1834
|
-
expect(
|
|
1920
|
+
it "returns the translation for the the specific locale" do
|
|
1921
|
+
expect(tallied).to eq("de1" => 2, "de2" => 1, "de3" => 1)
|
|
1835
1922
|
end
|
|
1923
|
+
end
|
|
1836
1924
|
|
|
1837
|
-
|
|
1838
|
-
|
|
1925
|
+
context "when getting the full hash" do
|
|
1926
|
+
let(:tallied) do
|
|
1927
|
+
context.tally("description_translations")
|
|
1839
1928
|
end
|
|
1840
1929
|
|
|
1841
|
-
it "
|
|
1842
|
-
expect(
|
|
1843
|
-
|
|
1930
|
+
it "returns the correct hash" do
|
|
1931
|
+
expect(tallied).to eq(
|
|
1932
|
+
{"de" => "de1", "en" => "en1" } => 2,
|
|
1933
|
+
{"de" => "de2", "en" => "en1" } => 1,
|
|
1934
|
+
{"de" => "de3", "en" => "en2" } => 1
|
|
1935
|
+
)
|
|
1844
1936
|
end
|
|
1845
1937
|
end
|
|
1938
|
+
end
|
|
1846
1939
|
|
|
1847
|
-
|
|
1940
|
+
context "when tallying an embedded localized field" do
|
|
1848
1941
|
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
end
|
|
1942
|
+
let(:person1) { Person.create!(addresses: [ address1a, address1b ]) }
|
|
1943
|
+
let(:person2) { Person.create!(addresses: [ address2a, address2b ]) }
|
|
1852
1944
|
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1945
|
+
let(:address1a) { Address.new(name: "en1") }
|
|
1946
|
+
let(:address1b) { Address.new(name: "en2") }
|
|
1947
|
+
let(:address2a) { Address.new(name: "en1") }
|
|
1948
|
+
let(:address2b) { Address.new(name: "en3") }
|
|
1856
1949
|
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1950
|
+
before do
|
|
1951
|
+
I18n.locale = :en
|
|
1952
|
+
address1a
|
|
1953
|
+
address1b
|
|
1954
|
+
address2a
|
|
1955
|
+
address2b
|
|
1956
|
+
I18n.locale = :de
|
|
1957
|
+
address1a.name = "de1"
|
|
1958
|
+
address1b.name = "de2"
|
|
1959
|
+
address2a.name = "de1"
|
|
1960
|
+
address2b.name = "de3"
|
|
1961
|
+
person1
|
|
1962
|
+
person2
|
|
1963
|
+
|
|
1964
|
+
I18n.locale = :en
|
|
1965
|
+
end
|
|
1862
1966
|
|
|
1863
|
-
|
|
1864
|
-
|
|
1967
|
+
let(:criteria) do
|
|
1968
|
+
Person.all.tap do |crit|
|
|
1969
|
+
crit.documents = [ person1, person2 ]
|
|
1865
1970
|
end
|
|
1971
|
+
end
|
|
1866
1972
|
|
|
1867
|
-
|
|
1868
|
-
|
|
1973
|
+
context "when getting the demongoized field" do
|
|
1974
|
+
let(:tallied) do
|
|
1975
|
+
context.tally("addresses.name")
|
|
1869
1976
|
end
|
|
1870
1977
|
|
|
1871
|
-
it "returns the
|
|
1872
|
-
expect(
|
|
1978
|
+
it "returns the translation for the current locale" do
|
|
1979
|
+
expect(tallied).to eq(
|
|
1980
|
+
[ "en1", "en2" ] => 1,
|
|
1981
|
+
[ "en1", "en3" ] => 1,
|
|
1982
|
+
)
|
|
1873
1983
|
end
|
|
1874
1984
|
end
|
|
1875
1985
|
|
|
1876
|
-
context "when
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
Preference.create!(name: "nature")
|
|
1986
|
+
context "when getting a specific locale" do
|
|
1987
|
+
let(:tallied) do
|
|
1988
|
+
context.tally("addresses.name.de")
|
|
1880
1989
|
end
|
|
1881
1990
|
|
|
1882
|
-
|
|
1883
|
-
|
|
1991
|
+
it "returns the translation for the the specific locale" do
|
|
1992
|
+
expect(tallied).to eq(
|
|
1993
|
+
[ "de1", "de2" ] => 1,
|
|
1994
|
+
[ "de1", "de3" ] => 1,
|
|
1995
|
+
)
|
|
1884
1996
|
end
|
|
1997
|
+
end
|
|
1885
1998
|
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
end
|
|
1999
|
+
context "when getting the full hash" do
|
|
2000
|
+
let(:tallied) do
|
|
2001
|
+
context.tally("addresses.name_translations")
|
|
1890
2002
|
end
|
|
1891
2003
|
|
|
1892
|
-
it "returns the
|
|
1893
|
-
expect(
|
|
2004
|
+
it "returns the correct hash" do
|
|
2005
|
+
expect(tallied).to eq(
|
|
2006
|
+
[{ "de" => "de1", "en" => "en1" }, { "de" => "de2", "en" => "en2" }] => 1,
|
|
2007
|
+
[{ "de" => "de1", "en" => "en1" }, { "de" => "de3", "en" => "en3" }] => 1,
|
|
2008
|
+
)
|
|
1894
2009
|
end
|
|
1895
2010
|
end
|
|
2011
|
+
end
|
|
1896
2012
|
|
|
1897
|
-
|
|
2013
|
+
context "when tallying an embedded field" do
|
|
2014
|
+
let(:tally) do
|
|
2015
|
+
context.tally("label.name")
|
|
2016
|
+
end
|
|
1898
2017
|
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
2018
|
+
it "returns the correct hash" do
|
|
2019
|
+
expect(tally).to eq("Atlantic" => 2, "Columbia" => 1)
|
|
2020
|
+
end
|
|
2021
|
+
end
|
|
1902
2022
|
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
2023
|
+
context "when tallying an element in an embeds_many field" do
|
|
2024
|
+
|
|
2025
|
+
let(:tally) do
|
|
2026
|
+
context2.tally("fanatics.age")
|
|
2027
|
+
end
|
|
2028
|
+
|
|
2029
|
+
it "returns the correct hash" do
|
|
2030
|
+
expect(tally).to eq(
|
|
2031
|
+
[1, 2] => 2,
|
|
2032
|
+
[1, 3] => 1
|
|
2033
|
+
)
|
|
2034
|
+
end
|
|
2035
|
+
end
|
|
2036
|
+
|
|
2037
|
+
context "when tallying an embeds_many field" do
|
|
2038
|
+
|
|
2039
|
+
let(:tally) do
|
|
2040
|
+
context2.tally("fanatics")
|
|
2041
|
+
end
|
|
2042
|
+
|
|
2043
|
+
it "returns the correct hash" do
|
|
2044
|
+
expect(tally).to eq(
|
|
2045
|
+
fans1 => 1,
|
|
2046
|
+
fans2 => 1,
|
|
2047
|
+
fans3 => 1,
|
|
2048
|
+
)
|
|
2049
|
+
end
|
|
2050
|
+
end
|
|
2051
|
+
|
|
2052
|
+
context "when tallying a field of type array" do
|
|
2053
|
+
|
|
2054
|
+
let(:tally) do
|
|
2055
|
+
context2.tally("genres")
|
|
2056
|
+
end
|
|
2057
|
+
|
|
2058
|
+
it "returns the correct hash" do
|
|
2059
|
+
expect(tally).to eq(
|
|
2060
|
+
[1, 2] => 2,
|
|
2061
|
+
[1, 3] => 1
|
|
2062
|
+
)
|
|
2063
|
+
end
|
|
2064
|
+
end
|
|
2065
|
+
|
|
2066
|
+
context "when tallying an element from an array of hashes" do
|
|
2067
|
+
|
|
2068
|
+
let(:tally) do
|
|
2069
|
+
context.tally("genres.x")
|
|
2070
|
+
end
|
|
2071
|
+
|
|
2072
|
+
it "returns the correct hash without the nil keys" do
|
|
2073
|
+
expect(tally).to eq(
|
|
2074
|
+
[1, 2] => 2,
|
|
2075
|
+
[1, 3] => 1
|
|
2076
|
+
)
|
|
2077
|
+
end
|
|
2078
|
+
end
|
|
2079
|
+
|
|
2080
|
+
context "when tallying an element from an array of hashes; with duplicate" do
|
|
2081
|
+
|
|
2082
|
+
let(:band4) { Band.new(origin: "tally", genres: [ { x: 1 }, {x: 1} ] ) }
|
|
2083
|
+
|
|
2084
|
+
let(:criteria) do
|
|
2085
|
+
Band.where(origin: "tally").all.tap do |crit|
|
|
2086
|
+
crit.documents = [ band1, band2, band3, band4 ]
|
|
1907
2087
|
end
|
|
2088
|
+
end
|
|
1908
2089
|
|
|
1909
|
-
|
|
1910
|
-
|
|
2090
|
+
let(:tally) do
|
|
2091
|
+
context.tally("genres.x")
|
|
2092
|
+
end
|
|
2093
|
+
|
|
2094
|
+
it "returns the correct hash without the nil keys" do
|
|
2095
|
+
expect(tally).to eq(
|
|
2096
|
+
[1, 2] => 2,
|
|
2097
|
+
[1, 3] => 1,
|
|
2098
|
+
[1, 1] => 1,
|
|
2099
|
+
)
|
|
2100
|
+
end
|
|
2101
|
+
end
|
|
2102
|
+
|
|
2103
|
+
context "when tallying an aliased field of type array" do
|
|
2104
|
+
|
|
2105
|
+
let(:person1) { Person.new(array: [ 1, 2 ]) }
|
|
2106
|
+
let(:person2) { Person.new(array: [ 1, 3 ]) }
|
|
2107
|
+
|
|
2108
|
+
let(:criteria) do
|
|
2109
|
+
Person.all.tap do |crit|
|
|
2110
|
+
crit.documents = [ person1, person2 ]
|
|
1911
2111
|
end
|
|
1912
2112
|
end
|
|
2113
|
+
|
|
2114
|
+
let(:tally) do
|
|
2115
|
+
context.tally("array")
|
|
2116
|
+
end
|
|
2117
|
+
|
|
2118
|
+
it "returns the correct hash" do
|
|
2119
|
+
expect(tally).to eq(
|
|
2120
|
+
[1, 2] => 1,
|
|
2121
|
+
[1, 3] => 1
|
|
2122
|
+
)
|
|
2123
|
+
end
|
|
1913
2124
|
end
|
|
1914
|
-
end
|
|
1915
2125
|
|
|
1916
|
-
|
|
2126
|
+
context "when going multiple levels deep in arrays" do
|
|
1917
2127
|
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
2128
|
+
let(:tally) do
|
|
2129
|
+
context.tally("genres.y.z")
|
|
2130
|
+
end
|
|
2131
|
+
|
|
2132
|
+
it "returns the correct hash" do
|
|
2133
|
+
expect(tally).to eq(
|
|
2134
|
+
[1, 2] => 2,
|
|
2135
|
+
[1, 3] => 1
|
|
2136
|
+
)
|
|
1923
2137
|
end
|
|
1924
2138
|
end
|
|
1925
2139
|
|
|
1926
|
-
|
|
1927
|
-
|
|
2140
|
+
context "when going multiple levels deep in an array" do
|
|
2141
|
+
|
|
2142
|
+
let(:tally) do
|
|
2143
|
+
context.tally("genres.y.z")
|
|
2144
|
+
end
|
|
2145
|
+
|
|
2146
|
+
it "returns the correct hash" do
|
|
2147
|
+
expect(tally).to eq(
|
|
2148
|
+
[1, 2] => 2,
|
|
2149
|
+
[1, 3] => 1
|
|
2150
|
+
)
|
|
2151
|
+
end
|
|
1928
2152
|
end
|
|
1929
2153
|
|
|
1930
|
-
|
|
1931
|
-
|
|
2154
|
+
context "when tallying deeply nested arrays/embedded associations" do
|
|
2155
|
+
|
|
2156
|
+
let(:person1) { Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))) ]) }
|
|
2157
|
+
let(:person2) { Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))) ]) }
|
|
2158
|
+
let(:person3) { Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 3 } } ]))) ]) }
|
|
2159
|
+
|
|
2160
|
+
let(:criteria) do
|
|
2161
|
+
Person.all.tap do |crit|
|
|
2162
|
+
crit.documents = [ person1, person2, person3 ]
|
|
2163
|
+
end
|
|
2164
|
+
end
|
|
2165
|
+
|
|
2166
|
+
let(:tally) do
|
|
2167
|
+
context.tally("addresses.code.deepest.array.y.z")
|
|
2168
|
+
end
|
|
2169
|
+
|
|
2170
|
+
it "returns the correct hash" do
|
|
2171
|
+
expect(tally).to eq(
|
|
2172
|
+
[ [ 1, 2 ] ] => 2,
|
|
2173
|
+
[ [ 1, 3 ] ] => 1
|
|
2174
|
+
)
|
|
2175
|
+
end
|
|
1932
2176
|
end
|
|
1933
|
-
end
|
|
1934
2177
|
|
|
1935
|
-
|
|
2178
|
+
context "when tallying deeply nested arrays/embedded associations" do
|
|
1936
2179
|
|
|
1937
|
-
|
|
1938
|
-
|
|
2180
|
+
let(:person1) do
|
|
2181
|
+
Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))),
|
|
2182
|
+
Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))) ])
|
|
2183
|
+
end
|
|
2184
|
+
|
|
2185
|
+
let(:person2) do
|
|
2186
|
+
Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))),
|
|
2187
|
+
Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 2 } } ]))) ])
|
|
2188
|
+
end
|
|
2189
|
+
|
|
2190
|
+
let(:person3) do
|
|
2191
|
+
Person.new(addresses: [ Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 3 } } ]))),
|
|
2192
|
+
Address.new(code: Code.new(deepest: Deepest.new(array: [ { y: { z: 1 } }, { y: { z: 3 } } ]))) ])
|
|
2193
|
+
end
|
|
2194
|
+
|
|
2195
|
+
let(:criteria) do
|
|
2196
|
+
Person.all.tap do |crit|
|
|
2197
|
+
crit.documents = [ person1, person2, person3 ]
|
|
2198
|
+
end
|
|
2199
|
+
end
|
|
2200
|
+
|
|
2201
|
+
let(:tally) do
|
|
2202
|
+
context.tally("addresses.code.deepest.array.y.z")
|
|
2203
|
+
end
|
|
2204
|
+
|
|
2205
|
+
it "returns the correct hash" do
|
|
2206
|
+
expect(tally).to eq(
|
|
2207
|
+
[ [ 1, 2 ], [ 1, 2 ] ] => 2,
|
|
2208
|
+
[ [ 1, 3 ], [ 1, 3 ] ] => 1
|
|
2209
|
+
)
|
|
2210
|
+
end
|
|
1939
2211
|
end
|
|
1940
2212
|
|
|
1941
|
-
context "when
|
|
2213
|
+
context "when some keys are missing" do
|
|
2214
|
+
|
|
2215
|
+
let(:criteria) do
|
|
2216
|
+
Band.where(origin: "tally").all.tap do |crit|
|
|
2217
|
+
crit.documents = [ band1, band2, band3 ]
|
|
2218
|
+
3.times{ crit.documents << Band.new(origin: "tally") }
|
|
2219
|
+
end
|
|
2220
|
+
end
|
|
1942
2221
|
|
|
1943
|
-
let
|
|
1944
|
-
|
|
2222
|
+
let(:tally) do
|
|
2223
|
+
context.tally(:name)
|
|
1945
2224
|
end
|
|
1946
2225
|
|
|
1947
|
-
|
|
1948
|
-
|
|
2226
|
+
it "returns the correct hash" do
|
|
2227
|
+
expect(tally).to eq(
|
|
2228
|
+
"Depeche Mode" => 1,
|
|
2229
|
+
"New Order" => 1,
|
|
2230
|
+
"10,000 Maniacs" => 1,
|
|
2231
|
+
nil => 3
|
|
2232
|
+
)
|
|
1949
2233
|
end
|
|
2234
|
+
end
|
|
2235
|
+
|
|
2236
|
+
context "when the first element is an embeds_one" do
|
|
2237
|
+
let(:person1) { Person.create!(name: Name.new(translations: [ Translation.new(language: 1), Translation.new(language: 2) ])) }
|
|
2238
|
+
let(:person2) { Person.create!(name: Name.new(translations: [ Translation.new(language: 1), Translation.new(language: 2) ])) }
|
|
2239
|
+
let(:person3) { Person.create!(name: Name.new(translations: [ Translation.new(language: 1), Translation.new(language: 3) ])) }
|
|
1950
2240
|
|
|
1951
2241
|
let(:criteria) do
|
|
1952
|
-
|
|
1953
|
-
crit.documents = [
|
|
2242
|
+
Person.all.tap do |crit|
|
|
2243
|
+
crit.documents = [ person1, person2, person3 ]
|
|
1954
2244
|
end
|
|
1955
2245
|
end
|
|
1956
2246
|
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
2247
|
+
let(:tally) do
|
|
2248
|
+
context.tally("name.translations.language")
|
|
2249
|
+
end
|
|
2250
|
+
|
|
2251
|
+
it "returns the correct hash" do
|
|
2252
|
+
expect(tally).to eq(
|
|
2253
|
+
[1, 2] => 2,
|
|
2254
|
+
[1, 3] => 1
|
|
2255
|
+
)
|
|
1960
2256
|
end
|
|
2257
|
+
end
|
|
2258
|
+
end
|
|
2259
|
+
|
|
2260
|
+
describe '#inc' do
|
|
1961
2261
|
|
|
1962
|
-
|
|
1963
|
-
|
|
2262
|
+
let(:criteria) do
|
|
2263
|
+
Address.all.tap do |crit|
|
|
2264
|
+
crit.documents = [ Address.new(number: 1),
|
|
2265
|
+
Address.new(number: 2),
|
|
2266
|
+
Address.new(number: 3) ]
|
|
1964
2267
|
end
|
|
1965
2268
|
end
|
|
2269
|
+
|
|
2270
|
+
let(:context) do
|
|
2271
|
+
described_class.new(criteria)
|
|
2272
|
+
end
|
|
2273
|
+
|
|
2274
|
+
it 'increases each member' do
|
|
2275
|
+
expect(context.inc(number: 10).collect(&:number)).to eql([11, 12, 13])
|
|
2276
|
+
end
|
|
1966
2277
|
end
|
|
1967
2278
|
|
|
1968
2279
|
describe "#skip" do
|