Class: TwitterCldr::Formatters::Rbnf::Rule

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

Constant Summary collapse

SUBSTITUTION_TYPES =
[:equals, :left_arrow, :right_arrow]
MASTER =
"x.0"
IMPROPER_FRACTION =
"x.x"
PROPER_FRACTION =
"0.x"
NEGATIVE =
"-x"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_value, rule_text, radix) ⇒ Rule

Returns a new instance of Rule.



19
20
21
22
23
# File 'lib/twitter_cldr/formatters/numbers/rbnf/rule.rb', line 19

def initialize(base_value, rule_text, radix)
  @base_value = base_value
  @rule_text = rule_text
  @radix = radix
end

Instance Attribute Details

#base_valueObject (readonly)

Returns the value of attribute base_value.



17
18
19
# File 'lib/twitter_cldr/formatters/numbers/rbnf/rule.rb', line 17

def base_value
  @base_value
end

#radixObject (readonly)

Returns the value of attribute radix.



17
18
19
# File 'lib/twitter_cldr/formatters/numbers/rbnf/rule.rb', line 17

def radix
  @radix
end

#rule_textObject (readonly)

Returns the value of attribute rule_text.



17
18
19
# File 'lib/twitter_cldr/formatters/numbers/rbnf/rule.rb', line 17

def rule_text
  @rule_text
end

Instance Method Details

#divisorObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/twitter_cldr/formatters/numbers/rbnf/rule.rb', line 25

def divisor
  @divisor ||= begin
    val = base_value.to_i
    exp = val > 0 ? (Math.log(val) / Math.log(radix || 10)).ceil : 1
    div = exp >= 0 ? (radix || 10) ** exp : 1

    # if result is too big, subtract one from exponent and try again
    if div > val
      (radix || 10) ** (exp - 1)
    else
      div
    end
  end
end

#even_multiple_of?(num) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/twitter_cldr/formatters/numbers/rbnf/rule.rb', line 46

def even_multiple_of?(num)
  num % divisor == 0
end

#improper_fraction?Boolean

Returns:

  • (Boolean)


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

def improper_fraction?
  base_value == IMPROPER_FRACTION
end

#master?Boolean

Returns:

  • (Boolean)


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

def master?
  base_value == MASTER
end

#negative?Boolean

Returns:

  • (Boolean)


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

def negative?
  base_vaue == NEGATIVE
end

#normal?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/twitter_cldr/formatters/numbers/rbnf/rule.rb', line 50

def normal?
  !(master? || improper_fraction? || proper_fraction? || negative?)
end

#proper_fraction?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/twitter_cldr/formatters/numbers/rbnf/rule.rb', line 62

def proper_fraction?
  base_value == PROPER_FRACTION
end

#substitution_countObject



40
41
42
43
44
# File 'lib/twitter_cldr/formatters/numbers/rbnf/rule.rb', line 40

def substitution_count
  @substitution_count ||= tokens.inject(0) do |ret, token|
    token.is_a?(Substitution) ? ret + 1 : ret
  end
end

#tokensObject



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

def tokens
  @tokens ||= inline_substitutions(
    tokenizer.tokenize(rule_text)
  )
end