extenso_pt 0.7.0 → 0.7.5
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/.rubocop.yml +12 -0
- data/.travis.yml +1 -1
- data/Gemfile.lock +60 -3
- data/README.md +19 -23
- data/extenso_pt.gemspec +21 -15
- data/lib/extenso_pt.rb +52 -42
- data/lib/extenso_pt/extenso.rb +117 -52
- data/lib/extenso_pt/romana.rb +6 -9
- data/lib/extenso_pt/version.rb +1 -1
- metadata +47 -6
- data/lib/extenso_pt/constantes.rb +0 -63
- data/lib/extenso_pt/variaveis.rb +0 -54
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 28575e30b8755723ed32e55b1914d8b4192e37d4ebe832b0bc7f2e9e11f8b5e9
|
|
4
|
+
data.tar.gz: 214eab4a72a820a9c6913c1080187193e594e6ab606a7d5a99c8658a086ef8a0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a95df97ab690fe81b0d6023f8b23d5f4502f810836cb8c1a0b48542b257cf972ba46017a26a87c54c6b7277460dfa50916ec3ba8ab99d6049c9449e3e58976d4
|
|
7
|
+
data.tar.gz: 5d986ca8a3380c9fac8d0ba55cb8eb1ab0f70e780ab4920e0e05288f193fb79f0e3fb603e9e7b246c812a7cec84c4dc46a4be87989214735fc47b60419a9a2b2
|
data/.rubocop.yml
ADDED
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,15 +1,69 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
extenso_pt (0.7.
|
|
4
|
+
extenso_pt (0.7.5)
|
|
5
5
|
bigdecimal
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
|
+
ast (2.4.1)
|
|
11
|
+
backport (1.1.2)
|
|
12
|
+
benchmark (0.1.0)
|
|
10
13
|
bigdecimal (2.0.0)
|
|
11
|
-
|
|
14
|
+
e2mmap (0.1.0)
|
|
15
|
+
jaro_winkler (1.5.4)
|
|
16
|
+
kwalify (0.7.2)
|
|
17
|
+
maruku (0.7.3)
|
|
18
|
+
mini_portile2 (2.4.0)
|
|
19
|
+
minitest (5.14.2)
|
|
20
|
+
nokogiri (1.10.10)
|
|
21
|
+
mini_portile2 (~> 2.4.0)
|
|
22
|
+
parallel (1.19.2)
|
|
23
|
+
parser (2.7.2.0)
|
|
24
|
+
ast (~> 2.4.1)
|
|
25
|
+
psych (3.1.0)
|
|
26
|
+
rainbow (3.0.0)
|
|
12
27
|
rake (13.0.1)
|
|
28
|
+
reek (6.0.1)
|
|
29
|
+
kwalify (~> 0.7.0)
|
|
30
|
+
parser (>= 2.5.0.0, < 2.8, != 2.5.1.1)
|
|
31
|
+
psych (~> 3.1.0)
|
|
32
|
+
rainbow (>= 2.0, < 4.0)
|
|
33
|
+
regexp_parser (1.8.1)
|
|
34
|
+
reverse_markdown (2.0.0)
|
|
35
|
+
nokogiri
|
|
36
|
+
rexml (3.2.4)
|
|
37
|
+
rubocop (0.92.0)
|
|
38
|
+
parallel (~> 1.10)
|
|
39
|
+
parser (>= 2.7.1.5)
|
|
40
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
41
|
+
regexp_parser (>= 1.7)
|
|
42
|
+
rexml
|
|
43
|
+
rubocop-ast (>= 0.5.0)
|
|
44
|
+
ruby-progressbar (~> 1.7)
|
|
45
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
|
46
|
+
rubocop-ast (0.7.1)
|
|
47
|
+
parser (>= 2.7.1.5)
|
|
48
|
+
ruby-progressbar (1.10.1)
|
|
49
|
+
solargraph (0.39.17)
|
|
50
|
+
backport (~> 1.1)
|
|
51
|
+
benchmark
|
|
52
|
+
bundler (>= 1.17.2)
|
|
53
|
+
e2mmap
|
|
54
|
+
jaro_winkler (~> 1.5)
|
|
55
|
+
maruku (~> 0.7, >= 0.7.3)
|
|
56
|
+
nokogiri (~> 1.9, >= 1.9.1)
|
|
57
|
+
parser (~> 2.3)
|
|
58
|
+
reverse_markdown (>= 1.0.5, < 3)
|
|
59
|
+
rubocop (~> 0.52)
|
|
60
|
+
thor (~> 1.0)
|
|
61
|
+
tilt (~> 2.0)
|
|
62
|
+
yard (~> 0.9, >= 0.9.24)
|
|
63
|
+
thor (1.0.1)
|
|
64
|
+
tilt (2.0.10)
|
|
65
|
+
unicode-display_width (1.7.0)
|
|
66
|
+
yard (0.9.25)
|
|
13
67
|
|
|
14
68
|
PLATFORMS
|
|
15
69
|
ruby
|
|
@@ -19,6 +73,9 @@ DEPENDENCIES
|
|
|
19
73
|
extenso_pt!
|
|
20
74
|
minitest
|
|
21
75
|
rake
|
|
76
|
+
reek
|
|
77
|
+
rubocop
|
|
78
|
+
solargraph
|
|
22
79
|
|
|
23
80
|
BUNDLED WITH
|
|
24
|
-
2.1.
|
|
81
|
+
2.1.4
|
data/README.md
CHANGED
|
@@ -6,9 +6,7 @@ Produz extenso em portugês de portugal, brasil ou numeracao romana. Os valores
|
|
|
6
6
|
|
|
7
7
|
Add this line to your application's Gemfile:
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
gem 'extenso_pt'
|
|
11
|
-
```
|
|
9
|
+
gem 'extenso_pt'
|
|
12
10
|
|
|
13
11
|
And then execute:
|
|
14
12
|
|
|
@@ -20,26 +18,24 @@ Or install it yourself as:
|
|
|
20
18
|
|
|
21
19
|
## Usage
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
1234.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
1.
|
|
29
|
-
14.1.extenso(
|
|
30
|
-
|
|
31
|
-
10.
|
|
32
|
-
|
|
33
|
-
1e10.extenso(lc: :
|
|
34
|
-
|
|
35
|
-
[
|
|
36
|
-
|
|
37
|
-
(
|
|
38
|
-
|
|
39
|
-
{:
|
|
40
|
-
{:
|
|
41
|
-
{:a=>["MCMLXVIII", "XIV"], :b=>4}.romana => {:a=>[1968, 14], :b=>"IV"}
|
|
42
|
-
```
|
|
21
|
+
1234.extenso => 'MIL DUZENTOS E TRINTA E QUATRO EUROS'
|
|
22
|
+
1234.romana => 'MCCXXXIV'
|
|
23
|
+
'MCCXXXIV'.romana => 1234
|
|
24
|
+
12000000.12.extenso => 'DOZE MILHÕES DE EUROS E DOZE CÊNTIMOS'
|
|
25
|
+
1.01.extenso(moeda_singular: 'DÓLAR') => 'UM DÓLAR E UM CÊNTIMO'
|
|
26
|
+
14.1.extenso(moeda_plural: 'REAIS') => 'CATORZE REAIS E DEZ CÊNTIMOS'
|
|
27
|
+
14.1.extenso(lc: :br) => 'QUATORZE REAIS E DEZ CENTAVOS'
|
|
28
|
+
10.01.extenso(fracao_plural: 'CENTAVOS') => 'DEZ EUROS E UM CENTAVO' # singular inferido = plural menos S
|
|
29
|
+
10.10.extenso(fracao_singular: 'CENTAVO') => 'DEZ EUROS E DEZ CENTAVOS' # plural inferido = silgular mais S
|
|
30
|
+
1e10.extenso(lc: :pt) => 'DEZ MIL MILHÕES DE EUROS' # portugal usa escala longa
|
|
31
|
+
1e10.extenso(lc: :br) => 'DEZ BILHÕES DE REAIS' # brasil usa escala curta
|
|
32
|
+
[0.01, 0.2].extenso => ['UM CÊNTIMO','VINTE CÊNTIMOS']
|
|
33
|
+
[4, 5, 6, 7].romana => ['IV', 'V', 'VI', 'VII']
|
|
34
|
+
(1..2).extenso => ['UM EURO','DOIS EUROS']
|
|
35
|
+
(7..9).romana => ['VII', 'VIII', 'IX']
|
|
36
|
+
{a: 1, b: 2}.extenso => {a: 'UM EURO',b: 'DOIS EUROS'}
|
|
37
|
+
{a: [3, 4], b: 2}.extenso => {a: ['TRÊS EUROS', 'QUATRO EUROS' ],b: 'DOIS EUROS'}
|
|
38
|
+
{a: ['MCMLXVIII', 'XIV'], b: 4}.romana => {a: [1968, 14], b: 'IV'}
|
|
43
39
|
|
|
44
40
|
## Development
|
|
45
41
|
|
data/extenso_pt.gemspec
CHANGED
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
lib = File.expand_path('lib', __dir__)
|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
-
require
|
|
5
|
+
require('extenso_pt/version')
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name
|
|
9
|
-
spec.version
|
|
10
|
-
spec.authors
|
|
11
|
-
spec.email
|
|
12
|
-
spec.homepage
|
|
13
|
-
spec.license
|
|
8
|
+
spec.name = 'extenso_pt'
|
|
9
|
+
spec.version = ExtensoPt::VERSION
|
|
10
|
+
spec.authors = ['Hernâni Rodrigues Vaz']
|
|
11
|
+
spec.email = ['hernanirvaz@gmail.com']
|
|
12
|
+
spec.homepage = 'https://github.com/hernanilr/extenso_pt'
|
|
13
|
+
spec.license = 'MIT'
|
|
14
|
+
spec.required_ruby_version = '~> 2.7'
|
|
14
15
|
|
|
15
16
|
spec.summary = 'Produz extenso em portugês de portugal, brasil ou numeracao romana.'
|
|
16
17
|
spec.description = spec.summary
|
|
@@ -18,21 +19,26 @@ Gem::Specification.new do |spec|
|
|
|
18
19
|
'(array, range, hash). O extenso pode ser produzido na escala longa (utilizada em todos os países lusófonos) ou '\
|
|
19
20
|
'na escala curta (utilizada no Brasil). Pode ainda produzir numeracao romana e vice versa.'
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
# use "yard" to build full HTML docs.
|
|
23
|
+
spec.metadata['yard.run'] = 'yard'
|
|
22
24
|
spec.metadata['homepage_uri'] = spec.homepage
|
|
23
25
|
|
|
24
26
|
# Specify which files should be added to the gem when it is released.
|
|
25
27
|
# loads the files in the RubyGem that have been added into git.
|
|
26
|
-
spec.files =
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
spec.files =
|
|
29
|
+
Dir.chdir(File.expand_path(__dir__)) do
|
|
30
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
31
|
+
end
|
|
29
32
|
spec.bindir = 'exe'
|
|
30
33
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
31
34
|
spec.require_paths = ['lib']
|
|
32
35
|
|
|
33
|
-
spec.add_development_dependency
|
|
34
|
-
spec.add_development_dependency
|
|
35
|
-
spec.add_development_dependency
|
|
36
|
+
spec.add_development_dependency('bundler')
|
|
37
|
+
spec.add_development_dependency('minitest')
|
|
38
|
+
spec.add_development_dependency('rake')
|
|
39
|
+
spec.add_development_dependency('reek')
|
|
40
|
+
spec.add_development_dependency('rubocop')
|
|
41
|
+
spec.add_development_dependency('solargraph')
|
|
36
42
|
|
|
37
|
-
spec.add_dependency
|
|
43
|
+
spec.add_dependency('bigdecimal')
|
|
38
44
|
end
|
data/lib/extenso_pt.rb
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require 'extenso_pt/romana'
|
|
8
|
-
require 'extenso_pt/version'
|
|
3
|
+
require('bigdecimal/util')
|
|
4
|
+
require('extenso_pt/extenso')
|
|
5
|
+
require('extenso_pt/romana')
|
|
6
|
+
require('extenso_pt/version')
|
|
9
7
|
|
|
10
8
|
# @author Hernani Rodrigues Vaz
|
|
11
9
|
module ExtensoPt
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
# expressao regular da numeracao romana
|
|
11
|
+
RO_RE = /^M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$/i.freeze
|
|
12
|
+
# chaves parametrizacao moeda permitidas
|
|
13
|
+
MOEDA = %i[moeda_singular fracao_singular moeda_plural fracao_plural lc].freeze
|
|
14
|
+
# somente portugues de portugal ou brasil permitidos, qualquer outro locale equivale usar :pt
|
|
15
|
+
EXTLC = %i[pt br].freeze
|
|
16
|
+
|
|
17
|
+
# Processa objeto criando extenso(s) em portugues de portugal ou brasil
|
|
14
18
|
#
|
|
15
19
|
# @note valor numerico pode ser uma string digitos
|
|
16
20
|
# @param [Hash<String, Symbol>] moeda opcoes parametrizar moeda/fracao
|
|
@@ -25,33 +29,14 @@ module ExtensoPt
|
|
|
25
29
|
# Hash<extensos> se objecto for (Hash)
|
|
26
30
|
def extenso(moeda = { lc: :pt })
|
|
27
31
|
# parametrizar moeda
|
|
28
|
-
ExtensoPt.
|
|
32
|
+
ExtensoPt.parametrizar_moeda(moeda.parametrizar)
|
|
29
33
|
|
|
30
34
|
processa
|
|
31
35
|
end
|
|
32
36
|
|
|
33
|
-
# Processa objeto criando extenso(s) em portugues de portugal ou brasil
|
|
34
|
-
#
|
|
35
|
-
# @return (see #extenso)
|
|
36
|
-
def processa
|
|
37
|
-
# converte valores do Hash nos seus extensos
|
|
38
|
-
if is_a?(Hash) then map { |k, v| [k, v.processa] }.to_h
|
|
39
|
-
# converte objecto num Array com os valores convertidos nos seus extensos
|
|
40
|
-
elsif respond_to?(:to_a) then to_a.map(&:processa)
|
|
41
|
-
else
|
|
42
|
-
# converte objeto em string digitos utilizando bigdecimal para
|
|
43
|
-
# evitar problemas com aritmetica virgula flutuante em valores >1e12
|
|
44
|
-
# parametrizar parte inteira/fracionaria (@ai, @nf) da string digitos
|
|
45
|
-
ExtensoPt.prif(to_d.to_s('F'))
|
|
46
|
-
|
|
47
|
-
# processar extenso - valores >1e24 sao ignorados
|
|
48
|
-
ExtensoPt.cvai.count > 8 ? '' : ExtensoPt.ejun
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
37
|
# @return [Hash<String, Symbol>] parametrizacao moeda por defeito para :br & inferencias & errados
|
|
53
38
|
def parametrizar
|
|
54
|
-
if value?(:br) && %i[moeda_singular moeda_plural].all? { |
|
|
39
|
+
if value?(:br) && %i[moeda_singular moeda_plural].all? { |syb| !keys.include?(syb) }
|
|
55
40
|
{ lc: :br, moeda_singular: 'REAL', moeda_plural: 'REAIS', fracao_singular: 'CENTAVO', fracao_plural: 'CENTAVOS' }
|
|
56
41
|
else
|
|
57
42
|
inferir_singular.eliminar_errados
|
|
@@ -60,33 +45,58 @@ module ExtensoPt
|
|
|
60
45
|
|
|
61
46
|
# @return [Hash<String, Symbol>] parametrizacao moeda singular inferindo do plural
|
|
62
47
|
def inferir_singular
|
|
63
|
-
|
|
64
|
-
|
|
48
|
+
mdp = fetch(:moeda_plural, '')
|
|
49
|
+
frp = fetch(:fracao_plural, '')
|
|
50
|
+
self[:moeda_singular] ||= (mdp[0..-2] if mdp[-1] == 'S')
|
|
51
|
+
self[:fracao_singular] ||= (frp[0..-2] if frp[-1] == 'S')
|
|
65
52
|
self
|
|
66
53
|
end
|
|
67
54
|
|
|
68
55
|
# @return [Hash<String, Symbol>] parametrizacao moeda eliminar parametros errados
|
|
69
56
|
def eliminar_errados
|
|
70
|
-
keep_if { |
|
|
57
|
+
keep_if { |key, val| MOEDA.include?(key) && (key != :lc || EXTLC.include?(val)) }
|
|
71
58
|
end
|
|
72
59
|
|
|
73
|
-
# @return
|
|
74
|
-
def
|
|
75
|
-
|
|
60
|
+
# @return (see #extenso)
|
|
61
|
+
def processa
|
|
62
|
+
# converte num Array com os valores convertidos nos seus extensos
|
|
63
|
+
return to_a.map(&:processa) if is_a?(Range) || is_a?(Array)
|
|
64
|
+
# converte valores do Hash nos seus extensos
|
|
65
|
+
return transform_values(&:processa) if is_a?(Hash)
|
|
66
|
+
|
|
67
|
+
# converte objeto em string digitos utilizando bigdecimal para
|
|
68
|
+
# evitar problemas com aritmetica virgula flutuante em valores >1e12
|
|
69
|
+
# valores negativos sao convertidos em positivos
|
|
70
|
+
# parametrizar parte inteira/fracionaria (@ai, @nf) da string digitos
|
|
71
|
+
ExtensoPt.parametrizar_grupos(to_d.abs.to_s('F'))
|
|
72
|
+
|
|
73
|
+
# processar extenso - valores >= 1e24 sao ignorados
|
|
74
|
+
ExtensoPt.grupos.count > 8 ? '' : ExtensoPt.extenso_completo
|
|
76
75
|
end
|
|
77
76
|
|
|
78
77
|
# @note valor numerico pode ser uma string digitos
|
|
79
78
|
# @return [String, Integer] numeracao romana a partir de numerico ou inteiro a partir da numeracao romana
|
|
80
79
|
def romana
|
|
80
|
+
# converte num Array com os valores convertidos
|
|
81
|
+
return to_a.map(&:romana) if is_a?(Range) || is_a?(Array)
|
|
81
82
|
# converte os valores do Hash
|
|
82
|
-
if is_a?(Hash)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
return transform_values(&:romana) if is_a?(Hash)
|
|
84
|
+
|
|
85
|
+
romana_base(to_i.abs)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# @return (see #romana)
|
|
89
|
+
def romana_base(inteiro)
|
|
90
|
+
# numeracao romana a partir de inteiro ou string digitos (ignora parte fracionaria & negativos)
|
|
91
|
+
return ExtensoPt.ri2r(inteiro) unless inteiro.zero?
|
|
92
|
+
|
|
87
93
|
# inteiro a partir da numeracao romana
|
|
88
|
-
|
|
89
|
-
|
|
94
|
+
RO_RE.match?(to_s) ? ExtensoPt.rr2i(upcase, 0) : ''
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# @return [true, false] testa se contem numeracao romana
|
|
98
|
+
def romana?
|
|
99
|
+
is_a?(String) ? RO_RE.match?(upcase) : false
|
|
90
100
|
end
|
|
91
101
|
end
|
|
92
102
|
|
data/lib/extenso_pt/extenso.rb
CHANGED
|
@@ -2,105 +2,170 @@
|
|
|
2
2
|
|
|
3
3
|
# @author Hernani Rodrigues Vaz
|
|
4
4
|
module ExtensoPt
|
|
5
|
-
#
|
|
5
|
+
# extensos 1-19; 20-90; 100-900
|
|
6
|
+
e013a = %w[UM DOIS TRÊS QUATRO CINCO SEIS SETE OITO NOVE DEZ ONZE DOZE TREZE].freeze
|
|
7
|
+
e019a = %w[QUINZE DEZASSEIS DEZASSETE DEZOITO DEZANOVE].freeze
|
|
8
|
+
e090a = %w[VINTE TRINTA QUARENTA CINQUENTA SESSENTA SETENTA OITENTA NOVENTA].freeze
|
|
9
|
+
e900a = %w[CEM CENTO DUZENTOS TREZENTOS QUATROCENTOS QUINHENTOS SEISCENTOS SETECENTOS OITOCENTOS NOVECENTOS].freeze
|
|
10
|
+
A0020 = { pt: [''] + e013a + ['CATORZE'] + e019a, br: [''] + e013a + ['QUATORZE'] + e019a }.freeze
|
|
11
|
+
A0100 = { pt: ['', ''] + e090a, br: ['', ''] + e090a }.freeze
|
|
12
|
+
A1000 = { pt: [''] + e900a, br: [''] + e900a }.freeze
|
|
13
|
+
|
|
14
|
+
# singular extensos 1e3 ate 1e24
|
|
15
|
+
# @note escala segundo convencao entre varios paises,
|
|
16
|
+
# na 9a Conferencia Geral de Pesos e Medidas (12-21 de Outubro de 1948),
|
|
17
|
+
# organizada pelo Bureau International des Poids et Mesures
|
|
18
|
+
# @example
|
|
19
|
+
# 1 000 000 = milhao
|
|
20
|
+
# 1 000 000 000 000 = biliao
|
|
21
|
+
# 1 000 000 000 000 000 000 = triliao
|
|
22
|
+
# 1 000 000 000 000 000 000 000 000 = quadriliao
|
|
23
|
+
# 1 000 000 000 000 000 000 000 000 000 000 = quintiliao
|
|
24
|
+
# 1 000 000 000 000 000 000 000 000 000 000 000 000 = sextiliao
|
|
25
|
+
S1E24 = {
|
|
26
|
+
pt: ['', 'MIL', ' MILHÃO', ' MIL MILHÃO', ' BILIÃO', ' MIL BILIÃO', ' TRILIÃO', ' MIL TRILIÃO'],
|
|
27
|
+
br: ['', 'MIL', ' MILHÃO', ' BILHÃO', ' TRILHÃO', ' QUADRILHÃO', ' QUINTILHÃO', ' SEXTILHÃO']
|
|
28
|
+
}.freeze
|
|
29
|
+
|
|
30
|
+
# plural extensos 1e3 ate 1e24
|
|
31
|
+
# @note escala segundo convencao entre varios paises,
|
|
32
|
+
# na 9a Conferencia Geral de Pesos e Medidas (12-21 de Outubro de 1948),
|
|
33
|
+
# organizada pelo Bureau International des Poids et Mesures
|
|
34
|
+
P1E24 = {
|
|
35
|
+
pt: ['', ' MIL', ' MILHÕES', ' MIL MILHÕES', ' BILIÕES', ' MIL BILIÕES', ' TRILIÕES', ' MIL TRILIÕES'],
|
|
36
|
+
br: ['', ' MIL', ' MILHÕES', ' BILHÕES', ' TRILHÕES', ' QUADRILHÕES', ' QUINTILHÕES', ' SEXTILHÕES']
|
|
37
|
+
}.freeze
|
|
38
|
+
|
|
39
|
+
# Parametrizar variaveis da moeda
|
|
6
40
|
#
|
|
7
|
-
# @param [
|
|
8
|
-
# @
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
41
|
+
# @param [Hash<String, Symbol>] moeda opcoes parametrizar moeda/fracao
|
|
42
|
+
# @option moeda [Symbol] :lc locale do extenso - portugues de portugal (:pt) portugues do brasil (:br)
|
|
43
|
+
# @option moeda [String] :moeda_singular moeda no singular
|
|
44
|
+
# @option moeda [String] :fracao_singular fracao no singular
|
|
45
|
+
# @option moeda [String] :moeda_plural moeda no plural
|
|
46
|
+
# @option moeda [String] :fracao_plural fracao no plural
|
|
47
|
+
def self.parametrizar_moeda(moeda)
|
|
48
|
+
# parametrizacao por defeito
|
|
49
|
+
# the first mention of a @<variable> creates that instance variable in the current object ie: self = ExtensoPt
|
|
50
|
+
@lc = moeda[:lc] || :pt
|
|
51
|
+
@ms = moeda[:moeda_singular] || 'EURO'
|
|
52
|
+
@fs = moeda[:fracao_singular] || 'CÊNTIMO'
|
|
53
|
+
@mp = moeda[:moeda_plural] || "#{@ms}S"
|
|
54
|
+
@fp = moeda[:fracao_plural] || "#{@fs}S"
|
|
12
55
|
end
|
|
13
56
|
|
|
14
|
-
#
|
|
57
|
+
# Parametrizar variaveis parte inteira e fracionaria
|
|
15
58
|
#
|
|
59
|
+
# @param [String] digitos do valor monetario a converter
|
|
60
|
+
def self.parametrizar_grupos(digitos)
|
|
61
|
+
# cria array de grupos 3 digitos da parte inteira ex: 123022.12 => [22, 123]
|
|
62
|
+
@ai = digitos[/^\d+/].reverse.scan(/\d{1,3}/).map { |grp| Integer(grp.reverse) }
|
|
63
|
+
|
|
64
|
+
# obtem parte fracionaria da string digitos arredondada a 2 casas decimais ex: 123022.124 => 12, 123022.125 => 13
|
|
65
|
+
@nf = (Float(digitos[/\.\d*/]) * 100).round
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @return [Array<Integer>] grupos 3 digitos da parte inteira
|
|
69
|
+
def self.grupos
|
|
70
|
+
@ai
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# @return [Integer] soma grupos 1-8 de digitos
|
|
74
|
+
def self.soma_grupos
|
|
75
|
+
Integer(@ai[0]) + Integer(@ai[1] || 0) * 2 + Integer(@ai[2..].to_a.inject(:+) || 0) * 2
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# @return [true, false] sim ou nao proposicao DE
|
|
79
|
+
def self.testa_de?
|
|
80
|
+
Integer(@ai[0..1].inject(:+)).zero? && Integer(@ai[2..].to_a.inject(:+) || 0).positive?
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# @param [Integer] mil o valor dum grupo 3 digitos a converter
|
|
84
|
+
# @return [String] extenso das centenas em portugues de portugal ou brasil
|
|
85
|
+
def self.centenas(mil)
|
|
86
|
+
cem = mil > 100
|
|
87
|
+
A1000[@lc][(cem ? 1 : 0) + mil / 100] + (cem && (mil % 100).positive? ? ' E ' : '')
|
|
88
|
+
end
|
|
89
|
+
|
|
16
90
|
# @param [Integer] cem a centena dum grupo 3 digitos a converter
|
|
17
|
-
# @return [String] extenso das dezenas
|
|
18
|
-
def self.
|
|
19
|
-
A0100[@lc][cem / 10] +
|
|
20
|
-
(cem > 20 && (cem % 10).positive? ? ' E ' : '')
|
|
91
|
+
# @return [String] extenso das dezenas em portugues de portugal ou brasil
|
|
92
|
+
def self.dezenas(cem)
|
|
93
|
+
A0100[@lc][cem / 10] + (cem > 20 && (cem % 10).positive? ? ' E ' : '')
|
|
21
94
|
end
|
|
22
95
|
|
|
23
|
-
# Produz extenso das unidades em portugues de portugal ou brasil
|
|
24
|
-
#
|
|
25
96
|
# @param [Integer] cem a centena dum grupo 3 digitos a converter
|
|
26
|
-
# @return [String] extenso das unidades
|
|
27
|
-
def self.
|
|
97
|
+
# @return [String] extenso das unidades em portugues de portugal ou brasil
|
|
98
|
+
def self.unidades(cem)
|
|
28
99
|
A0020[@lc][cem < 20 ? cem : cem % 10]
|
|
29
100
|
end
|
|
30
101
|
|
|
31
|
-
# @return [String] extenso da parte fracionaria em portugues de portugal ou brasil
|
|
32
|
-
def self.
|
|
33
|
-
if
|
|
34
|
-
|
|
102
|
+
# @return [String] proposicao E & extenso da parte fracionaria em portugues de portugal ou brasil
|
|
103
|
+
def self.fracionaria
|
|
104
|
+
if @nf.positive?
|
|
105
|
+
"#{soma_grupos.positive? ? ' E ' : ''}#{dezenas(@nf)}#{unidades(@nf)} #{@nf > 1 ? @fp : @fs}"
|
|
35
106
|
else
|
|
36
107
|
''
|
|
37
108
|
end
|
|
38
109
|
end
|
|
39
110
|
|
|
40
111
|
# @return [String] final da moeda em portugues de portugal ou brasil
|
|
41
|
-
def self.
|
|
42
|
-
|
|
43
|
-
if
|
|
44
|
-
# proposicao DE entre parte inteira e moeda & moeda singular/plural
|
|
45
|
-
|
|
112
|
+
def self.final
|
|
113
|
+
som = soma_grupos
|
|
114
|
+
if som.positive?
|
|
115
|
+
# proposicao DE entre parte inteira e moeda & moeda singular/plural
|
|
116
|
+
"#{testa_de? ? ' DE ' : ' '}#{som > 1 ? @mp : @ms}"
|
|
46
117
|
else
|
|
47
118
|
''
|
|
48
|
-
end +
|
|
119
|
+
end + fracionaria
|
|
49
120
|
end
|
|
50
121
|
|
|
51
|
-
# Produz proposicao E entre grupos 3 digitos
|
|
52
|
-
#
|
|
53
122
|
# @param [Integer] pos posicao actual nos grupos 3 digitos
|
|
54
123
|
# @return [String] proposicao E entre grupos 3 digitos
|
|
55
|
-
def self.
|
|
56
|
-
|
|
57
|
-
|
|
124
|
+
def self.proposicao_grupo(pos)
|
|
125
|
+
grp = @ai[pos - 1]
|
|
126
|
+
if pos.positive? && grp.positive?
|
|
127
|
+
grp > 100 ? ' ' : ' E '
|
|
58
128
|
else
|
|
59
129
|
''
|
|
60
130
|
end
|
|
61
131
|
end
|
|
62
132
|
|
|
63
|
-
# Produz qualificador grupo de 3 digitos em portugues de portugal ou brasil
|
|
64
|
-
#
|
|
65
133
|
# @param [Integer] pos posicao actual nos grupos 3 digitos
|
|
66
|
-
# @return [String] qualificador grupo de 3 digitos
|
|
67
|
-
def self.
|
|
68
|
-
|
|
69
|
-
|
|
134
|
+
# @return [String] qualificador grupo de 3 digitos em portugues de portugal ou brasil
|
|
135
|
+
def self.qualificador_grupo(pos)
|
|
136
|
+
grp = @ai[pos]
|
|
137
|
+
if grp.positive?
|
|
138
|
+
grp > 1 ? P1E24[@lc][pos] : S1E24[@lc][pos]
|
|
70
139
|
else
|
|
71
140
|
''
|
|
72
|
-
end +
|
|
141
|
+
end + proposicao_grupo(pos)
|
|
73
142
|
end
|
|
74
143
|
|
|
75
|
-
# Produz extenso de grupo 3 digitos em portugues de portugal ou brasil
|
|
76
|
-
#
|
|
77
144
|
# @param [Integer] pos posicao actual nos grupos 3 digitos
|
|
78
|
-
# @return [String] extenso do grupo 3 digitos
|
|
79
|
-
def self.
|
|
145
|
+
# @return [String] extenso do grupo 3 digitos em portugues de portugal ou brasil
|
|
146
|
+
def self.extenso_grupo(pos)
|
|
147
|
+
grp = @ai[pos]
|
|
148
|
+
dez = grp % 100
|
|
80
149
|
# caso especial MIL EUROS
|
|
81
|
-
if pos == 1 &&
|
|
150
|
+
if pos == 1 && grp == 1
|
|
82
151
|
''
|
|
83
152
|
else
|
|
84
153
|
# extenso das centenas + extenso das dezenas + extenso das unidades
|
|
85
|
-
|
|
86
|
-
end +
|
|
154
|
+
"#{centenas(grp)}#{dezenas(dez)}#{unidades(dez)}"
|
|
155
|
+
end + qualificador_grupo(pos)
|
|
87
156
|
end
|
|
88
157
|
|
|
89
|
-
# Produz extenso da parte inteira e fracionaria
|
|
90
|
-
#
|
|
91
158
|
# @param [Integer] pos posicao no grupo 3 digitos
|
|
92
159
|
# @param [String] ext extenso em construcao
|
|
93
|
-
# @return [String] extenso do valor monetario
|
|
94
|
-
def self.
|
|
160
|
+
# @return [String] extenso do valor monetario completo
|
|
161
|
+
def self.extenso_completo(pos = 0, ext = '')
|
|
95
162
|
# testa fim do valor monetario
|
|
96
163
|
if pos >= @ai.count
|
|
97
164
|
# caso especial de zero
|
|
98
|
-
(
|
|
165
|
+
(soma_grupos + @nf).zero? ? "ZERO #{@mp}" : "#{ext}#{final}"
|
|
99
166
|
else
|
|
100
167
|
# converte grupo 3 digitos na posicao corrente & envoca proxima posicao
|
|
101
|
-
|
|
168
|
+
extenso_completo(pos + 1, extenso_grupo(pos) + ext)
|
|
102
169
|
end
|
|
103
170
|
end
|
|
104
|
-
# private_class_method :e900, :e090, :e009, :ef99, :efim,
|
|
105
|
-
# :edgs, :e124, :edg3
|
|
106
171
|
end
|
data/lib/extenso_pt/romana.rb
CHANGED
|
@@ -2,27 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
# @author Hernani Rodrigues Vaz
|
|
4
4
|
module ExtensoPt
|
|
5
|
-
#
|
|
6
|
-
|
|
5
|
+
# numeracao romana ordem decrescente (ordem importante)
|
|
6
|
+
ROMAN = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 }.freeze
|
|
7
|
+
|
|
7
8
|
# @param [Integer] inteiro a converter
|
|
8
9
|
# @return [String] numeral romano do inteiro
|
|
9
10
|
def self.ri2r(inteiro)
|
|
10
11
|
return '' if inteiro.zero?
|
|
11
12
|
|
|
12
|
-
#
|
|
13
|
-
inteiro = inteiro.abs if inteiro.negative?
|
|
14
|
-
ROMAN.each { |r, v| return r.to_s + ri2r(inteiro - v) if v <= inteiro }
|
|
13
|
+
ROMAN.each { |srm, val| return "#{srm}#{ri2r(inteiro - val)}" if val <= inteiro }
|
|
15
14
|
end
|
|
16
15
|
|
|
17
|
-
# Produz inteiro a partir de numeral romano
|
|
18
|
-
#
|
|
19
16
|
# @param [String] numeral romano a converter
|
|
20
17
|
# @param [Integer] ultimo valor convertido
|
|
21
18
|
# @return [Integer] inteiro do numeral romano
|
|
22
19
|
def self.rr2i(numeral, ultimo)
|
|
23
20
|
return 0 if numeral.empty?
|
|
24
21
|
|
|
25
|
-
|
|
26
|
-
rr2i(numeral.chop,
|
|
22
|
+
val = ROMAN[numeral[-1].to_sym]
|
|
23
|
+
rr2i(numeral.chop, val) + (val < ultimo ? -val : val)
|
|
27
24
|
end
|
|
28
25
|
end
|
data/lib/extenso_pt/version.rb
CHANGED
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.7.
|
|
4
|
+
version: 0.7.5
|
|
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: 2020-
|
|
11
|
+
date: 2020-10-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -52,6 +52,48 @@ dependencies:
|
|
|
52
52
|
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: reek
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rubocop
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: solargraph
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
55
97
|
- !ruby/object:Gem::Dependency
|
|
56
98
|
name: bigdecimal
|
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -79,6 +121,7 @@ extra_rdoc_files: []
|
|
|
79
121
|
files:
|
|
80
122
|
- ".gitignore"
|
|
81
123
|
- ".project_alt.json"
|
|
124
|
+
- ".rubocop.yml"
|
|
82
125
|
- ".travis.yml"
|
|
83
126
|
- Gemfile
|
|
84
127
|
- Gemfile.lock
|
|
@@ -89,10 +132,8 @@ files:
|
|
|
89
132
|
- bin/setup
|
|
90
133
|
- extenso_pt.gemspec
|
|
91
134
|
- lib/extenso_pt.rb
|
|
92
|
-
- lib/extenso_pt/constantes.rb
|
|
93
135
|
- lib/extenso_pt/extenso.rb
|
|
94
136
|
- lib/extenso_pt/romana.rb
|
|
95
|
-
- lib/extenso_pt/variaveis.rb
|
|
96
137
|
- lib/extenso_pt/version.rb
|
|
97
138
|
homepage: https://github.com/hernanilr/extenso_pt
|
|
98
139
|
licenses:
|
|
@@ -106,9 +147,9 @@ require_paths:
|
|
|
106
147
|
- lib
|
|
107
148
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
149
|
requirements:
|
|
109
|
-
- - "
|
|
150
|
+
- - "~>"
|
|
110
151
|
- !ruby/object:Gem::Version
|
|
111
|
-
version: '
|
|
152
|
+
version: '2.7'
|
|
112
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
154
|
requirements:
|
|
114
155
|
- - ">="
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @author Hernani Rodrigues Vaz
|
|
4
|
-
module ExtensoPt
|
|
5
|
-
# chaves parametrizacao moeda permitidas
|
|
6
|
-
MOEDA = %i[moeda_singular fracao_singular moeda_plural fracao_plural lc].freeze
|
|
7
|
-
|
|
8
|
-
# somente portugues de portugal ou brasil permitidos, qualquer outro locale equivale usar :pt
|
|
9
|
-
EXTLC = %i[pt br].freeze
|
|
10
|
-
|
|
11
|
-
E13 = %w[UM DOIS TRÊS QUATRO CINCO SEIS SETE OITO NOVE DEZ ONZE DOZE TREZE].freeze
|
|
12
|
-
|
|
13
|
-
# extensos 1 ate 19
|
|
14
|
-
A0020 = {
|
|
15
|
-
pt: [''] + E13 + %w[CATORZE QUINZE DEZASSEIS DEZASSETE DEZOITO DEZANOVE],
|
|
16
|
-
br: [''] + E13 + %w[QUATORZE QUINZE DEZESSEIS DEZESSETE DEZOITO DEZENOVE]
|
|
17
|
-
}.freeze
|
|
18
|
-
|
|
19
|
-
# extensos 20 ate 90
|
|
20
|
-
A0100 = {
|
|
21
|
-
pt: ['', ''] + %w[VINTE TRINTA QUARENTA CINQUENTA SESSENTA SETENTA OITENTA NOVENTA],
|
|
22
|
-
br: ['', ''] + %w[VINTE TRINTA QUARENTA CINQUENTA SESSENTA SETENTA OITENTA NOVENTA]
|
|
23
|
-
}.freeze
|
|
24
|
-
|
|
25
|
-
# extensos 100 ate 900
|
|
26
|
-
A1000 = {
|
|
27
|
-
pt: [''] + %w[CEM CENTO DUZENTOS TREZENTOS QUATROCENTOS QUINHENTOS SEISCENTOS SETECENTOS OITOCENTOS NOVECENTOS],
|
|
28
|
-
br: [''] + %w[CEM CENTO DUZENTOS TREZENTOS QUATROCENTOS QUINHENTOS SEISCENTOS SETECENTOS OITOCENTOS NOVECENTOS]
|
|
29
|
-
}.freeze
|
|
30
|
-
|
|
31
|
-
# singular extensos 1e3 ate 1e24
|
|
32
|
-
# @note escala segundo convencao entre varios paises,
|
|
33
|
-
# na 9a Conferencia Geral de Pesos e Medidas (12-21 de Outubro de 1948),
|
|
34
|
-
# organizada pelo Bureau International des Poids et Mesures
|
|
35
|
-
# @example
|
|
36
|
-
# 1 000 000 = milhao
|
|
37
|
-
# 1 000 000 000 000 = biliao
|
|
38
|
-
# 1 000 000 000 000 000 000 = triliao
|
|
39
|
-
# 1 000 000 000 000 000 000 000 000 = quadriliao
|
|
40
|
-
# 1 000 000 000 000 000 000 000 000 000 000 = quintiliao
|
|
41
|
-
# 1 000 000 000 000 000 000 000 000 000 000 000 000 = sextiliao
|
|
42
|
-
S1E24 = {
|
|
43
|
-
pt: ['', 'MIL', ' MILHÃO', ' MIL MILHÃO', ' BILIÃO', ' MIL BILIÃO', ' TRILIÃO', ' MIL TRILIÃO'],
|
|
44
|
-
br: ['', 'MIL', ' MILHÃO', ' BILHÃO', ' TRILHÃO', ' QUADRILHÃO', ' QUINTILHÃO', ' SEXTILHÃO']
|
|
45
|
-
}.freeze
|
|
46
|
-
|
|
47
|
-
# plural extensos 1e3 ate 1e24
|
|
48
|
-
# @note escala segundo convencao entre varios paises,
|
|
49
|
-
# na 9a Conferencia Geral de Pesos e Medidas (12-21 de Outubro de 1948),
|
|
50
|
-
# organizada pelo Bureau International des Poids et Mesures
|
|
51
|
-
P1E24 = {
|
|
52
|
-
pt: ['', ' MIL', ' MILHÕES', ' MIL MILHÕES', ' BILIÕES', ' MIL BILIÕES', ' TRILIÕES', ' MIL TRILIÕES'],
|
|
53
|
-
br: ['', ' MIL', ' MILHÕES', ' BILHÕES', ' TRILHÕES', ' QUADRILHÕES', ' QUINTILHÕES', ' SEXTILHÕES']
|
|
54
|
-
}.freeze
|
|
55
|
-
|
|
56
|
-
# numeracao romana
|
|
57
|
-
ROMAN = {
|
|
58
|
-
M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1
|
|
59
|
-
}.freeze
|
|
60
|
-
|
|
61
|
-
# expressao regular da numeracao romana
|
|
62
|
-
RO_RE = /^M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$/i.freeze
|
|
63
|
-
end
|
data/lib/extenso_pt/variaveis.rb
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @author Hernani Rodrigues Vaz
|
|
4
|
-
module ExtensoPt
|
|
5
|
-
# Parametrizar variaveis da moeda
|
|
6
|
-
#
|
|
7
|
-
# @param [Hash<String, Symbol>] moeda opcoes parametrizar moeda/fracao
|
|
8
|
-
# @option moeda [Symbol] :lc locale do extenso - portugues de portugal (:pt) portugues do brasil (:br)
|
|
9
|
-
# @option moeda [String] :moeda_singular moeda no singular
|
|
10
|
-
# @option moeda [String] :fracao_singular fracao no singular
|
|
11
|
-
# @option moeda [String] :moeda_plural moeda no plural
|
|
12
|
-
# @option moeda [String] :fracao_plural fracao no plural
|
|
13
|
-
def self.prmo(moeda)
|
|
14
|
-
# parametrizacao por defeito
|
|
15
|
-
# the first mention of a @<variable> creates that instance variable in the current object ie: self = ExtensoPt
|
|
16
|
-
@lc = moeda[:lc] || :pt
|
|
17
|
-
@ms = moeda[:moeda_singular] || 'EURO'
|
|
18
|
-
@fs = moeda[:fracao_singular] || 'CÊNTIMO'
|
|
19
|
-
@mp = moeda[:moeda_plural] || @ms + 'S'
|
|
20
|
-
@fp = moeda[:fracao_plural] || @fs + 'S'
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Parametrizar variaveis parte inteira e fracionaria
|
|
24
|
-
#
|
|
25
|
-
# @param [String] digitos do valor monetario a converter
|
|
26
|
-
def self.prif(digitos)
|
|
27
|
-
# cria array de grupos 3 digitos da parte inteira ex: 123022.12 => [22, 123]
|
|
28
|
-
@ai = digitos[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map { |i| i.reverse.to_i }
|
|
29
|
-
|
|
30
|
-
# obtem parte fracionaria da string digitos arredondada a 2 casas decimais ex: 123022.12 => 12
|
|
31
|
-
@nf = (digitos[/\.\d*/].to_f * 100).round
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# @return [Array<Integer>] grupos 3 digitos da parte inteira
|
|
35
|
-
def self.cvai
|
|
36
|
-
@ai
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# @return [Integer] soma grupos 1-8 de digitos
|
|
40
|
-
def self.c124
|
|
41
|
-
@ai[0].to_i + @ai[1].to_i * 2 + @ai[2..-1].to_a.inject(:+).to_i * 2
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# @return [true, false] sim ou nao para controle proposicao DE
|
|
45
|
-
def self.cde?
|
|
46
|
-
@ai[0..1].to_a.inject(:+).to_i.zero? && @ai[2..-1].to_a.inject(:+).to_i.positive?
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# @return [true, false] sim ou nao para controle proposicao E
|
|
50
|
-
def self.cnf?
|
|
51
|
-
@nf.positive?
|
|
52
|
-
end
|
|
53
|
-
# private_class_method :c124, :cde?, :cnf?
|
|
54
|
-
end
|