Openacn Ruby C0 Coverage Information - RCov

ddl/language_set.rb

Name Total Lines Lines of Code Total Coverage Code Coverage
ddl/language_set.rb 92 69
27.17%
26.09%

Key

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.

Coverage Details

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