module KontoAPI::ActiveRecordExtension::ClassMethods

Public Instance Methods

autocomplete_bank_name(options={}) click to toggle source
# File lib/kontoapi-rails/orm/active_record_extension.rb, line 21
def autocomplete_bank_name(options={})
  return if KontoAPI::Config.disable_for.include?(::Rails.env)
  options.symbolize_keys!
  options.reverse_merge!(
    :bank_code_field  => :bank_code,
    :bank_name_field  => :bank_name,
    :always_overwrite => false
  )
  define_method :autocomplete_bank_name do
    current_value = send(:"#{options[:bank_name_field]}")
    blz           = send(:"#{options[:bank_code_field]}")
    blz_changed   = (respond_to?(:"#{options[:bank_code_field]}_changed?") && send(:"#{options[:bank_code_field]}_changed?")) || (respond_to?(:"encrypted_#{options[:bank_code_field]}_changed?") && send(:"encrypted_#{options[:bank_code_field]}_changed?"))
    begin
      self.send(:"#{options[:bank_name_field]}=", KontoAPI::bank_name(blz)) if (options[:always_overwrite] || current_value.blank?) && blz_changed
      return true
    rescue Timeout::Error => ex
      case options[:on_timeout]
      when String
        self.send(:"#{options[:bank_name_field]}=", options[:on_timeout])
      when nil, :ignore
        # nop
      when :retry
        raise 'not implemented yet'
      end
    end
  end
  before_save :autocomplete_bank_name
end
validates_bank_account(options={}) click to toggle source
# File lib/kontoapi-rails/orm/active_record_extension.rb, line 9
def validates_bank_account(options={})
  return if KontoAPI::Config.disable_for.include?(::Rails.env)
  options.symbolize_keys!
  options.reverse_merge!(
    :account_number_field => :account_number,
    :bank_code_field      => :bank_code,
    :allow_nil            => true,
    :on_timeout           => :ignore
  )
  validates_with KontoAPI::BankAccountValidator, options
end
validates_bic(field, options={}) click to toggle source
# File lib/kontoapi-rails/orm/active_record_extension.rb, line 73
def validates_bic(field, options={})
  return if KontoAPI::Config.disable_for.include?(::Rails.env)
  options.symbolize_keys!
  options.reverse_merge!( :allow_nil => true, :on_timeout => :ignore )
  define_method :bic_validation do
    value = send(field)
    return true if respond_to?(:"#{field}_changed?") && !send(:"#{field}_changed?")
    return true if respond_to?(:"encrypted_#{field}_changed?") && !send(:"encrypted_#{field}_changed?")
    return true if options[:allow_nil] && value.nil?
    begin
      errors.add(field, :invalid) unless KontoAPI::valid?( :bic => value )
    rescue Timeout::Error => ex
      case options[:on_timeout]
      when :fail
        errors.add(field, :timeout)
      when :ignore
        # nop
      end
    end
  end
  validate :bic_validation
end
validates_iban(field, options={}) click to toggle source
# File lib/kontoapi-rails/orm/active_record_extension.rb, line 50
def validates_iban(field, options={})
  return if KontoAPI::Config.disable_for.include?(::Rails.env)
  options.symbolize_keys!
  options.reverse_merge!( :allow_nil => true, :on_timeout => :ignore )
  define_method :iban_validation do
    value = send(field)
    return true if respond_to?(:"#{field}_changed?") && !send(:"#{field}_changed?")
    return true if respond_to?(:"encrypted_#{field}_changed?") && !send(:"encrypted_#{field}_changed?")
    return true if options[:allow_nil] && value.nil?
    begin
      errors.add(field, :invalid) unless KontoAPI::valid?( :iban => value )
    rescue Timeout::Error => ex
      case options[:on_timeout]
      when :fail
        errors.add(field, :timeout)
      when :ignore
        # nop
      end
    end
  end
  validate :iban_validation
end
validates_iban_and_bic(iban_field, bic_field, options={}) click to toggle source
# File lib/kontoapi-rails/orm/active_record_extension.rb, line 96
def validates_iban_and_bic(iban_field, bic_field, options={})
  return if KontoAPI::Config.disable_for.include?(::Rails.env)
  options.symbolize_keys!
  options.reverse_merge!( :allow_nil => true, :on_timeout => :ignore )
  define_method :iban_and_bic_validation do
    iban_value = send(iban_field)
    bic_value = send(bic_field)
    return true if [iban_field, bic_field].all? do |field|
      respond_to?(:"#{field}_changed?") && !send(:"#{field}_changed?")
    end
    return true if [iban_field, bic_field].all? do |field|
      respond_to?(:"encrypted_#{field}_changed?") && !send(:"encrypted_#{field}_changed?")
    end
    return true if options[:allow_nil] && iban_value.nil? && bic_value.nil?
    begin
      unless KontoAPI::valid?( :iban => iban_value, :bic => bic_value )
        errors.add(iban_field, :invalid)
        errors.add(bic_field, :invalid)
      end
    rescue Timeout::Error => ex
      case options[:on_timeout]
      when :fail
        errors.add(field, :timeout)
      when :ignore
        # nop
      end
    end
  end
  validate :iban_and_bic_validation
end