monto_escrito 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7b5aca09925d7886ac7ee203402c9a749eb5bfb4
4
- data.tar.gz: 0c2ee0b819abddd9419d6a8951093328dd9e5056
3
+ metadata.gz: 531120575aa60bf6128ea3723d8842c96325d3f8
4
+ data.tar.gz: 248577fa1223229137313d453bc3805ebe3c56c0
5
5
  SHA512:
6
- metadata.gz: 6ebf9a8b0352a396124226cc407a8707f34b8de9638d4b22f5c5becb4282dafadc975cbbaa37fc911fa5f81e0732704c1ae0cb3706044390f61959f635103251
7
- data.tar.gz: 39b9c9b4d655457ade61d7011d4af36dae3b0ce8d5b4526a628291978d38bf2954fcf668f2fafed61066bc559a6d5a35239aa8bcbeb0039adb83cd5f50c0d59e
6
+ metadata.gz: c8857dc09ff77ebf98104032fe500b0f188a691b12eb72a6b137f84dc561771ae5ad56fb4d46170f0fd492ac5dc9855cb9e6703e9cb23e8c0467c7c99680d95d
7
+ data.tar.gz: ab2cc0b51f32b7b8c0cf9c5f7d4e4d273ff0061c7c2817a5921ddcf0ac10cae20c0d5f60065354e4625335df6b730853df0e4a249e2188ff51def2635b13ddc5
data/.gitignore CHANGED
@@ -16,3 +16,4 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  .rvmrc
19
+ .rbenv-gemsets
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.0
data/README.md CHANGED
@@ -18,13 +18,19 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- Para convertir una cantidad a palabras, simplemente hay que utilizar el método `convertir` del helper `MontoEscrito::Conversor`:
21
+ Para convertir una cantidad a palabras, simplemente hay que utilizar el método `to_s` de la clase `MontoEscrito::Decorador`:
22
22
 
23
- irb(main):001:0> MontoEscrito::Conversor.convertir(10)
23
+ irb(main):001:0> MontoEscrito::Decorador.new(10).to_s
24
24
  => "diez"
25
- irb(main):002:0> MontoEscrito::Conversor.convertir(14)
25
+ irb(main):002:0> MontoEscrito::Decorador.new(14).to_s
26
26
  => "catorce"
27
27
 
28
+ Esta forma permite interpolar las conversiones:
29
+
30
+ irb(main):001:0> monto = MontoEscrito::Decorador.new(10)
31
+ irb(main):002:0> "Son pesos #{monto}"
32
+ => "Son pesos diez"
33
+
28
34
  > **Nota:** actualmente se soportan sólamente números positivos menores a un cuatrillón. Puede extenderse fácilmente, pero a fines prácticos se deja en esa cantidad. Se arrojará un `ArgumentError` en caso de violar esa restricción de dominio.
29
35
 
30
36
  ## Contributing
@@ -34,3 +40,9 @@ Para convertir una cantidad a palabras, simplemente hay que utilizar el método
34
40
  3. Commit your changes (`git commit -am 'Add some feature'`)
35
41
  4. Push to the branch (`git push origin my-new-feature`)
36
42
  5. Create new Pull Request
