lib/ext/string.rb
# 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