ziffern 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -10
  3. data/ziffern.rb +10 -3
  4. data/ziffern_spec.rb +10 -4
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 70eaaad3cbb7f3b3f9a771ad594808d1b3355b99
4
- data.tar.gz: 1258f0ad107131e9115f7adf83432468e14c11da
3
+ metadata.gz: 315e0993fe513ac37395d1f11482815cc99bd338
4
+ data.tar.gz: efb38af4eb9f3a046e42e35d5488c03aadc0778b
5
5
  SHA512:
6
- metadata.gz: 4a0c95ca8673b14b036fdc9ce3bc8fbd648e33bc26930e3a27f3f99f0ef174db185cd4e6e6fda7e678c178c8b1e6a4f0857c403a6156fdc93e26c0c3d8ca978d
7
- data.tar.gz: a7c6f2f32f0703acbdb4ab0208af68a3ef9da098facc9cb5a555d53a0ee2be313df7ac10409082e79342c1ac745cfd64fb4c4f24d80dc0f31a8f42ac18b6a5b5
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
- [1, -5, 12345, 99.99, '0.00', 10**63 + 1].each do |number|
12
- puts converter.to_german(number)
13
- end
14
-
15
- # >> eins
16
- # >> minus fünf
17
- # >> zwölftausenddreihundertfünfundvierzig
18
- # >> neunundneunzig Komma neun neun
19
- # >> null Komma null null
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
- Quattuordez Quindez Sedez Septendez Dodevigint Undevigint Vigint }.flat_map do |prefix|
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 ArgumentError, 'Number too large' if groups.size > BIG.size
82
+ fail TooLargeNumberError if groups.size > BIG.size
76
83
 
77
84
  groups
78
- .reject { |amount, *| amount.zero? }
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.3
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-13 00:00:00.000000000 Z
11
+ date: 2014-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler