Class: TwitterCldr::DataReaders::NumberDataReader

Inherits:
DataReader
  • Object
show all
Defined in:
lib/twitter_cldr/data_readers/number_data_reader.rb

Constant Summary collapse

DEFAULT_NUMBER_SYSTEM =
"latn"
ABBREVIATED_MIN_POWER =
3
ABBREVIATED_MAX_POWER =
14
NUMBER_MIN =
10 ** ABBREVIATED_MIN_POWER
NUMBER_MAX =
10 ** (ABBREVIATED_MAX_POWER + 1)
BASE_PATH =
[:numbers, :formats]
SYMBOL_PATH =
[:numbers, :symbols]
TYPE_PATHS =
{
  :default       => [:decimal, :patterns],
  :decimal       => [:decimal, :patterns],
  :long_decimal  => [:decimal, :patterns, :long],
  :short_decimal => [:decimal, :patterns, :short],
  :currency      => [:currency, :patterns],
  :percent       => [:percent, :patterns]
}
ABBREVIATED_TYPES =
[:long_decimal, :short_decimal]
DEFAULT_TYPE =
:decimal
DEFAULT_FORMAT =
:default
DEFAULT_SIGN =
:positive

Instance Attribute Summary collapse

Attributes inherited from DataReader

#locale

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from DataReader

#pattern_at_path

Constructor Details

#initialize(locale, options = {}) ⇒ NumberDataReader

Returns a new instance of NumberDataReader.



41
42
43
44
45
46
47
48
49
50
# 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 && TYPE_PATHS.include?(type.to_sym)
    raise ArgumentError.new("Type #{type} is not supported")
  end

  @format = options[:format] || DEFAULT_FORMAT
end

Instance Attribute Details

#formatObject (readonly)

Returns the value of attribute format.



35
36
37
# File 'lib/twitter_cldr/data_readers/number_data_reader.rb', line 35

def format
  @format
end

#typeObject (readonly)

Returns the value of attribute type.



35
36
37
# File 'lib/twitter_cldr/data_readers/number_data_reader.rb', line 35

def type
  @type
end

Class Method Details

.typesObject



37
38
39
# File 'lib/twitter_cldr/data_readers/number_data_reader.rb', line 37

def self.types
  TYPE_PATHS.keys
end

Instance Method Details

#formatterObject



89
90
91
92
93
94
95
# File 'lib/twitter_cldr/data_readers/number_data_reader.rb', line 89

def formatter
  @formatter ||= begin
    klass_name = type.to_s.split("_").map(&:capitalize).join
    klass = TwitterCldr::Formatters.const_get(:"#{klass_name}Formatter")
    klass.new(self)
  end
end

#number_system_for(type) ⇒ Object



77
78
79
# File 'lib/twitter_cldr/data_readers/number_data_reader.rb', line 77

def number_system_for(type)
  (traverse(BASE_PATH + [type]) || {}).fetch(:number_system, DEFAULT_NUMBER_SYSTEM)
end

#pattern(number = nil) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/twitter_cldr/data_readers/number_data_reader.rb', line 52

def pattern(number = nil)
  sign = number < 0 ? :negative : :positive 
  path = BASE_PATH + if valid_type_for?(number, type)
    TYPE_PATHS[type]
  else
    TYPE_PATHS[:default]
  end

  pattern = traverse(path)

  if pattern[format]
    pattern = pattern[format]
  end

  if number
    pattern = pattern_for_number(pattern, number)
  end

  if pattern.is_a?(String)
    pattern_for_sign(pattern, sign)
  else
    pattern
  end
end

#symbolsObject



81
82
83
# File 'lib/twitter_cldr/data_readers/number_data_reader.rb', line 81

def symbols
  @symbols ||= traverse(SYMBOL_PATH)
end

#tokenizerObject



85
86
87
# File 'lib/twitter_cldr/data_readers/number_data_reader.rb', line 85

def tokenizer
  @tokenizer ||= TwitterCldr::Tokenizers::NumberTokenizer.new(self)
end