Name | Total Lines | Lines of Code | Total Coverage | Code Coverage |
---|---|---|---|---|
ddl/language_set.rb | 92 | 69 | 27.17%
|
26.09%
|
Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.
1 |
2 require 'locale' |
3 |
4 module ACN |
5 module DDL |
6 class LanguageSet < DDLModule |
7 |
8 attr_accessor :languages |
9 |
10 def initialize(ddl, opts = {}) |
11 @name = opts[:name] || "" |
12 @languages = opts[:languages] || {} |
13 super(ddl,opts) |
14 @languages.merge!(extends.languages) if extends.is_a?(LanguageSet) |
15 end |
16 |
17 def translate(key,lang_code = nil) |
18 if lang_code.nil? |
19 lang_code = Locale.candidates(:type=>:simple).detect{|c| @languages.keys.include?(c.to_s.to_sym)}.to_s |
20 end |
21 |
22 language = @languages[LanguageSet.lang_code_to_sym(lang_code)] |
23 raise "No translation for language '#{lang_code}'" if language.nil? |
24 |
25 translation = language.translate(key) |
26 |
27 while !translation |
28 language = @languages[language.alt_lang] |
29 # Catch missing alt-languages here or missing translations |
30 if language.nil? |
31 raise "No translation for '#{key}' in language '#{lang_code}'" |
32 end |
33 translation = language.translate(key) |
34 end |
35 translation |
36 end |
37 |
38 def add_language(language) |
39 @languages.merge!({language.lang_code => language}) |
40 end |
41 |
42 # Make Locale to simple form and convert to symbol |
43 # A nil code will return nil. |
44 def self.lang_code_to_sym(code) |
45 unless code.nil? |
46 code = Locale::Tag.parse(code).to_simple.to_s |
47 code = code.to_sym |
48 end |
49 end |
50 |
51 # Creates a language set from Nokogiri output |
52 def self.from_nokogiri(ddl, doc) |
53 language_set = LanguageSet.new(ddl, :uuid => doc['uuid']) |
54 doc.xpath('.//language').each do |xml| |
55 language_set.add_language(Language.from_xml(xml)) |
56 end |
57 return language_set |
58 end |
59 end |
60 |
61 |
62 class Language |
63 attr_accessor :lang_code |
64 attr_accessor :alt_lang |
65 attr_accessor :strings |
66 |
67 def initialize |
68 @strings = {} |
69 end |
70 |
71 def translate(key) |
72 @strings[key] |
73 end |
74 |
75 def add_string(key, string) |
76 @strings[key] = string |
77 end |
78 |
79 def self.from_xml(doc) |
80 lang = Language.new() |
81 lang.lang_code = LanguageSet.lang_code_to_sym(doc['lang']) |
82 lang.alt_lang = LanguageSet.lang_code_to_sym(doc['altlang']) |
83 doc.xpath('.//string').each do |s| |
84 lang.strings.merge!(s['key'] => s.content) |
85 end |
86 return lang |
87 end |
88 end |
89 |
90 end |
91 |
92 end |
Generated on 2010-03-16 15:14:06 +1000 with rcov 0.9.2.1