class TwitterCldr::Formatters::Rbnf::RbnfFormatter

Constants

DEFAULT_SPELLOUT_OPTIONS

Attributes

locale[R]

Public Class Methods

new(locale = TwitterCldr.locale) click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 38
def initialize(locale = TwitterCldr.locale)
  @locale = TwitterCldr.convert_locale(locale)
end
supported_locale?(locale) click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 32
def self.supported_locale?(locale)
  TwitterCldr.resource_exists?('locales', locale, 'rbnf')
end

Public Instance Methods

format(number, options = {}) click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 42
def format(number, options = {})
  rule_group_name, rule_set_name = *if options[:rule_group].nil? && options[:rule_set].nil?
    [DEFAULT_SPELLOUT_OPTIONS[:rule_group], DEFAULT_SPELLOUT_OPTIONS[:rule_set]]
  else
    [options[:rule_group], options[:rule_set]]
  end

  if rule_group = rule_group_by_name(rule_group_name)
    if rule_set = rule_group.rule_set_for(rule_set_name)
      if rule_set.public?
        RuleFormatter.format(number, rule_set, rule_group, locale)
      else
        raise PrivateRuleSetError.new(
          "#{rule_set_name} is a private rule set and cannot be used directly."
        )
      end
    end
  end
end
group_names() click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 62
def group_names
  @group_names ||= resource.map { |g| g[:type] }
end
rule_set_names_for_group(group_name) click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 66
def rule_set_names_for_group(group_name)
  cache_key = TwitterCldr::Utils.compute_cache_key(locale, group_name)

  rule_set_name_cache[cache_key] ||= begin
    if rule_group = rule_group_by_name(group_name)
      rule_group.rule_sets.inject([]) do |ret, rule_set|
        ret << rule_set.name if rule_set.public?
        ret
      end
    end
  end

  rule_set_name_cache[cache_key] || []
end

Private Instance Methods

resource() click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 124
def resource
  @resource ||= TwitterCldr.get_locale_resource(locale, "rbnf")[locale][:rbnf][:grouping]
end
rule_group_by_name(name) click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 83
def rule_group_by_name(name)
  cache_key = TwitterCldr::Utils.compute_cache_key(locale, name)

  rule_group_cache[cache_key] ||= begin
    group_data = resource.find do |group|
      group[:type] == name
    end

    if group_data
      rule_group_from_resource(group_data)
    end
  end
end
rule_group_cache() click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 97
def rule_group_cache
  @@rule_group_cache ||= {}
end
rule_group_from_resource(group_data) click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 115
def rule_group_from_resource(group_data)
  RuleGroup.new(
    group_data[:ruleset].map do |rule_set_data|
      rule_set_from_resource(rule_set_data)
    end,
    group_data[:type]
  )
end
rule_set_from_resource(rule_set_data) click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 105
def rule_set_from_resource(rule_set_data)
  RuleSet.new(
    rule_set_data[:rules].map do |rule|
      Rule.new(rule[:value], rule[:rule], rule[:radix], locale)
    end,
    rule_set_data[:type],
    rule_set_data[:access] || "public"
  )
end
rule_set_name_cache() click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf.rb, line 101
def rule_set_name_cache
  @@rule_set_name_cache ||= {}
end