extenso_pt 0.5.8 → 0.6.0

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: 957540b2bccdc61b30b6c221465b11573c9570720729dafd3df982ab73216da1
4
- data.tar.gz: 4f2159763f75b938535d61c293834f0f039395d577521d7d8d56cbe19592fe42
3
+ metadata.gz: d1bdf0ca3275038eec98c0152caab67df72476569e5fcf1da8eef189d5fa1d0b
4
+ data.tar.gz: a7c217ea1f7f3bf22803c4b7934b932bc345b82a1659498badd727d7899c7954
5
5
  SHA512:
6
- metadata.gz: ec98f28a4969f2ed153086b55b781b89c617276d4d16bbb3de600dfa765b083a7ee6abd832a0f7d44eb13f7801deb189e1f7dc2890210934dbf5b27f09a79175
7
- data.tar.gz: af1f863cad4cbce9c8aeaceb0353ccc2518ca7155428fa5fb4554fc095eecacae9222e1337cb7261462900b0f383dfd2cc1fa9c4ea913daf9bc9ad77a85022ed
6
+ metadata.gz: af9fddecbf22b45279b0c47aa89ee161dcd9cbd3ac0a0d23ca199e9ca000dc6c1c86c37ffd69d01763d7b86d2a230e3f1e8a529b3135076458fcd9e358c99465
7
+ data.tar.gz: b398d10b05e86044c0cc5a8ed2df5b72d77fe7ec2a10d3795c1e28624d133654a602d533caf10c183adba31849c17921d20a57578079dda6685aa0a9b43f0d03
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- extenso_pt (0.5.8)
4
+ extenso_pt (0.6.0)
5
5
  bigdecimal (~> 1.4.4)
6
6
 
7
7
  GEM
@@ -15,7 +15,7 @@ module ExtensoPt
15
15
  #
16
16
  # @param [Integer] cem o valor dum grupo 3 digitos a converter
17
17
  # @return [String] o extenso das dezenas
18
- def self.e90(cem)
18
+ def self.e090(cem)
19
19
  A0100[@lc][cem / 10] +
20
20
  (cem > 20 && (cem % 10).positive? ? ' E ' : '') # proposicao
21
21
  end
@@ -24,7 +24,7 @@ module ExtensoPt
24
24
  #
25
25
  # @param [Integer] cem o valor dum grupo 3 digitos a converter
26
26
  # @return [String] o extenso das unidades
27
- def self.e9(cem)
27
+ def self.e009(cem)
28
28
  A0020[@lc][cem < 20 ? cem : cem % 10]
29
29
  end
30
30
 
@@ -37,7 +37,7 @@ module ExtensoPt
37
37
  @cp ||= @ms + 'S'
38
38
 
39
39
  if @nf.positive?
40
- e90(@nf) + e9(@nf) + (@nf > 1 ? ' ' + @cp : ' ' + @cs)
40
+ e090(@nf) + e009(@nf) + (@nf > 1 ? ' ' + @cp : ' ' + @cs)
41
41
  else
42
42
  ''
43
43
  end
@@ -64,7 +64,7 @@ module ExtensoPt
64
64
  #
65
65
  # @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
66
66
  # @return [String] separador entre grupos 3 digitos
67
- def self.esep(pos)
67
+ def self.edgs(pos)
68
68
  if pos.positive? && @ai[pos - 1].positive?
69
69
  @ai[pos - 1] > 100 ? ' ' : ' E '
70
70
  else
@@ -76,7 +76,7 @@ module ExtensoPt
76
76
  #
77
77
  # @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
78
78
  # @return [String] qualificador grupo de 3 digitos
79
- def self.e1e24(pos)
79
+ def self.e124(pos)
80
80
  if @ai[pos].positive?
81
81
  @ai[pos] > 1 ? P1E24[@lc][pos] : S1E24[@lc][pos]
82
82
  else
@@ -98,16 +98,16 @@ module ExtensoPt
98
98
  # caso especial MIL EUROS
