mongoid 7.5.3 → 8.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +3 -3
- data/lib/config/locales/en.yml +46 -30
- data/lib/mongoid/association/accessors.rb +32 -3
- data/lib/mongoid/association/bindable.rb +48 -0
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +28 -5
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +40 -18
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
- data/lib/mongoid/association/macros.rb +2 -1
- data/lib/mongoid/association/many.rb +5 -0
- data/lib/mongoid/association/nested/many.rb +2 -1
- data/lib/mongoid/association/proxy.rb +12 -0
- data/lib/mongoid/association/referenced/auto_save.rb +3 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -18
- data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
- data/lib/mongoid/association/referenced/syncable.rb +2 -2
- data/lib/mongoid/association/relatable.rb +38 -4
- data/lib/mongoid/attributes/processing.rb +9 -2
- data/lib/mongoid/attributes.rb +30 -27
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +37 -2
- data/lib/mongoid/clients/options.rb +4 -0
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/config.rb +15 -11
- data/lib/mongoid/contextual/aggregable/memory.rb +23 -15
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +55 -28
- data/lib/mongoid/contextual/mongo.rb +173 -262
- data/lib/mongoid/contextual/none.rb +33 -15
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/includable.rb +24 -20
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -15
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -16
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/optional.rb +3 -9
- data/lib/mongoid/criteria/queryable/options.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +2 -24
- data/lib/mongoid/criteria/queryable/selector.rb +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 -28
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +88 -33
- data/lib/mongoid/equality.rb +4 -4
- data/lib/mongoid/errors/document_not_found.rb +6 -2
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +5 -1
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors.rb +2 -2
- data/lib/mongoid/extensions/array.rb +8 -6
- data/lib/mongoid/extensions/big_decimal.rb +29 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/float.rb +4 -5
- data/lib/mongoid/extensions/hash.rb +12 -5
- data/lib/mongoid/extensions/integer.rb +4 -5
- data/lib/mongoid/extensions/object.rb +2 -0
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +2 -13
- data/lib/mongoid/extensions/symbol.rb +3 -14
- data/lib/mongoid/extensions/time.rb +27 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +42 -7
- data/lib/mongoid/fields/foreign_key.rb +7 -0
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +49 -7
- data/lib/mongoid/findable.rb +21 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +4 -1
- data/lib/mongoid/interceptable.rb +69 -9
- data/lib/mongoid/persistable/creatable.rb +14 -5
- data/lib/mongoid/persistable/updatable.rb +12 -5
- data/lib/mongoid/persistence_context.rb +8 -42
- data/lib/mongoid/query_cache.rb +6 -258
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +7 -3
- data/lib/mongoid/scopable.rb +9 -11
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/shardable.rb +11 -35
- data/lib/mongoid/stateful.rb +27 -1
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +1 -0
- data/lib/mongoid/validatable/uniqueness.rb +2 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +3 -4
- data/lib/mongoid.rb +1 -0
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -12
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +95 -1
- data/spec/integration/callbacks_spec.rb +226 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -15
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +198 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +62 -13
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +14 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +480 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +2 -2
- data/spec/mongoid/config_spec.rb +52 -14
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +521 -14
- data/spec/mongoid/contextual/mongo_spec.rb +566 -416
- data/spec/mongoid/contextual/none_spec.rb +11 -19
- 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 +77 -85
- data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
- data/spec/mongoid/criteria_spec.rb +469 -1201
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +48 -76
- data/spec/mongoid/extensions/hash_spec.rb +30 -0
- data/spec/mongoid/extensions/integer_spec.rb +45 -66
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields_spec.rb +321 -50
- data/spec/mongoid/findable_spec.rb +64 -29
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +16 -19
- data/spec/mongoid/interceptable_spec.rb +584 -5
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +24 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +0 -154
- data/spec/mongoid/reloadable_spec.rb +35 -2
- data/spec/mongoid/scopable_spec.rb +36 -34
- 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/event_subscriber.rb +5 -15
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -8
- data/spec/shared/shlib/server.sh +5 -5
- data/spec/support/constraints.rb +24 -0
- 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 +669 -638
- 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
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
|
+
require_relative './attributes/nested_spec_models'
|
4
5
|
|
5
6
|
describe Mongoid::Attributes do
|
6
7
|
|
@@ -1077,8 +1078,8 @@ describe Mongoid::Attributes do
|
|
1077
1078
|
context "after the attribute has been assigned" do
|
1078
1079
|
|
1079
1080
|
it "returns the default value" do
|
1080
|
-
person.age = "
|
1081
|
-
expect(person.age_before_type_cast).to eq("
|
1081
|
+
person.age = "42"
|
1082
|
+
expect(person.age_before_type_cast).to eq("42")
|
1082
1083
|
end
|
1083
1084
|
end
|
1084
1085
|
|
@@ -1265,15 +1266,15 @@ describe Mongoid::Attributes do
|
|
1265
1266
|
|
1266
1267
|
context "before the attribute has been assigned" do
|
1267
1268
|
|
1268
|
-
it "returns
|
1269
|
-
expect(person.has_attribute_before_type_cast?(:age)).to be
|
1269
|
+
it "returns true" do
|
1270
|
+
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
1270
1271
|
end
|
1271
1272
|
end
|
1272
1273
|
|
1273
1274
|
context "after the attribute has been assigned" do
|
1274
1275
|
|
1275
1276
|
it "returns true" do
|
1276
|
-
person.age = '
|
1277
|
+
person.age = '42'
|
1277
1278
|
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
1278
1279
|
end
|
1279
1280
|
end
|
@@ -1528,12 +1529,13 @@ describe Mongoid::Attributes do
|
|
1528
1529
|
end
|
1529
1530
|
|
1530
1531
|
context "when setting an attribute that needs type casting" do
|
1532
|
+
|
1531
1533
|
let(:person) do
|
1532
|
-
Person.new(age: "
|
1534
|
+
Person.new(age: "42")
|
1533
1535
|
end
|
1534
1536
|
|
1535
1537
|
it "should store the attribute before type cast" do
|
1536
|
-
expect(person.age_before_type_cast).to eq("
|
1538
|
+
expect(person.age_before_type_cast).to eq("42")
|
1537
1539
|
end
|
1538
1540
|
end
|
1539
1541
|
|
@@ -1581,16 +1583,14 @@ describe Mongoid::Attributes do
|
|
1581
1583
|
context "when attribute is a Hash" do
|
1582
1584
|
let(:person) { Person.new map: { somekey: "somevalue" } }
|
1583
1585
|
|
1584
|
-
it "
|
1585
|
-
|
1586
|
-
|
1587
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type Array cannot be written to a field of type Hash/)
|
1586
|
+
it "writes nil when trying to set a value of invalid type - array" do
|
1587
|
+
person.map = []
|
1588
|
+
expect(person.map).to be_nil
|
1588
1589
|
end
|
1589
1590
|
|
1590
|
-
it "
|
1591
|
-
|
1592
|
-
|
1593
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type FalseClass cannot be written to a field of type Hash/)
|
1591
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
1592
|
+
person.map = false
|
1593
|
+
expect(person.map).to be_nil
|
1594
1594
|
end
|
1595
1595
|
|
1596
1596
|
it "can set a Hash value" do
|
@@ -1605,16 +1605,14 @@ describe Mongoid::Attributes do
|
|
1605
1605
|
expect(person.aliases).to eq([ :alias_1 ])
|
1606
1606
|
end
|
1607
1607
|
|
1608
|
-
it "
|
1609
|
-
|
1610
|
-
|
1611
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type Hash cannot be written to a field of type Array/)
|
1608
|
+
it "writes nil when trying to set a value of invalid type - hash" do
|
1609
|
+
person.aliases = {}
|
1610
|
+
expect(person.aliases).to be_nil
|
1612
1611
|
end
|
1613
1612
|
|
1614
|
-
it "
|
1615
|
-
|
1616
|
-
|
1617
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type FalseClass cannot be written to a field of type Array/)
|
1613
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
1614
|
+
person.aliases = false
|
1615
|
+
expect(person.aliases).to be_nil
|
1618
1616
|
end
|
1619
1617
|
end
|
1620
1618
|
|
@@ -1899,11 +1897,11 @@ describe Mongoid::Attributes do
|
|
1899
1897
|
end
|
1900
1898
|
|
1901
1899
|
it "has 3 new entries" do
|
1902
|
-
expect(pet.vet_visits.count).to eq
|
1900
|
+
expect(pet.vet_visits.count).to eq 3
|
1903
1901
|
end
|
1904
1902
|
|
1905
1903
|
it "persists the changes" do
|
1906
|
-
expect(pet.reload.vet_visits.count).to eq
|
1904
|
+
expect(pet.reload.vet_visits.count).to eq 3
|
1907
1905
|
end
|
1908
1906
|
end
|
1909
1907
|
|
@@ -2073,8 +2071,8 @@ describe Mongoid::Attributes do
|
|
2073
2071
|
end
|
2074
2072
|
|
2075
2073
|
it "aliases *_before_type_cast" do
|
2076
|
-
product.cost = "
|
2077
|
-
expect(product.cost_before_type_cast).to eq("
|
2074
|
+
product.cost = "42"
|
2075
|
+
expect(product.cost_before_type_cast).to eq("42")
|
2078
2076
|
end
|
2079
2077
|
end
|
2080
2078
|
|
@@ -2258,4 +2256,459 @@ describe Mongoid::Attributes do
|
|
2258
2256
|
end
|
2259
2257
|
end
|
2260
2258
|
end
|
2259
|
+
|
2260
|
+
context "when an attribute is removed then set" do
|
2261
|
+
let(:cat) { Cat.create!(name: "Neil") }
|
2262
|
+
|
2263
|
+
before do
|
2264
|
+
cat.remove_attribute("name")
|
2265
|
+
cat.name = "Nissim"
|
2266
|
+
cat.save!
|
2267
|
+
cat.reload
|
2268
|
+
end
|
2269
|
+
|
2270
|
+
it "correctly sets the attribute" do
|
2271
|
+
expect(cat.name).to eq("Nissim")
|
2272
|
+
end
|
2273
|
+
end
|
2274
|
+
|
2275
|
+
describe "attributes after setting an association without reloading" do
|
2276
|
+
|
2277
|
+
context "on embeds_many" do
|
2278
|
+
|
2279
|
+
context "when not setting anything" do
|
2280
|
+
let(:doc) { NestedBook.create! }
|
2281
|
+
|
2282
|
+
it "doesn't add attributes" do
|
2283
|
+
expect(doc.attributes).to_not have_key("pages")
|
2284
|
+
end
|
2285
|
+
|
2286
|
+
it "has the same attributes after reloading" do
|
2287
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2288
|
+
end
|
2289
|
+
end
|
2290
|
+
|
2291
|
+
context "when using nested attributes" do
|
2292
|
+
let(:doc) { NestedBook.create! }
|
2293
|
+
|
2294
|
+
before do
|
2295
|
+
doc.update_attributes({ pages_attributes: [ {} ] })
|
2296
|
+
end
|
2297
|
+
|
2298
|
+
it "updates the attributes" do
|
2299
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2300
|
+
end
|
2301
|
+
|
2302
|
+
it "has the same attributes after reloading" do
|
2303
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2304
|
+
end
|
2305
|
+
end
|
2306
|
+
|
2307
|
+
context "when doing assignments" do
|
2308
|
+
let(:doc) { NestedBook.create! }
|
2309
|
+
before do
|
2310
|
+
doc.pages = [NestedPage.new]
|
2311
|
+
end
|
2312
|
+
|
2313
|
+
it "updates the attributes" do
|
2314
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2315
|
+
end
|
2316
|
+
|
2317
|
+
it "has the same attributes after reloading" do
|
2318
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2319
|
+
end
|
2320
|
+
end
|
2321
|
+
|
2322
|
+
context "when replacing assignments" do
|
2323
|
+
let(:doc) { NestedBook.create! }
|
2324
|
+
before do
|
2325
|
+
doc.pages = [NestedPage.new(number: 1)]
|
2326
|
+
doc.pages = [NestedPage.new(number: 2)]
|
2327
|
+
end
|
2328
|
+
|
2329
|
+
it "updates the attributes" do
|
2330
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id, "number" => 2 }])
|
2331
|
+
end
|
2332
|
+
|
2333
|
+
it "has the same attributes after reloading" do
|
2334
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2335
|
+
end
|
2336
|
+
end
|
2337
|
+
|
2338
|
+
context "when setting to nil" do
|
2339
|
+
let(:doc) { NestedBook.create! }
|
2340
|
+
before do
|
2341
|
+
doc.pages = [NestedPage.new(number: 1)]
|
2342
|
+
doc.pages = nil
|
2343
|
+
end
|
2344
|
+
|
2345
|
+
it "updates the attributes" do
|
2346
|
+
expect(doc.attributes).to_not have_key("pages")
|
2347
|
+
end
|
2348
|
+
|
2349
|
+
it "has the same attributes after reloading" do
|
2350
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
2351
|
+
end
|
2352
|
+
end
|
2353
|
+
|
2354
|
+
context "when setting to nil and back" do
|
2355
|
+
let(:doc) { NestedBook.create! }
|
2356
|
+
let(:page) { NestedPage.new }
|
2357
|
+
before do
|
2358
|
+
doc.pages = [page]
|
2359
|
+
doc.pages = nil
|
2360
|
+
doc.pages = [page]
|
2361
|
+
end
|
2362
|
+
|
2363
|
+
it "updates the attributes" do
|
2364
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2365
|
+
end
|
2366
|
+
|
2367
|
+
it "has the same attributes after reloading" do
|
2368
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2369
|
+
end
|
2370
|
+
end
|
2371
|
+
|
2372
|
+
context "when pushing" do
|
2373
|
+
let(:doc) { NestedBook.create! }
|
2374
|
+
before do
|
2375
|
+
doc.pages << NestedPage.new
|
2376
|
+
end
|
2377
|
+
|
2378
|
+
it "updates the attributes" do
|
2379
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2380
|
+
end
|
2381
|
+
|
2382
|
+
it "has the same attributes after reloading" do
|
2383
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2384
|
+
end
|
2385
|
+
end
|
2386
|
+
|
2387
|
+
[:shift, :pop].each do |meth|
|
2388
|
+
context "when performing #{meth}" do
|
2389
|
+
let(:doc) { NestedBook.create! }
|
2390
|
+
before do
|
2391
|
+
doc.pages << NestedPage.new
|
2392
|
+
doc.pages << NestedPage.new
|
2393
|
+
doc.pages << NestedPage.new
|
2394
|
+
|
2395
|
+
doc.pages.send(meth, 2)
|
2396
|
+
end
|
2397
|
+
|
2398
|
+
it "updates the attributes" do
|
2399
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2400
|
+
end
|
2401
|
+
|
2402
|
+
it "has the same attributes after reloading" do
|
2403
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2404
|
+
end
|
2405
|
+
end
|
2406
|
+
end
|
2407
|
+
|
2408
|
+
context "when concatting" do
|
2409
|
+
let(:doc) { NestedBook.create! }
|
2410
|
+
before do
|
2411
|
+
doc.pages << NestedPage.new
|
2412
|
+
doc.pages.concat([NestedPage.new, NestedPage.new])
|
2413
|
+
end
|
2414
|
+
|
2415
|
+
it "updates the attributes" do
|
2416
|
+
expect(doc.attributes["pages"].count).to eq 3
|
2417
|
+
end
|
2418
|
+
|
2419
|
+
it "has the same attributes after reloading" do
|
2420
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2421
|
+
end
|
2422
|
+
end
|
2423
|
+
|
2424
|
+
[:build, :create].each do |meth|
|
2425
|
+
context "when preforming #{meth}" do
|
2426
|
+
let(:doc) { NestedBook.create! }
|
2427
|
+
before do
|
2428
|
+
doc.pages.send(meth)
|
2429
|
+
end
|
2430
|
+
|
2431
|
+
it "updates the attributes" do
|
2432
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2433
|
+
end
|
2434
|
+
|
2435
|
+
it "has the same attributes after reloading" do
|
2436
|
+
doc.pages.first.save
|
2437
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2438
|
+
end
|
2439
|
+
end
|
2440
|
+
end
|
2441
|
+
|
2442
|
+
context "when clearing" do
|
2443
|
+
let(:doc) { NestedBook.create! }
|
2444
|
+
before do
|
2445
|
+
doc.pages << NestedPage.new
|
2446
|
+
doc.pages << NestedPage.new
|
2447
|
+
doc.pages << NestedPage.new
|
2448
|
+
|
2449
|
+
doc.pages.clear
|
2450
|
+
end
|
2451
|
+
|
2452
|
+
it "updates the attributes" do
|
2453
|
+
expect(doc.attributes).to_not have_key("pages")
|
2454
|
+
end
|
2455
|
+
|
2456
|
+
it "has the same attributes after reloading" do
|
2457
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2458
|
+
end
|
2459
|
+
end
|
2460
|
+
|
2461
|
+
[:delete_all, :destroy_all, :remove_all].each do |meth|
|
2462
|
+
context "when performing: #{meth}" do
|
2463
|
+
let(:doc) { NestedBook.create! }
|
2464
|
+
before do
|
2465
|
+
doc.pages << NestedPage.new
|
2466
|
+
doc.pages << NestedPage.new
|
2467
|
+
doc.pages << NestedPage.new
|
2468
|
+
|
2469
|
+
doc.pages.send(meth)
|
2470
|
+
end
|
2471
|
+
|
2472
|
+
it "updates the attributes" do
|
2473
|
+
expect(doc.attributes).to_not have_key("pages")
|
2474
|
+
end
|
2475
|
+
|
2476
|
+
it "has the same attributes after reloading" do
|
2477
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
2478
|
+
end
|
2479
|
+
end
|
2480
|
+
end
|
2481
|
+
|
2482
|
+
context "when deleting" do
|
2483
|
+
let(:doc) { NestedBook.create! }
|
2484
|
+
let(:page) { NestedPage.new }
|
2485
|
+
before do
|
2486
|
+
doc.pages << page
|
2487
|
+
doc.pages << NestedPage.new
|
2488
|
+
doc.pages << NestedPage.new
|
2489
|
+
|
2490
|
+
doc.pages.delete(page)
|
2491
|
+
end
|
2492
|
+
|
2493
|
+
it "updates the attributes" do
|
2494
|
+
expect(doc.attributes["pages"].count).to eq 2
|
2495
|
+
end
|
2496
|
+
|
2497
|
+
it "has the same attributes after reloading" do
|
2498
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2499
|
+
end
|
2500
|
+
end
|
2501
|
+
|
2502
|
+
context "when doing delete_one" do
|
2503
|
+
let(:doc) { NestedBook.create! }
|
2504
|
+
let(:page) { NestedPage.new }
|
2505
|
+
before do
|
2506
|
+
doc.pages << page
|
2507
|
+
doc.pages << NestedPage.new
|
2508
|
+
doc.pages << NestedPage.new
|
2509
|
+
|
2510
|
+
doc.pages.send(:delete_one, page)
|
2511
|
+
end
|
2512
|
+
|
2513
|
+
it "updates the attributes" do
|
2514
|
+
expect(doc.attributes["pages"].count).to eq 2
|
2515
|
+
end
|
2516
|
+
end
|
2517
|
+
|
2518
|
+
context "when assigning an array of hashes" do
|
2519
|
+
let(:doc) { NestedBook.create! }
|
2520
|
+
before do
|
2521
|
+
doc.pages = [{}]
|
2522
|
+
end
|
2523
|
+
|
2524
|
+
it "updates the attributes" do
|
2525
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2526
|
+
end
|
2527
|
+
|
2528
|
+
it "has the same attributes after reloading" do
|
2529
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2530
|
+
end
|
2531
|
+
end
|
2532
|
+
|
2533
|
+
context "when assigning twice" do
|
2534
|
+
let(:doc) { NestedBook.create! }
|
2535
|
+
before do
|
2536
|
+
doc.pages = [{ number: 1 }]
|
2537
|
+
doc.pages = [{}]
|
2538
|
+
end
|
2539
|
+
|
2540
|
+
it "updates the attributes" do
|
2541
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2542
|
+
end
|
2543
|
+
|
2544
|
+
it "has the same attributes after reloading" do
|
2545
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2546
|
+
end
|
2547
|
+
end
|
2548
|
+
end
|
2549
|
+
|
2550
|
+
context "on embeds_one" do
|
2551
|
+
|
2552
|
+
let(:attrs) { { "title" => "Title" } }
|
2553
|
+
|
2554
|
+
context "when using nested attributes" do
|
2555
|
+
let(:doc) { NestedBook.create! }
|
2556
|
+
|
2557
|
+
before do
|
2558
|
+
doc.update_attributes({ cover_attributes: attrs })
|
2559
|
+
end
|
2560
|
+
|
2561
|
+
it "updates the attributes" do
|
2562
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2563
|
+
end
|
2564
|
+
|
2565
|
+
it "has the same attributes after reloading" do
|
2566
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2567
|
+
end
|
2568
|
+
end
|
2569
|
+
|
2570
|
+
context "when doing assignments" do
|
2571
|
+
let(:doc) { NestedBook.create! }
|
2572
|
+
before do
|
2573
|
+
doc.cover = NestedCover.new(attrs)
|
2574
|
+
end
|
2575
|
+
|
2576
|
+
it "updates the attributes" do
|
2577
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2578
|
+
end
|
2579
|
+
|
2580
|
+
it "has the same attributes after reloading" do
|
2581
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2582
|
+
end
|
2583
|
+
end
|
2584
|
+
|
2585
|
+
context "when replacing assignments" do
|
2586
|
+
let(:doc) { NestedBook.create! }
|
2587
|
+
before do
|
2588
|
+
doc.cover = NestedCover.new("title" => "Title1")
|
2589
|
+
doc.cover = NestedCover.new(attrs)
|
2590
|
+
end
|
2591
|
+
|
2592
|
+
it "updates the attributes" do
|
2593
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2594
|
+
end
|
2595
|
+
|
2596
|
+
it "has the same attributes after reloading" do
|
2597
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2598
|
+
end
|
2599
|
+
end
|
2600
|
+
|
2601
|
+
context "when setting to nil" do
|
2602
|
+
let(:doc) { NestedBook.create! }
|
2603
|
+
before do
|
2604
|
+
doc.cover = NestedCover.new(attrs)
|
2605
|
+
doc.cover = nil
|
2606
|
+
end
|
2607
|
+
|
2608
|
+
it "updates the attributes" do
|
2609
|
+
expect(doc.attributes.key?("cover")).to be false
|
2610
|
+
end
|
2611
|
+
|
2612
|
+
it "has the same attributes after reloading" do
|
2613
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2614
|
+
end
|
2615
|
+
end
|
2616
|
+
|
2617
|
+
context "when setting to nil and back" do
|
2618
|
+
let(:doc) { NestedBook.create! }
|
2619
|
+
before do
|
2620
|
+
doc.cover = NestedCover.new(attrs)
|
2621
|
+
doc.cover = nil
|
2622
|
+
doc.cover = NestedCover.new(attrs)
|
2623
|
+
end
|
2624
|
+
|
2625
|
+
it "updates the attributes" do
|
2626
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2627
|
+
end
|
2628
|
+
|
2629
|
+
|
2630
|
+
it "has the same attributes after reloading" do
|
2631
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2632
|
+
end
|
2633
|
+
end
|
2634
|
+
|
2635
|
+
[:build, :create].each do |meth|
|
2636
|
+
context "when preforming #{meth}" do
|
2637
|
+
let(:doc) { NestedBook.create! }
|
2638
|
+
before do
|
2639
|
+
doc.send("#{meth}_cover", attrs)
|
2640
|
+
end
|
2641
|
+
|
2642
|
+
it "updates the attributes" do
|
2643
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2644
|
+
end
|
2645
|
+
|
2646
|
+
it "has the same attributes after reloading" do
|
2647
|
+
doc.cover.save
|
2648
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2649
|
+
end
|
2650
|
+
end
|
2651
|
+
end
|
2652
|
+
|
2653
|
+
context "when assigning a hash" do
|
2654
|
+
let(:doc) { NestedBook.create! }
|
2655
|
+
before do
|
2656
|
+
doc.cover = attrs
|
2657
|
+
end
|
2658
|
+
|
2659
|
+
it "updates the attributes" do
|
2660
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2661
|
+
end
|
2662
|
+
|
2663
|
+
it "has the same attributes after reloading" do
|
2664
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2665
|
+
end
|
2666
|
+
end
|
2667
|
+
|
2668
|
+
context "when assigning twice" do
|
2669
|
+
let(:doc) { NestedBook.create! }
|
2670
|
+
before do
|
2671
|
+
doc.cover = { "title" => "1984" }
|
2672
|
+
doc.cover = attrs
|
2673
|
+
end
|
2674
|
+
|
2675
|
+
it "updates the attributes" do
|
2676
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2677
|
+
end
|
2678
|
+
|
2679
|
+
it "has the same attributes after reloading" do
|
2680
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2681
|
+
end
|
2682
|
+
end
|
2683
|
+
end
|
2684
|
+
end
|
2685
|
+
|
2686
|
+
context "when modifiying a hash referenced with the [] notation" do
|
2687
|
+
let(:church) { Church.create!(location: { x: 1 }) }
|
2688
|
+
|
2689
|
+
before do
|
2690
|
+
church[:location].merge!(y: 2)
|
2691
|
+
church.save!
|
2692
|
+
church.reload
|
2693
|
+
end
|
2694
|
+
|
2695
|
+
it "persists the updated hash" do
|
2696
|
+
church.location.should == { "x" => 1, "y" => 2 }
|
2697
|
+
end
|
2698
|
+
end
|
2699
|
+
|
2700
|
+
context "when modifiying a set referenced with the [] notation" do
|
2701
|
+
let(:catalog) { Catalog.create!(set_field: [ 1 ].to_set) }
|
2702
|
+
|
2703
|
+
before do
|
2704
|
+
catalog[:set_field] << 2
|
2705
|
+
catalog.save!
|
2706
|
+
catalog.reload
|
2707
|
+
end
|
2708
|
+
|
2709
|
+
it "persists the updated hash" do
|
2710
|
+
pending "MONGOID-2951"
|
2711
|
+
catalog.set_field.should == Set.new([ 1, 2 ])
|
2712
|
+
end
|
2713
|
+
end
|
2261
2714
|
end
|
@@ -45,7 +45,7 @@ describe Mongoid::Cacheable do
|
|
45
45
|
context "with the default cache_timestamp_format" do
|
46
46
|
|
47
47
|
let!(:updated_at) do
|
48
|
-
document.updated_at.utc.
|
48
|
+
document.updated_at.utc.to_s(:nsec)
|
49
49
|
end
|
50
50
|
|
51
51
|
it "has the id and updated_at key name" do
|
@@ -64,7 +64,7 @@ describe Mongoid::Cacheable do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
let!(:updated_at) do
|
67
|
-
document.updated_at.utc.
|
67
|
+
document.updated_at.utc.to_s(:number)
|
68
68
|
end
|
69
69
|
|
70
70
|
it "has the id and updated_at key name" do
|
@@ -103,7 +103,7 @@ describe Mongoid::Cacheable do
|
|
103
103
|
end
|
104
104
|
|
105
105
|
let!(:updated_at) do
|
106
|
-
agent.updated_at.utc.
|
106
|
+
agent.updated_at.utc.to_s(:nsec)
|
107
107
|
end
|
108
108
|
|
109
109
|
it "has the id and updated_at key name" do
|