extenso_pt 0.5.8 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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: