extenso_pt 0.2.5 → 0.2.6

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: d6a29997480002e4e3a401658f642bb51a749b088f0ddad45f0e88b1b4e1e408
4
- data.tar.gz: 9a8e18b35d907b386108cfa90471093ae0371462b5c7a5b3b1bf540299e215ce
3
+ metadata.gz: 8546fa3ffd2c010adf77808702909f784a20ad6c7badd3016e0751198ee5caf7
4
+ data.tar.gz: edad50b43d29501c5dd81f22d4543e16c786b5a1e7d12e0462d0de182e25d67e
5
5
  SHA512:
6
- metadata.gz: 44c923cd2096db707f83697913dc64e0d23f0e8533afa55567e1fff1411574ae99687e0a3c24e3770c83a6457f625b09b0b5ace3b9cc2614cabd3239a09fd264
7
- data.tar.gz: 9b6aca80b57d70601b454e54901b812f33342ac26d216da7386431f1222b5f76b67993f509d068738adff806f99351de168a130aaab29ddc6bd128cb24ad6e78
6
+ metadata.gz: 563dff5a39f7fade515edd0a37e8e5d16a3e5eed62f8964512e549fad532b3cafb81941e3ed0b140e418c68d079710b8ca4114fe5e6be6bcf6d1d8b773e93fd7
7
+ data.tar.gz: b7734b33d27cd8bcb6cb7174d2d9860146f481c66c1293efad9ec6df482369e39dfc74442f7b8053636d1d871b4d0d009ce0726a4a167bd38e3623c3cc99b913
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- extenso_pt (0.2.5)
4
+ extenso_pt (0.2.6)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/extenso_pt.gemspec CHANGED
@@ -13,6 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = "https://github.com/hernanilr/extenso_pt"
14
14
  spec.license = "MIT"
15
15
 
16
+ spec.metadata["yard.run"] = "yard" # use "yard" to build full HTML docs.
16
17
  #spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
17
18
  spec.metadata["homepage_uri"] = spec.homepage
18
19
  #spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
@@ -1,3 +1,3 @@
1
1
  module ExtensoPt
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
data/lib/extenso_pt.rb CHANGED
@@ -1,36 +1,119 @@
1
1
  require "extenso_pt/version"
2
2
  require "bigdecimal/util"
3
3
 
4
+ # @author Hernâni Rodrigues Vaz
4
5
  module ExtensoPt
5
6
  class Error < StandardError; end
6
7
 
