mongoid 7.4.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 +0 -0
- data/README.md +3 -3
- data/lib/config/locales/en.yml +51 -28
- 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 +48 -8
- 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 +22 -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 -14
- 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/atomic/paths/embedded/many.rb +19 -0
- data/lib/mongoid/attributes/processing.rb +9 -2
- data/lib/mongoid/attributes.rb +30 -27
- 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/environment.rb +20 -4
- data/lib/mongoid/config.rb +25 -10
- 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 +176 -17
- data/lib/mongoid/contextual/mongo.rb +226 -206
- data/lib/mongoid/contextual/none.rb +66 -4
- 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 -13
- 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 -14
- 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 +21 -0
- 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 +28 -34
- data/lib/mongoid/criteria/queryable/selector.rb +89 -4
- data/lib/mongoid/criteria/queryable/smash.rb +39 -6
- data/lib/mongoid/criteria/queryable.rb +11 -6
- data/lib/mongoid/criteria.rb +1 -26
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +96 -32
- data/lib/mongoid/errors/document_not_found.rb +29 -8
- 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 +194 -28
- data/lib/mongoid/findable.rb +27 -7
- 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/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistence_context.rb +19 -2
- 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/selectable.rb +1 -2
- 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 +5 -1
- data/lib/mongoid/validatable/uniqueness.rb +2 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +2 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +11 -5
- data/spec/config/mongoid.yml +16 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +28 -26
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +28 -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/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/lite_spec_helper.rb +1 -1
- 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 +219 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -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 +67 -4
- 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 +8 -8
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -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/atomic_spec.rb +22 -0
- 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 +524 -27
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +34 -42
- data/spec/mongoid/clients/options_spec.rb +1 -0
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +32 -2
- data/spec/mongoid/config/environment_spec.rb +39 -1
- data/spec/mongoid/config_spec.rb +104 -13
- 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 +1337 -69
- data/spec/mongoid/contextual/mongo_spec.rb +1105 -172
- data/spec/mongoid/contextual/none_spec.rb +38 -0
- data/spec/mongoid/copyable_spec.rb +451 -1
- 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/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- 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 +289 -124
- data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
- data/spec/mongoid/criteria_spec.rb +474 -1198
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -0
- 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 +80 -15
- 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 +50 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +0 -154
- data/spec/mongoid/reloadable_spec.rb +35 -2
- data/spec/mongoid/scopable_spec.rb +21 -1
- data/spec/mongoid/shardable_spec.rb +14 -0
- 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/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/constraints.rb +8 -16
- data/spec/shared/lib/mrss/docker_runner.rb +23 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
- data/spec/shared/share/Dockerfile.erb +34 -48
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/server.sh +32 -19
- data/spec/shared/shlib/set_env.sh +37 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +39 -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/code.rb +2 -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/membership.rb +1 -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/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/spec_config.rb +4 -0
- data.tar.gz.sig +0 -0
- metadata +76 -13
- 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
@@ -33,107 +33,86 @@ describe Mongoid::Extensions::Integer do
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
[ :mongoize, :demongoize ].each do |method|
|
37
37
|
|
38
|
-
|
38
|
+
describe ".#{method}" do
|
39
39
|
|
40
|
-
|
41
|
-
expect(Integer.demongoize(number)).to eq(number)
|
42
|
-
end
|
43
|
-
end
|
40
|
+
context "when the value is a number" do
|
44
41
|
|
45
|
-
|
46
|
-
|
47
|
-
it "returns nil" do
|
48
|
-
expect(Integer.demongoize(nil)).to be_nil
|
49
|
-
end
|
50
|
-
end
|
42
|
+
context "when the value is an integer" do
|
51
43
|
|
52
|
-
|
44
|
+
context "when the value is small" do
|
53
45
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe ".mongoize" do
|
61
|
-
|
62
|
-
context "when the value is a number" do
|
63
|
-
|
64
|
-
context "when the value is an integer" do
|
65
|
-
|
66
|
-
context "when the value is small" do
|
67
|
-
|
68
|
-
it "it returns the integer" do
|
69
|
-
expect(Integer.mongoize(3)).to eq(3)
|
46
|
+
it "it returns the integer" do
|
47
|
+
expect(Integer.send(method, 3)).to eq(3)
|
48
|
+
end
|
70
49
|
end
|
71
|
-
end
|
72
50
|
|
73
|
-
|
51
|
+
context "when the value is large" do
|
74
52
|
|
75
|
-
|
76
|
-
|
53
|
+
it "returns the integer" do
|
54
|
+
expect(Integer.send(method, 1024**2).to_s).to eq("1048576")
|
55
|
+
end
|
77
56
|
end
|
78
57
|
end
|
79
|
-
end
|
80
58
|
|
81
|
-
|
59
|
+
context "when the value is a decimal" do
|
82
60
|
|
83
|
-
|
84
|
-
|
61
|
+
it "casts to integer" do
|
62
|
+
expect(Integer.send(method, 2.5)).to eq(2)
|
63
|
+
end
|
85
64
|
end
|
86
|
-
end
|
87
65
|
|
88
|
-
|
66
|
+
context "when the value is floating point zero" do
|
89
67
|
|
90
|
-
|
91
|
-
|
68
|
+
it "returns the integer zero" do
|
69
|
+
expect(Integer.send(method, 0.00000)).to eq(0)
|
70
|
+
end
|
92
71
|
end
|
93
|
-
end
|
94
72
|
|
95
|
-
|
73
|
+
context "when the value is a floating point integer" do
|
96
74
|
|
97
|
-
|
98
|
-
|
75
|
+
it "returns the integer number" do
|
76
|
+
expect(Integer.send(method, 4.00000)).to eq(4)
|
77
|
+
end
|
99
78
|
end
|
100
|
-
end
|
101
79
|
|
102
|
-
|
80
|
+
context "when the value has leading zeros" do
|
103
81
|
|
104
|
-
|
105
|
-
|
82
|
+
it "returns the stripped integer" do
|
83
|
+
expect(Integer.send(method, "000011")).to eq(11)
|
84
|
+
end
|
106
85
|
end
|
107
86
|
end
|
108
|
-
end
|
109
87
|
|
110
|
-
|
88
|
+
context "when the string is not a number" do
|
111
89
|
|
112
|
-
|
90
|
+
context "when the string is non numerical" do
|
113
91
|
|
114
|
-
|
115
|
-
|
92
|
+
it "returns nil" do
|
93
|
+
expect(Integer.send(method, "foo")).to be_nil
|
94
|
+
end
|
116
95
|
end
|
117
|
-
end
|
118
96
|
|
119
|
-
|
97
|
+
context "when the string is numerical" do
|
120
98
|
|
121
|
-
|
122
|
-
|
99
|
+
it "returns the integer value for the string" do
|
100
|
+
expect(Integer.send(method, "3")).to eq(3)
|
101
|
+
end
|
123
102
|
end
|
124
|
-
end
|
125
103
|
|
126
|
-
|
104
|
+
context "when the string is empty" do
|
127
105
|
|
128
|
-
|
129
|
-
|
106
|
+
it "returns nil" do
|
107
|
+
expect(Integer.send(method, "")).to be_nil
|
108
|
+
end
|
130
109
|
end
|
131
|
-
end
|
132
110
|
|
133
|
-
|
111
|
+
context "when the string is nil" do
|
134
112
|
|
135
|
-
|
136
|
-
|
113
|
+
it "returns nil" do
|
114
|
+
expect(Integer.send(method, nil)).to be_nil
|
115
|
+
end
|
137
116
|
end
|
138
117
|
end
|
139
118
|
end
|
@@ -16,142 +16,343 @@ describe Mongoid::Extensions::Range do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
describe ".demongoize" do
|
19
|
+
subject { Range.demongoize(hash) }
|
19
20
|
|
20
21
|
context "when the range is ascending" do
|
21
|
-
|
22
|
-
let(:hash) do
|
23
|
-
{ "min" => 1, "max" => 3 }
|
24
|
-
end
|
22
|
+
let(:hash) { { "min" => 1, "max" => 3 } }
|
25
23
|
|
26
24
|
it "returns an ascending range" do
|
27
|
-
|
25
|
+
is_expected.to eq(1..3)
|
28
26
|
end
|
29
27
|
end
|
30
28
|
|
31
29
|
context "when the range is ascending with exclude end" do
|
32
|
-
|
33
|
-
let(:hash) do
|
34
|
-
{ "min" => 1, "max" => 3, "exclude_end" => true }
|
35
|
-
end
|
30
|
+
let(:hash) { { "min" => 1, "max" => 3, "exclude_end" => true } }
|
36
31
|
|
37
32
|
it "returns an ascending range" do
|
38
|
-
|
33
|
+
is_expected.to eq(1...3)
|
39
34
|
end
|
40
35
|
end
|
41
36
|
|
42
37
|
context "when the range is descending" do
|
43
|
-
|
44
|
-
let(:hash) do
|
45
|
-
{ "min" => 5, "max" => 1 }
|
46
|
-
end
|
38
|
+
let(:hash) { { "min" => 5, "max" => 1 } }
|
47
39
|
|
48
40
|
it "returns an descending range" do
|
49
|
-
|
41
|
+
is_expected.to eq(5..1)
|
50
42
|
end
|
51
43
|
end
|
52
44
|
|
53
45
|
context "when the range is descending with exclude end" do
|
54
|
-
|
55
|
-
let(:hash) do
|
56
|
-
{ "min" => 5, "max" => 1, "exclude_end" => true }
|
57
|
-
end
|
46
|
+
let(:hash) { { "min" => 5, "max" => 1, "exclude_end" => true } }
|
58
47
|
|
59
48
|
it "returns an descending range" do
|
60
|
-
|
49
|
+
is_expected.to eq(5...1)
|
61
50
|
end
|
62
51
|
end
|
63
52
|
|
64
53
|
context "when the range is letters" do
|
54
|
+
let(:hash) { { "min" => "a", "max" => "z" } }
|
65
55
|
|
66
|
-
|
67
|
-
|
56
|
+
it "returns an alphabetic range" do
|
57
|
+
is_expected.to eq("a".."z")
|
68
58
|
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "when the range is letters with exclude end" do
|
62
|
+
let(:hash) { { "min" => "a", "max" => "z", "exclude_end" => true } }
|
69
63
|
|
70
64
|
it "returns an alphabetic range" do
|
71
|
-
|
65
|
+
is_expected.to eq("a"..."z")
|
72
66
|
end
|
73
67
|
end
|
74
68
|
|
75
|
-
context "when the range is
|
69
|
+
context "when the range is endless" do
|
70
|
+
let(:hash) { { "min" => 1, "max" => nil } }
|
71
|
+
|
72
|
+
context 'kernel can support endless range' do
|
73
|
+
ruby_version_gte '2.6'
|
76
74
|
|
77
|
-
|
78
|
-
|
75
|
+
it "returns an alphabetic range" do
|
76
|
+
is_expected.to eq(eval('1..'))
|
77
|
+
end
|
79
78
|
end
|
80
79
|
|
81
|
-
|
82
|
-
|
80
|
+
context 'kernel cannot support endless range' do
|
81
|
+
ruby_version_lt '2.6'
|
82
|
+
|
83
|
+
it "returns nil" do
|
84
|
+
is_expected.to be nil
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context "when the range is endless with exclude end" do
|
90
|
+
let(:hash) { { "min" => 1, "max" => nil, "exclude_end" => true } }
|
91
|
+
|
92
|
+
context 'kernel can support endless range' do
|
93
|
+
ruby_version_gte '2.6'
|
94
|
+
|
95
|
+
it "returns an alphabetic range" do
|
96
|
+
is_expected.to eq(eval('1...'))
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'kernel cannot support endless range' do
|
101
|
+
ruby_version_lt '2.6'
|
102
|
+
|
103
|
+
it "returns nil" do
|
104
|
+
is_expected.to be nil
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context "when the range is beginning-less" do
|
110
|
+
let(:hash) { { "min" => nil, "max" => 3 } }
|
111
|
+
|
112
|
+
context 'kernel can support beginning-less range' do
|
113
|
+
ruby_version_gte '2.7'
|
114
|
+
|
115
|
+
it "returns an alphabetic range" do
|
116
|
+
is_expected.to eq(nil..3)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'kernel cannot support beginning-less range' do
|
121
|
+
ruby_version_lt '2.7'
|
122
|
+
|
123
|
+
it "returns nil" do
|
124
|
+
is_expected.to be nil
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
context "when the range is beginning-less with exclude end" do
|
130
|
+
let(:hash) { { "min" => nil, "max" => 3, "exclude_end" => true } }
|
131
|
+
|
132
|
+
context 'kernel can support endless range' do
|
133
|
+
ruby_version_gte '2.7'
|
134
|
+
|
135
|
+
it "returns an alphabetic beginning-less" do
|
136
|
+
is_expected.to eq(eval('...3'))
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
context 'kernel cannot support beginning-less range' do
|
141
|
+
ruby_version_lt '2.7'
|
142
|
+
|
143
|
+
it "returns nil" do
|
144
|
+
is_expected.to be nil
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
context "when the range doesn't have any correct keys" do
|
150
|
+
let(:hash) { { "min^" => "a", "max^" => "z", "exclude_end^" => true } }
|
151
|
+
|
152
|
+
it "returns nil" do
|
153
|
+
is_expected.to be nil
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
context "when the range has symbol keys" do
|
158
|
+
let(:hash) { { min: 1, max: 3 } }
|
159
|
+
|
160
|
+
it "returns an ascending range" do
|
161
|
+
is_expected.to eq(1..3)
|
83
162
|
end
|
84
163
|
end
|
85
164
|
end
|
86
165
|
|
87
|
-
|
166
|
+
shared_examples_for 'mongoize range' do
|
167
|
+
|
168
|
+
context 'given a normal range' do
|
169
|
+
let(:range) { 1..3 }
|
170
|
+
|
171
|
+
it "returns the object hash" do
|
172
|
+
is_expected.to eq("min" => 1, "max" => 3)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
context 'given a normal range not inclusive' do
|
177
|
+
let(:range) { 1...3 }
|
178
|
+
|
179
|
+
it "returns the object hash" do
|
180
|
+
is_expected.to eq("min" => 1, "max" => 3, "exclude_end" => true)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
context 'given a descending range' do
|
185
|
+
let(:range) { 5..1 }
|
88
186
|
|
89
|
-
|
187
|
+
it "returns the object hash" do
|
188
|
+
is_expected.to eq("min" => 5, "max" => 1)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
context 'given a descending range not inclusive' do
|
193
|
+
let(:range) { 5...1 }
|
90
194
|
|
91
195
|
it "returns the object hash" do
|
92
|
-
|
196
|
+
is_expected.to eq("min" => 5, "max" => 1, "exclude_end" => true)
|
93
197
|
end
|
198
|
+
end
|
199
|
+
|
200
|
+
context 'given an endless range' do
|
201
|
+
ruby_version_gte '2.6'
|
94
202
|
|
95
|
-
|
96
|
-
|
203
|
+
let(:range) { eval('5..') }
|
204
|
+
|
205
|
+
it "returns the object hash" do
|
206
|
+
is_expected.to eq("min" => 5)
|
97
207
|
end
|
208
|
+
end
|
209
|
+
|
210
|
+
context 'given an endless range not inclusive' do
|
211
|
+
ruby_version_gte '2.6'
|
98
212
|
|
99
|
-
|
100
|
-
|
213
|
+
let(:range) { eval('5...') }
|
214
|
+
|
215
|
+
it "returns the object hash" do
|
216
|
+
is_expected.to eq("min" => 5, "exclude_end" => true)
|
101
217
|
end
|
102
218
|
end
|
103
219
|
|
104
|
-
context
|
220
|
+
context 'given a beginning-less range' do
|
221
|
+
ruby_version_gte '2.7'
|
222
|
+
|
223
|
+
let(:range) { eval('..5') }
|
105
224
|
|
106
225
|
it "returns the object hash" do
|
107
|
-
|
226
|
+
is_expected.to eq("max" => 5)
|
108
227
|
end
|
228
|
+
end
|
229
|
+
|
230
|
+
context 'given an endless range not inclusive' do
|
231
|
+
ruby_version_gte '2.7'
|
232
|
+
|
233
|
+
let(:range) { eval('...5') }
|
234
|
+
|
235
|
+
it "returns the object hash" do
|
236
|
+
is_expected.to eq("max" => 5, "exclude_end" => true)
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
context 'given a letter range' do
|
241
|
+
let(:range) { 'a'..'z' }
|
242
|
+
|
243
|
+
it "returns the object hash" do
|
244
|
+
is_expected.to eq("min" => "a", "max" => "z")
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
context 'given a letter range not inclusive' do
|
249
|
+
let(:range) { 'a'...'z' }
|
250
|
+
|
251
|
+
it "returns the object hash" do
|
252
|
+
is_expected.to eq("min" => "a", "max" => "z", "exclude_end" => true)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
context 'given a Time range' do
|
257
|
+
let(:range) { Time.at(0)..Time.at(1) }
|
109
258
|
|
110
|
-
it "returns the object hash
|
111
|
-
|
259
|
+
it "returns the object hash" do
|
260
|
+
is_expected.to eq("min" => Time.at(0), "max" => Time.at(1))
|
261
|
+
expect(subject["min"].utc?).to be(true)
|
262
|
+
expect(subject["max"].utc?).to be(true)
|
112
263
|
end
|
264
|
+
end
|
113
265
|
|
114
|
-
|
115
|
-
|
266
|
+
context 'given an ActiveSupport::TimeWithZone range' do
|
267
|
+
let(:range) { Time.at(0)..Time.at(1) }
|
268
|
+
|
269
|
+
it "returns the object hash" do
|
270
|
+
is_expected.to eq("min" => Time.at(0).in_time_zone, "max" => Time.at(1).in_time_zone)
|
271
|
+
expect(subject["min"].utc?).to be(true)
|
272
|
+
expect(subject["max"].utc?).to be(true)
|
116
273
|
end
|
274
|
+
end
|
275
|
+
|
276
|
+
context 'given a Date range' do
|
277
|
+
let(:range) { Date.new(2020, 1, 1)..Date.new(2020, 1, 2) }
|
117
278
|
|
279
|
+
it "returns the object hash" do
|
280
|
+
is_expected.to eq("min" => Time.utc(2020, 1, 1), "max" => Time.utc(2020, 1, 2))
|
281
|
+
expect(subject["min"].utc?).to be(true)
|
282
|
+
expect(subject["max"].utc?).to be(true)
|
283
|
+
end
|
118
284
|
end
|
119
285
|
|
120
|
-
context "
|
286
|
+
context "given nil" do
|
287
|
+
let(:range) { nil }
|
121
288
|
|
122
289
|
it "returns nil" do
|
123
|
-
|
290
|
+
is_expected.to be_nil
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
context "given a hash" do
|
295
|
+
let(:range) { { 'min' => 1, 'max' => 5, 'exclude_end' => true } }
|
296
|
+
|
297
|
+
it "returns the hash" do
|
298
|
+
is_expected.to eq(range)
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
context "given a hash missing fields" do
|
303
|
+
let(:range) { { 'min' => 1 } }
|
304
|
+
|
305
|
+
it "returns the hash" do
|
306
|
+
is_expected.to eq(range)
|
124
307
|
end
|
125
308
|
end
|
126
309
|
end
|
127
310
|
|
128
311
|
describe "#mongoize" do
|
312
|
+
subject { range.mongoize }
|
129
313
|
|
130
|
-
context
|
314
|
+
context 'given a String' do
|
315
|
+
let(:range) { '3' }
|
131
316
|
|
132
|
-
it
|
133
|
-
|
317
|
+
it 'returns a string' do
|
318
|
+
is_expected.to eq('3')
|
134
319
|
end
|
320
|
+
end
|
321
|
+
|
322
|
+
it_behaves_like 'mongoize range'
|
323
|
+
end
|
324
|
+
|
325
|
+
describe ".mongoize" do
|
326
|
+
subject { Range.mongoize(range) }
|
327
|
+
|
328
|
+
context 'given a String' do
|
329
|
+
let(:range) { '3' }
|
135
330
|
|
136
|
-
it "returns
|
137
|
-
|
331
|
+
it "returns nil" do
|
332
|
+
is_expected.to be_nil
|
138
333
|
end
|
334
|
+
end
|
139
335
|
|
140
|
-
|
141
|
-
|
336
|
+
context "given a hash with wrong fields" do
|
337
|
+
let(:range) { { 'min' => 1, 'max' => 5, 'exclude_end^' => true} }
|
338
|
+
|
339
|
+
it "removes the bogus fields" do
|
340
|
+
is_expected.to eq({ 'min' => 1, 'max' => 5 })
|
142
341
|
end
|
143
342
|
end
|
144
343
|
|
145
|
-
context
|
344
|
+
context "given a hash with no correct fields" do
|
345
|
+
let(:range) { { 'min^' => 1, 'max^' => 5, 'exclude_end^' => true} }
|
146
346
|
|
147
|
-
it
|
148
|
-
|
347
|
+
it "returns nil" do
|
348
|
+
is_expected.to be_nil
|
149
349
|
end
|
150
350
|
end
|
351
|
+
|
352
|
+
it_behaves_like 'mongoize range'
|
151
353
|
end
|
152
354
|
|
153
355
|
describe "#resizable?" do
|
154
|
-
|
155
356
|
let(:range) do
|
156
357
|
1...3
|
157
358
|
end
|
@@ -4,61 +4,86 @@ require "spec_helper"
|
|
4
4
|
|
5
5
|
describe Mongoid::Extensions::Regexp do
|
6
6
|
|
7
|
-
|
7
|
+
[ :mongoize, :demongoize ].each do |method|
|
8
8
|
|
9
|
-
|
10
|
-
Regexp.demongoize(/[^abc]/)
|
11
|
-
end
|
9
|
+
describe ".#{method}" do
|
12
10
|
|
13
|
-
|
14
|
-
expect(value).to eq(/[^abc]/)
|
15
|
-
end
|
16
|
-
end
|
11
|
+
context "when providing a regex" do
|
17
12
|
|
18
|
-
|
19
|
-
|
20
|
-
|
13
|
+
let(:value) do
|
14
|
+
Regexp.send(method, /[^abc]/)
|
15
|
+
end
|
21
16
|
|
22
|
-
|
23
|
-
|
17
|
+
it "returns the provided value" do
|
18
|
+
expect(value).to eq(/[^abc]/)
|
19
|
+
end
|
24
20
|
end
|
25
21
|
|
26
|
-
|
27
|
-
expect(value).to eq(/[^abc]/)
|
28
|
-
end
|
29
|
-
end
|
22
|
+
context "when providing a string" do
|
30
23
|
|
31
|
-
|
24
|
+
let(:value) do
|
25
|
+
Regexp.send(method, "[^abc]")
|
26
|
+
end
|
32
27
|
|
33
|
-
|
34
|
-
|
35
|
-
|
28
|
+
it "returns the provided value as a regex" do
|
29
|
+
expect(value).to eq(/[^abc]/)
|
30
|
+
end
|
36
31
|
|
37
|
-
|
38
|
-
|
32
|
+
|
33
|
+
context "when the string is empty" do
|
34
|
+
|
35
|
+
let(:value) do
|
36
|
+
Regexp.send(method, "")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns an empty regex" do
|
40
|
+
expect(value).to eq(//)
|
41
|
+
end
|
42
|
+
end
|
39
43
|
end
|
40
44
|
|
45
|
+
context "when the value is nil" do
|
41
46
|
|
42
|
-
|
47
|
+
let(:value) do
|
48
|
+
Regexp.send(method, nil)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "returns the nil" do
|
52
|
+
expect(value).to be_nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "when providing a BSON::Regexp::Raw" do
|
43
57
|
|
44
58
|
let(:value) do
|
45
|
-
Regexp.
|
59
|
+
Regexp.send(method, BSON::Regexp::Raw.new("hello"))
|
46
60
|
end
|
47
61
|
|
48
|
-
it "returns
|
49
|
-
expect(value).to eq(
|
62
|
+
it "returns a Regexp" do
|
63
|
+
expect(value).to eq(/hello/)
|
50
64
|
end
|
51
65
|
end
|
52
|
-
end
|
53
66
|
|
54
|
-
|
67
|
+
context "when providing an invalid regexp" do
|
68
|
+
|
69
|
+
let(:value) do
|
70
|
+
Regexp.send(method, "[")
|
71
|
+
end
|
55
72
|
|
56
|
-
|
57
|
-
|
73
|
+
it "returns nil" do
|
74
|
+
expect(value).to be_nil
|
75
|
+
end
|
58
76
|
end
|
59
77
|
|
60
|
-
|
61
|
-
|
78
|
+
context "when providing an invalid Regexp to a BSON::Regexp::Raw" do
|
79
|
+
|
80
|
+
let(:value) do
|
81
|
+
Regexp.send(method, BSON::Regexp::Raw.new("["))
|
82
|
+
end
|
83
|
+
|
84
|
+
it "returns nil" do
|
85
|
+
expect(value).to be_nil
|
86
|
+
end
|
62
87
|
end
|
63
88
|
end
|
64
89
|
end
|