43
+
44
+ ## Change Log
45
+
46
+
47
+ * `monto_escrito-1.0.0`: Se implementa una API basada en un objeto decorador, permitiendo interpolar llamadas.
48
+ * `monto_escrito-0.0.1`: Se utiliza la primera API que opera como helper
@@ -0,0 +1,136 @@
1
+ module MontoEscrito
2
+ class Decorador
3
+
4
+ def initialize(numero)
5
+ raise ArgumentError if numero >= 1_000_000_000_000_000_000_000_000 or numero < 0
6
+ @numero = numero
7
+ end
8
+
9
+ def to_s
10
+ @monto_escrito ||= calcular_monto_escrito
11
+ end
12
+
13
+ private
14
+
15
+ def calcular_monto_escrito
16
+
17
+ if casos_especiales[@numero]
18
+ monto_escrito = casos_especiales[@numero]
19
+ else
20
+
21
+ monto_escrito = ''
22
+
23
+ casos.each do |caso, detalles|
24
+ if @numero >= caso
25
+ valor = (@numero.to_i / detalles[:divisor]) * detalles[:multiplicador_primario]
26
+ monto_escrito += Decorador.new(valor).to_s + detalles[:sufijo]
27
+ @numero -= valor * detalles[:multiplicador_secundario]
28
+ if @numero > 0
29
+ monto_escrito += detalles[:continuacion]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ monto_escrito
35
+ end
36
+
37
+ def casos_especiales
38
+ {0 => 'cero', 1 => 'un', 2 => 'dos', 3 => 'tres', 4 => 'cuatro', 5 => 'cinco', 6 => 'seis', 7 => 'siete', 8 => 'ocho', 9 => 'nueve', 10 => 'diez', 11 => 'once', 12 => 'doce', 13 => 'trece', 14 => 'catorce', 15 => 'quince', 16 => 'dieciséis', 17 => 'diecisiete', 18 => 'dieciocho', 19 => 'diecinueve', 21 => 'veintiún', 22 => 'veintidós', 23 => 'veintitrés', 24 => 'veinticuatro', 25 => 'veinticinco', 26 => 'veintiséis', 27 => 'veintisiete', 28 => 'veintiocho', 29 => 'veintinueve', 10 => 'diez', 20 => 'veinte', 30 => 'treinta', 40 => 'cuarenta', 50 => 'cincuenta', 60 => 'sesenta', 70 => 'setenta', 80 => 'ochenta', 90 => 'noventa', 100 => 'cien', 200 => 'doscientos', 300 => 'trescientos', 400 => 'cuatrocientos', 500 => 'quinientos', 600 => 'seiscientos', 700 => 'setecientos', 800 => 'ochocientos', 900 => 'novecientos'}
39
+ end
40
+
41
+ def casos
42
+ {
43
+ 2_000_000_000_000_000_000 =>
44
+ {
45
+ :divisor => 1_000_000_000_000_000_000,
46
+ :multiplicador_primario => 1,
47
+ :multiplicador_secundario => 1_000_000_000_000_000_000,
48
+ :sufijo => ' trillones',
49
+ :continuacion => ' ',
50
+ },
51
+ 1_000_000_000_000_000_000 =>
52
+ {
53
+ :divisor => 1_000_000_000_000_000_000,
54
+ :multiplicador_primario => 1,
55
+ :multiplicador_secundario => 1_000_000_000_000_000_000,
56
+ :sufijo => ' trillón',
57
+ :continuacion => ' ',
58
+ },
59
+ 2_000_000_000_000 =>
60
+ {
61
+ :divisor => 1_000_000_000_000,
62
+ :multiplicador_primario => 1,
63
+ :multiplicador_secundario => 1_000_000_000_000,
64
+ :sufijo => ' billones',
65
+ :continuacion => ' ',
66
+ },
67
+ 1_000_000_000_000 =>
68
+ {
69
+ :divisor => 1_000_000_000_000,
70
+ :multiplicador_primario => 1,
71
+ :multiplicador_secundario => 1_000_000_000_000,
72
+ :sufijo => ' billón',
73
+ :continuacion => ' ',
74
+ },
75
+ 2_000_000 =>
76
+ {
77
+ :divisor => 1_000_000,
78
+ :multiplicador_primario => 1,
79
+ :multiplicador_secundario => 1_000_000,
80
+ :sufijo => ' millones',
81
+ :continuacion => ' ',
82
+ },
83
+ 1_000_000 =>
84
+ {
85
+ :divisor => 1_000_000,
86
+ :multiplicador_primario => 1,
87
+ :multiplicador_secundario => 1_000_000,
88
+ :sufijo => ' millón',
89
+ :continuacion => ' ',
90
+ },
91
+ 1_000 =>
92
+ {
93
+ :divisor => 1_000,
94
+ :multiplicador_primario => 1,
95
+ :multiplicador_secundario => 1_000,
96
+ :sufijo => ' mil',
97
+ :continuacion => ' ',
98
+ },
99
+ 200 =>
100
+ {
101
+ :divisor => 100,
102
+ :multiplicador_primario => 100,
103
+ :multiplicador_secundario => 1,
104
+ :sufijo => '',
105
+ :continuacion => ' ',
106
+ },
107
+ 100 =>
108
+ {
109
+ :divisor => 100,
110
+ :multiplicador_primario => 100,
111
+ :multiplicador_secundario => 1,
112
+ :sufijo => 'to',
113
+ :continuacion => ' ',
114
+ },
115
+ 30 =>
116
+ {
117
+ :divisor => 10,
118
+ :multiplicador_primario => 10,
119
+ :multiplicador_secundario => 1,
120
+ :sufijo => '',
121
+ :continuacion => ' y ',
122
+ },
123
+ 1 =>
124
+ {
125
+ :divisor => 1,
126
+ :multiplicador_primario => 1,
127
+ :multiplicador_secundario => 1,
128
+ :sufijo => '',
129
+ :continuacion => '',
130
+ }
131
+ }
132
+ end
133
+
134
+ end
135
+
136
+ end
@@ -1,3 +1,3 @@
1
1
  module MontoEscrito
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/monto_escrito.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require "monto_escrito/version"
2
2
 
