extenso_pt 0.4.3 → 0.4.4
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/lib/extenso_pt/version.rb +1 -1
- data/lib/extenso_pt.rb +22 -15
- 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: a8e97d447bc5d00e4399120531cb4e8307559084dfc8d42ed36af0bc4d2e645a
|
4
|
+
data.tar.gz: c3190c47b494f8150e7932a7026bbcf959f41a2e6fb3de8eddad47b2a890aa9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0910a98969f0ab858925dcab97c9411c61d060fc756f61bb494edd889b67f432ba6cbdc123fb754291f89f46b630c81057e3224e293cea7acde47cfb537366fb'
|
7
|
+
data.tar.gz: 2fb1cdd88909bd35a61de3572ce59b262251a397b6b7a794f6117d11b45a370e6e2f4952475e75669ab37fe7743f91fd9fb313c16858e07ef2a8404ba62076be
|
data/Gemfile.lock
CHANGED
data/lib/extenso_pt/version.rb
CHANGED
data/lib/extenso_pt.rb
CHANGED
@@ -15,10 +15,10 @@ 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
|
-
# Produz a moeda e o extenso da parte
|
18
|
+
# Produz a moeda e o extenso da parte fracionária do valor monetário em portugûes de portugal ou brasil.
|
19
19
|
#
|
20
|
-
# @param [Integer] fracao parte
|
21
|
-
# @return [String] a moeda e o extenso da parte
|
20
|
+
# @param [Integer] fracao parte fracionária do valor monetário ex: 100022.12 = 12
|
21
|
+
# @return [String] a moeda e o extenso da parte fracionária do valor monetário
|
22
22
|
def self.efracao(fracao)
|
23
23
|
inteira=@@ai.find{|v|v>0}.to_i+@@ai[1..-1].to_a.find{|v|v>0}.to_i
|
24
24
|
total=inteira+fracao
|
@@ -28,11 +28,11 @@ module ExtensoPt
|
|
28
28
|
(fracao>0?fracao>1?" "+@@cp:" "+@@cs:"")
|
29
29
|
end
|
30
30
|
|
31
|
-
# Produz o extenso dum
|
31
|
+
# Produz o extenso dum grupo de 3 digitos em portugûes de portugal ou brasil.
|
32
32
|
#
|
33
|
-
# @param [Integer] mil o valor a converter
|
34
|
-
# @param [Integer] pos posição
|
35
|
-
# @return [String] o extenso de mil
|
33
|
+
# @param [Integer] mil o valor dum grupo de 3 digitos a converter
|
34
|
+
# @param [Integer] pos posição deste grupo de 3 digitos no valor monetário em tratamento
|
35
|
+
# @return [String] o extenso de <mil>
|
36
36
|
def self.e999(mil,pos=0)
|
37
37
|
cem=mil%100
|
38
38
|
A1000[@@lc][(mil>100?1:0)+mil/100]+(mil>100&&mil%100>0?" E ":"")+
|
@@ -40,18 +40,18 @@ module ExtensoPt
|
|
40
40
|
A0020[@@lc][pos==1&&mil==1?0:cem<20?cem:cem%10]
|
41
41
|
end
|
42
42
|
|
43
|
-
# Produz
|
43
|
+
# Produz o extenso da parte inteira do valor monetário em portugûes de portugal ou brasil.
|
44
44
|
#
|
45
|
-
# @param [Integer] pos posição actual do valor monetário em tratamento
|
45
|
+
# @param [Integer] pos posição actual nos grupos de 3 digitos do valor monetário em tratamento
|
46
46
|
# @param [String] ext extenso actual em tratamento
|
47
|
-
# @return [String] o extenso da parte inteira
|
48
|
-
def self.
|
47
|
+
# @return [String] o extenso da parte inteira do valor monetário
|
48
|
+
def self.einteira(pos=0,ext="")
|
49
49
|
if (pos>=@@ai.count)
|
50
50
|
ext
|
51
51
|
else
|
52
52
|
ctl=pos>0?@@ai[pos-1]:0
|
53
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
|
-
|
54
|
+
einteira(pos+1,ext)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -65,6 +65,7 @@ module ExtensoPt
|
|
65
65
|
# @option moeda [String] :fplural Fração no plural - pode ser inferido do <b>:fsingular+"S"</b>
|
66
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)
|
67
67
|
def extenso(moeda={lc:(:pt),msingular:"EURO",fsingular:"CÊNTIMO"})
|
68
|
+
# parametrização da moeda
|
68
69
|
moeda={lc:(:br),msingular:"REAL",mplural:"REAIS",fsingular:"CENTAVO"} if (moeda[:lc]==:br&&!moeda[:mplural]&&!moeda[:fplural])
|
69
70
|
@@lc=LC.include?(moeda[:lc])?moeda[:lc]:(:pt)
|
70
71
|
@@ms=moeda[:msingular]?moeda[:msingular]:moeda[:mplural].to_s[-1]=="S"?moeda[:mplural][0..-2]:"EURO"
|
@@ -72,17 +73,23 @@ module ExtensoPt
|
|
72
73
|
@@mp=moeda[:mplural]?moeda[:mplural]:@@ms+"S"
|
73
74
|
@@cp=moeda[:fplural]?moeda[:fplural]:@@cs+"S"
|
74
75
|
if (self.kind_of?Hash)
|
75
|
-
# converte os valores do Hash nos seus extensos
|
76
|
+
# converte os valores do Hash nos seus extensos mantendo as chaves - devolve um Hash
|
76
77
|
self.map{|k,v|[k,v.extenso(lc:(@@lc),msingular:@@ms,fsingular:@@cs,mplural:@@mp,fplural:@@cp)]}.to_h
|
77
78
|
elsif (self.respond_to?:to_a)
|
78
|
-
# converte o objecto num Array e converte os valores nos seus extensos devolve um Array
|
79
|
+
# converte o objecto num Array e converte os valores nos seus extensos - devolve um Array
|
79
80
|
self.to_a.map{|a|a.extenso(lc:(@@lc),msingular:@@ms,fsingular:@@cs,mplural:@@mp,fplural:@@cp)}
|
80
81
|
else
|
81
82
|
# converter com bigdecimal/util para evitar bugs com valores superiores a 1e12
|
82
83
|
n=self.to_d.to_s('F')
|
83
84
|
# dividir parte inteira em grupos de 3 digitos ex: 123022.12 => [22, 123]
|
84
85
|
@@ai=n[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map{|i|i.reverse.to_i}
|
85
|
-
@@ai.count>8
|
86
|
+
if (@@ai.count>8)
|
87
|
+
"" # MAX 1e24
|
88
|
+
else
|
89
|
+
ExtensoPt.einteira+
|
90
|
+
# parte fracionária é arredondada a 2 casas decimais (cêntimos)
|
91
|
+
ExtensoPt.efracao((n[/\.\d*/].to_f*100).round)
|
92
|
+
end
|
86
93
|
end
|
87
94
|
end
|
88
95
|
|