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

- old
+ new

@@ -1,42 +1,43 @@ #coding: utf-8 +module Rutcl + class Rut -class Rut + VERSION = "1.0.1" - VERSION = "1.0.0" + class << self + def dv rut + raise ArgumentError, "El rut es nulo" if rut.nil? + if rut.is_a? String + raise ArgumentError, "El rut #{rut} debe ser un número" unless rut =~ /^\d{1,8}$/ + end + rut = rut.to_s + x=9 + t=0 + rut.reverse.split(//).each do |d| + t+=d.to_i*x + x=(x==4) ? 9 : x - 1 + end + r= t % 11 + (r==10) ? "k" : r + end - class << self - def dv rut - raise ArgumentError, "El rut es nulo" if rut.nil? - if rut.is_a? String - raise ArgumentError, "El rut #{rut} debe ser un número" unless rut =~ /^\d{1,8}$/ + def valid? rut + return true if pretty(rut) rescue false end - rut = rut.to_s - x=9 - t=0 - rut.reverse.split(//).each do |d| - t+=d.to_i*x - x=(x==4) ? 9 : x - 1 - end - r= t % 11 - (r==10) ? "k" : r - end - def valid? rut - return true if pretty(rut) 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 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]$/ + 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}" 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}" end end end