ziffern 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ziffern.rb +15 -13
- data/ziffern_spec.rb +15 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d46e6090528de5ba4744026e7b24e3fa57bd74ac
|
4
|
+
data.tar.gz: e597e79f69f4bed8851f55b505fcc27a05676d59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b71fc874f5c1255920801d7574bcfa6c198fb0b0e9b9bcf9b14eb8b26db0cd99e43051803f1e81d81718fd9b386027614661793cd5ea3ae66c517a87b0ae9082
|
7
|
+
data.tar.gz: a857c43870ebe02af318fa5a7b623783d55b27fe209138647d6e6123fb7595be63dc2535165d06d3f0be9fdde47b57153fea9b0fc64e55b4553ca31450d74f79
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
**Number to text, in _German_!**
|
4
4
|
|
5
|
-
Handles _positive and negative_ numbers up to **
|
5
|
+
Handles _positive and negative_ numbers up to **126 digits**, with _unlimited decimals_.
|
6
6
|
|
7
7
|
Just create an instance of the class and use the `#to_german` method to convert numbers,
|
8
8
|
it accepts floats, integers and strings, and will raise subclasses of `ArgumentError` if
|
data/ziffern.rb
CHANGED
@@ -2,14 +2,16 @@ class Ziffern
|
|
2
2
|
|
3
3
|
# http://de.wikipedia.org/wiki/Zahlennamen
|
4
4
|
|
5
|
-
NINETEEN = %w
|
6
|
-
dreizehn vierzehn fünfzehn sechzehn siebzehn achtzehn neunzehn
|
5
|
+
NINETEEN = %w[ null eins zwei drei vier fünf sechs sieben acht neun zehn elf zwölf
|
6
|
+
dreizehn vierzehn fünfzehn sechzehn siebzehn achtzehn neunzehn ]
|
7
7
|
|
8
|
-
TENS = %w
|
8
|
+
TENS = [nil, nil] + %w[ zwanzig dreißig vierzig fünfzig sechzig siebzig achtzig neunzig ]
|
9
9
|
|
10
|
-
BIG = %w
|
11
|
-
|
12
|
-
|
10
|
+
BIG = %w[
|
11
|
+
M B Tr Quadr Quint Sext Sept Okt Non Dez Undez Dodez Tredez
|
12
|
+
Quattuordez Quindez Sedez Septendez Dodevigint Undevigint Vigint
|
13
|
+
].flat_map do |prefix|
|
14
|
+
%W[ #{prefix}illion #{prefix}illiarde ]
|
13
15
|
end
|
14
16
|
|
15
17
|
TooLargeNumberError = Class.new(ArgumentError)
|
@@ -78,10 +80,10 @@ class Ziffern
|
|
78
80
|
end
|
79
81
|
|
80
82
|
def convert_millions(number_of_millions)
|
81
|
-
|
82
|
-
fail TooLargeNumberError if
|
83
|
+
pairs = pair_with_big_names(number_of_millions)
|
84
|
+
fail TooLargeNumberError if pairs.size > BIG.size
|
83
85
|
|
84
|
-
|
86
|
+
pairs
|
85
87
|
.reject { |amount,| amount.zero? }
|
86
88
|
.map { |amount, name| quantify_big_name(amount, name) }
|
87
89
|
.join(' ')
|
@@ -95,15 +97,15 @@ class Ziffern
|
|
95
97
|
end
|
96
98
|
|
97
99
|
# 12345678 => [[12, "Billion"], [345, "Milliarde"], [678, "Million"]]
|
98
|
-
def
|
99
|
-
|
100
|
+
def pair_with_big_names(number_of_millions)
|
101
|
+
number_groups = []
|
100
102
|
|
101
103
|
until number_of_millions.zero?
|
102
104
|
number_of_millions, last_3 = number_of_millions.divmod(1000)
|
103
|
-
|
105
|
+
number_groups << last_3
|
104
106
|
end
|
105
107
|
|
106
|
-
|
108
|
+
number_groups.zip(BIG).reverse
|
107
109
|
end
|
108
110
|
|
109
111
|
def convert_decimals(number)
|
data/ziffern_spec.rb
CHANGED
@@ -14,16 +14,6 @@ describe Ziffern do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
context 'error handling' do
|
18
|
-
it 'throws an ArgumentError if the number is bigger than it can handle' do
|
19
|
-
expect { subject.to_german(10 ** 126) }.to raise_error Ziffern::TooLargeNumberError
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'throws an error on faulty input' do
|
23
|
-
expect { subject.to_german("invalid.5") }.to raise_error Ziffern::InvalidNumberError
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
17
|
context 'numbers up to 20' do
|
28
18
|
test_german_numbers({
|
29
19
|
0 => "null",
|
@@ -50,7 +40,7 @@ describe Ziffern do
|
|
50
40
|
})
|
51
41
|
end
|
52
42
|
|
53
|
-
context 'up to one million' do
|
43
|
+
context 'numbers up to one million' do
|
54
44
|
test_german_numbers({
|
55
45
|
1000 => "eintausend",
|
56
46
|
1234 => "eintausendzweihundertvierunddreißig",
|
@@ -84,9 +74,9 @@ describe Ziffern do
|
|
84
74
|
test_german_numbers({
|
85
75
|
0.1234 => "null Komma eins zwei drei vier",
|
86
76
|
5.6789 => "fünf Komma sechs sieben acht neun",
|
77
|
+
5.0 => "fünf Komma null",
|
87
78
|
-5.6 => "minus fünf Komma sechs",
|
88
79
|
-567.89 => "minus fünfhundertsiebenundsechzig Komma acht neun",
|
89
|
-
5.0 => "fünf Komma null",
|
90
80
|
-0.001 => "minus null Komma null null eins"
|
91
81
|
})
|
92
82
|
end
|
@@ -99,4 +89,17 @@ describe Ziffern do
|
|
99
89
|
})
|
100
90
|
end
|
101
91
|
|
92
|
+
context 'errors' do
|
93
|
+
it 'raises an error if the number is bigger than it can handle' do
|
94
|
+
expect { subject.to_german(10 ** 126) }.to raise_error Ziffern::TooLargeNumberError
|
95
|
+
expect { subject.to_german(-10 ** 126) }.to raise_error Ziffern::TooLargeNumberError
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'raises an error on faulty input' do
|
99
|
+
expect { subject.to_german("invalid") }.to raise_error Ziffern::InvalidNumberError
|
100
|
+
expect { subject.to_german("invalid.5") }.to raise_error Ziffern::InvalidNumberError
|
101
|
+
expect { subject.to_german("5.5u") }.to raise_error Ziffern::InvalidNumberError
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
102
105
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ziffern
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jimmy Börjesson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|