Class: TwitterCldr::Formatters::Rbnf::NormalRuleFormatter

Inherits:
Object
  • Object
show all
Defined in:
lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb

Direct Known Subclasses

MasterRuleFormatter, NegativeRuleFormatter

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rule_set, rule_group, locale) ⇒ NormalRuleFormatter

Returns a new instance of NormalRuleFormatter.



56
57
58
59
60
61
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 56

def initialize(rule_set, rule_group, locale)
  @rule_set = rule_set
  @rule_group = rule_group
  @is_fractional = false
  @locale = locale
end

Instance Attribute Details

#is_fractionalObject (readonly)

Returns the value of attribute is_fractional.



54
55
56
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 54

def is_fractional
  @is_fractional
end

#localeObject (readonly)

Returns the value of attribute locale.



54
55
56
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 54

def locale
  @locale
end

#omitObject (readonly)

Returns the value of attribute omit.



54
55
56
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 54

def omit
  @omit
end

#rule_groupObject (readonly)

Returns the value of attribute rule_group.



54
55
56
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 54

def rule_group
  @rule_group
end

#rule_setObject (readonly)

Returns the value of attribute rule_set.



54
55
56
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 54

def rule_set
  @rule_set
end

Instance Method Details

#close_bracket(number, rule, token) ⇒ Object



110
111
112
113
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 110

def close_bracket(number, rule, token)
  @omit = false
  ""
end

#equals(number, rule, token) ⇒ Object



82
83
84
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 82

def equals(number, rule, token)
  generate_replacement(number, rule, token)
end

#format(number, rule) ⇒ Object



63
64
65
66
67
68
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 63

def format(number, rule)
  rule.tokens.map do |token|
    result = send(token.type, number, rule, token)
    @omit ? "" : result
  end.join
end

#generate_replacement(number, rule, token) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 86

def generate_replacement(number, rule, token)
  if rule_set_name = token.rule_set_reference
    RuleFormatter.format(
      number,
      rule_group.rule_set_for(rule_set_name),
      rule_group,
      locale
    )
  elsif decimal_format = token.decimal_format
    @data_reader ||= TwitterCldr::DataReaders::NumberDataReader.new(locale)
    @decimal_tokenizer ||= TwitterCldr::Tokenizers::NumberTokenizer.new(@data_reader)
    decimal_tokens = @decimal_tokenizer.tokenize(decimal_format)
    @decimal_formatter ||= TwitterCldr::Formatters::NumberFormatter.new(@data_reader)
    @decimal_formatter.format(decimal_tokens, number, :type => :decimal)
  else
    RuleFormatter.format(number, rule_set, rule_group, locale)
  end
end

#left_arrow(number, rule, token) ⇒ Object



77
78
79
80
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 77

def left_arrow(number, rule, token)
  quotient = number.abs / rule.divisor
  generate_replacement(quotient, rule, token)
end

#open_bracket(number, rule, token) ⇒ Object



105
106
107
108
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 105

def open_bracket(number, rule, token)
  @omit = rule.even_multiple_of?(number)
  ""
end

#plaintext(number, rule, token) ⇒ Object



115
116
117
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 115

def plaintext(number, rule, token)
  token.value
end

#right_arrow(number, rule, token) ⇒ Object



70
71
72
73
74
75
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 70

def right_arrow(number, rule, token)
  # this seems to break things even though the docs require it:
  # rule = rule_set.previous_rule_for(rule) if token.length == 3
  remainder = number.abs % rule.divisor
  generate_replacement(remainder, rule, token)
end

#semicolon(number, rule, token) ⇒ Object



119
120
121
# File 'lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb', line 119

def semicolon(number, rule, token)
  ""
end