monto_escrito 1.0.0 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|