extenso_pt 0.5.3 → 0.5.4
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/extenso_pt.gemspec +12 -9
- data/lib/extenso_pt.rb +211 -124
- data/lib/extenso_pt/version.rb +1 -1
- metadata +9 -10
- data/.rubocop.yml +0 -1
- data/.rubocop_todo.yml +0 -74
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8d41d1cbf7468f74a1287b15d53fbe72624afeeb06bf4027bc51d5676e81fceb
|
|
4
|
+
data.tar.gz: ae4028347d25170b32a123bdab5cb260d0be01aadb32a266d9131adf8bd911c3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 90362000feecf288a7318275fca0d59c27a07ed7fa50ba0b9d7e6d36b0ed8518ed690314d1da97df440f1da306683465f8effa88622743e149125315845314fe
|
|
7
|
+
data.tar.gz: 1cd11787676cf949a8f93edb2cc06c79d1b7a3a7b97b76e67f69488acd721a151aea87fb80ce26b5102a757ebb5bccadc52d008958cf2c7997d83626a873cae4
|
data/Gemfile.lock
CHANGED
data/extenso_pt.gemspec
CHANGED
|
@@ -9,23 +9,26 @@ Gem::Specification.new do |spec|
|
|
|
9
9
|
spec.version = ExtensoPt::VERSION
|
|
10
10
|
spec.authors = ['Hernâni Rodrigues Vaz']
|
|
11
11
|
spec.email = ['hernanirvaz@gmail.com']
|
|
12
|
-
|
|
13
|
-
spec.summary = 'Produz valores monetários por extenso em portugês de portugal ou brasil.'
|
|
14
|
-
spec.description = spec.summary + ' Os valores podem ser um numerico, uma string de digitos ou um conjunto destes (array, range, hash). O extenso pode ser produzido na escala longa (utilizada em todos os países lusófonos) ou na escala curta (utilizada no Brasil). Pode ainda escolher a moeda e a fração da moeda.'
|
|
15
|
-
|
|
16
12
|
spec.homepage = 'https://github.com/hernanilr/extenso_pt'
|
|
17
13
|
spec.license = 'MIT'
|
|
18
14
|
|
|
15
|
+
|
|
16
|
+
spec.summary = 'Produz valores monetários por extenso\
|
|
17
|
+
em portugês de portugal ou brasil.'
|
|
18
|
+
spec.description = spec.summary + ' Os valores podem ser um numerico, uma\
|
|
19
|
+
string de digitos ou um conjunto destes (array, range, hash). O extenso\
|
|
20
|
+
pode ser produzido na escala longa (utilizada em todos os países\
|
|
21
|
+
lusófonos) ou na escala curta (utilizada no Brasil). Pode ainda escolher\
|
|
22
|
+
a moeda e a fração da moeda.'
|
|
23
|
+
|
|
19
24
|
spec.metadata['yard.run'] = 'yard' # use "yard" to build full HTML docs.
|
|
20
|
-
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
|
21
25
|
spec.metadata['homepage_uri'] = spec.homepage
|
|
22
|
-
# spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
|
|
23
|
-
# spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
|
24
26
|
|
|
25
27
|
# Specify which files should be added to the gem when it is released.
|
|
26
|
-
#
|
|
28
|
+
# loads the files in the RubyGem that have been added into git.
|
|
27
29
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
28
|
-
`git ls-files -z`.split("\x0").reject
|
|
30
|
+
`git ls-files -z`.split("\x0").reject \
|
|
31
|
+
{ |f| f.match(%r{^(test|spec|features)/}) }
|
|
29
32
|
end
|
|
30
33
|
spec.bindir = 'exe'
|
|
31
34
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
data/lib/extenso_pt.rb
CHANGED
|
@@ -3,195 +3,258 @@
|
|
|
3
3
|
require 'extenso_pt/version'
|
|
4
4
|
require 'bigdecimal/util'
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
LC = %i[pt br].freeze
|
|
7
|
+
A0020 = {
|
|
8
|
+
pt: ['', 'UM', 'DOIS', 'TRÊS', 'QUATRO', 'CINCO', 'SEIS', 'SETE',
|
|
9
|
+
'OITO', 'NOVE', 'DEZ', 'ONZE', 'DOZE', 'TREZE', 'CATORZE',
|
|
10
|
+
'QUINZE', 'DEZASSEIS', 'DEZASSETE', 'DEZOITO', 'DEZANOVE'],
|
|
11
|
+
br: ['', 'UM', 'DOIS', 'TRES', 'QUATRO', 'CINCO', 'SEIS', 'SETE',
|
|
12
|
+
'OITO', 'NOVE', 'DEZ', 'ONZE', 'DOZE', 'TREZE', 'QUATORZE',
|
|
13
|
+
'QUINZE', 'DEZESSEIS', 'DEZESSETE', 'DEZOITO', 'DEZENOVE']
|
|
14
|
+
}.freeze
|
|
15
|
+
A0100 = {
|
|
16
|
+
pt: ['', '', 'VINTE', 'TRINTA', 'QUARENTA', 'CINQUENTA', 'SESSENTA',
|
|
17
|
+
'SETENTA', 'OITENTA', 'NOVENTA'],
|
|
18
|
+
br: ['', '', 'VINTE', 'TRINTA', 'QUARENTA', 'CINQUENTA', 'SESSENTA',
|
|
19
|
+
'SETENTA', 'OITENTA', 'NOVENTA']
|
|
20
|
+
}.freeze
|
|
21
|
+
A1000 = {
|
|
22
|
+
pt: ['', 'CEM', 'CENTO', 'DUZENTOS', 'TREZENTOS', 'QUATROCENTOS',
|
|
23
|
+
'QUINHENTOS', 'SEISCENTOS', 'SETECENTOS', 'OITOCENTOS', 'NOVECENTOS'],
|
|
24
|
+
br: ['', 'CEM', 'CENTO', 'DUZENTOS', 'TREZENTOS', 'QUATROCENTOS',
|
|
25
|
+
'QUINHENTOS', 'SEISCENTOS', 'SETECENTOS', 'OITOCENTOS', 'NOVECENTOS']
|
|
26
|
+
}.freeze
|
|
27
|
+
A1E24 = {
|
|
28
|
+
pt: ['', 'MIL', ' MILHÃO', ' MIL MILHÃO', ' BILIÃO', ' MIL BILIÃO',
|
|
29
|
+
' TRILIÃO', ' MIL TRILIÃO', '', ' MIL', ' MILHÕES', ' MIL MILHÕES',
|
|
30
|
+
' BILIÕES', ' MIL BILIÕES', ' TRILIÕES', ' MIL TRILIÕES'],
|
|
31
|
+
br: ['', 'MIL', ' MILHÃO', ' BILHÃO', ' TRILHÃO', ' QUADRILHÃO',
|
|
32
|
+
' QUINTILHÃO', ' SEXTILHÃO', '', ' MIL', ' MILHÕES', ' BILHÕES',
|
|
33
|
+
' TRILHÕES', ' QUADRILHÕES', ' QUINTILHÕES', ' SEXTILHÕES']
|
|
34
|
+
}.freeze
|
|
35
|
+
|
|
36
|
+
# @author Hernani Rodrigues Vaz
|
|
7
37
|
module ExtensoPt
|
|
8
38
|
class Error < StandardError; end
|
|
9
39
|
|
|
10
|
-
|
|
11
|
-
A0020 = { pt: ['', 'UM', 'DOIS', 'TRÊS', 'QUATRO', 'CINCO', 'SEIS', 'SETE', 'OITO', 'NOVE', 'DEZ', 'ONZE', 'DOZE', 'TREZE', 'CATORZE', 'QUINZE', 'DEZASSEIS', 'DEZASSETE', 'DEZOITO', 'DEZANOVE'],
|
|
12
|
-
br: ['', 'UM', 'DOIS', 'TRES', 'QUATRO', 'CINCO', 'SEIS', 'SETE', 'OITO', 'NOVE', 'DEZ', 'ONZE', 'DOZE', 'TREZE', 'QUATORZE', 'QUINZE', 'DEZESSEIS', 'DEZESSETE', 'DEZOITO', 'DEZENOVE'] }.freeze
|
|
13
|
-
A0100 = { pt: ['', '', 'VINTE', 'TRINTA', 'QUARENTA', 'CINQUENTA', 'SESSENTA', 'SETENTA', 'OITENTA', 'NOVENTA'],
|
|
14
|
-
br: ['', '', 'VINTE', 'TRINTA', 'QUARENTA', 'CINQUENTA', 'SESSENTA', 'SETENTA', 'OITENTA', 'NOVENTA'] }.freeze
|
|
15
|
-
A1000 = { pt: ['', 'CEM', 'CENTO', 'DUZENTOS', 'TREZENTOS', 'QUATROCENTOS', 'QUINHENTOS', 'SEISCENTOS', 'SETECENTOS', 'OITOCENTOS', 'NOVECENTOS'],
|
|
16
|
-
br: ['', 'CEM', 'CENTO', 'DUZENTOS', 'TREZENTOS', 'QUATROCENTOS', 'QUINHENTOS', 'SEISCENTOS', 'SETECENTOS', 'OITOCENTOS', 'NOVECENTOS'] }.freeze
|
|
17
|
-
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'],
|
|
18
|
-
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'] }.freeze
|
|
19
|
-
|
|
20
|
-
# Produz o extenso das centenas em portugûes de portugal ou brasil.
|
|
40
|
+
# Produz o extenso das centenas em portugues de portugal ou brasil.
|
|
21
41
|
#
|
|
22
42
|
# @param [Integer] mil o valor dum grupo 3 digitos a converter
|
|
23
43
|
# @return [String] o extenso das centenas
|
|
24
44
|
def self.e900(mil)
|
|
25
|
-
A1000[
|
|
45
|
+
A1000[@lc][(mil > 100 ? 1 : 0) + mil / 100] +
|
|
46
|
+
(mil > 100 && (mil % 100).positive? ? ' E ' : '')
|
|
26
47
|
end
|
|
27
48
|
|
|
28
|
-
# Produz o extenso das dezenas em
|
|
49
|
+
# Produz o extenso das dezenas em portugues de portugal ou brasil.
|
|
29
50
|
#
|
|
30
51
|
# @param [Integer] mil o valor dum grupo 3 digitos a converter
|
|
31
52
|
# @return [String] o extenso das dezenas
|
|
32
53
|
def self.e90(mil)
|
|
33
|
-
A0100[
|
|
54
|
+
A0100[@lc][mil % 100 / 10] + (mil > 20 && (mil % 10).positive? ? ' E ' : '')
|
|
34
55
|
end
|
|
35
56
|
|
|
36
|
-
# Produz o extenso das unidades em
|
|
57
|
+
# Produz o extenso das unidades em portugues de portugal ou brasil.
|
|
37
58
|
#
|
|
38
|
-
# @param [Integer]
|
|
59
|
+
# @param [Integer] cem o valor dum grupo 3 digitos a converter
|
|
39
60
|
# @return [String] o extenso das unidades
|
|
40
61
|
def self.e9(cem)
|
|
41
|
-
A0020[
|
|
62
|
+
A0020[@lc][(cem < 20 ? cem : cem % 10)]
|
|
42
63
|
end
|
|
43
64
|
|
|
44
|
-
# Produz
|
|
65
|
+
# Produz extenso parte fracionaria em portugues de portugal ou brasil.
|
|
45
66
|
#
|
|
46
|
-
# @
|
|
47
|
-
# @return [String] o qualificador grupo de 3 digitos
|
|
48
|
-
def self.e1e24(pos)
|
|
49
|
-
A1e24[@@lc][@@ai[pos] > 0 ? @@ai[pos] > 1 ? 8 + pos : 0 + pos : 0]
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Produz o extenso da parte fracionária dum valor monetário em portugûes de portugal ou brasil.
|
|
53
|
-
#
|
|
54
|
-
# @return [String] o extenso da parte fracionária dum valor monetário
|
|
67
|
+
# @return [String] o extenso da parte fracionaria dum valor monetario
|
|
55
68
|
def self.ef99
|
|
56
|
-
|
|
69
|
+
if @nf.positive?
|
|
70
|
+
e90(@nf) + e9(@nf) + (@nf > 1 ? ' ' + @cp : ' ' + @cs)
|
|
71
|
+
else
|
|
72
|
+
''
|
|
73
|
+
end
|
|
57
74
|
end
|
|
58
75
|
|
|
59
|
-
# Produz final da moeda em
|
|
76
|
+
# Produz final da moeda em portugues de portugal ou brasil.
|
|
60
77
|
#
|
|
61
78
|
# @return [String] o final da moeda
|
|
62
79
|
def self.efim
|
|
63
|
-
#
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
80
|
+
# proposicao DE entre parte inteira e moeda
|
|
81
|
+
emo = @de ? ' DE' : ''
|
|
82
|
+
# moeda singular/plural
|
|
83
|
+
emo += @tt > 1 ? ' ' + @mp : ' ' + @ms if @tt.positive?
|
|
84
|
+
# proposicao E entre moeda e parte fracionaria
|
|
85
|
+
# extenso da parte fracionaria
|
|
86
|
+
emo + (@tt.positive? && @nf.positive? ? ' E ' : '') + ef99
|
|
70
87
|
end
|
|
71
88
|
|
|
72
|
-
# Produz
|
|
89
|
+
# Produz separador entre grupos 3 digitos
|
|
73
90
|
#
|
|
74
|
-
# @param [Integer] pos
|
|
75
|
-
# @return [String]
|
|
76
|
-
def self.edg3(pos)
|
|
77
|
-
# extenso do grupo actual 3 digitos
|
|
78
|
-
pos == 1 && @@ai[pos] == 1 ? e1e24(pos) : e900(@@ai[pos]) + e90(@@ai[pos]) + e9(@@ai[pos] % 100) + e1e24(pos)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# Produz separação entre grupos 3 digitos
|
|
82
|
-
#
|
|
83
|
-
# @param [Integer] pos posição actual nos grupos 3 digitos do valor monetário
|
|
84
|
-
# @return [String] separação entre grupos 3 digitos
|
|
91
|
+
# @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
|
|
92
|
+
# @return [String] separador entre grupos 3 digitos
|
|
85
93
|
def self.esep(pos)
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def self.pdg3
|
|
92
|
-
@@s6 = @@ai[0].to_i + @@ai[1].to_i * 2 # soma grupos 1,2 (primeiros 6 digitos)
|
|
93
|
-
@@m6 = @@ai[2..-1].to_a.inject(:+).to_i * 2 # soma grupos 3.. (digitos acima de 6)
|
|
94
|
+
if pos.positive? && @ai[pos - 1].positive?
|
|
95
|
+
@ai[pos - 1] > 100 ? ' ' : ' E '
|
|
96
|
+
else
|
|
97
|
+
''
|
|
98
|
+
end
|
|
94
99
|
end
|
|
95
100
|
|
|
96
|
-
#
|
|
101
|
+
# Produz qualificador grupo de 3 digitos em portugues de portugal ou brasil.
|
|
97
102
|
#
|
|
98
|
-
# @param [
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
# @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
|
|
104
|
+
# @return [String] qualificador grupo de 3 digitos
|
|
105
|
+
def self.e1e24(pos)
|
|
106
|
+
if @ai[pos].positive?
|
|
107
|
+
A1E24[@lc][@ai[pos] > 1 ? 8 + pos : pos]
|
|
108
|
+
else
|
|
109
|
+
''
|
|
110
|
+
end
|
|
106
111
|
end
|
|
107
112
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
# Parametrizar moeda inferindo singular a partir do plural
|
|
113
|
+
# Produz extenso grupo 3 digitos em portugues de portugal ou brasil.
|
|
111
114
|
#
|
|
112
|
-
# @param [
|
|
113
|
-
# @
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
115
|
+
# @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
|
|
116
|
+
# @return [String] extenso grupo 3 digitos
|
|
117
|
+
def self.edg3(pos)
|
|
118
|
+
dg3 = if pos == 1 && @ai[pos] == 1
|
|
119
|
+
# caso especial MIL EUROS
|
|
120
|
+
''
|
|
121
|
+
else
|
|
122
|
+
e900(@ai[pos]) + e90(@ai[pos]) + e9(@ai[pos] % 100)
|
|
123
|
+
end
|
|
124
|
+
# qualificador grupo de 3 digitos
|
|
125
|
+
dg3 + e1e24(pos)
|
|
121
126
|
end
|
|
122
127
|
|
|
123
|
-
# Parametrizar
|
|
128
|
+
# Parametrizar controle singular/plural & proposicoes
|
|
124
129
|
#
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
@@mp = moeda[:mplural] || @@ms + 'S'
|
|
133
|
-
@@cp = moeda[:fplural] || @@cs + 'S'
|
|
130
|
+
def self.pcontrolo
|
|
131
|
+
# soma grupos 1,2 (primeiros 6 digitos)
|
|
132
|
+
@s6 = @ai[0].to_i + @ai[1].to_i * 2
|
|
133
|
+
# soma grupos 3.. (digitos acima de 6)
|
|
134
|
+
@m6 = @ai[2..-1].to_a.inject(:+).to_i * 2
|
|
135
|
+
@tt = @s6 + @m6 # proposicao E & singular/plural
|
|
136
|
+
@de = @s6.zero? && @m6.positive? # proposicao DE
|
|
134
137
|
end
|
|
135
138
|
|
|
136
|
-
# Produz o extenso dum valor
|
|
139
|
+
# Produz o extenso dum valor monetario em portugues de portugal ou brasil.
|
|
137
140
|
#
|
|
138
|
-
# @param [Integer] pos
|
|
139
|
-
# @param [String] ext extenso
|
|
140
|
-
# @return [String] o extenso dum valor
|
|
141
|
+
# @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
|
|
142
|
+
# @param [String] ext extenso em construcao
|
|
143
|
+
# @return [String] o extenso dum valor monetario
|
|
141
144
|
def self.enumerico(pos = 0, ext = '')
|
|
142
|
-
# testa fim do valor
|
|
143
|
-
if pos >=
|
|
144
|
-
# parametrizar
|
|
145
|
-
|
|
145
|
+
# testa fim do valor monetario
|
|
146
|
+
if pos >= @ai.count
|
|
147
|
+
# parametrizar controle singular/plural & proposicoes
|
|
148
|
+
pcontrolo
|
|
146
149
|
|
|
147
150
|
# caso especial zero
|
|
148
|
-
|
|
151
|
+
(@tt + @nf).zero? ? 'ZERO ' + @mp : ext + efim
|
|
149
152
|
else
|
|
150
153
|
# tratamento do proximo grupo 3 digitos
|
|
151
154
|
enumerico(pos + 1, edg3(pos) + esep(pos) + ext)
|
|
152
155
|
end
|
|
153
156
|
end
|
|
154
157
|
|
|
155
|
-
#
|
|
158
|
+
# Parametrizar parte inteira/fracionaria do valor monetario
|
|
159
|
+
#
|
|
160
|
+
# @param [String] dig string de digitos rdo valor monetario
|
|
161
|
+
def self.pintfra(dig)
|
|
162
|
+
# parte inteira do valor monetario => array grupos 3 digitos
|
|
163
|
+
# ex: 123022.12 => [22, 123]
|
|
164
|
+
@ai = dig[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map { |i| i.reverse.to_i }
|
|
165
|
+
|
|
166
|
+
# parte fracionaria do valor monetario
|
|
167
|
+
# ex: 123022.12 => 12
|
|
168
|
+
# arredondada a 2 casas decimais (centimos/centavos)
|
|
169
|
+
@nf = (dig[/\.\d*/].to_f * 100).round
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
private_class_method :pintfra, :pcontrolo, :esep, :edg3, :e1e24,
|
|
173
|
+
:e900, :e90, :e9, :ef99, :efim
|
|
174
|
+
|
|
175
|
+
# Converte um objeto criando extenso(s) em portugues de portugal ou brasil.
|
|
156
176
|
#
|
|
157
|
-
# @param [Object] objeto
|
|
158
|
-
#
|
|
177
|
+
# @param [Object] objeto objeto a converter
|
|
178
|
+
# (String, Float, Integer, Array, Range, Hash)
|
|
179
|
+
# @return [String] extenso se objecto for (String, Float, Integer),
|
|
180
|
+
# Array<extensos> se objecto for (Array, Range),
|
|
181
|
+
# Hash<extensos> se objecto for (Hash)
|
|
159
182
|
def self.pobjeto(obj)
|
|
160
183
|
if obj.is_a?(Hash)
|
|
161
|
-
# converte os valores do Hash nos seus extensos
|
|
184
|
+
# converte os valores do Hash nos seus extensos - devolve um Hash
|
|
162
185
|
obj.map { |k, v| [k, pobjeto(v)] }.to_h
|
|
163
|
-
elsif obj.respond_to?
|
|
164
|
-
# converte o objecto num Array
|
|
186
|
+
elsif obj.respond_to?(:to_a)
|
|
187
|
+
# converte o objecto num Array com os extensos dos valores
|
|
165
188
|
obj.to_a.map { |v| pobjeto(v) }
|
|
166
189
|
else
|
|
167
190
|
# converte objeto numa string de digitos
|
|
168
|
-
# usa bigdecimal/util para evitar
|
|
169
|
-
#
|
|
191
|
+
# usa bigdecimal/util para evitar aritmetica binaria
|
|
192
|
+
# (tem problemas com valores >1e12)
|
|
193
|
+
# qualquer valor nao convertivel (ex: texto) resulta em "0.0"
|
|
170
194
|
sdigitos = obj.to_d.to_s('F')
|
|
171
195
|
|
|
172
|
-
# parametrizar parte inteira/
|
|
196
|
+
# parametrizar parte inteira/fracionaria (@ai, @nf) do valor monetario
|
|
173
197
|
pintfra(sdigitos)
|
|
174
198
|
|
|
175
|
-
# processar extenso
|
|
199
|
+
# processar extenso - valores superiores a 1e24 nao sao tratados
|
|
176
200
|
sdigitos[/^\d+/].length <= 24 ? enumerico : ''
|
|
177
201
|
end
|
|
178
202
|
end
|
|
179
203
|
|
|
180
|
-
#
|
|
204
|
+
# Parametrizar moeda inferindo singular a partir do plural
|
|
181
205
|
#
|
|
182
|
-
# @param [Hash] moeda as opcoes para parametrizar a moeda/
|
|
183
|
-
# @option moeda [Symbol] :lc locale do extenso -
|
|
184
|
-
#
|
|
185
|
-
# @option moeda [String] :
|
|
206
|
+
# @param [Hash] moeda as opcoes para parametrizar a moeda/fracao
|
|
207
|
+
# @option moeda [Symbol] :lc locale do extenso -
|
|
208
|
+
# portugues de portugal (:pt) ou brasil (:br)
|
|
209
|
+
# @option moeda [String] :msingular moeda no singular -
|
|
210
|
+
# inferido do plural menos "S"
|
|
211
|
+
# @option moeda [String] :fsingular fracao no singular -
|
|
212
|
+
# inferido do plural menos "S"
|
|
186
213
|
# @option moeda [String] :mplural moeda no plural
|
|
187
|
-
# @option moeda [String] :fplural
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
214
|
+
# @option moeda [String] :fplural fracao no plural
|
|
215
|
+
def self.isingular(moeda)
|
|
216
|
+
@ms = moeda[:msingular] ||
|
|
217
|
+
(moeda[:mplural].to_s[-1] == 'S' ? moeda[:mplural][0..-2] : 'EURO')
|
|
218
|
+
@cs = moeda[:fsingular] ||
|
|
219
|
+
(moeda[:fplural].to_s[-1] == 'S' ? moeda[:fplural][0..-2] : 'CÊNTIMO')
|
|
220
|
+
end
|
|
192
221
|
|
|
222
|
+
# Parametrizar moeda inferindo plural a partir do singular
|
|
223
|
+
#
|
|
224
|
+
# @param [Hash] moeda as opcoes para parametrizar a moeda/fracao
|
|
225
|
+
# @option moeda [Symbol] :lc locale do extenso -
|
|
226
|
+
# portugues de portugal (:pt) ou brasil (:br)
|
|
227
|
+
# @option moeda [String] :msingular moeda no singular
|
|
228
|
+
# @option moeda [String] :fsingular fracao no singular
|
|
229
|
+
# @option moeda [String] :mplural moeda no plural -
|
|
230
|
+
# inferido do singular mais "S"
|
|
231
|
+
# @option moeda [String] :fplural fracao no plural -
|
|
232
|
+
# inferido do singular mais "S"
|
|
233
|
+
def self.iplural(moeda)
|
|
193
234
|
# somente [:pt, :br]
|
|
194
|
-
|
|
235
|
+
@lc = LC.include?(moeda[:lc]) ? moeda[:lc] : :pt
|
|
236
|
+
|
|
237
|
+
@mp = moeda[:mplural] || @ms + 'S'
|
|
238
|
+
@cp = moeda[:fplural] || @cs + 'S'
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
# Produz extenso(s) de objeto(s) em portugues de portugal ou brasil.
|
|
242
|
+
#
|
|
243
|
+
# @param [Hash] moeda as opcoes para parametrizar a moeda/fracao
|
|
244
|
+
# @option moeda [Symbol] :lc locale do extenso -
|
|
245
|
+
# portugues de portugal (:pt) ou brasil (:br)
|
|
246
|
+
# @option moeda [String] :msingular moeda no singular
|
|
247
|
+
# @option moeda [String] :fsingular fracao no singular
|
|
248
|
+
# @option moeda [String] :mplural moeda no plural
|
|
249
|
+
# @option moeda [String] :fplural fracao no plural
|
|
250
|
+
# @return [String] extenso se objecto for (String, Float, Integer),
|
|
251
|
+
# Array<extensos> se objecto for (Array, Range),
|
|
252
|
+
# Hash<extensos> se objecto for (Hash)
|
|
253
|
+
def extenso(moeda = { lc: :pt, msingular: 'EURO', fsingular: 'CÊNTIMO' })
|
|
254
|
+
# parametrizacao por defeito para :br
|
|
255
|
+
if moeda[:lc] == :br && !moeda[:msingular] && !moeda[:mplural]
|
|
256
|
+
moeda.merge!(msingular: 'REAL', mplural: 'REAIS', fsingular: 'CENTAVO')
|
|
257
|
+
end
|
|
195
258
|
|
|
196
259
|
# parametrizar moeda
|
|
197
260
|
ExtensoPt.isingular(moeda)
|
|
@@ -201,9 +264,33 @@ module ExtensoPt
|
|
|
201
264
|
ExtensoPt.pobjeto(self)
|
|
202
265
|
end
|
|
203
266
|
end
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
class
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
267
|
+
|
|
268
|
+
# permite obter um Hash com valores numericos convertidos nos seus extensos
|
|
269
|
+
class Hash
|
|
270
|
+
include ExtensoPt
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
# permite obter um Array com valores numericos convertidos nos seus extensos
|
|
274
|
+
class Array
|
|
275
|
+
include ExtensoPt
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
# permite obter um Array com valores numericos convertidos nos seus extensos
|
|
279
|
+
class Range
|
|
280
|
+
include ExtensoPt
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
# permite obter o extenso dum Float
|
|
284
|
+
class Float
|
|
285
|
+
include ExtensoPt
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
# permite obter o extenso dum Integer
|
|
289
|
+
class Integer
|
|
290
|
+
include ExtensoPt
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
# permite obter o extenso duma String de digitos
|
|
294
|
+
class String
|
|
295
|
+
include ExtensoPt
|
|
296
|
+
end
|
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.4
|
|
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-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bigdecimal
|
|
@@ -66,11 +66,12 @@ dependencies:
|
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '10.0'
|
|
69
|
-
description:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
description: |-
|
|
70
|
+
Produz valores monetários por extenso\ em portugês de portugal ou brasil. Os valores podem ser um numerico, uma\
|
|
71
|
+
string de digitos ou um conjunto destes (array, range, hash). O extenso\
|
|
72
|
+
pode ser produzido na escala longa (utilizada em todos os países\
|
|
73
|
+
lusófonos) ou na escala curta (utilizada no Brasil). Pode ainda escolher\
|
|
74
|
+
a moeda e a fração da moeda.
|
|
74
75
|
email:
|
|
75
76
|
- hernanirvaz@gmail.com
|
|
76
77
|
executables: []
|
|
@@ -79,8 +80,6 @@ extra_rdoc_files: []
|
|
|
79
80
|
files:
|
|
80
81
|
- ".gitignore"
|
|
81
82
|
- ".project_alt.json"
|
|
82
|
-
- ".rubocop.yml"
|
|
83
|
-
- ".rubocop_todo.yml"
|
|
84
83
|
- ".travis.yml"
|
|
85
84
|
- Gemfile
|
|
86
85
|
- Gemfile.lock
|
|
@@ -116,5 +115,5 @@ requirements: []
|
|
|
116
115
|
rubygems_version: 3.0.3
|
|
117
116
|
signing_key:
|
|
118
117
|
specification_version: 4
|
|
119
|
-
summary: Produz valores monetários por extenso em portugês de portugal ou brasil.
|
|
118
|
+
summary: Produz valores monetários por extenso\ em portugês de portugal ou brasil.
|
|
120
119
|
test_files: []
|
data/.rubocop.yml
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
inherit_from: .rubocop_todo.yml
|
data/.rubocop_todo.yml
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# This configuration was generated by
|
|
2
|
-
# `rubocop --auto-gen-config`
|
|
3
|
-
# on 2019-09-25 11:13:11 +0100 using RuboCop version 0.74.0.
|
|
4
|
-
# The point is for the user to remove these configuration records
|
|
5
|
-
# one by one as the offenses are removed from the code base.
|
|
6
|
-
# Note that changes in the inspected code, or installation of new
|
|
7
|
-
# versions of RuboCop, may require this file to be generated again.
|
|
8
|
-
|
|
9
|
-
# Offense count: 1
|
|
10
|
-
#Lint/RequireParentheses:
|
|
11
|
-
# Exclude:
|
|
12
|
-
# - 'lib/extenso_pt.rb'
|
|
13
|
-
|
|
14
|
-
# Offense count: 4
|
|
15
|
-
#Metrics/AbcSize:
|
|
16
|
-
# Max: 58
|
|
17
|
-
|
|
18
|
-
# Offense count: 3
|
|
19
|
-
Metrics/CyclomaticComplexity:
|
|
20
|
-
Max: 17
|
|
21
|
-
|
|
22
|
-
# Offense count: 3
|
|
23
|
-
# Configuration parameters: CountComments, ExcludedMethods.
|
|
24
|
-
Metrics/MethodLength:
|
|
25
|
-
Max: 24
|
|
26
|
-
|
|
27
|
-
# Offense count: 3
|
|
28
|
-
Metrics/PerceivedComplexity:
|
|
29
|
-
Max: 19
|
|
30
|
-
|
|
31
|
-
# Offense count: 1
|
|
32
|
-
Naming/ConstantName:
|
|
33
|
-
Exclude:
|
|
34
|
-
- 'lib/extenso_pt.rb'
|
|
35
|
-
|
|
36
|
-
# Offense count: 39
|
|
37
|
-
# Configuration parameters: AllowedChars.
|
|
38
|
-
Style/AsciiComments:
|
|
39
|
-
Exclude:
|
|
40
|
-
- 'lib/extenso_pt.rb'
|
|
41
|
-
- 'test/extenso_pt_test.rb'
|
|
42
|
-
|
|
43
|
-
# Offense count: 7
|
|
44
|
-
Style/ClassVars:
|
|
45
|
-
Exclude:
|
|
46
|
-
- 'lib/extenso_pt.rb'
|
|
47
|
-
|
|
48
|
-
# Offense count: 6
|
|
49
|
-
Style/Documentation:
|
|
50
|
-
Exclude:
|
|
51
|
-
- 'spec/**/*'
|
|
52
|
-
- 'test/**/*'
|
|
53
|
-
- 'lib/extenso_pt.rb'
|
|
54
|
-
|
|
55
|
-
# Offense count: 2
|
|
56
|
-
Style/NestedTernaryOperator:
|
|
57
|
-
Exclude:
|
|
58
|
-
- 'lib/extenso_pt.rb'
|
|
59
|
-
|
|
60
|
-
# Offense count: 10
|
|
61
|
-
# Cop supports --auto-correct.
|
|
62
|
-
# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
|
|
63
|
-
# SupportedStyles: predicate, comparison
|
|
64
|
-
Style/NumericPredicate:
|
|
65
|
-
Exclude:
|
|
66
|
-
- 'spec/**/*'
|
|
67
|
-
- 'lib/extenso_pt.rb'
|
|
68
|
-
|
|
69
|
-
# Offense count: 53
|
|
70
|
-
# Cop supports --auto-correct.
|
|
71
|
-
# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
|
72
|
-
# URISchemes: http, https
|
|
73
|
-
Metrics/LineLength:
|
|
74
|
-
Max: 317
|