lib/extenso_pt/extenso.rb in extenso_pt-0.6.0 vs lib/extenso_pt/extenso.rb in extenso_pt-0.6.1
- old
+ new
@@ -1,38 +1,38 @@
# frozen_string_literal: true
# @author Hernani Rodrigues Vaz
module ExtensoPt
- # Produz o extenso das centenas em portugues de portugal ou brasil
+ # Produz extenso das centenas em portugues de portugal ou brasil
#
# @param [Integer] mil o valor dum grupo 3 digitos a converter
- # @return [String] o extenso das centenas
+ # @return [String] extenso das centenas
def self.e900(mil)
A1000[@lc][(mil > 100 ? 1 : 0) + mil / 100] +
(mil > 100 && (mil % 100).positive? ? ' E ' : '') # proposicao
end
- # Produz o extenso das dezenas em portugues de portugal ou brasil
+ # Produz extenso das dezenas em portugues de portugal ou brasil
#
- # @param [Integer] cem o valor dum grupo 3 digitos a converter
- # @return [String] o extenso das dezenas
+ # @param [Integer] cem a centena dum grupo 3 digitos a converter
+ # @return [String] extenso das dezenas
def self.e090(cem)
A0100[@lc][cem / 10] +
(cem > 20 && (cem % 10).positive? ? ' E ' : '') # proposicao
end
- # Produz o extenso das unidades em portugues de portugal ou brasil
+ # Produz extenso das unidades em portugues de portugal ou brasil
#
- # @param [Integer] cem o valor dum grupo 3 digitos a converter
- # @return [String] o extenso das unidades
+ # @param [Integer] cem a centena dum grupo 3 digitos a converter
+ # @return [String] extenso das unidades
def self.e009(cem)
A0020[@lc][cem < 20 ? cem : cem % 10]
end
- # Produz extenso parte fracionaria em portugues de portugal ou brasil
+ # Produz extenso da parte fracionaria em portugues de portugal ou brasil
#
- # @return [String] o extenso da parte fracionaria dum valor monetario
+ # @return [String] extenso da parte fracionaria
def self.ef99
# parametrizacao por defeito
@cs ||= 'CÊNTIMO'
@cp ||= @ms + 'S'
@@ -43,11 +43,11 @@
end
end
# Produz final da moeda em portugues de portugal ou brasil
#
- # @return [String] o final da moeda
+ # @return [String] final da moeda
def self.efim
# parametrizacao por defeito
@ms ||= 'EURO'
@mp ||= @ms + 'S'
@@ -60,11 +60,11 @@
emo + (@tt.positive? && @nf.positive? ? ' E ' : '') + ef99
end
# Produz separador entre grupos 3 digitos
#
- # @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
+ # @param [Integer] pos posicao actual nos grupos 3 digitos
# @return [String] separador entre grupos 3 digitos
def self.edgs(pos)
if pos.positive? && @ai[pos - 1].positive?
@ai[pos - 1] > 100 ? ' ' : ' E '
else
@@ -72,81 +72,81 @@
end
end
# Produz qualificador grupo de 3 digitos em portugues de portugal ou brasil
#
- # @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
+ # @param [Integer] pos posicao actual nos grupos 3 digitos
# @return [String] qualificador grupo de 3 digitos
def self.e124(pos)
if @ai[pos].positive?
@ai[pos] > 1 ? P1E24[@lc][pos] : S1E24[@lc][pos]
else
''
- end
+ end + edgs(pos)
end
- # Produz extenso grupo 3 digitos em portugues de portugal ou brasil
+ # Produz extenso de grupo 3 digitos em portugues de portugal ou brasil
#
- # @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
+ # @param [Integer] pos posicao actual nos grupos 3 digitos
# @return [String] extenso grupo 3 digitos
def self.edg3(pos)
- # parametrizacao por defeito
- # the first mention of an @<variable> creates the
- # instance variable in the current object ie: self = ExtensoPt
- @lc ||= :pt
-
- dg3 = if pos == 1 && @ai[pos] == 1
- # caso especial MIL EUROS
- ''
- else
- e900(@ai[pos]) + e090(@ai[pos] % 100) + e009(@ai[pos] % 100)
- end
- # qualificador grupo de 3 digitos
- dg3 + e124(pos)
+ # caso especial MIL EUROS
+ if pos == 1 && @ai[pos] == 1
+ ''
+ else
+ e900(@ai[pos]) + e090(@ai[pos] % 100) + e009(@ai[pos] % 100)
+ end + e124(pos)
end
# Parametrizar controle singular/plural & proposicoes
#
# @return [void]
def self.epsp
# soma grupos 1,2 (primeiros 6 digitos)
@s6 = @ai[0].to_i + @ai[1].to_i * 2
# soma grupos 3.. (digitos acima de 6)
@m6 = @ai[2..-1].to_a.inject(:+).to_i * 2
- @tt = @s6 + @m6 # proposicao E & singular/plural
- @de = @s6.zero? && @m6.positive? # proposicao DE
+ # parametrizar controle de proposicao E & singular/plural
+ @tt = @s6 + @m6
+ # parametrizar controle de proposicao DE
+ @de = @s6.zero? && @m6.positive?
end
- # Produz o extenso dum valor monetario em portugues de portugal ou brasil
+ # Produz extenso em portugues de portugal ou brasil
#
# @param [Integer] pos posicao actual nos grupos 3 digitos do valor monetario
# @param [String] ext extenso em construcao
# @return [String] o extenso dum valor monetario
def self.etot(pos, ext)
# testa fim do valor monetario
if pos >= @ai.count
- # parametrizar controle singular/plural & proposicoes
+ # parametrizar variaveis de controle
epsp
# caso especial zero
(@tt + @nf).zero? ? 'ZERO ' + @mp : ext + efim
else
- # tratamento do proximo grupo 3 digitos
- etot(pos + 1, edg3(pos) + edgs(pos) + ext)
+ # tratamento de grupo 3 digitos
+ etot(pos + 1, edg3(pos) + ext)
end
end
- # Parametrizar parte inteira/fracionaria do valor monetario
+ # Parametrizar parte inteira/fracionaria da string digitos
#
# @param [String] digitos do valor monetario
# @return [void]
def self.epif(dig)
- # parte inteira do valor monetario => array grupos 3 digitos
+ # parametrizacao por defeito
+ # the first mention of an @<variable> creates the
+ # instance variable in the current object ie: self = ExtensoPt
+ @lc ||= :pt
+
+ # converte parte inteira da string digitos em array com grupos de 3 digitos
# ex: 123022.12 => [22, 123]
@ai = dig[/^\d+/].to_s.reverse.scan(/\d{1,3}/).map { |i| i.reverse.to_i }
- # parte fracionaria do valor monetario
+ # obtem parte fracionaria da string digitos
# ex: 123022.12 => 12
# arredondada a 2 casas decimais (centimos/centavos)
@nf = (dig[/\.\d*/].to_f * 100).round
end
@@ -157,30 +157,30 @@
# @return [String, Array, Hash] string extenso
# se objecto for (String, Float, Integer),
# array<extensos> se objecto for (Array, Range),
# hash<extensos> se objecto for (Hash)
def self.eo2e(obj)
- # converte os valores do Hash nos seus extensos - devolve um Hash
+ # converte os valores do Hash nos seus extensos
if obj.is_a?(Hash) then obj.map { |k, v| [k, eo2e(v)] }.to_h
- # converte o objecto num Array com os extensos dos valores
+ # converte objecto num Array com os valores convertidos em extensos
elsif obj.respond_to?(:to_a) then obj.to_a.map { |a| eo2e(a) }
else
# converte objeto em string digitos utilizando bigdecimal para
# evitar problemas com aritmetica virgula flutuante em valores >1e12
- # parametrizar parte inteira/fracionaria (@ai, @nf) do valor monetario
+ # parametrizar parte inteira/fracionaria (@ai, @nf) da string digitos
epif(obj.to_d.to_s('F'))
- # processar extenso - valores >1e24 nao sao tratados
+ # processar extenso - valores >1e24 sao ignorados
@ai.count > 8 ? '' : etot(0, '')
end
end
# Parametrizar moeda inferindo singular a partir do plural
#
- # @param [Hash] moeda as opcoes para parametrizar a moeda/fracao
+ # @param [Hash] moeda as opcoes para parametrizar moeda/fracao
# @option moeda [Symbol] :lc locale do extenso -
- # portugues de portugal (:pt) ou brasil (:br)
+ # portugues de portugal (:pt) portugues do brasil (:br)
# @option moeda [String] :msingular moeda no singular -
# inferido do plural menos"S"
# @option moeda [String] :fsingular fracao no singular -
# inferido do plural menos "S"
# @option moeda [String] :mplural moeda no plural
@@ -193,12 +193,12 @@
(moeda[:fplural].to_s[-1] == 'S' ? moeda[:fplural][0..-2] : 'CÊNTIMO')
end
# Parametrizar moeda inferindo plural a partir do singular
#
- # @param [Hash] moeda as opcoes para parametrizar a moeda/fracao
+ # @param [Hash] moeda as opcoes para parametrizar moeda/fracao
# @option moeda [Symbol] :lc locale do extenso -
- # portugues de portugal (:pt) ou brasil (:br)
+ # portugues de portugal (:pt) portugues do brasil (:br)
# @option moeda [String] :msingular moeda no singular
# @option moeda [String] :fsingular fracao no singular
# @option moeda [String] :mplural moeda no plural -
# inferido do singular mais "S"
# @option moeda [String] :fplural fracao no plural -