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 +4 -4
- data/Gemfile.lock +1 -1
- data/extenso_pt.gemspec +1 -0
- data/lib/extenso_pt/version.rb +1 -1
- data/lib/extenso_pt.rb +108 -25
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8546fa3ffd2c010adf77808702909f784a20ad6c7badd3016e0751198ee5caf7
|
|
4
|
+
data.tar.gz: edad50b43d29501c5dd81f22d4543e16c786b5a1e7d12e0462d0de182e25d67e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 563dff5a39f7fade515edd0a37e8e5d16a3e5eed62f8964512e549fad532b3cafb81941e3ed0b140e418c68d079710b8ca4114fe5e6be6bcf6d1d8b773e93fd7
|
|
7
|
+
data.tar.gz: b7734b33d27cd8bcb6cb7174d2d9860146f481c66c1293efad9ec6df482369e39dfc74442f7b8053636d1d871b4d0d009ce0726a4a167bd38e3623c3cc99b913
|
data/Gemfile.lock
CHANGED
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."
|
data/lib/extenso_pt/version.rb
CHANGED
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def self.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
32
|
-
|
|
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.
|
|
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-
|
|
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: []
|