extenso_pt 0.4.3 → 0.4.4

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: 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