extenso_pt 0.4.2 → 0.4.3

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