extenso_pt 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +2 -2
- data/lib/extenso_pt/version.rb +1 -1
- data/lib/extenso_pt.rb +29 -68
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b97203696a205862d019e2827b5699c406d70e252f515eb82477532b0b83fbae
|
4
|
+
data.tar.gz: 976847d550a2617e3c1e99d2e829b5c912ef75575d208b5cae0ccc496f58f5b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0c8e8e1986c4c4feccabc44d01f6805e97432a6028130f47d36b69a391a014ce6a38c335d0557f2afdd0544d770071fb81dcce4196796a9209a5f3e3efb5c29
|
7
|
+
data.tar.gz: a23bc7e977a4bb65cf35a0cc5c36d65f8331b79c265cd8fd5f8a44a1d2b4a5f031e13e9ca36e395f40265c164a628787044b808dc380d9b2f13854d60da43e58
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -27,8 +27,8 @@ Or install it yourself as:
|
|
27
27
|
10.1.extenso(mplural:"DÓLARES") => "DEZ DÓLARES E DEZ CÊNTIMOS" # plural inferido <silgular> mais "S"
|
28
28
|
14.01.extenso(mplural:"REAIS",fsingular:"CENTAVO") => "CATORZE REAIS E UM CENTAVO"
|
29
29
|
14.10.extenso(mplural:"REAIS",fsingular:"CENTAVO") => "CATORZE REAIS E DEZ CENTAVOS"
|
30
|
-
14.
|
31
|
-
1e10.extenso(mplural:"REAIS")
|
30
|
+
14.1.extenso(lc: :br) => "QUATORZE REAIS E DEZ CENTAVOS"
|
31
|
+
1e10.extenso(lc: :pt,mplural:"REAIS") => "DEZ MIL MILHÕES DE REAIS" # portugal usa escala longa
|
32
32
|
1e10.extenso(lc: :br) => "DEZ BILHÕES DE REAIS" # brasil usa escala curta
|
33
33
|
14.01.extenso(mplural:"REAIS",fplural:"CENTAVOS") => "CATORZE REAIS E UM CENTAVO" # singular inferido <plural> menos "S"
|
34
34
|
["1", "2"].extenso => ["UM EURO","DOIS EUROS"] # extenso Array
|
data/lib/extenso_pt/version.rb
CHANGED
data/lib/extenso_pt.rb
CHANGED
@@ -15,86 +15,43 @@ module ExtensoPt
|
|
15
15
|
A1e24={pt: ["","MIL"," MILHÃO"," MIL MILHÃO"," BILIÃO"," MIL BILIÃO"," TRILIÃO"," MIL TRILIÃO",""," MIL"," MILHÕES"," MIL MILHÕES"," BILIÕES"," MIL BILIÕES"," TRILIÕES"," MIL TRILIÕES"],
|
16
16
|
br: ["","MIL"," MILHÃO"," BILHÃO"," TRILHÃO"," QUADRILHÃO"," QUINTILHÃO"," SEXTILHÃO",""," MIL"," MILHÕES"," BILHÕES"," TRILHÕES"," QUADRILHÕES"," QUINTILHÕES"," SEXTILHÕES"]}
|
17
17
|
|
18
|
-
#
|
19
|
-
#
|
20
|
-
# @param [Integer] valor parcela do valor monetario
|
21
|
-
# @return [String] produz E entre centenas e dezenas
|
22
|
-
def self.f1(valor)valor>100&&valor%100>0?" E ":""end
|
23
|
-
|
24
|
-
# Controle proposicao E
|
25
|
-
#
|
26
|
-
# @param [Integer] valor parcela do valor monetario
|
27
|
-
# @return [String] produz E entre dezenas e unidades
|
28
|
-
def self.f2(valor)valor>20&&valor%10>0?" E ":""end
|
29
|
-
|
30
|
-
# Controle proposicao E
|
31
|
-
#
|
32
|
-
# @param [Integer] valor parcela do valor monetario
|
33
|
-
# @return [String] produz E entre pacelas
|
34
|
-
def self.f3(valor)valor>100?" ":valor>0?" E ":""end
|
35
|
-
|
36
|
-
# Controle singular/plural da parte inteira
|
37
|
-
#
|
38
|
-
# @param [Integer] inteira soma da parte inteira
|
39
|
-
# @return [String] produz terminacao da parte inteira
|
40
|
-
def self.f4(inteira)inteira>0?inteira>1?" "+@@mp:" "+@@ms:""end
|
41
|
-
|
42
|
-
# Controle singular/plural da parte fracionaria
|
43
|
-
#
|
44
|
-
# @param [Integer] fracao parte fracionaria do valor monetário ex: 100022.12 = 12
|
45
|
-
# @return [String] produz terminacao da parte fracionaria
|
46
|
-
def self.f5(fracao)fracao>0?fracao>1?" "+@@cp:" "+@@cs:""end
|
47
|
-
|
48
|
-
# Controle separador entre parte inteira e fracionaria
|
49
|
-
#
|
50
|
-
# @param [Integer] inteira soma da parte inteira
|
51
|
-
# @param [Integer] fracao parte fracionaria do valor monetário ex: 100022.12 = 12
|
52
|
-
# @return [String] produz E entre parte inteira e fracionaria
|
53
|
-
def self.f6(inteira,fracao)inteira>0&&fracao>0?" E ":""end
|
54
|
-
|
55
|
-
# Controle de palavras no final do extenso
|
56
|
-
#
|
57
|
-
# @param [Integer] total soma da parte inteira e fracionaria para controle de ZERO
|
58
|
-
# @return [String] produz DE/ZERO <plural moeda>
|
59
|
-
def self.f7(total)
|
60
|
-
if (@@ai[2..-1].to_a.find{|v|v>0}.to_i>0&&@@ai[0..1].inject(:+).to_i==0)
|
61
|
-
" DE"
|
62
|
-
elsif (@@ai.count>0&&total==0)
|
63
|
-
"ZERO "+@@mp
|
64
|
-
else
|
65
|
-
""
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
# Produz o extenso da parte fracionaria do valor monetário em portugûes de portugal ou brasil.
|
18
|
+
# Produz a moeda e o extenso da parte fracionaria do valor monetário em portugûes de portugal ou brasil.
|
70
19
|
#
|
71
20
|
# @param [Integer] fracao parte fracionaria do valor monetário ex: 100022.12 = 12
|
72
|
-
# @return [String] o extenso da parte fracionaria do valor monetário
|
73
|
-
def self.
|
74
|
-
|
75
|
-
|
21
|
+
# @return [String] a moeda e o extenso da parte fracionaria do valor monetário
|
22
|
+
def self.efracao(fracao)
|
23
|
+
inteira=@@ai.find{|v|v>0}.to_i+@@ai[1..-1].to_a.find{|v|v>0}.to_i
|
24
|
+
total=inteira+fracao
|
25
|
+
(@@ai[2..-1].to_a.find{|v|v>0}.to_i>0&&@@ai[0..1].inject(:+).to_i==0?" DE":@@ai.count>0&&total==0?"ZERO "+@@mp:"")+
|
26
|
+
(inteira>0?inteira>1?" "+@@mp:" "+@@ms:"")+
|
27
|
+
(inteira>0&&fracao>0?" E ":"")+e999(fracao)+
|
28
|
+
(fracao>0?fracao>1?" "+@@cp:" "+@@cs:"")
|
76
29
|
end
|
77
30
|
|
78
31
|
# Produz o extenso dum valor (entre 0-999) em portugûes de portugal ou brasil.
|
79
32
|
#
|
80
|
-
# @param [Integer] mil a converter
|
81
|
-
# @param [Integer] pos posição actual em tratamento
|
82
|
-
# @return [String] o extenso
|
33
|
+
# @param [Integer] mil o valor a converter
|
34
|
+
# @param [Integer] pos posição actual de mil no valor monetário em tratamento
|
35
|
+
# @return [String] o extenso de mil
|
83
36
|
def self.e999(mil,pos=0)
|
84
|
-
|
85
|
-
A1000[@@lc][(mil>100?1:0)+mil/100]+
|
37
|
+
cem=mil%100
|
38
|
+
A1000[@@lc][(mil>100?1:0)+mil/100]+(mil>100&&mil%100>0?" E ":"")+
|
39
|
+
A0100[@@lc][cem/10]+(mil>20&&mil%10>0?" E ":"")+
|
40
|
+
A0020[@@lc][pos==1&&mil==1?0:cem<20?cem:cem%10]
|
86
41
|
end
|
87
42
|
|
88
43
|
# Produz recursivamente o extenso da parte inteira do valor monetário em portugûes de portugal ou brasil.
|
89
44
|
#
|
90
|
-
# @param [Integer] pos posição actual em tratamento
|
45
|
+
# @param [Integer] pos posição actual do valor monetário em tratamento
|
91
46
|
# @param [String] ext extenso actual em tratamento
|
92
47
|
# @return [String] o extenso da parte inteira
|
93
48
|
def self.erecursivo(pos=0,ext="")
|
94
49
|
if (pos>=@@ai.count)
|
95
50
|
ext
|
96
51
|
else
|
97
|
-
|
52
|
+
ctl=pos>0?@@ai[pos-1]:0
|
53
|
+
ext=e999(@@ai[pos],pos)+A1e24[@@lc][@@ai[pos]>0?@@ai[pos]>1?8+pos:pos:0]+(ctl>100?" ":ctl>0?" E ":"")+ext
|
54
|
+
erecursivo(pos+1,ext)
|
98
55
|
end
|
99
56
|
end
|
100
57
|
|
@@ -102,10 +59,10 @@ module ExtensoPt
|
|
102
59
|
#
|
103
60
|
# @param [Hash] moeda as opcoes para parametrizar a moeda/fração
|
104
61
|
# @option moeda [Symbol] :lc locale do extenso - portugûes de portugal (:pt) ou brasil (:br)
|
105
|
-
# @option moeda [String] :msingular Moeda no singular -
|
106
|
-
# @option moeda [String] :fsingular Fração no singular -
|
107
|
-
# @option moeda [String] :mplural Moeda no plural -
|
108
|
-
# @option moeda [String] :fplural Fração no plural -
|
62
|
+
# @option moeda [String] :msingular Moeda no singular - pode ser inferido do <b>:mplural menos "S"</b>
|
63
|
+
# @option moeda [String] :fsingular Fração no singular - pode ser inferido do <b>:fplural menos "S"</b>
|
64
|
+
# @option moeda [String] :mplural Moeda no plural - pode ser inferido do <b>:msingular+"S"</b>
|
65
|
+
# @option moeda [String] :fplural Fração no plural - pode ser inferido do <b>:fsingular+"S"</b>
|
109
66
|
# @return [String, Array<String>, Hash<String>] extenso se o objecto for (String, Float, Integer), Array dos extensos se o objecto for (Array, Range) ou Hash dos extensos se o objecto for (Hash)
|
110
67
|
def extenso(moeda={lc:(:pt),msingular:"EURO",fsingular:"CÊNTIMO"})
|
111
68
|
moeda={lc:(:br),msingular:"REAL",mplural:"REAIS",fsingular:"CENTAVO"} if (moeda[:lc]==:br&&!moeda[:mplural]&&!moeda[:fplural])
|
@@ -115,13 +72,17 @@ module ExtensoPt
|
|
115
72
|
@@mp=moeda[:mplural]?moeda[:mplural]:@@ms+"S"
|
116
73
|
@@cp=moeda[:fplural]?moeda[:fplural]:@@cs+"S"
|
117
74
|
if (self.kind_of?Hash)
|
75
|
+
# converte os valores do Hash nos seus extensos mantendos as chaves devolve um Hash
|
118
76
|
self.map{|k,v|[k,v.extenso(lc:(@@lc),msingular:@@ms,fsingular:@@cs,mplural:@@mp,fplural:@@cp)]}.to_h
|
119
77
|
elsif (self.respond_to?:to_a)
|
78
|
+
# converte o objecto num Array e converte os valores nos seus extensos devolve um Array
|
120
79
|
self.to_a.map{|a|a.extenso(lc:(@@lc),msingular:@@ms,fsingular:@@cs,mplural:@@mp,fplural:@@cp)}
|
121
80
|
else
|
81
|
+
# converter com bigdecimal/util para evitar bugs com valores superiores a 1e12
|
122
82
|
n=self.to_d.to_s('F')
|
83
|
+
# dividir parte inteira em grupos de 3 digitos ex: 123022.12 => [22, 123]
|
123
84
|
@@ai=n[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map{|i|i.reverse.to_i}
|
124
|
-
@@ai.count>8?"":ExtensoPt.erecursivo+ExtensoPt.
|
85
|
+
@@ai.count>8?"":ExtensoPt.erecursivo+ExtensoPt.efracao((n[/\.\d*/].to_f*100).round)
|
125
86
|
end
|
126
87
|
end
|
127
88
|
|