Sha256: e120953d34ec5179eafe1a504d76750fd452c71853214839dca1e2607c45f7f9

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

class GenericID
  def number_length; 0; end;
  def check_digits_length; 1; end;

  attr_reader :number
  def initialize number
    @number = clear_number(number)
    
    @number = @number.rjust number_length, '0' if number_length > 0 and @number.length != number_length
  end

  def check_digits
    @check_digits ||= begin
      @number[-check_digits_length, check_digits_length]
    end
  end

  def sequential
    @sequential ||= begin
      @number[0, @number.length - check_digits_length]
    end
  end

  def valid?
    return @valid if self.frozen?

    @valid ||= begin
      valid_number == @number and not invalid_sequential?
    rescue TypeError
      false
    end
  end

  def freeze
    check_digits
    valid?
    super
  end

  def invalid_sequential?
    @invalid_sequential ||=begin
      sequential.chars.to_a.uniq.count.eql? 1
    end
  end

  def to_s
    "#{sequential}-#{check_digits}"
  end

  protected
  def valid_number
    sequential.mod11(check_digits_length)
  end

  def clear_number number
    number.to_s.gsub(/\D/, '')
  end
end


Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
brid-0.2.1 lib/brid/ids/generic_id.rb