lib/extenso_pt.rb in extenso_pt-0.5.8 vs lib/extenso_pt.rb in extenso_pt-0.6.0
- old
+ new
@@ -1,11 +1,12 @@
# frozen_string_literal: true
require 'bigdecimal/util'
require 'extenso_pt/version'
require 'extenso_pt/constantes'
-require 'extenso_pt/module'
+require 'extenso_pt/extenso'
+require 'extenso_pt/romana'
# @author Hernani Rodrigues Vaz
module ExtensoPt
class Error < StandardError; end
@@ -27,93 +28,62 @@
if moeda[:lc] == :br && !moeda[:msingular] && !moeda[:mplural]
moeda.merge!(msingular: 'REAL', mplural: 'REAIS', fsingular: 'CENTAVO')
end
# parametrizar moeda
- ExtensoPt.psingular(moeda)
- ExtensoPt.pplural(moeda)
+ ExtensoPt.epsi(moeda)
+ ExtensoPt.eppl(moeda)
# cria extenso(s) em portugues de portugal ou brasil
- ExtensoPt.o2e(self)
+ ExtensoPt.eo2e(self)
end
+
+ # Testa se string contem numeracao romana
+ #
+ # @return [true, false] sim ou nao numeracao romana
+ def romana?
+ is_a?(String) ? RO_RE.match?(upcase) : false
+ end
+
+ # Produz numeracao romana a partir de numerico
+ # ou numerico a partir da numeracao romana
+ # (numerico pode ser uma string digitos)
+ #
+ # @return [String, Integer] numeracao romana ou inteiro
+ def romana
+ # converte os valores do Hash
+ if is_a?(Hash) then map { |k, v| [k, v.romana] }.to_h
+ # converte objecto num Array com os valores convertidos
+ elsif respond_to?(:to_a) then to_a.map(&:romana)
+ # numeracao romana a partir de inteiro ou string digitos
+ elsif (inteiro = to_i).positive? then ExtensoPt.ri2r(inteiro)
+ else
+ # inteiro a partir da numeracao romana
+ RO_RE.match?(to_s) ? ExtensoPt.rr2i(upcase, 0) : ''
+ end
+ end
end
-# permite obter um Hash com valores numericos convertidos nos seus extensos
+# permite obter um Hash com valores convertidos
class Hash
include ExtensoPt
end
-# permite obter um Array com valores numericos convertidos nos seus extensos
+# permite obter um Array com valores convertidos
class Array
include ExtensoPt
end
-# permite obter um Array com valores numericos convertidos nos seus extensos
+# permite obter um Array com valores do Range convertidos
class Range
include ExtensoPt
end
-# permite obter o extenso de Float
-class Float
+# permite obter Float ou Integer convertidos
+class Numeric
include ExtensoPt
end
-# permite obter o extenso ou numeral romano de Integer
-class Integer
- include ExtensoPt
-
- # Produz numeracao romana a partir do inteiro
- #
- # @return [String] numeracao romana
- def romana
- return "-#{i2r(-self)}" if negative?
-
- i2r(self)
- end
-
- # Recursivamente produz numeral romano
- #
- # @param [Integer] numero a converter em numeral romano
- # @return [String] numeral romano
- def i2r(numero)
- return '' if numero.zero?
-
- ROMAN.each { |r, v| return r.to_s + i2r(numero - v) if v <= numero }
- end
-end
-
-# permite obter o extenso duma string de digitos ou
-# inteiro duma string numeral romano
+# permite obter strings convertidas
class String
include ExtensoPt
-
- # Testa se string contem numeracao romana
- #
- # @return [true, false] sim ou nao numeracao romana
- def romana?
- RO_RE.match?(upcase)
- end
-
- # Produz inteiro a partir da numeracao romana
- # ou numeracao romana a partir de string digitos
- #
- # @return [Integer, String] inteiro ou numeracao romana
- def romana
- return -self[/[^-]+/].romana if /-+/.match?(self)
- return self[/^\d+/].to_i.romana if /^\d+/.match?(self)
- return 0 unless romana?
-
- r2i(upcase, 0)
- end
-
- # Recursivamente produz inteiro
- #
- # @param [String] numeral romano em convercao
- # @param [Integer] ultimo numeral convertido
- # @return [Integer] inteiro do numeral romano
- def r2i(numeral, ultimo)
- return 0 if numeral.empty?
-
- v = ROMAN[numeral[-1].to_sym]
- v < ultimo ? (r2i(numeral.chop, v) - v) : (r2i(numeral.chop, v) + v)
- end
end