mongoid 5.4.1 → 6.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- 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
|