3
3
  module MontoEscrito
4
- require_relative "conversor"
4
+ require_relative "decorador"
5
5
  end
@@ -1,10 +1,10 @@
1
1
  require_relative "spec_helper"
2
- require File.expand_path("lib/monto_escrito/conversor.rb")
2
+ require File.expand_path("lib/monto_escrito/decorador.rb")
3
3
 
4
- describe MontoEscrito::Conversor do
4
+ describe MontoEscrito::Decorador do
5
5
 
6
6
  def convertir(numero)
7
- MontoEscrito::Conversor.convertir(numero)
7
+ MontoEscrito::Decorador.new(numero).to_s
8
8
  end
9
9
 
10
10
  def verificar_conversiones(numeros)
@@ -194,12 +194,12 @@ describe MontoEscrito::Conversor do
194
194
 
195
195
  it "no soporta cuatrillones" do
196
196
  numero = 1_000_000_000_000_000_000_000_000
197
- proc {MontoEscrito::Conversor.convertir(numero)}.must_raise(ArgumentError)
197
+ proc {MontoEscrito::Decorador.new(numero)}.must_raise(ArgumentError)
198
198
  end
199
199
 
200
200
  it "no soporta negativos" do
201
201
  numero = -1
202
- proc {MontoEscrito::Conversor.convertir(numero)}.must_raise(ArgumentError)
202
+ proc {MontoEscrito::Decorador.new(numero)}.must_raise(ArgumentError)
203
203
  end
204
204
 
205
205
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monto_escrito
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Videla
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-05 00:00:00.000000000 Z
11
+ date: 2014-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -60,15 +60,16 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - .gitignore
63
+ - .ruby-version
63
64
  - Gemfile
64
65
  - LICENSE.txt
65
66
  - README.md
66
67
  - Rakefile
67
68
  - lib/monto_escrito.rb
68
- - lib/monto_escrito/conversor.rb
69
+ - lib/monto_escrito/decorador.rb
69
70
  - lib/monto_escrito/version.rb
70
71
  - monto_escrito.gemspec
71
- - spec/conversor_spec.rb
72
+ - spec/decorador_spec.rb
72
73
  - spec/spec_helper.rb
73
74
  homepage: https://github.com/wecodeio/monto_escrito
74
75
  licenses:
@@ -96,5 +97,5 @@ specification_version: 4
96
97
  summary: Esta gema expone un método para convertir a palabras un monto, utilizando
97
98
  el idioma español
98
99
  test_files:
99
- - spec/conversor_spec.rb
100
+ - spec/decorador_spec.rb
100
101
  - spec/spec_helper.rb