99
99
  ''
100
100
  else
101
- e900(@ai[pos]) + e90(@ai[pos] % 100) + e9(@ai[pos] % 100)
101
+ e900(@ai[pos]) + e090(@ai[pos] % 100) + e009(@ai[pos] % 100)
102
102
  end
103
103
  # qualificador grupo de 3 digitos
104
- dg3 + e1e24(pos)
104
+ dg3 + e124(pos)
105
105
  end
106
106
 
107
107
  # Parametrizar controle singular/plural & proposicoes
108
108
  #
109
109
  # @return [void]
110
- def self.pcontrolo
110
+ def self.epsp
111
111
  # soma grupos 1,2 (primeiros 6 digitos)
112
112
  @s6 = @ai[0].to_i + @ai[1].to_i * 2
113
113
  # soma grupos 3.. (digitos acima de 6)
@@ -121,17 +121,17 @@ module ExtensoPt
121
121
  # @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
122
122
  # @param [String] ext extenso em construcao
123
123
  # @return [String] o extenso dum valor monetario
124
- def self.emonetario(pos, ext)
124
+ def self.etot(pos, ext)
125
125
  # testa fim do valor monetario
126
126
  if pos >= @ai.count
127
127
  # parametrizar controle singular/plural & proposicoes
128
- pcontrolo
128
+ epsp
129
129
 
130
130
  # caso especial zero
131
131
  (@tt + @nf).zero? ? 'ZERO ' + @mp : ext + efim
132
132
  else
133
133
  # tratamento do proximo grupo 3 digitos
134
- emonetario(pos + 1, edg3(pos) + esep(pos) + ext)
134
+ etot(pos + 1, edg3(pos) + edgs(pos) + ext)
135
135
  end
136
136
  end
137
137
 
@@ -139,7 +139,7 @@ module ExtensoPt
139
139
  #
140
140
  # @param [String] digitos do valor monetario
141
141
  # @return [void]
142
- def self.pintfra(dig)
142
+ def self.epif(dig)
143
143
  # parte inteira do valor monetario => array grupos 3 digitos
144
144
  # ex: 123022.12 => [22, 123]
