ziffern 1.0.3 → 1.1.0
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 +13 -10
- data/ziffern.rb +10 -3
- data/ziffern_spec.rb +10 -4
- 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: 315e0993fe513ac37395d1f11482815cc99bd338
|
4
|
+
data.tar.gz: efb38af4eb9f3a046e42e35d5488c03aadc0778b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0be10fde397f6ab2f527f8b6f4e357b8ed128b7be1304f1c77be85538a01968f6f6b79d934baf2215701a8df26ed1c5d724f2302a7de08d167b41048a31c16f9
|
7
|
+
data.tar.gz: b45e9c8c42634e11555da8079f3527220c1fa17444e14ba5f15bf4af8d34344c2e6a9f71cddd558b6a0eb95227250cd8d2456c7a7cddf0cdabc599c305b26974
|
data/README.md
CHANGED
@@ -4,18 +4,21 @@
|
|
4
4
|
|
5
5
|
Handles _positive and negative_ numbers up to **125 digits**, with _unlimited decimals_.
|
6
6
|
|
7
|
+
Just create an instance of the class and use the `#to_german` method to convert numbers,
|
8
|
+
it accepts floats, integers and strings, and will raise subclasses of `ArgumentError` if
|
9
|
+
it is not able to handle what you pass in.
|
10
|
+
|
7
11
|
```ruby
|
8
12
|
require 'ziffern'
|
9
13
|
converter = Ziffern.new
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
# >> eine Dezilliarde eins
|
15
|
+
converter.to_german 1 # => "eins"
|
16
|
+
converter.to_german -5 # => "minus fünf"
|
17
|
+
converter.to_german 12345 # => "zwölftausenddreihundertfünfundvierzig"
|
18
|
+
converter.to_german 99.99 # => "neunundneunzig Komma neun neun"
|
19
|
+
converter.to_german 0.00 # => "null Komma null"
|
20
|
+
converter.to_german '0.00' # => "null Komma null null"
|
21
|
+
converter.to_german 10**125 # => "einhundert Vigintilliarden"
|
22
|
+
converter.to_german 'invalid' # ~> Ziffern::InvalidNumberError
|
23
|
+
converter.to_german 10**126 # ~> Ziffern::TooLargeNumberError
|
21
24
|
```
|
data/ziffern.rb
CHANGED
@@ -8,17 +8,24 @@ class Ziffern
|
|
8
8
|
TENS = %w{ zwanzig dreißig vierzig fünfzig sechzig siebzig achtzig neunzig }.unshift(nil, nil)
|
9
9
|
|
10
10
|
BIG = %w{ M B Tr Quadr Quint Sext Sept Okt Non Dez Undez Dodez Tredez
|
11
|
-
|
11
|
+
Quattuordez Quindez Sedez Septendez Dodevigint Undevigint Vigint }.flat_map do |prefix|
|
12
12
|
%W( #{prefix}illion #{prefix}illiarde )
|
13
13
|
end
|
14
14
|
|
15
|
+
TooLargeNumberError = Class.new(ArgumentError)
|
16
|
+
InvalidNumberError = Class.new(ArgumentError)
|
15
17
|
|
16
18
|
def to_german(number)
|
19
|
+
fail InvalidNumberError unless valid_number?(number)
|
17
20
|
convert_sign(number) + convert_integer(number) + convert_decimals(number)
|
18
21
|
end
|
19
22
|
|
20
23
|
private
|
21
24
|
|
25
|
+
def valid_number?(number)
|
26
|
+
!!number.to_s[/\A-?\d+(\.\d+)?\z/]
|
27
|
+
end
|
28
|
+
|
22
29
|
def convert_sign(number)
|
23
30
|
if number.to_f < 0
|
24
31
|
"minus "
|
@@ -72,10 +79,10 @@ class Ziffern
|
|
72
79
|
|
73
80
|
def convert_millions(number_of_millions)
|
74
81
|
groups = group_with_big_names(number_of_millions)
|
75
|
-
fail
|
82
|
+
fail TooLargeNumberError if groups.size > BIG.size
|
76
83
|
|
77
84
|
groups
|
78
|
-
.reject { |amount
|
85
|
+
.reject { |amount,| amount.zero? }
|
79
86
|
.map { |amount, name| quantify_big_name(amount, name) }
|
80
87
|
.join(' ')
|
81
88
|
end
|
data/ziffern_spec.rb
CHANGED
@@ -14,6 +14,16 @@ 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
|
+
|
17
27
|
context 'numbers up to 20' do
|
18
28
|
test_german_numbers({
|
19
29
|
0 => "null",
|
@@ -60,10 +70,6 @@ describe Ziffern do
|
|
60
70
|
})
|
61
71
|
end
|
62
72
|
|
63
|
-
it 'throws an ArgumentError if the number is bigger than it can handle' do
|
64
|
-
expect { subject.to_german(10 ** 126) }.to raise_error ArgumentError
|
65
|
-
end
|
66
|
-
|
67
73
|
context 'negative numbers' do
|
68
74
|
test_german_numbers({
|
69
75
|
-1 => "minus eins",
|
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.0
|
4
|
+
version: 1.1.0
|
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-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|