mongoid 8.0.2 → 8.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/extensions/big_decimal.rb +4 -0
- data/lib/mongoid/extensions/float.rb +6 -2
- data/lib/mongoid/extensions/integer.rb +6 -2
- data/lib/mongoid/fields/localized.rb +7 -2
- data/lib/mongoid/persistence_context.rb +41 -5
- data/lib/mongoid/scopable.rb +9 -7
- data/lib/mongoid/threaded.rb +3 -3
- data/lib/mongoid/version.rb +1 -1
- data/spec/integration/i18n_fallbacks_spec.rb +1 -17
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/clients_spec.rb +25 -0
- data/spec/mongoid/contextual/memory_spec.rb +4 -5
- data/spec/mongoid/contextual/mongo_spec.rb +2 -4
- data/spec/mongoid/criteria_projection_spec.rb +0 -1
- data/spec/mongoid/criteria_spec.rb +1 -1
- data/spec/mongoid/extensions/big_decimal_spec.rb +15 -0
- data/spec/mongoid/extensions/float_spec.rb +10 -3
- data/spec/mongoid/extensions/integer_spec.rb +10 -3
- data/spec/mongoid/fields/localized_spec.rb +37 -12
- data/spec/mongoid/validatable/uniqueness_spec.rb +0 -1
- data/spec/support/macros.rb +16 -0
- data.tar.gz.sig +0 -0
- metadata +643 -643
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 684d53a067a1e3410535a0dc06db2b587c5e43a19c85af0defe7f29c81e1c74d
|
4
|
+
data.tar.gz: c285640352d90d219d7ccd6c0ce6c90fdf1b800f853d2aa44898025c9d49ccf8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a13a92d079784bfc190d1ebddff3f2bdd6f0d3d2fb0cee336856ba8e870199b83cc7c809d17cb62a913a64624630ffd397bfa45779503b107b97f82fb4be615
|
7
|
+
data.tar.gz: b887e765c135fe7018863908afabe9128007e85628cbcf11bc971cabf06a162833239da37d32293b1c3565838cf9ad14898fd91ac510a29bf37779b782411ee7
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/mongoid/cacheable.rb
CHANGED
@@ -15,7 +15,7 @@ module Mongoid
|
|
15
15
|
# plural model name.
|
16
16
|
#
|
17
17
|
# If new_record? - will append /new
|
18
|
-
# If not - will append /id-updated_at.
|
18
|
+
# If not - will append /id-updated_at.to_formatted_s(cache_timestamp_format)
|
19
19
|
# Without updated_at - will append /id
|
20
20
|
#
|
21
21
|
# This is usually called inside a cache() block
|
@@ -26,7 +26,7 @@ module Mongoid
|
|
26
26
|
# @return [ String ] the string with or without updated_at
|
27
27
|
def cache_key
|
28
28
|
return "#{model_key}/new" if new_record?
|
29
|
-
return "#{model_key}/#{_id}-#{updated_at.utc.
|
29
|
+
return "#{model_key}/#{_id}-#{updated_at.utc.to_formatted_s(cache_timestamp_format)}" if do_or_do_not(:updated_at)
|
30
30
|
"#{model_key}/#{_id}"
|
31
31
|
end
|
32
32
|
end
|
@@ -72,10 +72,14 @@ module Mongoid
|
|
72
72
|
BSON::Decimal128.new(object)
|
73
73
|
elsif object.numeric?
|
74
74
|
BSON::Decimal128.new(object.to_s)
|
75
|
+
elsif !object.is_a?(String)
|
76
|
+
object.try(:to_d)
|
75
77
|
end
|
76
78
|
else
|
77
79
|
if object.is_a?(BSON::Decimal128) || object.numeric?
|
78
80
|
object.to_s
|
81
|
+
elsif !object.is_a?(String)
|
82
|
+
object.try(:to_d)
|
79
83
|
end
|
80
84
|
end
|
81
85
|
end
|
@@ -37,8 +37,12 @@ module Mongoid
|
|
37
37
|
# @return [ Float | nil ] The object mongoized or nil.
|
38
38
|
def mongoize(object)
|
39
39
|
return if object.blank?
|
40
|
-
if object.
|
41
|
-
object.
|
40
|
+
if object.is_a?(String)
|
41
|
+
if object.numeric?
|
42
|
+
object.to_f
|
43
|
+
end
|
44
|
+
else
|
45
|
+
object.try(:to_f)
|
42
46
|
end
|
43
47
|
end
|
44
48
|
alias :demongoize :mongoize
|
@@ -45,8 +45,12 @@ module Mongoid
|
|
45
45
|
# @return [ Integer | nil ] The object mongoized or nil.
|
46
46
|
def mongoize(object)
|
47
47
|
return if object.blank?
|
48
|
-
if object.
|
49
|
-
object.
|
48
|
+
if object.is_a?(String)
|
49
|
+
if object.numeric?
|
50
|
+
object.to_i
|
51
|
+
end
|
52
|
+
else
|
53
|
+
object.try(:to_i)
|
50
54
|
end
|
51
55
|
end
|
52
56
|
alias :demongoize :mongoize
|
@@ -14,7 +14,9 @@ module Mongoid
|
|
14
14
|
#
|
15
15
|
# @return [ Object ] The value for the current locale.
|
16
16
|
def demongoize(object)
|
17
|
-
if object
|
17
|
+
return if object.nil?
|
18
|
+
case object
|
19
|
+
when Hash
|
18
20
|
type.demongoize(lookup(object))
|
19
21
|
end
|
20
22
|
end
|
@@ -76,7 +78,10 @@ module Mongoid
|
|
76
78
|
end
|
77
79
|
return value unless value.nil?
|
78
80
|
if fallbacks? && ::I18n.respond_to?(:fallbacks)
|
79
|
-
|
81
|
+
fallback_key = ::I18n.fallbacks[locale].find do |loc|
|
82
|
+
object.key?(loc.to_s) || object.key?(loc)
|
83
|
+
end
|
84
|
+
object[fallback_key.to_s] || object[fallback_key]
|
80
85
|
end
|
81
86
|
end
|
82
87
|
end
|
@@ -189,8 +189,7 @@ module Mongoid
|
|
189
189
|
#
|
190
190
|
# @return [ Mongoid::PersistenceContext ] The persistence context for the object.
|
191
191
|
def set(object, options_or_context)
|
192
|
-
|
193
|
-
existing_context = Thread.current[key]
|
192
|
+
existing_context = get_context(object)
|
194
193
|
existing_options = if existing_context
|
195
194
|
existing_context.options
|
196
195
|
else
|
@@ -201,7 +200,7 @@ module Mongoid
|
|
201
200
|
end
|
202
201
|
new_options = existing_options.merge(options_or_context)
|
203
202
|
context = PersistenceContext.new(object, new_options)
|
204
|
-
|
203
|
+
store_context(object, context)
|
205
204
|
end
|
206
205
|
|
207
206
|
# Get the persistence context for a particular class or model instance.
|
@@ -213,7 +212,7 @@ module Mongoid
|
|
213
212
|
#
|
214
213
|
# @return [ Mongoid::PersistenceContext ] The persistence context for the object.
|
215
214
|
def get(object)
|
216
|
-
|
215
|
+
get_context(object)
|
217
216
|
end
|
218
217
|
|
219
218
|
# Clear the persistence context for a particular class or model instance.
|
@@ -232,7 +231,44 @@ module Mongoid
|
|
232
231
|
end
|
233
232
|
end
|
234
233
|
ensure
|
235
|
-
|
234
|
+
store_context(object, original_context)
|
235
|
+
end
|
236
|
+
|
237
|
+
private
|
238
|
+
|
239
|
+
# Key to store persistence contexts in the thread local storage.
|
240
|
+
#
|
241
|
+
# @api private
|
242
|
+
PERSISTENCE_CONTEXT_KEY = :"[mongoid]:persistence_context"
|
243
|
+
|
244
|
+
# Get the persistence context for a given object from the thread local
|
245
|
+
# storage.
|
246
|
+
#
|
247
|
+
# @param [ Object ] object Object to get the persistance context for.
|
248
|
+
#
|
249
|
+
# @return [ Mongoid::PersistenceContext | nil ] The persistence context
|
250
|
+
# for the object if previously stored, otherwise nil.
|
251
|
+
#
|
252
|
+
# @api private
|
253
|
+
def get_context(object)
|
254
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY] ||= {}
|
255
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY][object.object_id]
|
256
|
+
end
|
257
|
+
|
258
|
+
# Store persistence context for a given object in the thread local
|
259
|
+
# storage.
|
260
|
+
#
|
261
|
+
# @param [ Object ] object Object to store the persistance context for.
|
262
|
+
# @param [ Mongoid::PersistenceContext ] context Context to store
|
263
|
+
#
|
264
|
+
# @api private
|
265
|
+
def store_context(object, context)
|
266
|
+
if context.nil?
|
267
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY]&.delete(object.object_id)
|
268
|
+
else
|
269
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY] ||= {}
|
270
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY][object.object_id] = context
|
271
|
+
end
|
236
272
|
end
|
237
273
|
end
|
238
274
|
end
|
data/lib/mongoid/scopable.rb
CHANGED
@@ -168,7 +168,9 @@ module Mongoid
|
|
168
168
|
# Band.where(name: "Depeche Mode")
|
169
169
|
# end
|
170
170
|
#
|
171
|
-
# @note This will force the default scope to be removed
|
171
|
+
# @note This will force the default scope to be removed, but will not
|
172
|
+
# remove scopes declared with ``.with_scope``. This will be changed
|
173
|
+
# in Mongoid 9.
|
172
174
|
#
|
173
175
|
# @return [ Criteria | Object ] The unscoped criteria or result of the
|
174
176
|
# block.
|
@@ -249,12 +251,12 @@ module Mongoid
|
|
249
251
|
if Mongoid.scope_overwrite_exception
|
250
252
|
raise Errors::ScopeOverwrite.new(self.name, name)
|
251
253
|
else
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
254
|
+
Mongoid.logger.warn(
|
255
|
+
"Creating scope :#{name} which conflicts with #{self.name}.#{name}. " +
|
256
|
+
"Calls to `Mongoid::Criteria##{name}` will delegate to " +
|
257
|
+
"`Mongoid::Criteria##{name}` for criteria with klass #{self.name} " +
|
258
|
+
"and will ignore the declared scope."
|
259
|
+
)
|
258
260
|
end
|
259
261
|
end
|
260
262
|
end
|
data/lib/mongoid/threaded.rb
CHANGED
@@ -322,7 +322,7 @@ module Mongoid
|
|
322
322
|
#
|
323
323
|
# @param [ Mongo::Session ] session The session to save.
|
324
324
|
def set_session(session)
|
325
|
-
Thread.current[:session] = session
|
325
|
+
Thread.current["[mongoid]:session"] = session
|
326
326
|
end
|
327
327
|
|
328
328
|
# Get the cached session for this thread.
|
@@ -332,7 +332,7 @@ module Mongoid
|
|
332
332
|
#
|
333
333
|
# @return [ Mongo::Session | nil ] The session cached on this thread or nil.
|
334
334
|
def get_session
|
335
|
-
Thread.current[:session]
|
335
|
+
Thread.current["[mongoid]:session"]
|
336
336
|
end
|
337
337
|
|
338
338
|
# Clear the cached session for this thread.
|
@@ -344,7 +344,7 @@ module Mongoid
|
|
344
344
|
def clear_session
|
345
345
|
session = get_session
|
346
346
|
session.end_session if session
|
347
|
-
Thread.current[:session] = nil
|
347
|
+
Thread.current["[mongoid]:session"] = nil
|
348
348
|
end
|
349
349
|
end
|
350
350
|
end
|
data/lib/mongoid/version.rb
CHANGED
@@ -3,19 +3,7 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe 'i18n fallbacks' do
|
6
|
-
|
7
|
-
before(:all) do
|
8
|
-
unless %w(yes true 1).include?((ENV['TEST_I18N_FALLBACKS'] || '').downcase)
|
9
|
-
skip 'Set TEST_I18N_FALLBACKS=1 environment variable to run these tests'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:all) do
|
14
|
-
puts "I18n version: #{I18n::VERSION}"
|
15
|
-
|
16
|
-
require "i18n/backend/fallbacks"
|
17
|
-
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
|
18
|
-
end
|
6
|
+
with_i18n_fallbacks
|
19
7
|
|
20
8
|
context 'when fallbacks are enabled with a locale list' do
|
21
9
|
before do
|
@@ -36,7 +24,6 @@ describe 'i18n fallbacks' do
|
|
36
24
|
end
|
37
25
|
|
38
26
|
context 'when translation is missing in active locale and present in fallback locale' do
|
39
|
-
|
40
27
|
it 'falls back on default locale' do
|
41
28
|
product = Product.new
|
42
29
|
I18n.locale = :en
|
@@ -44,7 +31,6 @@ describe 'i18n fallbacks' do
|
|
44
31
|
I18n.locale = :de
|
45
32
|
product.description.should == 'Marvelous!'
|
46
33
|
end
|
47
|
-
|
48
34
|
end
|
49
35
|
|
50
36
|
context 'when translation is missing in all locales' do
|
@@ -64,7 +50,6 @@ describe 'i18n fallbacks' do
|
|
64
50
|
I18n.locale = :ru
|
65
51
|
product.description.should be nil
|
66
52
|
end
|
67
|
-
|
68
53
|
end
|
69
54
|
|
70
55
|
context 'i18n 1.0' do
|
@@ -82,7 +67,6 @@ describe 'i18n fallbacks' do
|
|
82
67
|
I18n.locale = :ru
|
83
68
|
product.description.should == 'Marvelous!'
|
84
69
|
end
|
85
|
-
|
86
70
|
end
|
87
71
|
end
|
88
72
|
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_formatted_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_formatted_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_formatted_s(:nsec)
|
107
107
|
end
|
108
108
|
|
109
109
|
it "has the id and updated_at key name" do
|
@@ -1042,6 +1042,31 @@ describe Mongoid::Clients do
|
|
1042
1042
|
end
|
1043
1043
|
end
|
1044
1044
|
end
|
1045
|
+
|
1046
|
+
context 'when using on different objects' do
|
1047
|
+
require_mri
|
1048
|
+
|
1049
|
+
let(:first_band) do
|
1050
|
+
Band.create!(name: "The Beatles")
|
1051
|
+
end
|
1052
|
+
|
1053
|
+
let(:second_band) do
|
1054
|
+
Band.create!(name: 'Led Zeppelin')
|
1055
|
+
end
|
1056
|
+
|
1057
|
+
it 'does not create extra symbols symbols' do
|
1058
|
+
first_band.with(write: { w: 0, j: false }) do |band|
|
1059
|
+
band.set(active: false)
|
1060
|
+
end
|
1061
|
+
initial_symbols_count = Symbol.all_symbols.size
|
1062
|
+
second_band.with(write: { w: 0, j: false }) do |band|
|
1063
|
+
band.set(active: false)
|
1064
|
+
end
|
1065
|
+
expect(Symbol.all_symbols.size).to eq(initial_symbols_count)
|
1066
|
+
end
|
1067
|
+
|
1068
|
+
end
|
1069
|
+
|
1045
1070
|
end
|
1046
1071
|
|
1047
1072
|
context "when overriding the default database" do
|
@@ -546,7 +546,7 @@ describe Mongoid::Contextual::Memory do
|
|
546
546
|
end
|
547
547
|
|
548
548
|
context 'when fallbacks are enabled with a locale list' do
|
549
|
-
|
549
|
+
with_i18n_fallbacks
|
550
550
|
|
551
551
|
around(:all) do |example|
|
552
552
|
prev_fallbacks = I18n.fallbacks.dup
|
@@ -565,7 +565,7 @@ describe Mongoid::Contextual::Memory do
|
|
565
565
|
|
566
566
|
it "correctly uses the fallback" do
|
567
567
|
I18n.locale = :en
|
568
|
-
|
568
|
+
Dictionary.create!(description: 'english-text')
|
569
569
|
I18n.locale = :he
|
570
570
|
distinct.should == "english-text"
|
571
571
|
end
|
@@ -1598,7 +1598,7 @@ describe Mongoid::Contextual::Memory do
|
|
1598
1598
|
end
|
1599
1599
|
|
1600
1600
|
context 'when fallbacks are enabled with a locale list' do
|
1601
|
-
|
1601
|
+
with_i18n_fallbacks
|
1602
1602
|
|
1603
1603
|
around(:all) do |example|
|
1604
1604
|
prev_fallbacks = I18n.fallbacks.dup
|
@@ -1617,7 +1617,7 @@ describe Mongoid::Contextual::Memory do
|
|
1617
1617
|
|
1618
1618
|
it "correctly uses the fallback" do
|
1619
1619
|
I18n.locale = :en
|
1620
|
-
|
1620
|
+
Dictionary.create!(description: 'english-text')
|
1621
1621
|
I18n.locale = :he
|
1622
1622
|
plucked.should == "english-text"
|
1623
1623
|
end
|
@@ -1960,7 +1960,6 @@ describe Mongoid::Contextual::Memory do
|
|
1960
1960
|
address2b.name = "de3"
|
1961
1961
|
person1
|
1962
1962
|
person2
|
1963
|
-
|
1964
1963
|
I18n.locale = :en
|
1965
1964
|
end
|
1966
1965
|
|
@@ -660,7 +660,7 @@ describe Mongoid::Contextual::Mongo do
|
|
660
660
|
end
|
661
661
|
|
662
662
|
context 'when fallbacks are enabled with a locale list' do
|
663
|
-
|
663
|
+
with_i18n_fallbacks
|
664
664
|
|
665
665
|
around(:all) do |example|
|
666
666
|
prev_fallbacks = I18n.fallbacks.dup
|
@@ -686,7 +686,7 @@ describe Mongoid::Contextual::Mongo do
|
|
686
686
|
|
687
687
|
it "correctly uses the fallback" do
|
688
688
|
I18n.locale = :en
|
689
|
-
|
689
|
+
Dictionary.create!(description: 'english-text')
|
690
690
|
I18n.locale = :he
|
691
691
|
distinct.should == "english-text"
|
692
692
|
end
|
@@ -854,7 +854,6 @@ describe Mongoid::Contextual::Mongo do
|
|
854
854
|
d2.save!
|
855
855
|
d3.save!
|
856
856
|
d4.save!
|
857
|
-
|
858
857
|
I18n.locale = :en
|
859
858
|
end
|
860
859
|
|
@@ -908,7 +907,6 @@ describe Mongoid::Contextual::Mongo do
|
|
908
907
|
address2b.name = "de3"
|
909
908
|
Person.create!(addresses: [ address1a, address1b ])
|
910
909
|
Person.create!(addresses: [ address2a, address2b ])
|
911
|
-
|
912
910
|
I18n.locale = :en
|
913
911
|
end
|
914
912
|
|
@@ -273,6 +273,21 @@ describe Mongoid::Extensions::BigDecimal do
|
|
273
273
|
end
|
274
274
|
end
|
275
275
|
|
276
|
+
context "when the value is castable" do
|
277
|
+
|
278
|
+
let(:value) do
|
279
|
+
2.hours
|
280
|
+
end
|
281
|
+
|
282
|
+
before do
|
283
|
+
expect(value).to be_a(ActiveSupport::Duration)
|
284
|
+
end
|
285
|
+
|
286
|
+
it "returns nil" do
|
287
|
+
expect(mongoized).to eq(7200)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
276
291
|
context "when the value is nil" do
|
277
292
|
|
278
293
|
let(:value) do
|
@@ -100,10 +100,10 @@ describe Mongoid::Extensions::Float do
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
context "when the string
|
103
|
+
context "when the string starts with a number" do
|
104
104
|
|
105
|
-
it "returns
|
106
|
-
expect(Float.send(method, "
|
105
|
+
it "returns nil" do
|
106
|
+
expect(Float.send(method, "42bogus")).to be_nil
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
@@ -120,6 +120,13 @@ describe Mongoid::Extensions::Float do
|
|
120
120
|
expect(Float.send(method, nil)).to be_nil
|
121
121
|
end
|
122
122
|
end
|
123
|
+
|
124
|
+
context "when giving an object that is castable to an Float" do
|
125
|
+
|
126
|
+
it "returns the integer value" do
|
127
|
+
expect(Float.send(method, 2.hours)).to eq(7200)
|
128
|
+
end
|
129
|
+
end
|
123
130
|
end
|
124
131
|
end
|
125
132
|
end
|
@@ -94,10 +94,10 @@ describe Mongoid::Extensions::Integer do
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
context "when the string
|
97
|
+
context "when the string starts with a number" do
|
98
98
|
|
99
|
-
it "returns
|
100
|
-
expect(Integer.send(method, "
|
99
|
+
it "returns nil" do
|
100
|
+
expect(Integer.send(method, "42bogus")).to be_nil
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
@@ -114,6 +114,13 @@ describe Mongoid::Extensions::Integer do
|
|
114
114
|
expect(Integer.send(method, nil)).to be_nil
|
115
115
|
end
|
116
116
|
end
|
117
|
+
|
118
|
+
context "when giving an object that is castable to an Integer" do
|
119
|
+
|
120
|
+
it "returns the integer value" do
|
121
|
+
expect(Integer.send(method, 2.hours)).to eq(7200)
|
122
|
+
end
|
123
|
+
end
|
117
124
|
end
|
118
125
|
end
|
119
126
|
end
|
@@ -102,6 +102,29 @@ describe Mongoid::Fields::Localized do
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
+
context "when key is a symbol" do
|
106
|
+
|
107
|
+
let(:value) do
|
108
|
+
field.demongoize({ :de => "This is a test" })
|
109
|
+
end
|
110
|
+
|
111
|
+
it "returns the string from the set locale" do
|
112
|
+
expect(value).to eq("This is a test")
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
context "passing a bogus value" do
|
118
|
+
|
119
|
+
let(:value) do
|
120
|
+
field.demongoize("bogus")
|
121
|
+
end
|
122
|
+
|
123
|
+
it "returns nil" do
|
124
|
+
expect(value).to be_nil
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
105
128
|
context "when the value does not exist" do
|
106
129
|
|
107
130
|
context "when not using fallbacks" do
|
@@ -117,10 +140,7 @@ describe Mongoid::Fields::Localized do
|
|
117
140
|
|
118
141
|
context "when using fallbacks" do
|
119
142
|
|
120
|
-
|
121
|
-
require "i18n/backend/fallbacks"
|
122
|
-
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
|
123
|
-
end
|
143
|
+
with_i18n_fallbacks
|
124
144
|
|
125
145
|
context "when fallbacks are defined" do
|
126
146
|
|
@@ -139,6 +159,17 @@ describe Mongoid::Fields::Localized do
|
|
139
159
|
end
|
140
160
|
end
|
141
161
|
|
162
|
+
context "when the fallback translation exists and is a symbol" do
|
163
|
+
|
164
|
+
let(:value) do
|
165
|
+
field.demongoize({ :es => "testing" })
|
166
|
+
end
|
167
|
+
|
168
|
+
it "returns the fallback translation" do
|
169
|
+
expect(value).to eq("testing")
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
142
173
|
context "when another fallback translation exists" do
|
143
174
|
|
144
175
|
let(:value) do
|
@@ -275,10 +306,7 @@ describe Mongoid::Fields::Localized do
|
|
275
306
|
|
276
307
|
context "when using fallbacks" do
|
277
308
|
|
278
|
-
|
279
|
-
require "i18n/backend/fallbacks"
|
280
|
-
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
|
281
|
-
end
|
309
|
+
with_i18n_fallbacks
|
282
310
|
|
283
311
|
context "when fallbacks are defined" do
|
284
312
|
|
@@ -476,10 +504,7 @@ describe Mongoid::Fields::Localized do
|
|
476
504
|
|
477
505
|
context "when fallbacks are defined" do
|
478
506
|
|
479
|
-
|
480
|
-
require "i18n/backend/fallbacks"
|
481
|
-
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
|
482
|
-
end
|
507
|
+
with_i18n_fallbacks
|
483
508
|
|
484
509
|
context "when the lookup does not need to use fallbacks" do
|
485
510
|
|
data/spec/support/macros.rb
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
module Mongoid
|
4
4
|
module Macros
|
5
|
+
class I18nBackendWithFallbacks < I18n::Backend::Simple
|
6
|
+
include I18n::Backend::Fallbacks
|
7
|
+
end
|
8
|
+
|
5
9
|
def use_spec_mongoid_config
|
6
10
|
around do |example|
|
7
11
|
config_path = File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
|
@@ -39,6 +43,18 @@ module Mongoid
|
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
46
|
+
def with_i18n_fallbacks
|
47
|
+
require_fallbacks
|
48
|
+
|
49
|
+
around do |example|
|
50
|
+
old_backend = I18n.backend
|
51
|
+
I18n.backend = I18nBackendWithFallbacks.new
|
52
|
+
example.run
|
53
|
+
ensure
|
54
|
+
I18n.backend = old_backend
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
42
58
|
def driver_config_override(key, value)
|
43
59
|
around do |example|
|
44
60
|
existing = Mongo.send(key)
|
data.tar.gz.sig
CHANGED
Binary file
|