extenso_pt 0.4.2 → 0.4.3

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: 2f14252e6a63b1d386fcefd4bd447d8fcd22db33a00a6cedeb9e2eec1f11cc0a
4
- data.tar.gz: 1a2d9875a0571d60d3afb4407bc748539b64ffec92bd20389ac03b061070e3e3
3
+ metadata.gz: b97203696a205862d019e2827b5699c406d70e252f515eb82477532b0b83fbae
4
+ data.tar.gz: 976847d550a2617e3c1e99d2e829b5c912ef75575d208b5cae0ccc496f58f5b6
5
5
  SHA512:
6
- metadata.gz: 8963792e66a586fdda0b290751f1a996f036ff9953beb40d2932059c8e0a4c91d71a95b3b24da078e96121fca1e304dd2c710c92f343e0182f8536f4d5a72c68
7
- data.tar.gz: 663a7eb58b1609cbda291c48513ab6ff2ce10f6b2fcb3546a9d5aba08bccdea892eb38a632212645de53bff312bc021200e03eca3a74011a2388a9c2feb00e7d
6
+ metadata.gz: f0c8e8e1986c4c4feccabc44d01f6805e97432a6028130f47d36b69a391a014ce6a38c335d0557f2afdd0544d770071fb81dcce4196796a9209a5f3e3efb5c29
7
+ data.tar.gz: a23bc7e977a4bb65cf35a0cc5c36d65f8331b79c265cd8fd5f8a44a1d2b4a5f031e13e9ca36e395f40265c164a628787044b808dc380d9b2f13854d60da43e58
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- extenso_pt (0.4.2)
4
+ extenso_pt (0.4.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -27,8 +27,8 @@ Or install it yourself as:
27
27
  10.1.extenso(mplural:"DÓLARES") => "DEZ DÓLARES E DEZ CÊNTIMOS" # plural inferido <silgular> mais "S"
28
28
  14.01.extenso(mplural:"REAIS",fsingular:"CENTAVO") => "CATORZE REAIS E UM CENTAVO"
29
29
  14.10.extenso(mplural:"REAIS",fsingular:"CENTAVO") => "CATORZE REAIS E DEZ CENTAVOS"
30
- 14.10.extenso(lc: :br) => "QUATORZE REAIS E DEZ CENTAVOS"
31
- 1e10.extenso(mplural:"REAIS") => "DEZ MIL MILHÕES DE REAIS" # portugal usa escala longa
30
+ 14.1.extenso(lc: :br) => "QUATORZE REAIS E DEZ CENTAVOS"
31
+ 1e10.extenso(lc: :pt,mplural:"REAIS") => "DEZ MIL MILHÕES DE REAIS" # portugal usa escala longa
32
32
  1e10.extenso(lc: :br) => "DEZ BILHÕES DE REAIS" # brasil usa escala curta
33
33
  14.01.extenso(mplural:"REAIS",fplural:"CENTAVOS") => "CATORZE REAIS E UM CENTAVO" # singular inferido <plural> menos "S"
34
34
  ["1", "2"].extenso => ["UM EURO","DOIS EUROS"] # extenso Array
@@ -1,3 +1,3 @@
1
1
  module ExtensoPt
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.3"
3
3
  end
data/lib/extenso_pt.rb CHANGED
@@ -15,86 +15,43 @@ 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
- # Controle proposicao E
19
- #
20
- # @param [Integer] valor parcela do valor monetario
21
- # @return [String] produz E entre centenas e dezenas
22
- def self.f1(valor)valor>100&&valor%100>0?" E ":""end
23
-
24
- # Controle proposicao E
25
- #
26
- # @param [Integer] valor parcela do valor monetario
27
- # @return [String] produz E entre dezenas e unidades
28
- def self.f2(valor)valor>20&&valor%10>0?" E ":""end
29
-
30
- # Controle proposicao E
31
- #
32
- # @param [Integer] valor parcela do valor monetario
33
- # @return [String] produz E entre pacelas
34
- def self.f3(valor)valor>100?" ":valor>0?" E ":""end
35
-
36
- # Controle singular/plural da parte inteira
37
- #
38
- # @param [Integer] inteira soma da parte inteira
39
- # @return [String] produz terminacao da parte inteira
40
- def self.f4(inteira)inteira>0?inteira>1?" "+@@mp:" "+@@ms:""end
41
-
42
- # Controle singular/plural da parte fracionaria
43
- #
44
- # @param [Integer] fracao parte fracionaria do valor monetário ex: 100022.12 = 12
45
- # @return [String] produz terminacao da parte fracionaria
46
- def self.f5(fracao)fracao>0?fracao>1?" "+@@cp:" "+@@cs:""end
47
-
48
- # Controle separador entre parte inteira e fracionaria
49
- #
50
- # @param [Integer] inteira soma da parte inteira
51
- # @param [Integer] fracao parte fracionaria do valor monetário ex: 100022.12 = 12
52
- # @return [String] produz E entre parte inteira e fracionaria
53
- def self.f6(inteira,fracao)inteira>0&&fracao>0?" E ":""end
54
-
55
- # Controle de palavras no final do extenso
56
- #
57
- # @param [Integer] total soma da parte inteira e fracionaria para controle de ZERO
58
- # @return [String] produz DE/ZERO <plural moeda>
59
- def self.f7(total)
60
- if (@@ai[2..-1].to_a.find{|v|v>0}.to_i>0&&@@ai[0..1].inject(:+).to_i==0)
61
- " DE"
62
- elsif (@@ai.count>0&&total==0)
63
- "ZERO "+@@mp
64
- else
65
- ""
66
- end
67
- end
68
-
69
- # Produz 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 fracionaria do valor monetário em portugûes de portugal ou brasil.
70
19
  #
71
20
  # @param [Integer] fracao parte fracionaria do valor monetário ex: 100022.12 = 12
72
- # @return [String] o extenso da parte fracionaria do valor monetário
73
- def self.fracao(fracao)
74
- t=@@ai.find{|v|v>0}.to_i+@@ai[1..-1].to_a.find{|v|v>0}.to_i
75
- f7(t+fracao)+f4(t)+f6(t,fracao)+e999(fracao)+f5(fracao)
21
+ # @return [String] a moeda e o extenso da parte fracionaria do valor monetário
22
+ def self.efracao(fracao)
23
+ inteira=@@ai.find{|v|v>0}.to_i+@@ai[1..-1].to_a.find{|v|v>0}.to_i
24
+ total=inteira+fracao
25
+ (@@ai[2..-1].to_a.find{|v|v>0}.to_i>0&&@@ai[0..1].inject(:+).to_i==0?" DE":@@ai.count>0&&total==0?"ZERO "+@@mp:"")+
26
+ (inteira>0?inteira>1?" "+@@mp:" "+@@ms:"")+
27
+ (inteira>0&&fracao>0?" E ":"")+e999(fracao)+
28
+ (fracao>0?fracao>1?" "+@@cp:" "+@@cs:"")
76
29
  end
77
30
 
78
31
  # Produz o extenso dum valor (entre 0-999) em portugûes de portugal ou brasil.
79
32
  #
80
- # @param [Integer] mil a converter
81
- # @param [Integer] pos posição actual em tratamento
82
- # @return [String] o extenso do [Integer] mil
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
83
36
  def self.e999(mil,pos=0)
84
- s=mil%100
85
- A1000[@@lc][(mil>100?1:0)+mil/100]+f1(mil)+A0100[@@lc][s/10]+f2(s)+A0020[@@lc][pos==1&&mil==1?0:s<20?s:s%10]
37
+ cem=mil%100
38
+ A1000[@@lc][(mil>100?1:0)+mil/100]+(mil>100&&mil%100>0?" E ":"")+
39
+ A0100[@@lc][cem/10]+(mil>20&&mil%10>0?" E ":"")+
40
+ A0020[@@lc][pos==1&&mil==1?0:cem<20?cem:cem%10]
86
41
  end
87
42
 
88
43
  # Produz recursivamente o extenso da parte inteira do valor monetário em portugûes de portugal ou brasil.
89
44
  #
90
- # @param [Integer] pos posição actual em tratamento
45
+ # @param [Integer] pos posição actual do valor monetário em tratamento
91
46
  # @param [String] ext extenso actual em tratamento
92
47
  # @return [String] o extenso da parte inteira
93
48
  def self.erecursivo(pos=0,ext="")
94
49
  if (pos>=@@ai.count)
95
50
  ext
96
51
  else
97
- erecursivo(pos+1,e999(@@ai[pos],pos)+A1e24[@@lc][@@ai[pos]>0?@@ai[pos]>1?8+pos:pos:0]+f3(pos>0?@@ai[pos-1]:0)+ext)
52
+ ctl=pos>0?@@ai[pos-1]:0
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)
98
55
  end
