extenso_pt 0.4.3 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b97203696a205862d019e2827b5699c406d70e252f515eb82477532b0b83fbae
4
- data.tar.gz: 976847d550a2617e3c1e99d2e829b5c912ef75575d208b5cae0ccc496f58f5b6
3
+ metadata.gz: a8e97d447bc5d00e4399120531cb4e8307559084dfc8d42ed36af0bc4d2e645a
4
+ data.tar.gz: c3190c47b494f8150e7932a7026bbcf959f41a2e6fb3de8eddad47b2a890aa9a
5
5
  SHA512:
6
- metadata.gz: f0c8e8e1986c4c4feccabc44d01f6805e97432a6028130f47d36b69a391a014ce6a38c335d0557f2afdd0544d770071fb81dcce4196796a9209a5f3e3efb5c29
7
- data.tar.gz: a23bc7e977a4bb65cf35a0cc5c36d65f8331b79c265cd8fd5f8a44a1d2b4a5f031e13e9ca36e395f40265c164a628787044b808dc380d9b2f13854d60da43e58
6
+ metadata.gz: '0910a98969f0ab858925dcab97c9411c61d060fc756f61bb494edd889b67f432ba6cbdc123fb754291f89f46b630c81057e3224e293cea7acde47cfb537366fb'
7
+ data.tar.gz: 2fb1cdd88909bd35a61de3572ce59b262251a397b6b7a794f6117d11b45a370e6e2f4952475e75669ab37fe7743f91fd9fb313c16858e07ef2a8404ba62076be
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- extenso_pt (0.4.3)
4
+ extenso_pt (0.4.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,3 +1,3 @@
1
1
  module ExtensoPt
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.4"
3
3
  end
data/lib/extenso_pt.rb CHANGED
@@ -15,10 +15,10 @@ 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 a moeda e o extenso da parte fracionaria do valor monetário em portugûes de portugal ou brasil.
18
+ # Produz a moeda e o extenso da parte fracionária do valor monetário em portugûes de portugal ou brasil.
19
19
  #
20
- # @param [Integer] fracao parte fracionaria do valor monetário ex: 100022.12 = 12
21
- # @return [String] a moeda e o extenso da parte fracionaria do valor monetário
20
+ # @param [Integer] fracao parte fracionária do valor monetário ex: 100022.12 = 12
21
+ # @return [String] a moeda e o extenso da parte fracionária do valor monetário
22
22
  def self.efracao(fracao)
23
23
  inteira=@@ai.find{|v|v>0}.to_i+@@ai[1..-1].to_a.find{|v|v>0}.to_i
24
24
  total=inteira+fracao
@@ -28,11 +28,11 @@ module ExtensoPt
28
28
  (fracao>0?fracao>1?" "+@@cp:" "+@@cs:"")
29
29
  end
30
30
 
31
- # Produz o extenso dum valor (entre 0-999) em portugûes de portugal ou brasil.
31
+ # Produz o extenso dum grupo de 3 digitos em portugûes de portugal ou brasil.
32
32
  #
33
- # @param [Integer] mil o valor a converter
34
- # @param [Integer] pos posição actual de mil no valor monetário em tratamento
35
- # @return [String] o extenso de mil
33
+ # @param [Integer] mil o valor dum grupo de 3 digitos a converter
34
+ # @param [Integer] pos posição deste grupo de 3 digitos no valor monetário em tratamento
35
+ # @return [String] o extenso de <mil>
36
36
  def self.e999(mil,pos=0)
37
37
  cem=mil%100
38
38
  A1000[@@lc][(mil>100?1:0)+mil/100]+(mil>100&&mil%100>0?" E ":"")+
@@ -40,18 +40,18 @@ module ExtensoPt
40
40
  A0020[@@lc][pos==1&&mil==1?0:cem<20?cem:cem%10]
41
41
  end
42
42
 
43
- # Produz recursivamente o extenso da parte inteira do valor monetário em portugûes de portugal ou brasil.
43
+ # Produz o extenso da parte inteira do valor monetário em portugûes de portugal ou brasil.
44
44
  #
45
- # @param [Integer] pos posição actual do valor monetário em tratamento
45
+ # @param [Integer] pos posição actual nos grupos de 3 digitos do valor monetário em tratamento
46
46
  # @param [String] ext extenso actual em tratamento
47
- # @return [String] o extenso da parte inteira
48
- def self.erecursivo(pos=0,ext="")
47
+ # @return [String] o extenso da parte inteira do valor monetário
48
+ def self.einteira(pos=0,ext="")
49
49
  if (pos>=@@ai.count)
50
50
  ext
51
51
  else
52
52
  ctl=pos>0?@@ai[pos-1]:0
53
53
  ext=e999(@@ai[pos],pos)+A1e24[@@lc][@@ai[pos]>0?@@ai[pos]>1?8+pos:pos:0]+(ctl>100?" ":ctl>0?" E ":"")+ext
54
- erecursivo(pos+1,ext)
54
+ einteira(pos+1,ext)
55
55
  end
56
56
  end
57
57
 
@@ -65,6 +65,7 @@ module ExtensoPt
65
65
  # @option moeda [String] :fplural Fração no plural - pode ser inferido do <b>:fsingular+"S"</b>
66
66
  # @return [String, Array<String>, Hash<String>] extenso se o objecto for (String, Float, Integer), Array dos extensos se o objecto for (Array, Range) ou Hash dos extensos se o objecto for (Hash)
67
67
  def extenso(moeda={lc:(:pt),msingular:"EURO",fsingular:"CÊNTIMO"})
68
+ # parametrização da moeda
68
69
  moeda={lc:(:br),msingular:"REAL",mplural:"REAIS",fsingular:"CENTAVO"} if (moeda[:lc]==:br&&!moeda[:mplural]&&!moeda[:fplural])
69
70
  @@lc=LC.include?(moeda[:lc])?moeda[:lc]:(:pt)
70
71
  @@ms=moeda[:msingular]?moeda[:msingular]:moeda[:mplural].to_s[-1]=="S"?moeda[:mplural][0..-2]:"EURO"
@@ -72,17 +73,23 @@ module ExtensoPt
72
73
  @@mp=moeda[:mplural]?moeda[:mplural]:@@ms+"S"
73
74
  @@cp=moeda[:fplural]?moeda[:fplural]:@@cs+"S"
74
75
  if (self.kind_of?Hash)
75
- # converte os valores do Hash nos seus extensos mantendos as chaves devolve um Hash
76
+ # converte os valores do Hash nos seus extensos mantendo as chaves - devolve um Hash
76
77
  self.map{|k,v|[k,v.extenso(lc:(@@lc),msingular:@@ms,fsingular:@@cs,mplural:@@mp,fplural:@@cp)]}.to_h
77
78
  elsif (self.respond_to?:to_a)
78
- # converte o objecto num Array e converte os valores nos seus extensos devolve um Array
79
+ # converte o objecto num Array e converte os valores nos seus extensos - devolve um Array
79
80
  self.to_a.map{|a|a.extenso(lc:(@@lc),msingular:@@ms,fsingular:@@cs,mplural:@@mp,fplural:@@cp)}
80
81
  else
81
82
  # converter com bigdecimal/util para evitar bugs com valores superiores a 1e12
82
83
  n=self.to_d.to_s('F')
83
84
  # dividir parte inteira em grupos de 3 digitos ex: 123022.12 => [22, 123]
84
85
  @@ai=n[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map{|i|i.reverse.to_i}
85
- @@ai.count>8?"":ExtensoPt.erecursivo+ExtensoPt.efracao((n[/\.\d*/].to_f*100).round)
86
+ if (@@ai.count>8)
87
+ "" # MAX 1e24
88
+ else
89
+ ExtensoPt.einteira+
90
+ # parte fracionária é arredondada a 2 casas decimais (cêntimos)
91
+ ExtensoPt.efracao((n[/\.\d*/].to_f*100).round)
92
+ end
86
93
  end
87
94
  end
88
95
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: extenso_pt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hernâni Rodrigues Vaz