Sha256: 08d0e048e6a2d93f2c3d002a07a9e330626d362bb777afa0d431766a4433c370

Contents?: true

Size: 813 Bytes

Versions: 1

Compression:

Stored size: 813 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

  def db_field
    opts = {}
    opts[:null]  = false if @opts[:req]
    opts[:limit] = 11
    [:string, opts]
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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