babylonia 0.1.0 → 0.1.1
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
- data/lib/babylonia/class_methods.rb +15 -3
- data/lib/babylonia/version.rb +1 -1
- data/spec/babylonia/class_methods_spec.rb +18 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e5e07171440e9ebac6b51d3f768b68471dcbd5cd
|
|
4
|
+
data.tar.gz: 7c0141cd5353cfe4e8e4fa10abdad68675388466
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bc939cba85b5aadb2bf909dcccafff796137489ee22956aaf91c000f347e21b3fc3db967f2736c871b78848f56b8f4b77ec65af1cc2c172da6548a056952b30d
|
|
7
|
+
data.tar.gz: df443e957bc998fb312d3f483f9fb38c68e8bfd817abf897db36f200ea7804811268cf1655a2b38a8f6508aefb76b836caa1e384c1d873120f3ec266bddab4e9
|
|
@@ -30,14 +30,15 @@ module Babylonia
|
|
|
30
30
|
fields.each do |field|
|
|
31
31
|
# Alias method chain the field to a translated value
|
|
32
32
|
# @param [Symbol] locale Pass a locale to get the field translation in this specific locale
|
|
33
|
+
# @param [Boolean] fallback Whether a fallback should be used, defaults to true
|
|
33
34
|
# @return [String, NilClass] Either the string with the translation, the fallback, the placeholder or nil
|
|
34
35
|
# @example Call a field in italian
|
|
35
36
|
# your_instance.field(:it) #=> "Translation"
|
|
36
37
|
#
|
|
37
|
-
define_method :"#{field}_translated" do |l=nil|
|
|
38
|
+
define_method :"#{field}_translated" do |l=nil, options={fallback: true}|
|
|
38
39
|
field_hash = send(:"#{field}_hash")
|
|
39
40
|
translation = field_hash[l || locale]
|
|
40
|
-
translation = field_hash[default_locale] if translation.nil? or translation.empty? and locale_fallback?
|
|
41
|
+
translation = field_hash[default_locale] if translation.nil? or translation.empty? and options[:fallback] and locale_fallback?
|
|
41
42
|
(translation.nil? or translation.empty?) ? missing_translation_placeholder(field) : translation
|
|
42
43
|
end
|
|
43
44
|
alias_method :"#{field}_raw", field
|
|
@@ -141,9 +142,20 @@ module Babylonia
|
|
|
141
142
|
end
|
|
142
143
|
|
|
143
144
|
# Define method missing to be able to access a language directly
|
|
145
|
+
# Enables to call a language virtual attribute directly
|
|
146
|
+
# @note Since the virtual attribute is called directly, there is no fallback on this unless you set it to true
|
|
147
|
+
# @example Call a getter directly
|
|
148
|
+
# object.field_de #=> 'DEUTSCH'
|
|
149
|
+
# @example Call a setter directly
|
|
150
|
+
# object.field_de = 'DEUTSCH'
|
|
151
|
+
# @example Call an untranslated field
|
|
152
|
+
# object.field_it #=> nil
|
|
153
|
+
#
|
|
154
|
+
# @example Call a field with fallback
|
|
155
|
+
# object.field_it(fallback: true)
|
|
144
156
|
define_method :method_missing do |meth, *args, &block|
|
|
145
157
|
if (m = meth.to_s.match(/\A([^_]+)_(\w+)(=)?\z/).to_a[1..3]) && localized?(m[0]) && has_available_locale?(m[1])
|
|
146
|
-
send(m[0] + m[2].to_s,
|
|
158
|
+
m[2] ? send(m[0] + m[2].to_s, {m[1].to_sym => args.first}) : send(m[0], m[1].to_sym, args.first || {})
|
|
147
159
|
else
|
|
148
160
|
super(meth, *args, &block)
|
|
149
161
|
end
|
data/lib/babylonia/version.rb
CHANGED
|
@@ -32,6 +32,11 @@ describe Babylonia::ClassMethods do
|
|
|
32
32
|
it "should return the translation in that locale" do
|
|
33
33
|
subject.marshes(:de).should == 'FALLBACK'
|
|
34
34
|
end
|
|
35
|
+
context "with fallback to false" do
|
|
36
|
+
it "should return nil" do
|
|
37
|
+
subject.marshes(:it, fallback: false).should be_nil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
35
40
|
end
|
|
36
41
|
end
|
|
37
42
|
context "with only fallback data" do
|
|
@@ -66,10 +71,17 @@ describe Babylonia::ClassMethods do
|
|
|
66
71
|
context "with the missing method matching the pattern FIELD_LANGUAGE" do
|
|
67
72
|
let(:meth) { :marshes_en }
|
|
68
73
|
it "should call the attribute method with an argument" do
|
|
69
|
-
subject.should_receive(:marshes).with(:en).once
|
|
74
|
+
subject.should_receive(:marshes).with(:en, {}).once
|
|
70
75
|
subject.send(meth)
|
|
71
76
|
end
|
|
72
77
|
end
|
|
78
|
+
context "with the missing method matching the pattern FIELD_LANGUAGE and a fallback argument" do
|
|
79
|
+
let(:meth) { :marshes_en }
|
|
80
|
+
it "should call the attribute method with the fallback argument" do
|
|
81
|
+
subject.should_receive(:marshes).with(:en, {fallback: true}).once
|
|
82
|
+
subject.send(meth, fallback: true)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
73
85
|
context "with the missing method not matching the pattern" do
|
|
74
86
|
let(:meth) { :marshes_something_else_entirely }
|
|
75
87
|
it "should raise Method Missing" do
|
|
@@ -270,6 +282,11 @@ describe Babylonia::ClassMethods do
|
|
|
270
282
|
it "should return the translation in that locale" do
|
|
271
283
|
subject.grasslands(:de).should == 'FALLBACK'
|
|
272
284
|
end
|
|
285
|
+
context "with fallback to false" do
|
|
286
|
+
it "should return the placeholder" do
|
|
287
|
+
subject.grasslands(:gb, fallback: false).should == "<span class='missing translation'>Translation missing for grasslands</span>"
|
|
288
|
+
end
|
|
289
|
+
end
|
|
273
290
|
end
|
|
274
291
|
end
|
|
275
292
|
context "with only fallback data" do
|