145
145
  @ai = dig[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map { |i| i.reverse.to_i }
@@ -158,23 +158,19 @@ module ExtensoPt
158
158
  # se objecto for (String, Float, Integer),
159
159
  # array<extensos> se objecto for (Array, Range),
160
160
  # hash<extensos> se objecto for (Hash)
161
- def self.o2e(obj)
162
- if obj.is_a?(Hash)
163
- # converte os valores do Hash nos seus extensos - devolve um Hash
164
- obj.map { |k, v| [k, o2e(v)] }.to_h
165
- elsif obj.respond_to?(:to_a)
166
- # converte o objecto num Array com os extensos dos valores
167
- obj.to_a.map { |a| o2e(a) }
161
+ def self.eo2e(obj)
162
+ # converte os valores do Hash nos seus extensos - devolve um Hash
163
+ if obj.is_a?(Hash) then obj.map { |k, v| [k, eo2e(v)] }.to_h
164
+ # converte o objecto num Array com os extensos dos valores
165
+ elsif obj.respond_to?(:to_a) then obj.to_a.map { |a| eo2e(a) }
168
166
  else
169
167
  # converte objeto em string digitos utilizando bigdecimal para
170
168
  # evitar problemas com aritmetica virgula flutuante em valores >1e12
171
- digitos = obj.to_d.to_s('F')
172
-
173
169
  # parametrizar parte inteira/fracionaria (@ai, @nf) do valor monetario
174
- pintfra(digitos)
170
+ epif(obj.to_d.to_s('F'))
175
171
 
176
- # processar extenso - valores superiores a 1e24 nao sao tratados
177
- digitos[/^\d+/].length <= 24 ? emonetario(0, '') : ''
172
+ # processar extenso - valores >1e24 nao sao tratados
173
+ @ai.count > 8 ? '' : etot(0, '')
178
174
  end
179
175
  end
180
176
 
@@ -190,7 +186,7 @@ module ExtensoPt
190
186
  # @option moeda [String] :mplural moeda no plural
191
187
  # @option moeda [String] :fplural fracao no plural
192
188
  # @return [void]
193
- def self.psingular(moeda)
189
+ def self.epsi(moeda)
194
190
  @ms = moeda[:msingular] ||
195
191
  (moeda[:mplural].to_s[-1] == 'S' ? moeda[:mplural][0..-2] : 'EURO')
196
192
  @cs = moeda[:fsingular] ||
@@ -209,7 +205,7 @@ module ExtensoPt
209
205
  # @option moeda [String] :fplural fracao no plural -
210
206
  # inferido do singular mais "S"
211
207
  # @return [void]
212
- def self.pplural(moeda)
208
+ def self.eppl(moeda)
213
209
  # somente [:pt, :br]
214
210
  @lc = EXTLC.include?(moeda[:lc]) ? moeda[:lc] : :pt
215
211
 
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @author Hernani Rodrigues Vaz
4
+ module ExtensoPt
5
+ # Recursivamente produz numeral romano
6
+ #
7
+ # @param [Integer] numero a converter em numeral romano
8
+ # @return [String] numeral romano
9
+ def self.ri2r(numero)
10
+ return '' if numero <= 0
11
+
12
+ ROMAN.each { |r, v| return r.to_s + ri2r(numero - v) if v <= numero }
13
+ end
14
+
15
+ # Recursivamente produz inteiro
16
+ #
17
+ # @param [String] numeral romano em convercao
18
+ # @param [Integer] ultimo numeral convertido
19
+ # @return [Integer] inteiro do numeral romano
20
+ def self.rr2i(numeral, ultimo)
21
+ return 0 if numeral.empty?
22
+
23
+ v = ROMAN[numeral[-1].to_sym]
24
+ v < ultimo ? (rr2i(numeral.chop, v) - v) : (rr2i(numeral.chop, v) + v)
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExtensoPt
4
- VERSION = '0.5.8'
4
+ VERSION = '0.6.0'
5
5
  end
data/lib/extenso_pt.rb CHANGED
@@ -3,7 +3,8 @@
3
3
  require 'bigdecimal/util'
4
4
  require 'extenso_pt/version'
5
5
  require 'extenso_pt/constantes'
6
- require 'extenso_pt/module'
6
+ require 'extenso_pt/extenso'
7
+ require 'extenso_pt/romana'
7
8
 
8
9
  # @author Hernani Rodrigues Vaz
9
10
  module ExtensoPt
@@ -29,91 +30,60 @@ module ExtensoPt
29
30
  end
30
31
 
31
32
  # parametrizar moeda
32
- ExtensoPt.psingular(moeda)
33
- ExtensoPt.pplural(moeda)
33
+ ExtensoPt.epsi(moeda)
34
+ ExtensoPt.eppl(moeda)
34
35
 
35
36
  # cria extenso(s) em portugues de portugal ou brasil
36
- ExtensoPt.o2e(self)
37
+ ExtensoPt.eo2e(self)
38
+ end
39
+
40
+ # Testa se string contem numeracao romana
41
+ #
42
+ # @return [true, false] sim ou nao numeracao romana
43
+ def romana?
44
+ is_a?(String) ? RO_RE.match?(upcase) : false
45
+ end
46
+
47
+ # Produz numeracao romana a partir de numerico
48
+ # ou numerico a partir da numeracao romana
49
+ # (numerico pode ser uma string digitos)
50
+ #
51
+ # @return [String, Integer] numeracao romana ou inteiro
52
+ def romana
53
+ # converte os valores do Hash
54
+ if is_a?(Hash) then map { |k, v| [k, v.romana] }.to_h
55
+ # converte objecto num Array com os valores convertidos
56
+ elsif respond_to?(:to_a) then to_a.map(&:romana)
57
+ # numeracao romana a partir de inteiro ou string digitos
58
+ elsif (inteiro = to_i).positive? then ExtensoPt.ri2r(inteiro)
59
+ else
60
+ # inteiro a partir da numeracao romana
61
+ RO_RE.match?(to_s) ? ExtensoPt.rr2i(upcase, 0) : ''
62
+ end
37
63
  end
38
64
  end
39
65
 
40
- # permite obter um Hash com valores numericos convertidos nos seus extensos
66
+ # permite obter um Hash com valores convertidos
41
67
  class Hash
42
68
  include ExtensoPt
43
69
  end
44
70
 
45
- # permite obter um Array com valores numericos convertidos nos seus extensos
71
+ # permite obter um Array com valores convertidos
46
72
  class Array
47
73
  include ExtensoPt
48
74
  end
49
75
 
50
- # permite obter um Array com valores numericos convertidos nos seus extensos
76
+ # permite obter um Array com valores do Range convertidos
51
77
  class Range
52
78
  include ExtensoPt
53
79
  end
54
80
 
55
- # permite obter o extenso de Float
56
- class Float
81
+ # permite obter Float ou Integer convertidos
82
+ class Numeric
57
83
  include ExtensoPt
58
84
  end
59
85
 
60
- # permite obter o extenso ou numeral romano de Integer
61
- class Integer
62
- include ExtensoPt
63
-
64
- # Produz numeracao romana a partir do inteiro
65
- #
66
- # @return [String] numeracao romana
67
- def romana
68
- return "-#{i2r(-self)}" if negative?
69
-
70
- i2r(self)
71
- end
72
-
73
- # Recursivamente produz numeral romano
74
- #
75
- # @param [Integer] numero a converter em numeral romano
76
- # @return [String] numeral romano
77
- def i2r(numero)
78
- return '' if numero.zero?
79
-
80
- ROMAN.each { |r, v| return r.to_s + i2r(numero - v) if v <= numero }
81
- end
82
- end
83
-
84
- # permite obter o extenso duma string de digitos ou
85
- # inteiro duma string numeral romano
86
+ # permite obter strings convertidas
86
87
  class String
87
88
  include ExtensoPt
88
-
89
- # Testa se string contem numeracao romana
90
- #
91
- # @return [true, false] sim ou nao numeracao romana
92
- def romana?
93
- RO_RE.match?(upcase)
94
- end
95
-
96
- # Produz inteiro a partir da numeracao romana
97
- # ou numeracao romana a partir de string digitos
98
- #
99
- # @return [Integer, String] inteiro ou numeracao romana
100
- def romana
101
- return -self[/[^-]+/].romana if /-+/.match?(self)
102
- return self[/^\d+/].to_i.romana if /^\d+/.match?(self)
103
- return 0 unless romana?
104
-
105
- r2i(upcase, 0)
106
- end
107
-
108
- # Recursivamente produz inteiro
109
- #
110
- # @param [String] numeral romano em convercao
111
- # @param [Integer] ultimo numeral convertido
112
- # @return [Integer] inteiro do numeral romano
113
- def r2i(numeral, ultimo)
114
- return 0 if numeral.empty?
115
-
116
- v = ROMAN[numeral[-1].to_sym]
117
- v < ultimo ? (r2i(numeral.chop, v) - v) : (r2i(numeral.chop, v) + v)
118
- end
119
89
  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.8
4
+ version: 0.6.0
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-11-07 00:00:00.000000000 Z
11
+ date: 2019-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -90,7 +90,8 @@ files:
90
90
  - extenso_pt.gemspec
91
91
  - lib/extenso_pt.rb
92
92
  - lib/extenso_pt/constantes.rb
93
- - lib/extenso_pt/module.rb
93
+ - lib/extenso_pt/extenso.rb
94
+ - lib/extenso_pt/romana.rb
94
95
  - lib/extenso_pt/version.rb
95
96
  homepage: https://github.com/hernanilr/extenso_pt
96
97
  licenses: