Class: Cldr::Export::Data::Plurals::Rules

Inherits:
Array
  • Object
show all
Defined in:
lib/cldr/export/data/plurals/rules.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.parse(xml) ⇒ Object



10
11
12
13
14
15
16
17
18
# File 'lib/cldr/export/data/plurals/rules.rb', line 10

def parse(xml)
  rules = new
  REXML::Document.new(xml).elements.each('//pluralRules') do |tag|
    rule = Rule.new(tag.attributes['locales'].split(/\s+/))
    tag.elements.each('pluralRule') { |tag| rule << [tag.attributes['count'], tag.text] }
    rules << rule
  end
  rules
end

Instance Method Details

#localesObject



21
22
23
# File 'lib/cldr/export/data/plurals/rules.rb', line 21

def locales
  @locales ||= map { |rule| rule.locales }.flatten.map(&:to_s).sort.map(&:to_sym)
end

#rule(locale) ⇒ Object



25
26
27
# File 'lib/cldr/export/data/plurals/rules.rb', line 25

def rule(locale)
  detect { |rule| rule.locales.include?(locale.to_sym) }
end

#to_ruby(options = {}) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/cldr/export/data/plurals/rules.rb', line 29

def to_ruby(options = {})
  namespaces = options[:namespaces] || [:i18n]
  code = locales.map do |locale|
    rule = self.rule(locale)
    ruby = "{ :plural => { :keys => #{rule.keys.inspect}, :rule => #{rule.to_ruby} } }"
    ruby = namespaces.reverse.inject(ruby) { |ruby, namespace| "{ #{namespace.inspect} => #{ruby} }"}
    "#{locale.inspect} => #{ruby}"
  end.join(",\n")
  code = code.split("\n").map { |line| "  #{line}" }.join("\n")
  "{\n" + code + "\n}"
end