Class: Numerals::Format::Symbols::Digits
Constant Summary
collapse
- DEFAULT_DIGITS =
%w(0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
Instance Attribute Summary collapse
Instance Method Summary
collapse
#[], [], aspect, #set, set
Constructor Details
#initialize(*args) ⇒ Digits
Returns a new instance of Digits.
18
19
20
21
22
23
24
25
26
|
# File 'lib/numerals/format/symbols.rb', line 18
def initialize(*args)
@digits = DEFAULT_DIGITS
@downcase_digits = @digits.map(&:downcase)
@max_base = @digits.size
@case_sensitive = false
@uppercase = false
@lowercase = false
set! *args
end
|
Instance Attribute Details
#case_sensitive ⇒ Object
Returns the value of attribute case_sensitive.
37
38
39
|
# File 'lib/numerals/format/symbols.rb', line 37
def case_sensitive
@case_sensitive
end
|
#digits_string ⇒ Object
Returns the value of attribute digits_string.
37
38
39
|
# File 'lib/numerals/format/symbols.rb', line 37
def digits_string
@digits_string
end
|
#lowercase ⇒ Object
Returns the value of attribute lowercase.
37
38
39
|
# File 'lib/numerals/format/symbols.rb', line 37
def lowercase
@lowercase
end
|
#max_base ⇒ Object
Returns the value of attribute max_base.
37
38
39
|
# File 'lib/numerals/format/symbols.rb', line 37
def max_base
@max_base
end
|
#uppercase ⇒ Object
Returns the value of attribute uppercase.
37
38
39
|
# File 'lib/numerals/format/symbols.rb', line 37
def uppercase
@uppercase
end
|
Instance Method Details
#case_sensitive? ⇒ Boolean
74
75
76
|
# File 'lib/numerals/format/symbols.rb', line 74
def case_sensitive?
case_sensitive
end
|
#digit_symbol(v, options = {}) ⇒ Object
93
94
95
96
97
|
# File 'lib/numerals/format/symbols.rb', line 93
def digit_symbol(v, options={})
base = options[:base] || @max_base
raise "Invalid base" if base > @max_base
v >= 0 && v < base ? @digits[v] : nil
end
|
#digit_value(digit) ⇒ Object
85
86
87
88
89
90
91
|
# File 'lib/numerals/format/symbols.rb', line 85
def digit_value(digit)
if @case_sensitive
@digits.index(digit)
else
@downcase_digits.index(digit.downcase)
end
end
|
#digits(options = {}) ⇒ Object
40
41
42
43
44
45
46
47
|
# File 'lib/numerals/format/symbols.rb', line 40
def digits(options = {})
base = options[:base] || @max_base
if base >= @max_base
@digits
else
@digits[0, base]
end
end
|
#digits=(digits) ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/numerals/format/symbols.rb', line 49
def digits=(digits)
if digits.is_a?(String)
@digits = digits.each_char.to_a
else
@digits = digits
end
@max_base = @digits.size
@lowercase = @digits.all? { |d| d.downcase == d }
@uppercase = @digits.all? { |d| d.upcase == d }
@downcase_digits = @digits.map(&:downcase)
if @digits.uniq.size != @max_base
raise "Inconsistent digits"
end
end
|
#digits_text(digit_values, options = {}) ⇒ Object
Convert sequence of digits to its text representation. The nil value can be used in the digits sequence to represent the group separator.
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/numerals/format/symbols.rb', line 102
def digits_text(digit_values, options={})
insignificant_digits = options[:insignificant_digits] || 0
num_digits = digit_values.reduce(0) { |num, digit|
digit.nil? ? num : num + 1
}
num_digits -= insignificant_digits
digit_values.map { |d|
if d.nil?
options[:separator]
else
num_digits -= 1
if num_digits >= 0
digit_symbol(d, options)
else
options[:insignificant_symbol]
end
end
}.join
end
|
#dup ⇒ Object
140
141
142
|
# File 'lib/numerals/format/symbols.rb', line 140
def dup
Digits[parameters]
end
|
#inspect ⇒ Object
136
137
138
|
# File 'lib/numerals/format/symbols.rb', line 136
def inspect
"Format::Symbols::#{self}"
end
|
#is_digit?(digit_symbol, options = {}) ⇒ Boolean
78
79
80
81
82
83
|
# File 'lib/numerals/format/symbols.rb', line 78
def is_digit?(digit_symbol, options={})
base = options[:base] || @max_base
raise "Invalid base" if base > @max_base
v = digit_value(digit_symbol)
v && v < base
end
|
#parameters ⇒ Object
122
123
124
125
126
127
128
129
|
# File 'lib/numerals/format/symbols.rb', line 122
def parameters
params = {}
params[:digits] = @digits
params[:case_sensitive] = @case_sensitive
params[:uppercase] = @uppercase
params[:lowercase] = @lowercase
params
end
|
#to_s ⇒ Object
131
132
133
134
|
# File 'lib/numerals/format/symbols.rb', line 131
def to_s
"Digits[#{parameters.inspect.unwrap('{}')}]"
end
|