mongoid 5.4.1 → 6.0.0.beta
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/config/locales/en.yml +23 -16
- data/lib/mongoid.rb +4 -9
- data/lib/mongoid/atomic.rb +1 -1
- data/lib/mongoid/atomic/modifiers.rb +8 -12
- data/lib/mongoid/attributes.rb +9 -11
- data/lib/mongoid/attributes/dynamic.rb +5 -6
- data/lib/mongoid/attributes/nested.rb +1 -1
- data/lib/mongoid/attributes/processing.rb +4 -0
- data/lib/mongoid/attributes/readonly.rb +22 -0
- data/lib/mongoid/cacheable.rb +36 -0
- data/lib/mongoid/changeable.rb +37 -1
- data/lib/mongoid/clients.rb +0 -63
- data/lib/mongoid/clients/factory.rb +0 -2
- data/lib/mongoid/clients/options.rb +54 -249
- data/lib/mongoid/clients/storage_options.rb +1 -69
- data/lib/mongoid/composable.rb +26 -2
- data/lib/mongoid/config.rb +1 -1
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +6 -9
- data/lib/mongoid/contextual/geo_near.rb +2 -3
- data/lib/mongoid/contextual/map_reduce.rb +97 -24
- data/lib/mongoid/contextual/memory.rb +7 -4
- data/lib/mongoid/contextual/mongo.rb +63 -54
- data/lib/mongoid/contextual/none.rb +2 -2
- data/lib/mongoid/copyable.rb +19 -19
- data/lib/mongoid/criteria.rb +5 -4
- data/lib/mongoid/criteria/findable.rb +2 -3
- data/lib/mongoid/criteria/includable.rb +63 -16
- data/lib/mongoid/criteria/marshalable.rb +2 -2
- data/lib/mongoid/criteria/modifiable.rb +17 -1
- data/lib/mongoid/criteria/options.rb +25 -0
- data/lib/mongoid/criteria/queryable.rb +86 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
- data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
- data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +45 -0
- data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
- data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
- data/lib/mongoid/criteria/queryable/key.rb +103 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +271 -0
- data/lib/mongoid/criteria/queryable/optional.rb +411 -0
- data/lib/mongoid/criteria/queryable/options.rb +136 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +662 -0
- data/lib/mongoid/criteria/queryable/selector.rb +196 -0
- data/lib/mongoid/criteria/queryable/smash.rb +103 -0
- data/lib/mongoid/document.rb +9 -23
- data/lib/mongoid/errors.rb +2 -1
- data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +2 -2
- data/lib/mongoid/errors/invalid_field.rb +2 -2
- data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
- data/lib/mongoid/errors/invalid_relation.rb +66 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/evolvable.rb +1 -1
- data/lib/mongoid/extensions.rb +0 -5
- data/lib/mongoid/extensions/big_decimal.rb +17 -8
- data/lib/mongoid/extensions/date.rb +4 -1
- data/lib/mongoid/extensions/hash.rb +2 -3
- data/lib/mongoid/extensions/object.rb +2 -2
- data/lib/mongoid/extensions/string.rb +4 -3
- data/lib/mongoid/extensions/time.rb +5 -2
- data/lib/mongoid/factory.rb +1 -0
- data/lib/mongoid/fields/foreign_key.rb +2 -2
- data/lib/mongoid/fields/localized.rb +3 -8
- data/lib/mongoid/fields/validators/macro.rb +18 -0
- data/lib/mongoid/findable.rb +3 -3
- data/lib/mongoid/indexable.rb +17 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +1 -2
- data/lib/mongoid/interceptable.rb +6 -17
- data/lib/mongoid/loggable.rb +1 -1
- data/lib/mongoid/matchable.rb +3 -10
- data/lib/mongoid/matchable/gt.rb +2 -0
- data/lib/mongoid/matchable/gte.rb +2 -0
- data/lib/mongoid/matchable/lt.rb +2 -0
- data/lib/mongoid/matchable/lte.rb +2 -0
- data/lib/mongoid/persistable.rb +6 -5
- data/lib/mongoid/persistable/creatable.rb +2 -0
- data/lib/mongoid/persistable/deletable.rb +7 -3
- data/lib/mongoid/persistable/settable.rb +3 -16
- data/lib/mongoid/persistable/updatable.rb +10 -12
- data/lib/mongoid/persistence_context.rb +216 -0
- data/lib/mongoid/query_cache.rb +5 -30
- data/lib/mongoid/relations/accessors.rb +6 -2
- data/lib/mongoid/relations/auto_save.rb +12 -4
- data/lib/mongoid/relations/bindings/embedded/in.rb +4 -0
- data/lib/mongoid/relations/bindings/embedded/many.rb +8 -1
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -0
- data/lib/mongoid/relations/bindings/referenced/many.rb +4 -0
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/counter_cache.rb +28 -18
- data/lib/mongoid/relations/eager.rb +19 -7
- data/lib/mongoid/relations/eager/base.rb +5 -5
- data/lib/mongoid/relations/embedded/batchable.rb +9 -33
- data/lib/mongoid/relations/embedded/in.rb +16 -2
- data/lib/mongoid/relations/embedded/many.rb +23 -8
- data/lib/mongoid/relations/embedded/one.rb +17 -2
- data/lib/mongoid/relations/macros.rb +9 -2
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/nested_builder.rb +1 -1
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/proxy.rb +2 -33
- data/lib/mongoid/relations/referenced/in.rb +23 -11
- data/lib/mongoid/relations/referenced/many.rb +24 -16
- data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
- data/lib/mongoid/relations/referenced/one.rb +17 -1
- data/lib/mongoid/relations/reflections.rb +3 -5
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +2 -3
- data/lib/mongoid/tasks/database.rb +1 -2
- data/lib/mongoid/threaded.rb +4 -4
- data/lib/mongoid/traversable.rb +1 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +2 -4
- data/lib/mongoid/validatable/uniqueness.rb +1 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -7
- data/spec/app/models/album.rb +5 -1
- data/spec/app/models/artist.rb +21 -0
- data/spec/app/models/band.rb +0 -1
- data/spec/app/models/church.rb +0 -2
- data/spec/app/models/ordered_post.rb +5 -0
- data/spec/app/models/oscar.rb +1 -2
- data/spec/app/models/person.rb +3 -1
- data/spec/app/models/post.rb +0 -1
- data/spec/app/models/princess.rb +2 -0
- data/spec/app/models/record.rb +1 -0
- data/spec/app/models/thing.rb +1 -1
- data/spec/config/mongoid.yml +1 -5
- data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
- data/spec/mongoid/atomic_spec.rb +17 -17
- data/spec/mongoid/attributes/nested_spec.rb +14 -14
- data/spec/mongoid/attributes/readonly_spec.rb +87 -44
- data/spec/mongoid/attributes_spec.rb +63 -0
- data/spec/mongoid/cacheable_spec.rb +112 -0
- data/spec/mongoid/changeable_spec.rb +58 -0
- data/spec/mongoid/clients/factory_spec.rb +3 -11
- data/spec/mongoid/clients/options_spec.rb +378 -96
- data/spec/mongoid/clients_spec.rb +207 -170
- data/spec/mongoid/composable_spec.rb +7 -0
- data/spec/mongoid/config_spec.rb +41 -21
- data/spec/mongoid/contextual/atomic_spec.rb +77 -343
- data/spec/mongoid/contextual/map_reduce_spec.rb +119 -111
- data/spec/mongoid/contextual/memory_spec.rb +56 -316
- data/spec/mongoid/contextual/mongo_spec.rb +104 -378
- data/spec/mongoid/copyable_spec.rb +8 -15
- data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
- data/spec/mongoid/criteria/options_spec.rb +29 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
- data/spec/mongoid/{extensions/origin/regexp_raw_spec.rb → criteria/queryable/extensions/regexp_spec.rb} +21 -20
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1786 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +4159 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +778 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
- data/spec/mongoid/criteria_spec.rb +45 -63
- data/spec/mongoid/document_spec.rb +21 -88
- data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +320 -18
- data/spec/mongoid/extensions/date_spec.rb +2 -6
- data/spec/mongoid/extensions/date_time_spec.rb +2 -6
- data/spec/mongoid/extensions/float_spec.rb +8 -1
- data/spec/mongoid/extensions/integer_spec.rb +8 -1
- data/spec/mongoid/extensions/object_spec.rb +11 -0
- data/spec/mongoid/extensions/string_spec.rb +21 -0
- data/spec/mongoid/extensions/time_spec.rb +4 -8
- data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
- data/spec/mongoid/fields/localized_spec.rb +0 -91
- data/spec/mongoid/findable_spec.rb +46 -1
- data/spec/mongoid/indexable_spec.rb +6 -46
- data/spec/mongoid/interceptable_spec.rb +49 -10
- data/spec/mongoid/matchable/gt_spec.rb +11 -0
- data/spec/mongoid/matchable/gte_spec.rb +10 -0
- data/spec/mongoid/matchable/lt_spec.rb +11 -0
- data/spec/mongoid/matchable/lte_spec.rb +11 -0
- data/spec/mongoid/matchable_spec.rb +1 -51
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +1 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
- data/spec/mongoid/persistable/savable_spec.rb +30 -30
- data/spec/mongoid/persistable/settable_spec.rb +0 -185
- data/spec/mongoid/persistable/updatable_spec.rb +166 -5
- data/spec/mongoid/persistence_context_spec.rb +654 -0
- data/spec/mongoid/positional_spec.rb +10 -10
- data/spec/mongoid/query_cache_spec.rb +89 -65
- data/spec/mongoid/relations/accessors_spec.rb +1 -1
- data/spec/mongoid/relations/auto_save_spec.rb +39 -6
- data/spec/mongoid/relations/builders_spec.rb +37 -10
- data/spec/mongoid/relations/counter_cache_spec.rb +64 -15
- data/spec/mongoid/relations/cyclic_spec.rb +0 -22
- data/spec/mongoid/relations/embedded/many_spec.rb +9 -41
- data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
- data/spec/mongoid/relations/macros_spec.rb +395 -7
- data/spec/mongoid/relations/proxy_spec.rb +3 -1
- data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +6 -29
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +6 -29
- data/spec/mongoid/relations/reflections_spec.rb +9 -9
- data/spec/mongoid/reloadable_spec.rb +51 -0
- data/spec/mongoid/scopable_spec.rb +0 -12
- data/spec/mongoid/serializable_spec.rb +0 -50
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +16 -9
- data/spec/mongoid/validatable_spec.rb +16 -0
- data/spec/spec_helper.rb +10 -10
- metadata +536 -479
- metadata.gz.sig +0 -0
- data/lib/mongoid/clients/thread_options.rb +0 -19
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -20
- data/lib/mongoid/extensions/decimal128.rb +0 -39
- data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/spec/app/models/post_genre.rb +0 -6
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -44
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
@@ -0,0 +1,30 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Criteria::Queryable::Smash do
|
4
|
+
|
5
|
+
let(:smash) do
|
6
|
+
described_class.new(ns: :namespace)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#[]" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
smash.store(:namespace, :default)
|
13
|
+
smash.store(:some_field, 42)
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when accessing aliased field" do
|
17
|
+
|
18
|
+
it "returns value for original field" do
|
19
|
+
expect(smash[:ns]).to eq(:default)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when accessing non-aliased field" do
|
24
|
+
|
25
|
+
it "returns value for the field" do
|
26
|
+
expect(smash[:some_field]).to eq(42)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -590,7 +590,8 @@ describe Mongoid::Criteria do
|
|
590
590
|
|
591
591
|
let!(:match) do
|
592
592
|
Band.create(name: "Depeche Mode").tap do |band|
|
593
|
-
band.records
|
593
|
+
r = band.records
|
594
|
+
r.create(name: "101")
|
594
595
|
end
|
595
596
|
end
|
596
597
|
|
@@ -1147,29 +1148,6 @@ describe Mongoid::Criteria do
|
|
1147
1148
|
end
|
1148
1149
|
end
|
1149
1150
|
|
1150
|
-
context "when providing one association" do
|
1151
|
-
|
1152
|
-
let!(:user) do
|
1153
|
-
User.create(posts: [ post1 ])
|
1154
|
-
end
|
1155
|
-
|
1156
|
-
let!(:post1) do
|
1157
|
-
Post.create
|
1158
|
-
end
|
1159
|
-
|
1160
|
-
let(:result) do
|
1161
|
-
User.includes(:posts).first
|
1162
|
-
end
|
1163
|
-
|
1164
|
-
it "executes the query" do
|
1165
|
-
expect(result).to eq(user)
|
1166
|
-
end
|
1167
|
-
|
1168
|
-
it "includes the related objects" do
|
1169
|
-
expect(result.posts).to eq([ post1 ])
|
1170
|
-
end
|
1171
|
-
end
|
1172
|
-
|
1173
1151
|
context "when providing a list of associations" do
|
1174
1152
|
|
1175
1153
|
let!(:user) do
|
@@ -1527,6 +1505,13 @@ describe Mongoid::Criteria do
|
|
1527
1505
|
end
|
1528
1506
|
end
|
1529
1507
|
|
1508
|
+
it "does not eager load the first document" do
|
1509
|
+
doc = criteria.first
|
1510
|
+
expect_query(1) do
|
1511
|
+
expect(doc.person).to eq(person)
|
1512
|
+
end
|
1513
|
+
end
|
1514
|
+
|
1530
1515
|
it "returns the last document" do
|
1531
1516
|
expect(document).to eq(post_two)
|
1532
1517
|
end
|
@@ -1582,6 +1567,13 @@ describe Mongoid::Criteria do
|
|
1582
1567
|
end
|
1583
1568
|
end
|
1584
1569
|
|
1570
|
+
it "does not eager load the last document" do
|
1571
|
+
doc = criteria.last
|
1572
|
+
expect_query(1) do
|
1573
|
+
expect(doc.band).to eq(tool)
|
1574
|
+
end
|
1575
|
+
end
|
1576
|
+
|
1585
1577
|
it "returns the document" do
|
1586
1578
|
expect(document).to eq(address_one)
|
1587
1579
|
end
|
@@ -1607,6 +1599,13 @@ describe Mongoid::Criteria do
|
|
1607
1599
|
end
|
1608
1600
|
end
|
1609
1601
|
|
1602
|
+
it "does not eager load the first document" do
|
1603
|
+
doc = criteria.first
|
1604
|
+
expect_query(1) do
|
1605
|
+
expect(doc.band).to eq(depeche)
|
1606
|
+
end
|
1607
|
+
end
|
1608
|
+
|
1610
1609
|
it "returns the document" do
|
1611
1610
|
expect(document).to eq(address_two)
|
1612
1611
|
end
|
@@ -1700,7 +1699,7 @@ describe Mongoid::Criteria do
|
|
1700
1699
|
end
|
1701
1700
|
|
1702
1701
|
before do
|
1703
|
-
expect(new_context).to receive(:
|
1702
|
+
expect(new_context).to receive(:eager_load_one).with(person).once.and_call_original
|
1704
1703
|
end
|
1705
1704
|
|
1706
1705
|
let!(:from_db) do
|
@@ -1751,7 +1750,7 @@ describe Mongoid::Criteria do
|
|
1751
1750
|
end
|
1752
1751
|
|
1753
1752
|
before do
|
1754
|
-
expect(context).to receive(:
|
1753
|
+
expect(context).to receive(:eager_load_one).with(person).once.and_call_original
|
1755
1754
|
end
|
1756
1755
|
|
1757
1756
|
let!(:from_db) do
|
@@ -2130,7 +2129,7 @@ describe Mongoid::Criteria do
|
|
2130
2129
|
end
|
2131
2130
|
|
2132
2131
|
before do
|
2133
|
-
expect(context).to receive(:
|
2132
|
+
expect(context).to receive(:eager_load).with([ game_one, game_two ]).once.and_call_original
|
2134
2133
|
end
|
2135
2134
|
|
2136
2135
|
let!(:documents) do
|
@@ -2193,7 +2192,7 @@ describe Mongoid::Criteria do
|
|
2193
2192
|
end
|
2194
2193
|
|
2195
2194
|
before do
|
2196
|
-
expect(context).to receive(:
|
2195
|
+
expect(context).to receive(:eager_load).with([ person ]).once.and_call_original
|
2197
2196
|
end
|
2198
2197
|
|
2199
2198
|
let!(:documents) do
|
@@ -3078,14 +3077,14 @@ describe Mongoid::Criteria do
|
|
3078
3077
|
context "when not including private methods" do
|
3079
3078
|
|
3080
3079
|
it "returns false" do
|
3081
|
-
expect(criteria).to_not respond_to(:
|
3080
|
+
expect(criteria).to_not respond_to(:fork)
|
3082
3081
|
end
|
3083
3082
|
end
|
3084
3083
|
|
3085
3084
|
context "when including private methods" do
|
3086
3085
|
|
3087
3086
|
it "returns true" do
|
3088
|
-
expect(criteria.respond_to?(:
|
3087
|
+
expect(criteria.respond_to?(:fork, true)).to be true
|
3089
3088
|
end
|
3090
3089
|
end
|
3091
3090
|
end
|
@@ -3314,17 +3313,6 @@ describe Mongoid::Criteria do
|
|
3314
3313
|
end
|
3315
3314
|
end
|
3316
3315
|
|
3317
|
-
context 'when the criteria contains a BSON::Regexp::Raw' do
|
3318
|
-
|
3319
|
-
let(:criteria) do
|
3320
|
-
Band.where(name: BSON::Regexp::Raw.new("^Depeche"))
|
3321
|
-
end
|
3322
|
-
|
3323
|
-
it "returns the matching documents" do
|
3324
|
-
expect(criteria).to eq([ match ])
|
3325
|
-
end
|
3326
|
-
end
|
3327
|
-
|
3328
3316
|
context "when the criteria is an exact fk array match" do
|
3329
3317
|
|
3330
3318
|
let(:id_one) do
|
@@ -3363,25 +3351,6 @@ describe Mongoid::Criteria do
|
|
3363
3351
|
end
|
3364
3352
|
end
|
3365
3353
|
|
3366
|
-
context "when querying on a BSON::Decimal128", if: decimal128_supported? do
|
3367
|
-
|
3368
|
-
let(:decimal) do
|
3369
|
-
BSON::Decimal128.new("0.0005")
|
3370
|
-
end
|
3371
|
-
|
3372
|
-
let!(:band) do
|
3373
|
-
Band.create(name: "Boards of Canada", decimal: decimal)
|
3374
|
-
end
|
3375
|
-
|
3376
|
-
let(:from_db) do
|
3377
|
-
Band.where(decimal: decimal).first
|
3378
|
-
end
|
3379
|
-
|
3380
|
-
it "finds the document by the big decimal value" do
|
3381
|
-
expect(from_db).to eq(band)
|
3382
|
-
end
|
3383
|
-
end
|
3384
|
-
|
3385
3354
|
context 'when querying on a polymorphic relation' do
|
3386
3355
|
|
3387
3356
|
let(:movie) do
|
@@ -3502,8 +3471,21 @@ describe Mongoid::Criteria do
|
|
3502
3471
|
|
3503
3472
|
describe "#with" do
|
3504
3473
|
|
3505
|
-
let!(:
|
3506
|
-
|
3474
|
+
let!(:criteria_and_collection) do
|
3475
|
+
collection = nil
|
3476
|
+
criteria = Band.where(name: "Depeche Mode").with(collection: "artists") do |crit|
|
3477
|
+
collection = crit.collection
|
3478
|
+
crit
|
3479
|
+
end
|
3480
|
+
[ criteria, collection ]
|
3481
|
+
end
|
3482
|
+
|
3483
|
+
let(:criteria) do
|
3484
|
+
criteria_and_collection[0]
|
3485
|
+
end
|
3486
|
+
|
3487
|
+
let(:collection) do
|
3488
|
+
criteria_and_collection[1]
|
3507
3489
|
end
|
3508
3490
|
|
3509
3491
|
it "retains the criteria selection" do
|
@@ -3511,7 +3493,7 @@ describe Mongoid::Criteria do
|
|
3511
3493
|
end
|
3512
3494
|
|
3513
3495
|
it "sets the persistence options" do
|
3514
|
-
expect(
|
3496
|
+
expect(collection.name).to eq("artists")
|
3515
3497
|
end
|
3516
3498
|
end
|
3517
3499
|
|
@@ -122,75 +122,6 @@ describe Mongoid::Document do
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
-
describe "#cache_key" do
|
126
|
-
|
127
|
-
let(:document) do
|
128
|
-
Dokument.new
|
129
|
-
end
|
130
|
-
|
131
|
-
context "when the document is new" do
|
132
|
-
|
133
|
-
it "has a new key name" do
|
134
|
-
expect(document.cache_key).to eq("dokuments/new")
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
context "when persisted" do
|
139
|
-
|
140
|
-
before do
|
141
|
-
document.save
|
142
|
-
end
|
143
|
-
|
144
|
-
context "with updated_at" do
|
145
|
-
|
146
|
-
let!(:updated_at) do
|
147
|
-
document.updated_at.utc.to_s(:nsec)
|
148
|
-
end
|
149
|
-
|
150
|
-
it "has the id and updated_at key name" do
|
151
|
-
expect(document.cache_key).to eq("dokuments/#{document.id}-#{updated_at}")
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
context "without updated_at, with Timestamps" do
|
156
|
-
|
157
|
-
before do
|
158
|
-
document.updated_at = nil
|
159
|
-
end
|
160
|
-
|
161
|
-
it "has the id key name" do
|
162
|
-
expect(document.cache_key).to eq("dokuments/#{document.id}")
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
context "when model dont have Timestamps" do
|
168
|
-
|
169
|
-
let(:artist) do
|
170
|
-
Artist.create!
|
171
|
-
end
|
172
|
-
|
173
|
-
it "should have the id key name" do
|
174
|
-
expect(artist.cache_key).to eq("artists/#{artist.id}")
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
context "when model has Short Timestamps" do
|
179
|
-
|
180
|
-
let(:agent) do
|
181
|
-
ShortAgent.create!
|
182
|
-
end
|
183
|
-
|
184
|
-
let!(:updated_at) do
|
185
|
-
agent.updated_at.utc.to_s(:nsec)
|
186
|
-
end
|
187
|
-
|
188
|
-
it "has the id and updated_at key name" do
|
189
|
-
expect(agent.cache_key).to eq("short_agents/#{agent.id}-#{updated_at}")
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
125
|
describe "#identity" do
|
195
126
|
|
196
127
|
let(:person) do
|
@@ -675,7 +606,7 @@ describe Mongoid::Document do
|
|
675
606
|
|
676
607
|
it "freezes attributes" do
|
677
608
|
expect(person.freeze).to eq(person)
|
678
|
-
expect { person.title = "something" }.to raise_error
|
609
|
+
expect { person.title = "something" }.to raise_error(RuntimeError)
|
679
610
|
end
|
680
611
|
end
|
681
612
|
|
@@ -689,7 +620,7 @@ describe Mongoid::Document do
|
|
689
620
|
person.freeze
|
690
621
|
expect {
|
691
622
|
person.title = "something"
|
692
|
-
}.to raise_error
|
623
|
+
}.to raise_error(RuntimeError)
|
693
624
|
end
|
694
625
|
end
|
695
626
|
end
|
@@ -1215,22 +1146,20 @@ describe Mongoid::Document do
|
|
1215
1146
|
|
1216
1147
|
context "when marshalling the document" do
|
1217
1148
|
|
1218
|
-
let(:
|
1219
|
-
|
1220
|
-
person.addresses.extension
|
1221
|
-
end
|
1149
|
+
let(:agency) do
|
1150
|
+
Agency.new
|
1222
1151
|
end
|
1223
1152
|
|
1224
|
-
let!(:
|
1225
|
-
|
1153
|
+
let!(:agent) do
|
1154
|
+
agency.agents.build(title: "VIP")
|
1226
1155
|
end
|
1227
1156
|
|
1228
1157
|
describe Marshal, ".dump" do
|
1229
1158
|
|
1230
1159
|
it "successfully dumps the document" do
|
1231
1160
|
expect {
|
1232
|
-
Marshal.dump(
|
1233
|
-
Marshal.dump(
|
1161
|
+
Marshal.dump(agency)
|
1162
|
+
Marshal.dump(agent)
|
1234
1163
|
}.not_to raise_error
|
1235
1164
|
end
|
1236
1165
|
end
|
@@ -1238,7 +1167,7 @@ describe Mongoid::Document do
|
|
1238
1167
|
describe Marshal, ".load" do
|
1239
1168
|
|
1240
1169
|
it "successfully loads the document" do
|
1241
|
-
expect
|
1170
|
+
expect(Marshal.load(Marshal.dump(agency))).to eq(agency)
|
1242
1171
|
end
|
1243
1172
|
end
|
1244
1173
|
end
|
@@ -1253,22 +1182,26 @@ describe Mongoid::Document do
|
|
1253
1182
|
|
1254
1183
|
describe "#fetch" do
|
1255
1184
|
|
1256
|
-
let
|
1257
|
-
|
1185
|
+
let(:agency) do
|
1186
|
+
Agency.new
|
1187
|
+
end
|
1188
|
+
|
1189
|
+
let(:agent) do
|
1190
|
+
agency.agents.build(title: "VIP", address: address)
|
1258
1191
|
end
|
1259
1192
|
|
1260
|
-
let
|
1261
|
-
|
1193
|
+
let(:address) do
|
1194
|
+
Address.new(city: 'Berlin')
|
1262
1195
|
end
|
1263
1196
|
|
1264
1197
|
it "stores the parent object" do
|
1265
|
-
expect(cache.fetch("key") {
|
1266
|
-
expect(cache.fetch("key")).to eq(
|
1198
|
+
expect(cache.fetch("key") { agency }).to eq(agency)
|
1199
|
+
expect(cache.fetch("key")).to eq(agency)
|
1267
1200
|
end
|
1268
1201
|
|
1269
1202
|
it "stores the embedded object" do
|
1270
|
-
expect(cache.fetch("key") {
|
1271
|
-
expect(cache.fetch("key")).to eq(
|
1203
|
+
expect(cache.fetch("key") { agent }).to eq(agent)
|
1204
|
+
expect(cache.fetch("key").address).to eq(agent.address)
|
1272
1205
|
end
|
1273
1206
|
end
|
1274
1207
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Errors::InvalidRelation do
|
4
|
+
|
5
|
+
describe "#message" do
|
6
|
+
|
7
|
+
module MyModule
|
8
|
+
def crazy_method; self; end
|
9
|
+
end
|
10
|
+
|
11
|
+
before do
|
12
|
+
Object.send(:include, MyModule)
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:error) do
|
16
|
+
described_class.new(Person, :crazy_method)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "contains the problem in the message" do
|
20
|
+
expect(error.message).to include(
|
21
|
+
"Defining a relation named 'crazy_method' is not allowed."
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "contains the summary in the message" do
|
26
|
+
expect(error.message).to include(
|
27
|
+
"Defining this relation would override the method 'crazy_method'"
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "contains the resolution in the message" do
|
32
|
+
expect(error.message).to include(
|
33
|
+
"Use Mongoid.destructive_fields to see what names are not allowed"
|
34
|
+
)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -50,15 +50,18 @@ describe Mongoid::Errors::MongoidError do
|
|
50
50
|
describe "#to_json" do
|
51
51
|
|
52
52
|
it "has problem" do
|
53
|
-
|
53
|
+
# @todo: uncomment if https://github.com/rails/rails/pull/24628 is merged
|
54
|
+
#expect(error.to_json).to include('"problem":"message"')
|
54
55
|
end
|
55
56
|
|
56
57
|
it "has summary" do
|
57
|
-
|
58
|
+
# @todo: uncomment if https://github.com/rails/rails/pull/24628 is merged
|
59
|
+
#expect(error.to_json).to include('"summary":"summary"')
|
58
60
|
end
|
59
61
|
|
60
62
|
it "has resolution" do
|
61
|
-
|
63
|
+
# @todo: uncomment if https://github.com/rails/rails/pull/24628 is merged
|
64
|
+
#expect(error.to_json).to include('"resolution":"resolution"')
|
62
65
|
end
|
63
66
|
end
|
64
67
|
end
|