@@ -1,126 +0,0 @@
1
- module MontoEscrito
2
- class Conversor
3
-
4
- def self.convertir(numero)
5
-
6
- raise ArgumentError if numero >= 1_000_000_000_000_000_000_000_000 or numero < 0
7
-
8
- if @@casos_especiales[numero]
9
- monto_escrito = @@casos_especiales[numero]
10
- else
11
-
12
- monto_escrito = ''
13
-
14
- @@casos.each do |caso, detalles|
15
- if numero >= caso
16
- valor = (numero.to_i / detalles[:divisor]) * detalles[:multiplicador_primario]
17
- monto_escrito += convertir(valor) + detalles[:sufijo]
18
- numero -= valor * detalles[:multiplicador_secundario]
19
- if numero > 0
20
- monto_escrito += detalles[:continuacion]
21
- end
22
- end
23
- end
24
- end
25
- monto_escrito
26
- end
27
-
28
- private
29
-
30
- @@casos_especiales = { 0 => 'cero', 1 => 'un', 2 => 'dos', 3 => 'tres', 4 => 'cuatro', 5 => 'cinco', 6 => 'seis', 7 => 'siete', 8 => 'ocho', 9 => 'nueve', 10 => 'diez', 11 => 'once', 12 => 'doce', 13 => 'trece', 14 => 'catorce', 15 => 'quince', 16 => 'dieciséis', 17 => 'diecisiete', 18 => 'dieciocho', 19 => 'diecinueve', 21 => 'veintiún', 22 => 'veintidós', 23 => 'veintitrés', 24 => 'veinticuatro', 25 => 'veinticinco', 26 => 'veintiséis', 27 => 'veintisiete', 28 => 'veintiocho', 29 => 'veintinueve', 10 => 'diez', 20 => 'veinte', 30 => 'treinta', 40 => 'cuarenta', 50 => 'cincuenta', 60 => 'sesenta', 70 => 'setenta', 80 => 'ochenta', 90 => 'noventa', 100 => 'cien', 200 => 'doscientos', 300 => 'trescientos', 400 => 'cuatrocientos', 500 => 'quinientos', 600 => 'seiscientos', 700 => 'setecientos', 800 => 'ochocientos', 900 => 'novecientos'
31
- }
32
-
33
- @@casos = {
34
- 2_000_000_000_000_000_000 =>
35
- {
36
- :divisor => 1_000_000_000_000_000_000,
37
- :multiplicador_primario => 1,
38
- :multiplicador_secundario => 1_000_000_000_000_000_000,
39
- :sufijo => ' trillones',
40
- :continuacion => ' ',
41
- },
42
- 1_000_000_000_000_000_000 =>
43
- {
44
- :divisor => 1_000_000_000_000_000_000,
45
- :multiplicador_primario => 1,
46
- :multiplicador_secundario => 1_000_000_000_000_000_000,
47
- :sufijo => ' trillón',
48
- :continuacion => ' ',
49
- },
50
- 2_000_000_000_000 =>
51
- {
52
- :divisor => 1_000_000_000_000,
53
- :multiplicador_primario => 1,
54
- :multiplicador_secundario => 1_000_000_000_000,
55
- :sufijo => ' billones',
56
- :continuacion => ' ',
57
- },
58
- 1_000_000_000_000 =>
59
- {
60
- :divisor => 1_000_000_000_000,
61
- :multiplicador_primario => 1,
62
- :multiplicador_secundario => 1_000_000_000_000,
63
- :sufijo => ' billón',
64
- :continuacion => ' ',
65
- },
66
- 2_000_000 =>
67
- {
68
- :divisor => 1_000_000,
69
- :multiplicador_primario => 1,
70
- :multiplicador_secundario => 1_000_000,
71
- :sufijo => ' millones',
72
- :continuacion => ' ',
73
- },
74
- 1_000_000 =>
75
- {
76
- :divisor => 1_000_000,
77
- :multiplicador_primario => 1,
78
- :multiplicador_secundario => 1_000_000,
79
- :sufijo => ' millón',
80
- :continuacion => ' ',
81
- },
82
- 1_000 =>
83
- {
84
- :divisor => 1_000,
85
- :multiplicador_primario => 1,
86
- :multiplicador_secundario => 1_000,
87
- :sufijo => ' mil',
88
- :continuacion => ' ',
89
- },
90
- 200 =>
91
- {
92
- :divisor => 100,
93
- :multiplicador_primario => 100,
94
- :multiplicador_secundario => 1,
95
- :sufijo => '',
96
- :continuacion => ' ',
97
- },
98
- 100 =>
99
- {
100
- :divisor => 100,
101
- :multiplicador_primario => 100,
102
- :multiplicador_secundario => 1,
103
- :sufijo => 'to',
104
- :continuacion => ' ',
105
- },
106
- 30 =>
107
- {
108
- :divisor => 10,
109
- :multiplicador_primario => 10,
110
- :multiplicador_secundario => 1,
111
- :sufijo => '',
112
- :continuacion => ' y ',
113
- },
114
- 1 =>
115
- {
116
- :divisor => 1,
117
- :multiplicador_primario => 1,
118
- :multiplicador_secundario => 1,
119
- :sufijo => '',
120
- :continuacion => '',
121
- }
122
- }
123
-
124
- end
125
-
126
- end