Sha256: 6e1fa7b0af571524d0de9d8a4fcde5d754f97aafc7259d50ff45a03b1dcb132a

Contents?: true

Size: 2 KB

Versions: 18

Compression:

Stored size: 2 KB

Contents

# encoding: utf-8
module SEPA
  class IBANValidator < ActiveModel::Validator
    # IBAN2007Identifier (taken from schema)
    REGEX = /\A[A-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}\z/

    def validate(record)
      field_name = options[:field_name] || :iban
      value = record.send(field_name).to_s

      unless IBANTools::IBAN.valid?(value) && value.match(REGEX)
        record.errors.add(field_name, :invalid, message: options[:message])
      end
    end
  end

  class BICValidator < ActiveModel::Validator
    # AnyBICIdentifier (taken from schema)
    REGEX = /\A[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}\z/

    def validate(record)
      field_name = options[:field_name] || :bic
      value = record.send(field_name)

      if value
        unless value.to_s.match(REGEX)
          record.errors.add(field_name, :invalid, message: options[:message])
        end
      end
    end
  end

  class CreditorIdentifierValidator < ActiveModel::Validator
    REGEX = /\A[a-zA-Z]{2,2}[0-9]{2,2}([A-Za-z0-9]|[\+|\?|\/|\-|\:|\(|\)|\.|,|']){3,3}([A-Za-z0-9]|[\+|\?|\/|\-|:|\(|\)|\.|,|']){1,28}\z/

    def validate(record)
      field_name = options[:field_name] || :creditor_identifier
      value = record.send(field_name)

      unless valid?(value)
        record.errors.add(field_name, :invalid, message: options[:message])
      end
    end

    def valid?(creditor_identifier)
      if ok = creditor_identifier.to_s.match(REGEX)
        # In Germany, the identifier has to be exactly 18 chars long
        if creditor_identifier[0..1].match(/DE/i)
          ok = creditor_identifier.length == 18
        end
      end
      ok
    end
  end

  class MandateIdentifierValidator < ActiveModel::Validator
    REGEX = /\A([A-Za-z0-9]|[\+|\?|\/|\-|\:|\(|\)|\.|\,|\']){1,35}\z/

    def validate(record)
      field_name = options[:field_name] || :mandate_id
      value = record.send(field_name)

      unless value.to_s.match(REGEX)
        record.errors.add(field_name, :invalid, message: options[:message])
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 2 rubygems

Version Path
sepa_king-0.12.0 lib/sepa_king/validator.rb
sepa_king-0.11.2 lib/sepa_king/validator.rb
sepa_king-0.11.1 lib/sepa_king/validator.rb
sepa_king_extended-0.12.2 lib/sepa_king/validator.rb
sepa_king_extended-0.12.1 lib/sepa_king/validator.rb
sepa_king_extended-0.12.0 lib/sepa_king/validator.rb
sepa_king_extended-0.11.6 lib/sepa_king/validator.rb
sepa_king_extended-0.11.5 lib/sepa_king/validator.rb
sepa_king_extended-0.11.4 lib/sepa_king/validator.rb
sepa_king_extended-0.11.3 lib/sepa_king/validator.rb
sepa_king_extended-0.11.2 lib/sepa_king/validator.rb
sepa_king-0.11.0 lib/sepa_king/validator.rb
sepa_king_extended-0.11.1 lib/sepa_king/validator.rb
sepa_king_extended-0.11.0 lib/sepa_king/validator.rb
sepa_king_extended-0.10.1 lib/sepa_king/validator.rb
sepa_king-0.10.1 lib/sepa_king/validator.rb
sepa_king-0.10.0 lib/sepa_king/validator.rb
sepa_king-0.9.0 lib/sepa_king/validator.rb