Sha256: c886d46cb20607dbfa48e3dc05c8f45923ec743ae2b7bc0491f10ec9d17a43fb

Contents?: true

Size: 808 Bytes

Versions: 2

Compression:

Stored size: 808 Bytes

Contents

class Typero::OibType < Typero::Type
  error :en, :not_an_oib_error, 'not in an OIB format'

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

  def validate
    error_for(:not_an_oib_error) unless check?(@value)
  end

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

  private

  # 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

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
typero-0.8.1 ./lib/typero/type/types/oib.rb
typero-0.8.0 ./lib/typero/type/types/oib.rb