efficient_translations 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -82,6 +82,9 @@ Done! You have the EfficientTranslations power in your hands :-)
|
|
82
82
|
I18n.locale = :it
|
83
83
|
# when the current locale is not found, the default locale will be used
|
84
84
|
product.name # => 'Efficient Translations'
|
85
|
+
# if you don't want the default locale fallback
|
86
|
+
product.name! # => nil
|
87
|
+
product.name_translation! :it # => nil
|
85
88
|
|
86
89
|
# .name= is a wrapper to #set_name_translation I18n.locale
|
87
90
|
product.name = 'Traduzioni Efficienti'
|
@@ -47,7 +47,7 @@ module EfficientTranslations
|
|
47
47
|
def define_translation_accessors field
|
48
48
|
field = field.to_sym
|
49
49
|
class_eval do
|
50
|
-
define_method "#{field}_translation" do |locale|
|
50
|
+
define_method "#{field}_translation!" do |locale|
|
51
51
|
locale = locale.to_sym
|
52
52
|
# search in cache
|
53
53
|
if efficient_translations_attributes[locale][field]
|
@@ -55,12 +55,16 @@ module EfficientTranslations
|
|
55
55
|
else
|
56
56
|
# search in relationship
|
57
57
|
translation = translations.detect { |t| t.locale.to_sym == locale }
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
58
|
+
translation && translation[field] || nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
define_method "#{field}_translation" do |locale|
|
63
|
+
translation_field = self.send "#{field}_translation!", locale
|
64
|
+
if translation_field
|
65
|
+
translation_field
|
66
|
+
elsif locale.to_sym != I18n.default_locale
|
67
|
+
self.send "#{field}_translation!", I18n.default_locale
|
64
68
|
end
|
65
69
|
end
|
66
70
|
|
@@ -73,6 +77,10 @@ module EfficientTranslations
|
|
73
77
|
self.send "#{field}_translation", I18n.locale
|
74
78
|
end
|
75
79
|
|
80
|
+
define_method "#{field}!" do
|
81
|
+
self.send "#{field}_translation!", I18n.locale
|
82
|
+
end
|
83
|
+
|
76
84
|
define_method "#{field}=" do |value|
|
77
85
|
self.send "set_#{field}_translation", I18n.locale, value
|
78
86
|
end
|
@@ -75,20 +75,14 @@ describe EfficientTranslations do
|
|
75
75
|
WorkingModel.first.name.should == 'pippo'
|
76
76
|
end
|
77
77
|
|
78
|
-
|
79
|
-
before do
|
80
|
-
@model = WorkingModel.new
|
81
|
-
@model.set_name_translation :en, 'pippo'
|
82
|
-
@model.save!
|
83
|
-
end
|
84
|
-
|
78
|
+
shared_examples 'translation finder' do
|
85
79
|
context 'when cache contains the translated value' do
|
86
80
|
before do
|
87
81
|
@model.set_name_translation :en, 'foo'
|
88
82
|
end
|
89
83
|
|
90
84
|
it 'should fetch the value from cache' do
|
91
|
-
|
85
|
+
invoke(:en).should == 'foo'
|
92
86
|
end
|
93
87
|
end
|
94
88
|
|
@@ -96,19 +90,53 @@ describe EfficientTranslations do
|
|
96
90
|
it 'should search in the relationship' do
|
97
91
|
@model = WorkingModel.find @model.id
|
98
92
|
@model.translation_model.create! :working_model_id => @model.id, :locale => 'fr', :name => 'frfr'
|
99
|
-
|
93
|
+
invoke(:fr).should == 'frfr'
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe 'field_translation!' do
|
99
|
+
before do
|
100
|
+
@model = WorkingModel.new
|
101
|
+
@model.set_name_translation :en, 'pippo'
|
102
|
+
@model.save!
|
103
|
+
end
|
104
|
+
|
105
|
+
def invoke *args
|
106
|
+
@model.name_translation! *args
|
107
|
+
end
|
108
|
+
|
109
|
+
it_should_behave_like 'translation finder'
|
110
|
+
|
111
|
+
context 'when cache is empty and no value is found' do
|
112
|
+
it 'should return nil' do
|
113
|
+
invoke(:de).should be_nil
|
100
114
|
end
|
101
115
|
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe 'field_translation' do
|
119
|
+
before do
|
120
|
+
@model = WorkingModel.new
|
121
|
+
@model.set_name_translation :en, 'pippo'
|
122
|
+
@model.save!
|
123
|
+
end
|
124
|
+
|
125
|
+
def invoke *args
|
126
|
+
@model.name_translation *args
|
127
|
+
end
|
128
|
+
|
129
|
+
it_should_behave_like 'translation finder'
|
102
130
|
|
103
131
|
context 'when cache is empty and no value is found' do
|
104
132
|
it 'should search for I18n.default_locale if locale != I18n.default_locale' do
|
105
133
|
I18n.default_locale = :en
|
106
|
-
|
134
|
+
invoke(:de).should == @model.name_translation(:en)
|
107
135
|
end
|
108
136
|
|
109
137
|
it 'should return nil if locale == I18n.default_locale' do
|
110
138
|
I18n.default_locale = :de
|
111
|
-
|
139
|
+
invoke(:de).should be_nil
|
112
140
|
end
|
113
141
|
end
|
114
142
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: efficient_translations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Nicola Racco
|