monto_escrito 1.0.0 → 1.0.2
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 +6 -0
- data/lib/monto_escrito/decorador.rb +20 -10
- data/lib/monto_escrito/version.rb +1 -1
- data/spec/decorador_spec.rb +26 -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: 8c8818f882dec2fb998a1bd6e1faad21f5339ba5
|
4
|
+
data.tar.gz: 14bd17a183ca4a3a3a4800b91406a4e974e92464
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 783b012995e3bdd9551b782cf96450f5be60478f2a8abad1deab37470cf9958613b9fbe13149d463cbda967cea9b822ea9a1dc99e01632622ac3fd7b0a10b931
|
7
|
+
data.tar.gz: 17436fe4405fd92ddae6bae8040891d89cf6b5cd8b69d8246764c6c3a9ce47dd7ffa627899726b055b44ccf071463818ec9c3a5ca2e66ffd84cb525be4ea76e6
|
data/README.md
CHANGED
@@ -24,6 +24,10 @@ Para convertir una cantidad a palabras, simplemente hay que utilizar el método
|
|
24
24
|
=> "diez"
|
25
25
|
irb(main):002:0> MontoEscrito::Decorador.new(14).to_s
|
26
26
|
=> "catorce"
|
27
|
+
irb(main):003:0> MontoEscrito::Decorador.new(14.50).to_s(:short)
|
28
|
+
=> "catorce con 50/100"
|
29
|
+
irb(main):003:0> MontoEscrito::Decorador.new(14.50).to_s(:long)
|
30
|
+
=> "catorce con cincuenta"
|
27
31
|
|
28
32
|
Esta forma permite interpolar las conversiones:
|
29
33
|
|
@@ -44,5 +48,7 @@ Esta forma permite interpolar las conversiones:
|
|
44
48
|
## Change Log
|
45
49
|
|
46
50
|
|
51
|
+
* `monto_escrito-1.0.2`: Se implementa formato `:long` para los decimales.
|
52
|
+
* `monto_escrito-1.0.1`: Se implementa formato `:short` para los decimales.
|
47
53
|
* `monto_escrito-1.0.0`: Se implementa una API basada en un objeto decorador, permitiendo interpolar llamadas.
|
48
54
|
* `monto_escrito-0.0.1`: Se utiliza la primera API que opera como helper
|
@@ -6,26 +6,36 @@ module MontoEscrito
|
|
6
6
|
@numero = numero
|
7
7
|
end
|
8
8
|
|
9
|
-
def to_s
|
10
|
-
|
9
|
+
def to_s(format=:integer)
|
10
|
+
if (format == :integer)
|
11
|
+
@monto_escrito ||= calcular_monto_escrito(@numero)
|
12
|
+
else
|
13
|
+
centavos = (@numero - @numero.floor) * 100
|
14
|
+
@numero = @numero.floor
|
15
|
+
if (format == :short)
|
16
|
+
@monto_escrito ||= "#{calcular_monto_escrito(@numero)} con #{centavos.to_i}/100"
|
17
|
+
else
|
18
|
+
@monto_escrito ||= "#{calcular_monto_escrito(@numero)} con #{calcular_monto_escrito(centavos)}"
|
19
|
+
end
|
20
|
+
end
|
11
21
|
end
|
12
22
|
|
13
23
|
private
|
14
24
|
|
15
|
-
def calcular_monto_escrito
|
25
|
+
def calcular_monto_escrito(numero)
|
16
26
|
|
17
|
-
if casos_especiales[
|
18
|
-
monto_escrito = casos_especiales[
|
27
|
+
if casos_especiales[numero]
|
28
|
+
monto_escrito = casos_especiales[numero]
|
19
29
|
else
|
20
30
|
|
21
31
|
monto_escrito = ''
|
22
32
|
|
23
33
|
casos.each do |caso, detalles|
|
24
|
-
if
|
25
|
-
valor = (
|
26
|
-
monto_escrito +=
|
27
|
-
|
28
|
-
if
|
34
|
+
if numero >= caso
|
35
|
+
valor = (numero.to_i / detalles[:divisor]) * detalles[:multiplicador_primario]
|
36
|
+
monto_escrito += calcular_monto_escrito(valor) + detalles[:sufijo]
|
37
|
+
numero -= valor * detalles[:multiplicador_secundario]
|
38
|
+
if numero > 0
|
29
39
|
monto_escrito += detalles[:continuacion]
|
30
40
|
end
|
31
41
|
end
|
data/spec/decorador_spec.rb
CHANGED
@@ -3,13 +3,13 @@ require File.expand_path("lib/monto_escrito/decorador.rb")
|
|
3
3
|
|
4
4
|
describe MontoEscrito::Decorador do
|
5
5
|
|
6
|
-
def convertir(numero)
|
7
|
-
MontoEscrito::Decorador.new(numero).to_s
|
6
|
+
def convertir(numero, formato)
|
7
|
+
MontoEscrito::Decorador.new(numero).to_s(formato)
|
8
8
|
end
|
9
9
|
|
10
|
-
def verificar_conversiones(numeros)
|
10
|
+
def verificar_conversiones(numeros, formato = :integer)
|
11
11
|
numeros.each { |numero, letras|
|
12
|
-
convertir(numero).must_equal letras
|
12
|
+
convertir(numero, formato).must_equal letras
|
13
13
|
}
|
14
14
|
end
|
15
15
|
|
@@ -202,4 +202,26 @@ describe MontoEscrito::Decorador do
|
|
202
202
|
proc {MontoEscrito::Decorador.new(numero)}.must_raise(ArgumentError)
|
203
203
|
end
|
204
204
|
|
205
|
+
it "imprime decimales en formato :short" do
|
206
|
+
|
207
|
+
decimales = {
|
208
|
+
0.25 => 'cero con 25/100',
|
209
|
+
1.50 => 'un con 50/100',
|
210
|
+
2.75 => 'dos con 75/100'
|
211
|
+
}
|
212
|
+
|
213
|
+
verificar_conversiones(decimales, :short)
|
214
|
+
end
|
215
|
+
|
216
|
+
it "imprime decimales en formato :long" do
|
217
|
+
|
218
|
+
decimales = {
|
219
|
+
0.25 => 'cero con veinticinco',
|
220
|
+
1.50 => 'un con cincuenta',
|
221
|
+
2.75 => 'dos con setenta y cinco'
|
222
|
+
}
|
223
|
+
|
224
|
+
verificar_conversiones(decimales, :long)
|
225
|
+
end
|
226
|
+
|
205
227
|
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: 1.0.
|
4
|
+
version: 1.0.2
|
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-
|
11
|
+
date: 2014-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|