7
- def self.o(a)[""," "," E "," DE","ZERO "+@@mp," "+@@ms," "+@@mp," "+@@cs," "+@@cp][a]end
8
- def self.z(a)["","UM","DOIS","TRÊS","QUATRO","CINCO","SEIS","SETE","OITO","NOVE","DEZ","ONZE",
9
- "DOZE","TREZE","CATORZE","QUINZE","DEZASSEIS","DEZASSETE","DEZOITO","DEZANOVE"][a]end
10
- def self.c(a)["","","VINTE","TRINTA","QUARENTA","CINQUENTA","SESSENTA","SETENTA","OITENTA","NOVENTA"][a]end
11
- def self.l(a)["","CEM","CENTO","DUZENTOS","TREZENTOS","QUATROCENTOS","QUINHENTOS",
12
- "SEISCENTOS","SETECENTOS","OITOCENTOS","NOVECENTOS"][a]end
13
- def self.h(a)["","MIL"," MILHÃO"," MIL MILHÃO"," BILIÃO"," MIL BILIÃO"," TRILIÃO"," MIL TRILIÃO","",
14
- " MIL"," MILHÕES"," MIL MILHÕES"," BILIÕES"," MIL BILIÕES"," TRILIÕES"," MIL TRILIÕES"][a]end
15
- def self.f1(k)o(k>100&&k%100>0?2:0)end
16
- def self.f2(k)o(k>20&&k%10>0?2:0)end
17
- def self.f3(k)o(k>100?1:k>0?2:0)end
18
- def self.f4(k)o(k>0?k>1?6:5:0)end
19
- def self.f5(k)o(k>0?k>1?8:7:0)end
20
- def self.f6(k,b)o(k>0&&b>0?2:0)end
21
- def self.f7(u,b)o(u[2..-1].to_a.find{|v|v>0}.to_i>0&&u[0..1].inject(:+).to_i==0?3:u.count>0&&b==0?4:0)end
22
- def self.i(n,p)s=n%100;l((n>100?1:0)+n/100)+f1(n)+c(s/10)+f2(s)+z(p==1&&n==1?0:s<20?s:s%10)end
23
- def self.w(u,d)t=u.find{|v|v>0}.to_i+u[1..-1].to_a.find{|v|v>0}.to_i;f7(u,t+d)+f4(t)+f6(t,d)+i(d,0)+f5(d)end
24
- def self.r(g,j,p)t=j[p];p>=j.count*1?g:r(i(t,p)+h(t>0?t>1?8+p:p:0)+f3(p>0?j[p-1]:0)+g,j,p+1)end
25
- def extenso(f={moeda_singular:"EURO",fracao_singular:"CÊNTIMO"})
26
- @@ms=f[:moeda_singular]?f[:moeda_singular]:f[:moeda_plural].to_s[-1]=="S"?f[:moeda_plural][0..-2]:"EURO"
27
- @@cs=f[:fracao_singular]?f[:fracao_singular]:f[:fracao_plural].to_s[-1]=="S"?f[:fracao_plural][0..-2]:"CÊNTIMO"
28
- @@mp=f[:moeda_plural]?f[:moeda_plural]:@@ms+"S"
29
- @@cp=f[:fracao_plural]?f[:fracao_plural]:@@cs+"S"
8
+ A0020=["","UM","DOIS","TRÊS","QUATRO","CINCO","SEIS","SETE","OITO","NOVE","DEZ","ONZE",
9
+ "DOZE","TREZE","CATORZE","QUINZE","DEZASSEIS","DEZASSETE","DEZOITO","DEZANOVE"]
10
+ A0100=["","","VINTE","TRINTA","QUARENTA","CINQUENTA","SESSENTA","SETENTA","OITENTA","NOVENTA"]
11
+ A1000=["","CEM","CENTO","DUZENTOS","TREZENTOS","QUATROCENTOS","QUINHENTOS",
12
+ "SEISCENTOS","SETECENTOS","OITOCENTOS","NOVECENTOS"]
13
+ A1e24=["","MIL"," MILHÃO"," MIL MILHÃO"," BILIÃO"," MIL BILIÃO"," TRILIÃO"," MIL TRILIÃO","",
14
+ " MIL"," MILHÕES"," MIL MILHÕES"," BILIÕES"," MIL BILIÕES"," TRILIÕES"," MIL TRILIÕES"]
15
+
16
+ # Controle proposicao E
17
+ #
18
+ # @param [Integer] valor parcela do valor monetario
19
+ # @return [String] produz E entre centenas e dezenas
20
+ def self.f1(valor)valor>100&&valor%100>0?" E ":""end
21
+
22
+ # Controle proposicao E
23
+ #
24
+ # @param [Integer] valor parcela do valor monetario
25
+ # @return [String] produz E entre dezenas e unidades
26
+ def self.f2(valor)valor>20&&valor%10>0?" E ":""end
27
+
28
+ # Controle proposicao E
29
+ #
30
+ # @param [Integer] valor parcela do valor monetario
31
+ # @return [String] produz E entre pacelas
32
+ def self.f3(valor)valor>100?" ":valor>0?" E ":""end
33
+
34
+ # Controle singular/plural da parte inteira
35
+ #
36
+ # @param [Integer] inteira soma da parte inteira
37
+ # @return [String] produz terminacao da parte inteira
38
+ def self.f4(inteira)inteira>0?inteira>1?" "+@@mp:" "+@@ms:""end
39
+
40
+ # Controle singular/plural da parte fracionaria
41
+ #
42
+ # @param [Integer] fracao parte fracionaria do valor monetário ex: 100022.12 = 12
43
+ # @return [String] produz terminacao da parte fracionaria
44
+ def self.f5(fracao)fracao>0?fracao>1?" "+@@cp:" "+@@cs:""end
45
+
46
+ # Controle separador entre parte inteira e fracionaria
47
+ #
48
+ # @param [Integer] inteira soma da parte inteira
49
+ # @param [Integer] fracao parte fracionaria do valor monetário ex: 100022.12 = 12
50
+ # @return [String] produz E entre parte inteira e fracionaria
51
+ def self.f6(inteira,fracao)inteira>0&&fracao>0?" E ":""end
52
+
53
+ # Controle de palavras no final do extenso
54
+ #
55
+ # @param [Integer] total soma da parte inteira e fracionaria para controle de ZERO
56
+ # @return [String] produz DE/ZERO <plural moeda>
57
+ def self.f7(total)
58
+ if (@@ai[2..-1].to_a.find{|v|v>0}.to_i>0&&@@ai[0..1].inject(:+).to_i==0)
59
+ " DE"
60
+ elsif (@@ai.count>0&&total==0)
61
+ "ZERO "+@@mp
62
+ else
63
+ ""
64
+ end
65
+ end
66
+
67
+ # Produz o extenso da parte fracionaria do valor monetário em protugûes de portugal.
68
+ #
69
+ # @param [Integer] fracao parte fracionaria do valor monetário ex: 100022.12 = 12
70
+ # @return [String] o extenso da parte fracionaria do valor monetário
71
+ def self.fracao(fracao)
72
+ t=@@ai.find{|v|v>0}.to_i+@@ai[1..-1].to_a.find{|v|v>0}.to_i
73
+ f7(t+fracao)+f4(t)+f6(t,fracao)+e999(fracao)+f5(fracao)
74
+ end
75
+
76
+ # Produz o extenso dum valor (entre 0-999) em protugûes de portugal.
77
+ #
78
+ # @param [Integer] mil a converter
79
+ # @param [Integer] pos posição actual em tratamento
80
+ # @return [String] o extenso do [Integer] mil
81
+ def self.e999(mil,pos=0)
82
+ s=mil%100
83
+ A1000[(mil>100?1:0)+mil/100]+f1(mil)+A0100[s/10]+f2(s)+A0020[pos==1&&mil==1?0:s<20?s:s%10]
84
+ end
85
+
86
+ # Produz recursivamente o extenso da parte inteira do valor monetário em protugûes de portugal.
87
+ #
88
+ # @param [Integer] pos posição actual em tratamento
89
+ # @param [String] ext extenso actual em tratamento
90
+ # @return [String] o extenso da parte inteira
91
+ def self.erecursivo(pos=0,ext="")
92
+ if (pos>=@@ai.count)
93
+ ext
94
+ else
95
+ erecursivo(pos+1,e999(@@ai[pos],pos)+A1e24[@@ai[pos]>0?@@ai[pos]>1?8+pos:pos:0]+f3(pos>0?@@ai[pos-1]:0)+ext)
96
+ end
97
+ end
98
+
99
+ # Converte um objeto [String, Float, Integer] no seu extenso em protugûes de portugal.
100
+ #
101
+ # @param [Hash] moeda as opcoes para parametrizar a moeda/fração
102
+ # @option moeda [String] :msingular Moeda no singular - por defeito pode ser obtida do <b>:mplural menos "S"</b> (se terminar em "S")
103
+ # @option moeda [String] :fsingular Fração no singular - por defeito pode ser obtida do <b>:fplural menos "S"</b> (se terminar em "S")
104
+ # @option moeda [String] :mplural Moeda no plural - por defeito pode ser obtida do <b>:msingular+"S"</b>
105
+ # @option moeda [String] :fplural Fração no plural - por defeito pode ser obtida do <b>:fsingular+"S"</b>
106
+ # @return [String] o extenso do objeto
107
+ def extenso(moeda={msingular:"EURO",fsingular:"CÊNTIMO"})
108
+ @@ms=moeda[:msingular]?moeda[:msingular]:moeda[:mplural].to_s[-1]=="S"?moeda[:mplural][0..-2]:"EURO"
109
+ @@cs=moeda[:fsingular]?moeda[:fsingular]:moeda[:fplural].to_s[-1]=="S"?moeda[:fplural][0..-2]:"CÊNTIMO"
110
+ @@mp=moeda[:mplural]?moeda[:mplural]:@@ms+"S"
111
+ @@cp=moeda[:fplural]?moeda[:fplural]:@@cs+"S"
30
112
  n=self.to_d.to_s("F")
31
- q=n[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map{|i|i.reverse.to_i}
32
- q.count>8?"":ExtensoPt.r("",q,0)+ExtensoPt.w(q,(n[/\.\d*/].to_f*100).round)
113
+ @@ai=n[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map{|i|i.reverse.to_i}
114
+ @@ai.count>8?"":ExtensoPt.erecursivo+ExtensoPt.fracao((n[/\.\d*/].to_f*100).round)
33
115
  end
116
+
34
117
  end
35
118
  class String; include ExtensoPt;end
36
119
  class Float; include ExtensoPt;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.2.5
4
+ version: 0.2.6
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-09-12 00:00:00.000000000 Z
11
+ date: 2019-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -92,6 +92,7 @@ homepage: https://github.com/hernanilr/extenso_pt
92
92
  licenses:
93
93
  - MIT
94
94
  metadata:
95
+ yard.run: yard
95
96
  homepage_uri: https://github.com/hernanilr/extenso_pt
96
97
  post_install_message:
97
98
  rdoc_options: []