mongoid 8.0.2 → 8.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/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
|