lib/extenso_pt.rb in extenso_pt-0.6.12 vs lib/extenso_pt.rb in extenso_pt-0.7.0

- old
+ new

@@ -8,16 +8,15 @@ require 'extenso_pt/version' # @author Hernani Rodrigues Vaz module ExtensoPt class Error < StandardError; end - # Produz extenso em portugues de portugal ou brasil - # (valor numerico pode ser uma string digitos) + # Produz extenso em portugues de portugal ou brasil a partir de valor numerico # + # @note valor numerico pode ser uma string digitos # @param [Hash<String, Symbol>] moeda opcoes parametrizar moeda/fracao - # @option moeda [Symbol] :lc locale do extenso - - # portugues de portugal (:pt) portugues do brasil (:br) + # @option moeda [Symbol] :lc locale do extenso - portugues de portugal (:pt) portugues do brasil (:br) # @option moeda [String] :moeda_singular moeda no singular # @option moeda [String] :fracao_singular fracao no singular # @option moeda [String] :moeda_plural moeda no plural # @option moeda [String] :fracao_plural fracao no plural # @return [String, Array<String>, Hash<String>] @@ -31,14 +30,11 @@ processa end # Processa objeto criando extenso(s) em portugues de portugal ou brasil # - # @return [String, Array<String>, Hash<String>] - # String<extenso> se objecto for (String, Float, Integer), - # Array<extensos> se objecto for (Array, Range), - # Hash<extensos> se objecto for (Hash) + # @return (see #extenso) def processa # converte valores do Hash nos seus extensos if is_a?(Hash) then map { |k, v| [k, v.processa] }.to_h # converte objecto num Array com os valores convertidos nos seus extensos elsif respond_to?(:to_a) then to_a.map(&:processa) @@ -51,55 +47,43 @@ # processar extenso - valores >1e24 sao ignorados ExtensoPt.cvai.count > 8 ? '' : ExtensoPt.ejun end end - # Parametrizacao por defeito para :br - # - # @return [Hash<String, Symbol>] parametrizacao moeda + # @return [Hash<String, Symbol>] parametrizacao moeda por defeito para :br & inferencias & errados def parametrizar - if value?(:br) && - %i[moeda_singular moeda_plural].all? { |e| !keys.include?(e) } - { lc: :br, moeda_singular: 'REAL', moeda_plural: 'REAIS', - fracao_singular: 'CENTAVO', fracao_plural: 'CENTAVOS' } + if value?(:br) && %i[moeda_singular moeda_plural].all? { |e| !keys.include?(e) } + { lc: :br, moeda_singular: 'REAL', moeda_plural: 'REAIS', fracao_singular: 'CENTAVO', fracao_plural: 'CENTAVOS' } else - inferir_singular + inferir_singular.eliminar_errados end end - # Parametrizacao singular inferindo do plural - # - # @return [Hash<String, Symbol>] parametrizacao moeda + # @return [Hash<String, Symbol>] parametrizacao moeda singular inferindo do plural def inferir_singular - self[:moeda_singular] ||= if fetch(:moeda_plural, '')[-1] == 'S' - fetch(:moeda_plural, '')[0..-2] - end - self[:fracao_singular] ||= if fetch(:fracao_plural, '')[-1] == 'S' - fetch(:fracao_plural, '')[0..-2] - end - # eliminar parametros errados + self[:moeda_singular] ||= (fetch(:moeda_plural, '')[0..-2] if fetch(:moeda_plural, '')[-1] == 'S') + self[:fracao_singular] ||= (fetch(:fracao_plural, '')[0..-2] if fetch(:fracao_plural, '')[-1] == 'S') + self + end + + # @return [Hash<String, Symbol>] parametrizacao moeda eliminar parametros errados + def eliminar_errados keep_if { |k, v| MOEDA.include?(k) && (k != :lc || EXTLC.include?(v)) } end - # Testa se contem numeracao romana - # - # @return [true, false] sim ou nao numeracao romana + # @return [true, false] testa se contem numeracao romana def romana? is_a?(String) ? RO_RE.match?(upcase) : false end - # Produz numeracao romana a partir de valor numerico - # ou valor numerico a partir da numeracao romana - # (valor numerico pode ser uma string digitos) - # - # @return [String, Integer] numeracao romana ou valor numerico + # @note valor numerico pode ser uma string digitos + # @return [String, Integer] numeracao romana a partir de numerico ou inteiro a partir da numeracao romana 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 - # (ignora parte fracionaria) + # numeracao romana a partir de inteiro ou string digitos (ignora parte fracionaria) elsif (inteiro = to_i) != 0 then ExtensoPt.ri2r(inteiro) # inteiro a partir da numeracao romana else RO_RE.match?(to_s) ? ExtensoPt.rr2i(upcase, 0) : '' end end