extenso_pt 0.4.2 → 0.4.3
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/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
|
|