pasosdeJesus/msip

View on GitHub
lib/ext/string.rb

Summary

Maintainability
A
25 mins
Test Coverage
A
96%
# frozen_string_literal: true

class String
  # Basado en soluciones de
  # http://stackoverflow.com/questions/6541209/decimals-and-commas-when-entering-a-number-into-a-ruby-on-rails-form
  def a_decimal_nolocalizado
    delimiter = I18n.t("number.format.delimiter")
    separator = I18n.t("number.format.separator")
    gsub(/[#{delimiter}#{separator}]/, delimiter => "", separator => ".")
  end

  def a_decimal_localizado
    if !self || self == ""
      return ""
    end

    delimiter = I18n.t("number.format.delimiter")
    # puts "delimiter=#{delimiter}"
    separator = I18n.t("number.format.separator")
    # puts "separator=#{separator}"
    neg = split("-").first
    if neg == ""
      num = split("-")[1]
      neg = "-"
    else
      num = self
      neg = ""
    end
    # puts "neg=#{neg}"
    pent = num.split(".").first
    # puts "pent=#{pent}"
    pdec = num.split(".")[1]
    # puts "pdec=#{pdec}"
    pent = pent.reverse.gsub(/\d{3}/, "\\&#{delimiter}")
    # puts "pent=#{pent}"
    pent = pent.reverse.sub(/^[#{delimiter}]/, "")
    # puts "pent=#{pent}"
    if pdec
      "#{neg}#{pent}#{separator}#{pdec}"
    else
      "#{neg}#{pent}"
    end
  end

  # Convierte una cadena a altas y bajas es decir primera letra de
  # cada palabra mayúscula y las demás de la palabra en minúsculas.
  def altas_bajas
    inip = true
    r = "".dup # descongela
    each_char do |c|
      r << if inip
        c.upcase
      else
        c.downcase
      end
      inip = !c.match(/^[[:alpha:]]$/)
    end
    r
  end
end