snusnu-dm-is-localizable 0.0.6 → 0.0.7
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.
- data/CHANGELOG +39 -0
- data/README.textile +37 -1
- data/VERSION +1 -1
- data/dm-is-localizable.gemspec +1 -1
- data/lib/dm-is-localizable/is/localizable.rb +23 -2
- data/spec/unit/class_level_api_spec.rb +10 -0
- data/spec/unit/instance_level_api_spec.rb +39 -0
- metadata +1 -1
data/CHANGELOG
CHANGED
@@ -1,3 +1,42 @@
|
|
1
|
+
[59dd665 | Mon May 18 17:23:50 UTC 2009] snusnu <gamsnjaga@gmail.com>
|
2
|
+
|
3
|
+
* Version bump to 0.0.7
|
4
|
+
|
5
|
+
[845b6f0 | Mon May 18 16:44:16 UTC 2009] snusnu <gamsnjaga@gmail.com>
|
6
|
+
|
7
|
+
* more specs for the generated property translation readers
|
8
|
+
|
9
|
+
[30990da | Mon May 18 16:31:07 UTC 2009] snusnu <gamsnjaga@gmail.com>
|
10
|
+
|
11
|
+
* fixed README
|
12
|
+
|
13
|
+
[e8c9981 | Mon May 18 16:25:46 UTC 2009] snusnu <gamsnjaga@gmail.com>
|
14
|
+
|
15
|
+
* added readers that return the property translated to the target language.
|
16
|
+
|
17
|
+
If the property :name is declared to be localizable for class Item,
|
18
|
+
and there is a ItemTranslation for 'en-US', you're able to call
|
19
|
+
|
20
|
+
* i.name(:en_US)
|
21
|
+
|
22
|
+
on an instance of Item named i
|
23
|
+
|
24
|
+
[0981aa8 | Mon May 18 16:10:25 UTC 2009] snusnu <gamsnjaga@gmail.com>
|
25
|
+
|
26
|
+
* README cosmetics
|
27
|
+
|
28
|
+
[f8993ae | Mon May 18 16:07:00 UTC 2009] snusnu <gamsnjaga@gmail.com>
|
29
|
+
|
30
|
+
* added localizable_properties class level API
|
31
|
+
|
32
|
+
[9bace64 | Mon May 18 15:52:23 UTC 2009] snusnu <gamsnjaga@gmail.com>
|
33
|
+
|
34
|
+
* updated README to reflect latest API addition
|
35
|
+
|
36
|
+
[4a43df6 | Mon May 18 15:43:52 UTC 2009] snusnu <gamsnjaga@gmail.com>
|
37
|
+
|
38
|
+
* stripped whitespace, updated changelog and regenerated gemspec
|
39
|
+
|
1
40
|
[82db7fd | Mon May 18 15:42:50 UTC 2009] snusnu <gamsnjaga@gmail.com>
|
2
41
|
|
3
42
|
* Version bump to 0.0.6
|
data/README.textile
CHANGED
@@ -68,7 +68,13 @@ end
|
|
68
68
|
|
69
69
|
The above @Item@ model will define and thus be able to @DataMapper.auto_migrate!@ the @ItemTranslation@ model. The _naming convention_ used here is @"#{ClassToBeLocalized.name}Translation"@.
|
70
70
|
|
71
|
-
Preliminary support for changing this is available by using the @:class_name@ option like so
|
71
|
+
Preliminary support for changing this is available by using the @:class_name@ option like so (note that this isn't specced yet).
|
72
|
+
|
73
|
+
<pre>
|
74
|
+
<code>
|
75
|
+
@DataMapper::Model.is :localized, :class_name => 'ItemLocalization'@
|
76
|
+
</code>
|
77
|
+
</pre>
|
72
78
|
|
73
79
|
<pre>
|
74
80
|
<code>
|
@@ -138,6 +144,16 @@ class Item
|
|
138
144
|
nr_of_available_languages * all.size == translation_class.all.size
|
139
145
|
end
|
140
146
|
|
147
|
+
# returns a list of symbols reflecting all localizable property names of this resource
|
148
|
+
def localizable_properties
|
149
|
+
translation_class.properties.map do |p|
|
150
|
+
p.name
|
151
|
+
end.select do |p|
|
152
|
+
# exclude properties that are'nt localizable
|
153
|
+
p != :id && p != :language_id && p != Extlib::Inflection.foreign_key(self.name).to_sym
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
141
157
|
# ----------------------
|
142
158
|
# instance level API
|
143
159
|
# ----------------------
|
@@ -157,6 +173,26 @@ class Item
|
|
157
173
|
self.class.nr_of_available_languages == translations.size
|
158
174
|
end
|
159
175
|
|
176
|
+
# translates the given attribute to the language identified by the given language_code
|
177
|
+
def translate(attribute, language_code)
|
178
|
+
if language = Language[language_code]
|
179
|
+
t = translations.first(:language_id => language.id)
|
180
|
+
t.respond_to?(attribute) ? t.send(attribute) : nil
|
181
|
+
else
|
182
|
+
nil
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# translates the :name property to the given language
|
187
|
+
def name(language_code)
|
188
|
+
translate(:name, language_code)
|
189
|
+
end
|
190
|
+
|
191
|
+
# translates the :desc property to the given language
|
192
|
+
def desc(language_code)
|
193
|
+
translate(:desc, language_code)
|
194
|
+
end
|
195
|
+
|
160
196
|
|
161
197
|
# TODO
|
162
198
|
# more API to support common usecases (and i18n/l10n solutions)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
data/dm-is-localizable.gemspec
CHANGED
@@ -39,9 +39,19 @@ module DataMapper
|
|
39
39
|
|
40
40
|
has n, :languages, :through => remixee
|
41
41
|
|
42
|
-
self.class_eval(<<-
|
42
|
+
self.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
|
43
43
|
alias :translations #{remixee}
|
44
|
-
|
44
|
+
RUBY
|
45
|
+
|
46
|
+
localizable_properties.each do |property_name|
|
47
|
+
self.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
|
48
|
+
|
49
|
+
def #{property_name}(language_code)
|
50
|
+
translate(:#{property_name.to_sym}, language_code)
|
51
|
+
end
|
52
|
+
|
53
|
+
RUBY
|
54
|
+
end
|
45
55
|
|
46
56
|
end
|
47
57
|
|
@@ -62,6 +72,16 @@ module DataMapper
|
|
62
72
|
available_languages.size * all.size == translation_class.all.size
|
63
73
|
end
|
64
74
|
|
75
|
+
# returns a list of symbols reflecting all localizable property names of this resource
|
76
|
+
def localizable_properties
|
77
|
+
translation_class.properties.map do |p|
|
78
|
+
p.name
|
79
|
+
end.select do |p|
|
80
|
+
# exclude properties that are'nt localizable
|
81
|
+
p != :id && p != :language_id && p != Extlib::Inflection.foreign_key(self.name).to_sym
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
65
85
|
end
|
66
86
|
|
67
87
|
module InstanceMethods
|
@@ -81,6 +101,7 @@ module DataMapper
|
|
81
101
|
self.class.nr_of_available_languages == translations.size
|
82
102
|
end
|
83
103
|
|
104
|
+
# translates the given attribute to the language identified by the given language_code
|
84
105
|
def translate(attribute, language_code)
|
85
106
|
if language = Language[language_code]
|
86
107
|
t = translations.first(:language_id => language.id)
|
@@ -156,4 +156,14 @@ describe "class level API:" do
|
|
156
156
|
|
157
157
|
end
|
158
158
|
|
159
|
+
describe "localizable_properties" do
|
160
|
+
|
161
|
+
it "should return a list of symbols reflecting the localizable properties" do
|
162
|
+
Item.localizable_properties.size.should == 2
|
163
|
+
Item.localizable_properties.should include(:name)
|
164
|
+
Item.localizable_properties.should include(:desc)
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
168
|
+
|
159
169
|
end
|
@@ -208,4 +208,43 @@ describe "instance level API:" do
|
|
208
208
|
|
209
209
|
end
|
210
210
|
|
211
|
+
describe "property_name(language_code)" do
|
212
|
+
|
213
|
+
before :each do
|
214
|
+
@l1 = Language.create :code => 'en-US', :name => 'English'
|
215
|
+
@l2 = Language.create :code => 'de-AT', :name => 'Deutsch'
|
216
|
+
@i1 = Item.create
|
217
|
+
@t1 = ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
218
|
+
@t2 = ItemTranslation.create :item => @i1, :language => @l2, :name => 'Buch', :desc => 'Literatur'
|
219
|
+
end
|
220
|
+
|
221
|
+
describe "with a nil language_code" do
|
222
|
+
|
223
|
+
it "should return nil" do
|
224
|
+
@i1.name(nil).should be_nil
|
225
|
+
end
|
226
|
+
|
227
|
+
end
|
228
|
+
|
229
|
+
describe "with a non existent language_code" do
|
230
|
+
|
231
|
+
it "should return nil" do
|
232
|
+
@i1.name(:it).should be_nil
|
233
|
+
end
|
234
|
+
|
235
|
+
end
|
236
|
+
|
237
|
+
describe "with an existing language_code" do
|
238
|
+
|
239
|
+
it "should return the translated property" do
|
240
|
+
@i1.name(:en_US).should == 'Book'
|
241
|
+
@i1.desc(:en_US).should == 'Literature'
|
242
|
+
@i1.name(:de_AT).should == 'Buch'
|
243
|
+
@i1.desc(:de_AT).should == 'Literatur'
|
244
|
+
end
|
245
|
+
|
246
|
+
end
|
247
|
+
|
248
|
+
end
|
249
|
+
|
211
250
|
end
|