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.
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