99
56
  end
100
57
 
@@ -102,10 +59,10 @@ module ExtensoPt
102
59
  #
103
60
  # @param [Hash] moeda as opcoes para parametrizar a moeda/fração
104
61
  # @option moeda [Symbol] :lc locale do extenso - portugûes de portugal (:pt) ou brasil (:br)
105
- # @option moeda [String] :msingular Moeda no singular - por defeito pode ser obtida do <b>:mplural menos "S"</b> (se terminar em "S")
106
- # @option moeda [String] :fsingular Fração no singular - por defeito pode ser obtida do <b>:fplural menos "S"</b> (se terminar em "S")
107
- # @option moeda [String] :mplural Moeda no plural - por defeito pode ser obtida do <b>:msingular+"S"</b>
108
- # @option moeda [String] :fplural Fração no plural - por defeito pode ser obtida do <b>:fsingular+"S"</b>
62
+ # @option moeda [String] :msingular Moeda no singular - pode ser inferido do <b>:mplural menos "S"</b>
63
+ # @option moeda [String] :fsingular Fração no singular - pode ser inferido do <b>:fplural menos "S"</b>
64
+ # @option moeda [String] :mplural Moeda no plural - pode ser inferido do <b>:msingular+"S"</b>
65
+ # @option moeda [String] :fplural Fração no plural - pode ser inferido do <b>:fsingular+"S"</b>
109
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)
110
67
  def extenso(moeda={lc:(:pt),msingular:"EURO",fsingular:"CÊNTIMO"})
