class TwitterCldr::DataReaders::NumberDataReader
Constants
- ABBREVIATED_MAX_POWER
- ABBREVIATED_MIN_POWER
- DEFAULT_FORMAT
- DEFAULT_NUMBER_SYSTEM
- DEFAULT_SIGN
- DEFAULT_TYPE
- FORMATS
- FORMATTERS
- NUMBER_MAX
- NUMBER_MIN
- PATTERN_PATH
- PluralRules
- SYMBOL_PATH
- TYPES
Attributes
format[R]
number_system[R]
type[R]
Public Class Methods
new(locale, options = {})
click to toggle source
Calls superclass method
TwitterCldr::DataReaders::DataReader::new
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 41 def initialize(locale, options = {}) super(locale) @type = options[:type] || DEFAULT_TYPE unless type && TYPES.include?(type.to_sym) raise ArgumentError.new("Type #{type} is not supported") end @format = options[:format] || DEFAULT_FORMAT @number_system = options[:number_system] || default_number_system end
types()
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 37 def self.types TYPES end
Private Class Methods
within_abbreviation_range?(number)
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 147 def self.within_abbreviation_range?(number) abs_value = number.abs NUMBER_MIN <= abs_value && abs_value < NUMBER_MAX end
Public Instance Methods
default_number_system()
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 95 def default_number_system @default_number_system ||= resource[:numbers][:default_number_systems][:default].to_sym end
format_number(number, options = {})
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 53 def format_number(number, options = {}) precision = options[:precision] || 0 pattern_for_number = pattern(number, precision == 0) options[:locale] = self.locale tokens = tokenizer.tokenize(pattern_for_number) formatter.format(tokens, number, options) end
formatter()
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 91 def formatter @formatter ||= FORMATTERS[type].new(self) end
pattern(number, decimal = true)
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 61 def pattern(number, decimal = true) zeroes = number.to_i.abs.to_s.size - 1 magnitude = "1#{'0' * zeroes}" truncated_num = formatter.truncate_number(number, zeroes % 3 + 1) truncated_num = truncated_num.to_i if decimal plural_rule = PluralRules.rule_for(truncated_num, locale) path = PATTERN_PATH + [ type, number_system, [format, :default], magnitude.to_sym, [plural_rule, :other] ] sign = number < 0 ? :negative : :positive pattern_for_sign( traverse_finding_best_fit(path, []), sign ) end
pattern_for_sign(pattern, sign)
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 99 def pattern_for_sign(pattern, sign) if pattern.include?(";") positive, negative = pattern.split(";") sign == :positive ? positive : negative else case sign when :negative "#{symbols[:minus_sign] || '-'}#{pattern}" else pattern end end end
symbols()
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 83 def symbols @symbols ||= traverse_following_aliases(SYMBOL_PATH + [number_system]) end
tokenizer()
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 87 def tokenizer @tokenizer ||= TwitterCldr::Tokenizers::NumberTokenizer.new(self) end
Private Instance Methods
resource()
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 140 def resource @resource ||= begin raw = TwitterCldr.get_locale_resource(locale, :numbers) raw[TwitterCldr.convert_locale(locale)] end end
traverse_finding_best_fit(path_pattern, path, hash = resource)
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 115 def traverse_finding_best_fit(path_pattern, path, hash = resource) if path_pattern.empty? result = traverse_following_aliases(path, hash) return result if result.is_a?(String) else Array(path_pattern.first).each do |leg| result = traverse_finding_best_fit(path_pattern[1..-1], path + [leg], hash) return result if result end result = traverse_following_aliases(path, hash) return result if result.is_a?(String) end end
traverse_following_aliases(path, hash = resource)
click to toggle source
# File lib/twitter_cldr/data_readers/number_data_reader.rb, line 130 def traverse_following_aliases(path, hash = resource) traverse(path, hash) do |_leg, leg_data| if leg_data.is_a?(Symbol) && leg_data.to_s.start_with?('numbers.') traverse_following_aliases(leg_data.to_s.split('.').map(&:to_sym)) else leg_data end end end