lib/rut.rb in rutcl-1.0.1 vs lib/rut.rb in rutcl-1.1.0

- old
+ new

@@ -1,10 +1,10 @@ #coding: utf-8 module Rutcl class Rut - VERSION = "1.0.1" + VERSION = "1.1.0" class << self def dv rut raise ArgumentError, "El rut es nulo" if rut.nil? if rut.is_a? String @@ -19,25 +19,38 @@ end r= t % 11 (r==10) ? "k" : r end - def valid? rut - return true if pretty(rut) rescue false + def valid? rut_with_dv + return true if format_rut_with_dv(rut_with_dv) rescue false end - def pretty rut, validate=true - if rut.is_a? String - rut.gsub! /[.\-\ ]/, "" - raise ArgumentError, "El rut está vacío" unless rut.length > 0 - raise ArgumentError, "El rut '#{rut}' contiene caracteres inválidos" unless rut =~ /^\d{1,8}[\dkK]$/ + def format_rut_with_dv rut_with_dv, validate=true + if rut_with_dv.is_a? String + rut_with_dv.gsub! /[.\-\ ]/, "" + raise ArgumentError, "El rut está vacío" unless rut_with_dv.length > 0 + raise ArgumentError, "El rut '#{rut_with_dv}' contiene caracteres inválidos" unless rut_with_dv =~ /^\d{1,8}[\dkK]$/ end - rut = rut.to_s - thisdv = rut[-1, 1] - rut = rut[0, rut.length - 1] - raise ArgumentError, "El rut #{rut}-#{thisdv} es inválido" if validate && dv(rut).to_s.upcase != thisdv.upcase - rut = rut.reverse.gsub(/.{3}/, '\0.').gsub(/\.$/, '').reverse - "#{rut}-#{thisdv}" + rut_with_dv = rut_with_dv.to_s.upcase + thisdv = rut_with_dv[-1, 1] + rut_without_dv = rut_with_dv[0, rut_with_dv.length - 1] + formatted_rut = format_rut_without_dv(rut_without_dv) + correct_dv = formatted_rut[-1, 1] + raise ArgumentError, "El rut #{rut_without_dv}-#{thisdv} es inválido" if validate && thisdv != correct_dv + formatted_rut + end + + def format_rut_without_dv rut_without_dv + if rut_without_dv.is_a? String + rut_without_dv.gsub! /[.\ ]/, "" + raise ArgumentError, "El rut está vacío" unless rut_without_dv.length > 0 + raise ArgumentError, "El rut '#{rut_without_dv}' contiene caracteres inválidos (use el método 'format_rut_with_dv' para RUTs que incluyan dígito veriicador)" unless rut_without_dv =~ /^\d{1,8}$/ + end + rut_without_dv = rut_without_dv.to_s.upcase + dv = dv(rut_without_dv).to_s.upcase + rut_without_dv = rut_without_dv.reverse.gsub(/.{3}/, '\0.').gsub(/\.$/, '').reverse + "#{rut_without_dv}-#{dv}" end end end end