Sha256: af2a6432dba419f3f678b22e32fc4f1df7f9aec3022902eaea37acaa1c51f8e0

Contents?: true

Size: 695 Bytes

Versions: 1

Compression:

Stored size: 695 Bytes

Contents

class Typero::OibType < Typero::Type
  # http://domagoj.eu/oib/
  def check? oib
    oib = oib.to_s

    return false unless oib.match(/^[0-9]{11}$/)

    control_sum = (0..9).inject(10) do |middle, position|
      middle += oib.at(position).to_i
      middle %= 10
      middle = 10 if middle == 0
      middle *= 2
      middle %= 11
    end

    control_sum = 11 - control_sum
    control_sum = 0 if control_sum == 10

    return control_sum == oib.at(10).to_i
  end

  def set
    @value = check?(@value) ? @value.to_i : nil
  end

  def validate
    raise TypeError.new(error_for(:not_an_oib_error)) unless check?(@value)
  end

  def not_an_oib_error
    'not in an OIB format'
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
typero-0.4.0 ./lib/typero/type/oib.rb