111
68
  moeda={lc:(:br),msingular:"REAL",mplural:"REAIS",fsingular:"CENTAVO"} if (moeda[:lc]==:br&&!moeda[:mplural]&&!moeda[:fplural])
@@ -115,13 +72,17 @@ module ExtensoPt
115
72
  @@mp=moeda[:mplural]?moeda[:mplural]:@@ms+"S"
116
73
  @@cp=moeda[:fplural]?moeda[:fplural]:@@cs+"S"
117
74
  if (self.kind_of?Hash)
75
+ # converte os valores do Hash nos seus extensos mantendos as chaves devolve um Hash
118
76
  self.map{|k,v|[k,v.extenso(lc:(@@lc),msingular:@@ms,fsingular:@@cs,mplural:@@mp,fplural:@@cp)]}.to_h
119
77
  elsif (self.respond_to?:to_a)
78
+ # converte o objecto num Array e converte os valores nos seus extensos devolve um Array
120
79
  self.to_a.map{|a|a.extenso(lc:(@@lc),msingular:@@ms,fsingular:@@cs,mplural:@@mp,fplural:@@cp)}
121
80
  else
81
+ # converter com bigdecimal/util para evitar bugs com valores superiores a 1e12
122
82
  n=self.to_d.to_s('F')
83
+ # dividir parte inteira em grupos de 3 digitos ex: 123022.12 => [22, 123]
123
84
  @@ai=n[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map{|i|i.reverse.to_i}
124
- @@ai.count>8?"":ExtensoPt.erecursivo+ExtensoPt.fracao((n[/\.\d*/].to_f*100).round)
85
+ @@ai.count>8?"":ExtensoPt.erecursivo+ExtensoPt.efracao((n[/\.\d*/].to_f*100).round)
125
86
  end
126
87
  end
127
88
 
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.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hernâni Rodrigues Vaz