extenso_pt 0.5.0 → 0.5.1
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/lib/extenso_pt.rb +39 -30
- data/lib/extenso_pt/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01cec41b35886bc5405213c425753d399cb94ab80b31bc91151edb8ca33a0340
|
4
|
+
data.tar.gz: d594a07bd8d672e03c46c4d9613f23b05b54bdfa2ff4cce07a0ad6bbc9fc8916
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91fcc3aaedd59d51f8808837c93d544d6e9faffe75f8455a24929bfa1dcc2c9491d073a3cfd4b30d0a1db18b2f2f056b05058735e90f42afaf2da199e55920ee
|
7
|
+
data.tar.gz: f0047e1e2fb59dddd852f0909699d38548aa26258478140714e1f3dec7e327463e912b5050ac25ae820e6d6e73d84d5a4462f71eeb082737539871a3aee76d26
|
data/Gemfile.lock
CHANGED
data/lib/extenso_pt.rb
CHANGED
@@ -5,7 +5,7 @@ require "bigdecimal/util"
|
|
5
5
|
module ExtensoPt
|
6
6
|
class Error < StandardError; end
|
7
7
|
|
8
|
-
LC=[:pt,:br]
|
8
|
+
LC =[:pt,:br]
|
9
9
|
A0020={pt: ["","UM","DOIS","TRÊS","QUATRO","CINCO","SEIS","SETE","OITO","NOVE","DEZ","ONZE","DOZE","TREZE","CATORZE","QUINZE","DEZASSEIS","DEZASSETE","DEZOITO","DEZANOVE"],
|
10
10
|
br: ["","UM","DOIS","TRES","QUATRO","CINCO","SEIS","SETE","OITO","NOVE","DEZ","ONZE","DOZE","TREZE","QUATORZE","QUINZE","DEZESSEIS","DEZESSETE","DEZOITO","DEZENOVE"]}
|
11
11
|
A0100={pt: ["","","VINTE","TRINTA","QUARENTA","CINQUENTA","SESSENTA","SETENTA","OITENTA","NOVENTA"],
|
@@ -15,11 +15,11 @@ 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 o extenso dum grupo
|
18
|
+
# Produz o extenso dum grupo 3 digitos em portugûes de portugal ou brasil.
|
19
19
|
#
|
20
|
-
# @param [Integer] mil o valor dum grupo
|
21
|
-
# @param [Integer] pos posição deste grupo
|
22
|
-
# @return [String] o extenso dum grupo
|
20
|
+
# @param [Integer] mil o valor dum grupo 3 digitos a converter
|
21
|
+
# @param [Integer] pos posição deste grupo 3 digitos no valor monetário em tratamento
|
22
|
+
# @return [String] o extenso dum grupo 3 digitos
|
23
23
|
def self.e999(mil,pos=0)
|
24
24
|
cem=mil%100
|
25
25
|
A1000[@@lc][(mil>100?1:0)+mil/100]+(mil>100&&cem>0?" E ":"")+ # extenso das centenas
|
@@ -29,7 +29,7 @@ module ExtensoPt
|
|
29
29
|
|
30
30
|
# Produz o extenso dum valor monetário em portugûes de portugal ou brasil.
|
31
31
|
#
|
32
|
-
# @param [Integer] pos posição actual nos grupos
|
32
|
+
# @param [Integer] pos posição actual nos grupos 3 digitos do valor monetário
|
33
33
|
# @param [String] ext extenso actual em construção
|
34
34
|
# @return [String] o extenso dum valor monetário
|
35
35
|
def self.enumerico(pos=0,ext="")
|
@@ -37,29 +37,34 @@ module ExtensoPt
|
|
37
37
|
# testa fim do valor monetário
|
38
38
|
if (pos>=@@ai.count)
|
39
39
|
|
40
|
-
# soma
|
41
|
-
|
42
|
-
|
40
|
+
# soma grupos 3 digitos para controle de singular/plural
|
41
|
+
s06=@@ai[0].to_i+@@ai[1].to_i*2 # grupos 1,2 (primeiros 6 digitos)
|
42
|
+
sm6=@@ai[2..-1].to_a.inject(:+).to_i*2 # grupos 3.. (digitos acima de 6)
|
43
43
|
|
44
|
-
if (
|
45
|
-
"ZERO "+@@mp
|
44
|
+
if (s06+sm6+@@nf==0)
|
45
|
+
"ZERO "+@@mp # caso especial de zero
|
46
46
|
else
|
47
|
-
ext+=" DE" if (
|
48
|
-
ext+=" "+@@ms if (
|
49
|
-
ext+=" "+@@mp if (
|
50
|
-
ext+=" E " if (
|
51
|
-
ext+=e999(@@nf)
|
52
|
-
ext+=" "+@@cs if (@@nf==1)
|
53
|
-
ext+=" "+@@cp if (@@nf>1)
|
47
|
+
ext+=" DE" if (sm6>0&&s06==0) # proposição DE para >1e6 e zero nos primeiros 6 digitos
|
48
|
+
ext+=" "+@@ms if (s06+sm6==1) # singular da moeda
|
49
|
+
ext+=" "+@@mp if (s06+sm6>1) # plural da moeda
|
50
|
+
ext+=" E " if (s06+sm6>0&&@@nf>0) # proposição E entre parte inteira e parte fracionária
|
51
|
+
ext+=e999(@@nf) # extenso da parte fracionária
|
52
|
+
ext+=" "+@@cs if (@@nf==1) # singular da parte fracionária
|
53
|
+
ext+=" "+@@cp if (@@nf>1) # plural da parte fracionária
|
54
54
|
ext
|
55
55
|
end
|
56
56
|
else
|
57
|
-
#
|
58
|
-
dg3 =e999(@@ai[pos],pos)
|
59
|
-
dg3+=A1e24[@@lc][@@ai[pos]>0?@@ai[pos]>1?8+pos:pos:0]
|
60
|
-
|
57
|
+
# tratamento do grupo actual 3 digitos
|
58
|
+
dg3 =e999(@@ai[pos],pos) # extenso
|
59
|
+
dg3+=A1e24[@@lc][@@ai[pos]>0?@@ai[pos]>1?8+pos:pos:0] # qualificador
|
60
|
+
|
61
|
+
# convenção de separação com grupo anterior 3 digitos
|
62
|
+
if (pos>0)
|
63
|
+
dg3+=" E " if (@@ai[pos-1]<101&&@@ai[pos-1]>0) # grupo < 101 => proposição E
|
64
|
+
dg3+=" " if (@@ai[pos-1]>100) # grupo > 100 => espaço
|
65
|
+
end
|
61
66
|
|
62
|
-
# proximo grupo
|
67
|
+
# tratamento do proximo grupo 3 digitos
|
63
68
|
enumerico(pos+1,dg3+ext)
|
64
69
|
end
|
65
70
|
end
|
@@ -77,22 +82,25 @@ module ExtensoPt
|
|
77
82
|
# converte o objecto num Array e converte os valores do Array nos seus extensos - devolve um Array
|
78
83
|
obj.to_a.map{|a|eobjeto(a)}
|
79
84
|
else
|
80
|
-
# converte objeto numa string de digitos
|
85
|
+
# converte objeto numa string de digitos
|
86
|
+
# usa bigdecimal/util para evitar aritmética binária (tem problemas com valores >1e12)
|
81
87
|
# qualquer valor não convertivel (ex: texto) resulta em "0.0"
|
82
88
|
svalor=obj.to_d.to_s('F')
|
83
89
|
|
84
|
-
# array da parte inteira do valor monetário dividido em grupos
|
90
|
+
# array da parte inteira do valor monetário dividido em grupos 3 digitos ex: 123022.12 => [22, 123]
|
91
|
+
# esta variavel é usada no processo de conversão
|
85
92
|
@@ai=svalor[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map{|i|i.reverse.to_i}
|
86
93
|
|
87
94
|
# parte fracionária do valor monetário ex: 123022.12 => 12
|
88
95
|
# arredondada a 2 casas decimais (cêntimos/centavos)
|
96
|
+
# esta variavel é usada no processo de conversão
|
89
97
|
@@nf=(svalor[/\.\d*/].to_f*100).round
|
90
98
|
|
91
|
-
# valores
|
99
|
+
# valores >1e24 não são tratados
|
92
100
|
if (@@ai.count>8)
|
93
101
|
""
|
94
102
|
else
|
95
|
-
# extenso
|
103
|
+
# extenso dum numerico
|
96
104
|
enumerico
|
97
105
|
end
|
98
106
|
end
|
@@ -110,11 +118,10 @@ module ExtensoPt
|
|
110
118
|
def extenso(moeda={lc:(:pt),msingular:"EURO",fsingular:"CÊNTIMO"})
|
111
119
|
|
112
120
|
# parametrização por defeito para locale => :br
|
113
|
-
if (moeda[:lc]==:br&&!moeda[:mplural]&&!moeda[:fplural])
|
114
|
-
moeda={lc:(:br),msingular:"REAL",mplural:"REAIS",fsingular:"CENTAVO"}
|
115
|
-
end
|
121
|
+
moeda={lc:(:br),msingular:"REAL",mplural:"REAIS",fsingular:"CENTAVO"} if (moeda[:lc]==:br&&!moeda[:mplural]&&!moeda[:fplural])
|
116
122
|
|
117
123
|
# se locale nao for [:pt,:br] entao :pt
|
124
|
+
# esta variavel é usada no processo de conversão
|
118
125
|
if (LC.include?moeda[:lc])
|
119
126
|
@@lc=moeda[:lc]
|
120
127
|
else
|
@@ -122,6 +129,7 @@ module ExtensoPt
|
|
122
129
|
end
|
123
130
|
|
124
131
|
# inferir singular da moeda a partir do plural
|
132
|
+
# estas variaveis são usadas no processo de conversão
|
125
133
|
if (moeda[:msingular])
|
126
134
|
@@ms=moeda[:msingular]
|
127
135
|
elsif (moeda[:mplural].to_s[-1]=="S")
|
@@ -139,6 +147,7 @@ module ExtensoPt
|
|
139
147
|
end
|
140
148
|
|
141
149
|
# inferir plural da moeda a partir do singular
|
150
|
+
# estas variaveis são usadas no processo de conversão
|
142
151
|
if (moeda[:mplural])
|
143
152
|
@@mp=moeda[:mplural]
|
144
153
|
else
|
data/lib/extenso_pt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extenso_pt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hernâni Rodrigues Vaz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-09-
|
11
|
+
date: 2019-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|