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
data/spec/mongoid/config_spec.rb
CHANGED
@@ -9,6 +9,12 @@ describe Mongoid::Config do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
after do
|
13
|
+
Mongoid.configure do |config|
|
14
|
+
config.load_configuration(CONFIG)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
12
18
|
describe "#configured?" do
|
13
19
|
|
14
20
|
after do
|
@@ -64,7 +70,7 @@ describe Mongoid::Config do
|
|
64
70
|
|
65
71
|
before do
|
66
72
|
if defined?(Rails)
|
67
|
-
RailsTemp = Rails
|
73
|
+
RailsTemp = Rails unless defined?(RailsTemp)
|
68
74
|
Object.send(:remove_const, :Rails)
|
69
75
|
end
|
70
76
|
|
@@ -82,34 +88,54 @@ describe Mongoid::Config do
|
|
82
88
|
end
|
83
89
|
end
|
84
90
|
|
85
|
-
context 'when the
|
86
|
-
|
87
|
-
let(:conf) do
|
88
|
-
CONFIG.merge(options: {app_name: 'admin-reporting'})
|
89
|
-
end
|
91
|
+
context 'when the belongs_to_required_by_default option is not set in the config' do
|
90
92
|
|
91
93
|
before do
|
94
|
+
Mongoid::Config.reset
|
92
95
|
Mongoid.configure do |config|
|
93
|
-
config.load_configuration(
|
96
|
+
config.load_configuration(clients: CONFIG[:clients])
|
94
97
|
end
|
95
98
|
end
|
96
99
|
|
97
|
-
it 'sets the Mongoid.
|
98
|
-
expect(Mongoid.
|
100
|
+
it 'sets the Mongoid.belongs_to_required_by_default value to true' do
|
101
|
+
expect(Mongoid.belongs_to_required_by_default).to be(true)
|
99
102
|
end
|
100
103
|
end
|
101
104
|
|
102
|
-
context 'when the
|
105
|
+
context 'when the belongs_to_required_by_default option is set in the config' do
|
103
106
|
|
104
107
|
before do
|
105
|
-
Mongoid::Config.reset
|
106
108
|
Mongoid.configure do |config|
|
107
|
-
config.load_configuration(
|
109
|
+
config.load_configuration(conf)
|
108
110
|
end
|
109
111
|
end
|
110
112
|
|
111
|
-
|
112
|
-
|
113
|
+
context 'when the value is set to true' do
|
114
|
+
|
115
|
+
let(:conf) do
|
116
|
+
CONFIG.merge(options: { belongs_to_required_by_default: true })
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'sets the Mongoid.belongs_to_required_by_default value to true' do
|
120
|
+
expect(Mongoid.belongs_to_required_by_default).to be(true)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context 'when the value is set to false' do
|
125
|
+
|
126
|
+
let(:conf) do
|
127
|
+
CONFIG.merge(options: { belongs_to_required_by_default: false })
|
128
|
+
end
|
129
|
+
|
130
|
+
before do
|
131
|
+
Mongoid.configure do |config|
|
132
|
+
config.load_configuration(conf)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'sets the Mongoid.belongs_to_required_by_default value to false' do
|
137
|
+
expect(Mongoid.belongs_to_required_by_default).to be(false)
|
138
|
+
end
|
113
139
|
end
|
114
140
|
end
|
115
141
|
|
@@ -148,12 +174,6 @@ describe Mongoid::Config do
|
|
148
174
|
described_class.load!(file, :test)
|
149
175
|
end
|
150
176
|
|
151
|
-
after do
|
152
|
-
Mongoid.configure do |config|
|
153
|
-
config.load_configuration(CONFIG)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
177
|
it "sets the Mongoid logger level" do
|
158
178
|
expect(Mongoid.logger.level).to eq(Logger::WARN)
|
159
179
|
end
|
@@ -176,7 +196,7 @@ describe Mongoid::Config do
|
|
176
196
|
|
177
197
|
after do
|
178
198
|
if defined?(Rails)
|
179
|
-
RailsTemp = Rails
|
199
|
+
RailsTemp = Rails unless defined?(RailsTemp)
|
180
200
|
Object.send(:remove_const, :Rails)
|
181
201
|
end
|
182
202
|
end
|
@@ -73,29 +73,6 @@ describe Mongoid::Contextual::Atomic do
|
|
73
73
|
expect(smiths.reload.members).to eq([ "Dave" ])
|
74
74
|
end
|
75
75
|
end
|
76
|
-
|
77
|
-
context 'when the criteria has a collation', if: collation_supported? do
|
78
|
-
|
79
|
-
let(:criteria) do
|
80
|
-
Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
|
81
|
-
end
|
82
|
-
|
83
|
-
let(:context) do
|
84
|
-
Mongoid::Contextual::Mongo.new(criteria)
|
85
|
-
end
|
86
|
-
|
87
|
-
before do
|
88
|
-
context.add_to_set(members: "Dave", genres: "Electro")
|
89
|
-
end
|
90
|
-
|
91
|
-
it "does not add duplicates" do
|
92
|
-
expect(depeche_mode.reload.members).to eq([ "Dave" ])
|
93
|
-
end
|
94
|
-
|
95
|
-
it "adds multiple operations" do
|
96
|
-
expect(depeche_mode.reload.genres).to eq([ "Electro" ])
|
97
|
-
end
|
98
|
-
end
|
99
76
|
end
|
100
77
|
|
101
78
|
describe "#bit" do
|
@@ -144,29 +121,6 @@ describe Mongoid::Contextual::Atomic do
|
|
144
121
|
expect(depeche_mode.reload.likes).to eq(14)
|
145
122
|
end
|
146
123
|
end
|
147
|
-
|
148
|
-
context 'when the criteria has a collation', if: collation_supported? do
|
149
|
-
|
150
|
-
let!(:depeche_mode) do
|
151
|
-
Band.create(members: [ "Dave" ], likes: 60)
|
152
|
-
end
|
153
|
-
|
154
|
-
let(:criteria) do
|
155
|
-
Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
|
156
|
-
end
|
157
|
-
|
158
|
-
let(:context) do
|
159
|
-
Mongoid::Contextual::Mongo.new(criteria)
|
160
|
-
end
|
161
|
-
|
162
|
-
before do
|
163
|
-
context.bit(likes: { and: 13, or: 10 })
|
164
|
-
end
|
165
|
-
|
166
|
-
it "performs the bitwise operation on initialized fields" do
|
167
|
-
expect(depeche_mode.reload.likes).to eq(14)
|
168
|
-
end
|
169
|
-
end
|
170
124
|
end
|
171
125
|
|
172
126
|
describe "#inc" do
|
@@ -223,29 +177,6 @@ describe Mongoid::Contextual::Atomic do
|
|
223
177
|
expect(beatles.reload.y).to eq(3)
|
224
178
|
end
|
225
179
|
end
|
226
|
-
|
227
|
-
context 'when the criteria has a collation', if: collation_supported? do
|
228
|
-
|
229
|
-
let!(:depeche_mode) do
|
230
|
-
Band.create(members: [ "Dave" ])
|
231
|
-
end
|
232
|
-
|
233
|
-
let(:criteria) do
|
234
|
-
Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
|
235
|
-
end
|
236
|
-
|
237
|
-
let(:context) do
|
238
|
-
Mongoid::Contextual::Mongo.new(criteria)
|
239
|
-
end
|
240
|
-
|
241
|
-
before do
|
242
|
-
context.inc(years: 1)
|
243
|
-
end
|
244
|
-
|
245
|
-
it "incs the value and read from alias" do
|
246
|
-
expect(depeche_mode.reload.years).to eq(1)
|
247
|
-
end
|
248
|
-
end
|
249
180
|
end
|
250
181
|
|
251
182
|
describe "#pop" do
|
@@ -295,29 +226,6 @@ describe Mongoid::Contextual::Atomic do
|
|
295
226
|
expect(smiths.reload.members).to be_nil
|
296
227
|
end
|
297
228
|
end
|
298
|
-
|
299
|
-
context 'when the criteria has a collation', if: collation_supported? do
|
300
|
-
|
301
|
-
let!(:depeche_mode) do
|
302
|
-
Band.create(members: [ "Dave" ])
|
303
|
-
end
|
304
|
-
|
305
|
-
let(:criteria) do
|
306
|
-
Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
|
307
|
-
end
|
308
|
-
|
309
|
-
let(:context) do
|
310
|
-
Mongoid::Contextual::Mongo.new(criteria)
|
311
|
-
end
|
312
|
-
|
313
|
-
before do
|
314
|
-
context.pop(members: 1)
|
315
|
-
end
|
316
|
-
|
317
|
-
it "pops the last element off the array" do
|
318
|
-
expect(depeche_mode.reload.members).to be_empty
|
319
|
-
end
|
320
|
-
end
|
321
229
|
end
|
322
230
|
|
323
231
|
describe "#pull" do
|
@@ -349,276 +257,129 @@ describe Mongoid::Contextual::Atomic do
|
|
349
257
|
it "does not error on non existent fields" do
|
350
258
|
expect(smiths.reload.members).to be_nil
|
351
259
|
end
|
352
|
-
|
353
|
-
context 'when the criteria has a collation', if: collation_supported? do
|
354
|
-
|
355
|
-
let!(:depeche_mode) do
|
356
|
-
Band.create(members: [ "Dave" ])
|
357
|
-
end
|
358
|
-
|
359
|
-
let(:criteria) do
|
360
|
-
Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
|
361
|
-
end
|
362
|
-
|
363
|
-
let(:context) do
|
364
|
-
Mongoid::Contextual::Mongo.new(criteria)
|
365
|
-
end
|
366
|
-
|
367
|
-
before do
|
368
|
-
context.pull(members: "DAVE")
|
369
|
-
end
|
370
|
-
|
371
|
-
it "pulls when the value is found" do
|
372
|
-
expect(depeche_mode.reload.members).to be_empty
|
373
|
-
end
|
374
|
-
end
|
375
260
|
end
|
376
261
|
|
377
262
|
describe "#pull_all" do
|
378
263
|
|
379
|
-
|
380
|
-
|
381
|
-
let!(:depeche_mode) do
|
382
|
-
Band.create(members: [ "Dave", "Alan", "Fletch" ])
|
383
|
-
end
|
384
|
-
|
385
|
-
let!(:smiths) do
|
386
|
-
Band.create
|
387
|
-
end
|
388
|
-
|
389
|
-
let(:criteria) do
|
390
|
-
Band.all
|
391
|
-
end
|
392
|
-
|
393
|
-
let(:context) do
|
394
|
-
Mongoid::Contextual::Mongo.new(criteria)
|
395
|
-
end
|
396
|
-
|
397
|
-
before do
|
398
|
-
context.pull_all(members: [ "Alan", "Dave" ])
|
399
|
-
end
|
400
|
-
|
401
|
-
it "pulls when the values are found" do
|
402
|
-
expect(depeche_mode.reload.members).to eq([ "Fletch" ])
|
403
|
-
end
|
404
|
-
|
405
|
-
it "does not error on non existent fields" do
|
406
|
-
expect(smiths.reload.members).to be_nil
|
407
|
-
end
|
264
|
+
let!(:depeche_mode) do
|
265
|
+
Band.create(members: [ "Dave", "Alan", "Fletch" ])
|
408
266
|
end
|
409
267
|
|
410
|
-
|
268
|
+
let!(:smiths) do
|
269
|
+
Band.create
|
270
|
+
end
|
411
271
|
|
412
|
-
|
413
|
-
|
414
|
-
|
272
|
+
let(:criteria) do
|
273
|
+
Band.all
|
274
|
+
end
|
415
275
|
|
416
|
-
|
417
|
-
|
418
|
-
|
276
|
+
let(:context) do
|
277
|
+
Mongoid::Contextual::Mongo.new(criteria)
|
278
|
+
end
|
419
279
|
|
420
|
-
|
421
|
-
|
422
|
-
|
280
|
+
before do
|
281
|
+
context.pull_all(members: [ "Alan", "Dave" ])
|
282
|
+
end
|
423
283
|
|
424
|
-
|
425
|
-
|
426
|
-
|
284
|
+
it "pulls when the values are found" do
|
285
|
+
expect(depeche_mode.reload.members).to eq([ "Fletch" ])
|
286
|
+
end
|
427
287
|
|
428
|
-
|
429
|
-
|
430
|
-
end
|
288
|
+
it "does not error on non existent fields" do
|
289
|
+
expect(smiths.reload.members).to be_nil
|
431
290
|
end
|
432
291
|
end
|
433
292
|
|
434
293
|
describe "#push" do
|
435
294
|
|
436
|
-
|
437
|
-
|
438
|
-
let!(:depeche_mode) do
|
439
|
-
Band.create(members: [ "Dave" ])
|
440
|
-
end
|
441
|
-
|
442
|
-
let!(:smiths) do
|
443
|
-
Band.create
|
444
|
-
end
|
445
|
-
|
446
|
-
let(:criteria) do
|
447
|
-
Band.all
|
448
|
-
end
|
449
|
-
|
450
|
-
let(:context) do
|
451
|
-
Mongoid::Contextual::Mongo.new(criteria)
|
452
|
-
end
|
453
|
-
|
454
|
-
before do
|
455
|
-
context.push(members: "Alan")
|
456
|
-
end
|
457
|
-
|
458
|
-
it "pushes the value to existing arrays" do
|
459
|
-
expect(depeche_mode.reload.members).to eq([ "Dave", "Alan" ])
|
460
|
-
end
|
461
|
-
|
462
|
-
it "pushes to non existent fields" do
|
463
|
-
expect(smiths.reload.members).to eq([ "Alan" ])
|
464
|
-
end
|
295
|
+
let!(:depeche_mode) do
|
296
|
+
Band.create(members: [ "Dave" ])
|
465
297
|
end
|
466
298
|
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
Band.create(members: [ "Dave" ])
|
471
|
-
end
|
472
|
-
|
473
|
-
let!(:smiths) do
|
474
|
-
Band.create
|
475
|
-
end
|
299
|
+
let!(:smiths) do
|
300
|
+
Band.create
|
301
|
+
end
|
476
302
|
|
477
|
-
|
478
|
-
|
479
|
-
|
303
|
+
let(:criteria) do
|
304
|
+
Band.all
|
305
|
+
end
|
480
306
|
|
481
|
-
|
482
|
-
|
483
|
-
|
307
|
+
let(:context) do
|
308
|
+
Mongoid::Contextual::Mongo.new(criteria)
|
309
|
+
end
|
484
310
|
|
485
|
-
|
486
|
-
|
487
|
-
|
311
|
+
before do
|
312
|
+
context.push(members: "Alan")
|
313
|
+
end
|
488
314
|
|
489
|
-
|
490
|
-
|
491
|
-
|
315
|
+
it "pushes the value to existing arrays" do
|
316
|
+
expect(depeche_mode.reload.members).to eq([ "Dave", "Alan" ])
|
317
|
+
end
|
492
318
|
|
493
|
-
|
494
|
-
|
495
|
-
end
|
319
|
+
it "pushes to non existent fields" do
|
320
|
+
expect(smiths.reload.members).to eq([ "Alan" ])
|
496
321
|
end
|
497
322
|
end
|
498
323
|
|
499
|
-
describe "#
|
324
|
+
describe "#push_all" do
|
500
325
|
|
501
|
-
|
502
|
-
|
503
|
-
let!(:depeche_mode) do
|
504
|
-
Band.create(members: [ "Dave" ])
|
505
|
-
end
|
506
|
-
|
507
|
-
let!(:smiths) do
|
508
|
-
Band.create
|
509
|
-
end
|
510
|
-
|
511
|
-
let(:criteria) do
|
512
|
-
Band.all
|
513
|
-
end
|
514
|
-
|
515
|
-
let(:context) do
|
516
|
-
Mongoid::Contextual::Mongo.new(criteria)
|
517
|
-
end
|
518
|
-
|
519
|
-
before do
|
520
|
-
context.push_each(members: [ "Alan", "Fletch" ])
|
521
|
-
end
|
522
|
-
|
523
|
-
it "pushes the values to existing arrays" do
|
524
|
-
expect(depeche_mode.reload.members).to eq([ "Dave", "Alan", "Fletch" ])
|
525
|
-
end
|
526
|
-
|
527
|
-
it "pushes to non existent fields" do
|
528
|
-
expect(smiths.reload.members).to eq([ "Alan", "Fletch" ])
|
529
|
-
end
|
326
|
+
let!(:depeche_mode) do
|
327
|
+
Band.create(members: [ "Dave" ])
|
530
328
|
end
|
531
329
|
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
Band.create(members: [ "Dave" ])
|
536
|
-
end
|
330
|
+
let!(:smiths) do
|
331
|
+
Band.create
|
332
|
+
end
|
537
333
|
|
538
|
-
|
539
|
-
|
540
|
-
|
334
|
+
let(:criteria) do
|
335
|
+
Band.all
|
336
|
+
end
|
541
337
|
|
542
|
-
|
543
|
-
|
544
|
-
|
338
|
+
let(:context) do
|
339
|
+
Mongoid::Contextual::Mongo.new(criteria)
|
340
|
+
end
|
545
341
|
|
546
|
-
|
547
|
-
|
548
|
-
|
342
|
+
before do
|
343
|
+
context.push_all(members: [ "Alan", "Fletch" ])
|
344
|
+
end
|
549
345
|
|
550
|
-
|
551
|
-
|
552
|
-
|
346
|
+
it "pushes the values to existing arrays" do
|
347
|
+
expect(depeche_mode.reload.members).to eq([ "Dave", "Alan", "Fletch" ])
|
348
|
+
end
|
553
349
|
|
554
|
-
|
555
|
-
|
556
|
-
end
|
350
|
+
it "pushes to non existent fields" do
|
351
|
+
expect(smiths.reload.members).to eq([ "Alan", "Fletch" ])
|
557
352
|
end
|
558
353
|
end
|
559
354
|
|
560
355
|
describe "#rename" do
|
561
356
|
|
562
|
-
|
563
|
-
|
564
|
-
let!(:depeche_mode) do
|
565
|
-
Band.create(members: [ "Dave" ])
|
566
|
-
end
|
567
|
-
|
568
|
-
let!(:smiths) do
|
569
|
-
Band.create
|
570
|
-
end
|
571
|
-
|
572
|
-
let(:criteria) do
|
573
|
-
Band.all
|
574
|
-
end
|
575
|
-
|
576
|
-
let(:context) do
|
577
|
-
Mongoid::Contextual::Mongo.new(criteria)
|
578
|
-
end
|
579
|
-
|
580
|
-
before do
|
581
|
-
context.rename(members: :artists)
|
582
|
-
end
|
583
|
-
|
584
|
-
it "renames existing fields" do
|
585
|
-
expect(depeche_mode.reload.artists).to eq([ "Dave" ])
|
586
|
-
end
|
587
|
-
|
588
|
-
it "does not rename non existent fields" do
|
589
|
-
expect(smiths.reload).to_not respond_to(:artists)
|
590
|
-
end
|
357
|
+
let!(:depeche_mode) do
|
358
|
+
Band.create(members: [ "Dave" ])
|
591
359
|
end
|
592
360
|
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
Band.create(members: [ "Dave" ])
|
597
|
-
end
|
598
|
-
|
599
|
-
let!(:smiths) do
|
600
|
-
Band.create
|
601
|
-
end
|
361
|
+
let!(:smiths) do
|
362
|
+
Band.create
|
363
|
+
end
|
602
364
|
|
603
|
-
|
604
|
-
|
605
|
-
|
365
|
+
let(:criteria) do
|
366
|
+
Band.all
|
367
|
+
end
|
606
368
|
|
607
|
-
|
608
|
-
|
609
|
-
|
369
|
+
let(:context) do
|
370
|
+
Mongoid::Contextual::Mongo.new(criteria)
|
371
|
+
end
|
610
372
|
|
611
|
-
|
612
|
-
|
613
|
-
|
373
|
+
before do
|
374
|
+
context.rename(members: :artists)
|
375
|
+
end
|
614
376
|
|
615
|
-
|
616
|
-
|
617
|
-
|
377
|
+
it "renames existing fields" do
|
378
|
+
expect(depeche_mode.reload.artists).to eq([ "Dave" ])
|
379
|
+
end
|
618
380
|
|
619
|
-
|
620
|
-
|
621
|
-
end
|
381
|
+
it "does not rename non existent fields" do
|
382
|
+
expect(smiths.reload).to_not respond_to(:artists)
|
622
383
|
end
|
623
384
|
end
|
624
385
|
|
@@ -748,32 +509,5 @@ describe Mongoid::Contextual::Atomic do
|
|
748
509
|
end
|
749
510
|
end
|
750
511
|
end
|
751
|
-
|
752
|
-
context 'when the criteria has a collation', if: collation_supported? do
|
753
|
-
|
754
|
-
let!(:depeche_mode) do
|
755
|
-
Band.create(name: "Depeche Mode", years: 10)
|
756
|
-
end
|
757
|
-
|
758
|
-
let!(:new_order) do
|
759
|
-
Band.create(name: "New Order", years: 10)
|
760
|
-
end
|
761
|
-
|
762
|
-
let(:criteria) do
|
763
|
-
Band.where(name: 'DEPECHE MODE').collation(locale: 'en_US', strength: 2)
|
764
|
-
end
|
765
|
-
|
766
|
-
let(:context) do
|
767
|
-
Mongoid::Contextual::Mongo.new(criteria)
|
768
|
-
end
|
769
|
-
|
770
|
-
before do
|
771
|
-
context.unset(:name)
|
772
|
-
end
|
773
|
-
|
774
|
-
it "unsets the unaliased field" do
|
775
|
-
expect(depeche_mode.reload.name).to be_nil
|
776
|
-
end
|
777
|
-
end
|
778
512
|
end
|
779
513
|
end
|