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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b4ecd20ca98d2a1e97e2758d71044a65707f78ea2c0d8267270970d1272690c1
4
- data.tar.gz: b101adfafc3c7e3a645efbae2043c5f28ce0f306680ab738f76c9dd79dab2a4e
3
+ metadata.gz: 01cec41b35886bc5405213c425753d399cb94ab80b31bc91151edb8ca33a0340
4
+ data.tar.gz: d594a07bd8d672e03c46c4d9613f23b05b54bdfa2ff4cce07a0ad6bbc9fc8916
5
5
  SHA512:
6
- metadata.gz: 8cf77fe008993545c009e84a7a91fc69d503ff009317a797191c957dc230d4513ac6a4e7fbb13489c728ce69b3a25ab307e3bdef5950e6ed7a38a7d820c646d3
7
- data.tar.gz: 1fb8a33165853d1adec4b5056ec97aa4996a664a4cc1d2fed0bad89142dded83508537b4691c719d0e4d396cf0dbbf4c273f1aeca537ce882aad81ff990232f3
6
+ metadata.gz: 91fcc3aaedd59d51f8808837c93d544d6e9faffe75f8455a24929bfa1dcc2c9491d073a3cfd4b30d0a1db18b2f2f056b05058735e90f42afaf2da199e55920ee
7
+ data.tar.gz: f0047e1e2fb59dddd852f0909699d38548aa26258478140714e1f3dec7e327463e912b5050ac25ae820e6d6e73d84d5a4462f71eeb082737539871a3aee76d26
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- extenso_pt (0.5.0)
4
+ extenso_pt (0.5.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -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 de 3 digitos em portugûes de portugal ou brasil.
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 de 3 digitos a converter
21
- # @param [Integer] pos posição deste grupo de 3 digitos no valor monetário em tratamento
22
- # @return [String] o extenso dum grupo de 3 digitos
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 de 3 digitos do valor monetário
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 os grupos de 3 digitos para controle de singular/plural
41
- so1=@@ai[0].to_i+@@ai[1].to_i*2 # primeiros dois grupos
42
- so2=@@ai[2..-1].to_a.inject(:+).to_i*2 # restantes grupos
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 (so1+so2+@@nf==0)
45
- "ZERO "+@@mp # caso especial de zero
44
+ if (s06+sm6+@@nf==0)
45
+ "ZERO "+@@mp # caso especial de zero
46
46
  else
47
- ext+=" DE" if (so2>0&&so1==0) # proposição DE para valores >1e6 mas 0 nos primeiros 6 digitos
48
- ext+=" "+@@ms if (so1+so2==1) # singular da moeda
49
- ext+=" "+@@mp if (so1+so2>1) # plural da moeda
50
- ext+=" E " if (so1+so2>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
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
- # extenso do grupo actual de 3 digitos
58
- dg3 =e999(@@ai[pos],pos)
59
- dg3+=A1e24[@@lc][@@ai[pos]>0?@@ai[pos]>1?8+pos:pos:0] # qualificador do grupo actual
60
- dg3+=pos>0?@@ai[pos-1]>100?" ":@@ai[pos-1]>0?" E ":"":"" # separação entre grupo actual e anterior
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 de 3 digitos
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 usando bigdecimal/util para evitar bugs com valores superiores a 1e12
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 de 3 digitos ex: 123022.12 => [22, 123]
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 superiores a 1e24 não são tratados
99
+ # valores >1e24 não são tratados
92
100
  if (@@ai.count>8)
93
101
  ""
94
102
  else
95
- # extenso num numerico
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
@@ -1,3 +1,3 @@
1
1
  module ExtensoPt
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.1"
3
3
  end
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.0
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-21 00:00:00.000000000 Z
11
+ date: 2019-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler