numeroaletras 1.0.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.
- checksums.yaml +7 -0
- data/lib/numeroaletras.rb +120 -0
- metadata +43 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 1521e1baa981f540f3efbb812d28ae66eb4d6e7a
|
|
4
|
+
data.tar.gz: a14ee3bb674229b232ec717f1eaf5abb3e8bd0cd
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: d7e1060444058b6a7a0b11ffdbda1faeb75130a8443007e3b8a87b685c37a84638e5ba9eccc42ff514a54ce80c0b109fcc080e27bf8365e0cb8b930b6ae1417f
|
|
7
|
+
data.tar.gz: 7a7a8345ea3c1a8db3d4fffc0568ab4f3894066dcfc25138a596d4787265e98ae1f4c06cffb75646f7a1ee1fd0e116d89e46c6c4f6a98c4a327f1caf30858604
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
module NumeroALetras
|
|
2
|
+
module Numeric
|
|
3
|
+
def self.included(recipiente)
|
|
4
|
+
recipiente.extend(ClassMethods)
|
|
5
|
+
recipiente.class_eval do
|
|
6
|
+
include InstanceMethods
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module ClassMethods
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module InstanceMethods
|
|
15
|
+
MONEDA_SINGULAR = 'bolivar'
|
|
16
|
+
MONEDA_PLURAL = 'bolivares'
|
|
17
|
+
CENTIMOS_SINGULAR = 'centimo'
|
|
18
|
+
CENTIMOS_PLURAL = 'centimos'
|
|
19
|
+
MAX_NUMERO = 999_999_999_999
|
|
20
|
+
UNIDADES = %w(cero uno dos tres cuatro cinco seis siete ocho nueve)
|
|
21
|
+
DECENAS = %w(diez once doce trece catorce quince dieciseis diecisiete dieciocho diecinueve)
|
|
22
|
+
DIEZ_DIEZ = %w(cero diez veinte treinta cuarenta cincuenta sesenta setenta ochenta noventa)
|
|
23
|
+
CIENTOS = %w(_ ciento doscientos trescientos cuatroscientos quinientos seiscientos setecientos ochocientos novecientos)
|
|
24
|
+
|
|
25
|
+
def a_letras
|
|
26
|
+
numero_entero = self.to_i
|
|
27
|
+
raise 'Rango soportado actualmente: [- +]999.999.999.999' if numero_entero > MAX_NUMERO
|
|
28
|
+
|
|
29
|
+
return 'menos ' + self.abs.a_letras if numero_entero < 0
|
|
30
|
+
|
|
31
|
+
parte_decimal = ((self.abs - numero_entero.abs) * 100).round
|
|
32
|
+
if(parte_decimal > 9)
|
|
33
|
+
letras_decimal = self.kind_of?(Float) ? " punto #{parte_decimal.a_letras}" : ''
|
|
34
|
+
else
|
|
35
|
+
letras_decimal = self.kind_of?(Float) ? " punto cero #{parte_decimal.a_letras}" : ''
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
case numero_entero
|
|
39
|
+
when 0..99 then leer_decenas(numero_entero)
|
|
40
|
+
when 100..999 then leer_centenas(numero_entero)
|
|
41
|
+
when 1000..999999 then leer_miles(numero_entero)
|
|
42
|
+
when 1000000..999999999 then leer_millones(numero_entero)
|
|
43
|
+
when 1000000000..999999999999 then leer_millardos(numero_entero)
|
|
44
|
+
end.gsub('_', ' ').squeeze(' ').strip.gsub('uno mil', 'un mil') + letras_decimal
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def a_moneda
|
|
48
|
+
numero_entero = self.to_i
|
|
49
|
+
|
|
50
|
+
parte_decimal = ((self.abs - numero_entero.abs) * 100).round
|
|
51
|
+
|
|
52
|
+
centimos = (parte_decimal == 1) ? CENTIMOS_SINGULAR : CENTIMOS_PLURAL
|
|
53
|
+
moneda = (numero_entero == 1) ? MONEDA_SINGULAR : MONEDA_PLURAL
|
|
54
|
+
|
|
55
|
+
letras = numero_entero.a_letras.gsub('uno', 'un')
|
|
56
|
+
letras += ' de' if (letras =~ /(millon|millones)\z/)
|
|
57
|
+
|
|
58
|
+
letras_decimal = " con #{parte_decimal.a_letras.gsub('uno', 'un')} #{centimos}" if self.kind_of?(Float)
|
|
59
|
+
|
|
60
|
+
"#{letras} #{moneda}#{letras_decimal}"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def leer_decenas(numero)
|
|
64
|
+
numero_entero = numero.to_i
|
|
65
|
+
return UNIDADES[numero_entero] if numero_entero < 10
|
|
66
|
+
decena, unidad = numero_entero.divmod(10)
|
|
67
|
+
case numero_entero
|
|
68
|
+
when 10..19, 0 then DECENAS[unidad]
|
|
69
|
+
when 21..29 then "veinti#{UNIDADES[unidad]}"
|
|
70
|
+
else DIEZ_DIEZ[decena] + (unidad > 0 ? " y #{UNIDADES[unidad]}" : '')
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def leer_centenas(numero)
|
|
75
|
+
numero_entero = numero.to_i
|
|
76
|
+
centena, decena = numero_entero.divmod(100)
|
|
77
|
+
return 'cien' if numero_entero == 100
|
|
78
|
+
CIENTOS[centena] + (decena > 0 ? " #{leer_decenas(decena)}" : '')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def leer_miles(numero)
|
|
82
|
+
numero_entero = numero.to_i
|
|
83
|
+
millar, centena = numero_entero.divmod(1000)
|
|
84
|
+
millar_letras = case millar
|
|
85
|
+
when 2..9 then UNIDADES[millar]
|
|
86
|
+
when 10..99 then leer_decenas(millar)
|
|
87
|
+
when 100..999 then leer_centenas(millar)
|
|
88
|
+
else ''
|
|
89
|
+
end + ' mil '
|
|
90
|
+
millar_letras += leer_centenas(centena) if centena > 0
|
|
91
|
+
millar_letras
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def leer_millones(numero)
|
|
95
|
+
numero_entero = numero.to_i
|
|
96
|
+
millon, millar = numero_entero.divmod(1000000)
|
|
97
|
+
millon_letras = case millon
|
|
98
|
+
when 1 then ' un millon '
|
|
99
|
+
when 2..9 then UNIDADES[millon]
|
|
100
|
+
when 10..99 then leer_decenas(millon)
|
|
101
|
+
when 100..999 then leer_centenas(millon)
|
|
102
|
+
else ''
|
|
103
|
+
end
|
|
104
|
+
millon_letras += ' millones ' unless millon == 1
|
|
105
|
+
millon_letras + case millar
|
|
106
|
+
when 1..999 then leer_centenas(millar)
|
|
107
|
+
when 1000..999999 then leer_miles(millar)
|
|
108
|
+
else ''
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def leer_millardos(numero)
|
|
113
|
+
numero_entero = numero.to_i
|
|
114
|
+
millardo, millon = numero_entero.divmod(1000000)
|
|
115
|
+
"#{leer_miles(millardo)} #{leer_millones(millon)}"
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
Numeric.send :include, NumeroALetras::Numeric
|
metadata
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: numeroaletras
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Efren Fuentes
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2013-09-30 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description: Esta gema permite convertir un numero en letras
|
|
14
|
+
email: efrenfuentes#gmail.com
|
|
15
|
+
executables: []
|
|
16
|
+
extensions: []
|
|
17
|
+
extra_rdoc_files: []
|
|
18
|
+
files:
|
|
19
|
+
- lib/numeroaletras.rb
|
|
20
|
+
homepage: https://github.com/efrenfuentes
|
|
21
|
+
licenses: []
|
|
22
|
+
metadata: {}
|
|
23
|
+
post_install_message:
|
|
24
|
+
rdoc_options: []
|
|
25
|
+
require_paths:
|
|
26
|
+
- lib
|
|
27
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
28
|
+
requirements:
|
|
29
|
+
- - '>='
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '0'
|
|
32
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
33
|
+
requirements:
|
|
34
|
+
- - '>='
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '0'
|
|
37
|
+
requirements: []
|
|
38
|
+
rubyforge_project:
|
|
39
|
+
rubygems_version: 2.1.4
|
|
40
|
+
signing_key:
|
|
41
|
+
specification_version: 4
|
|
42
|
+
summary: Convierte un numero en letras
|
|
43
|
+
test_files: []
|