Sha256: 4e9bd30c0003bb28aa99a3fbe96f4ae342a39016c9892dbd5d99100d15c4700c

Contents?: true

Size: 699 Bytes

Versions: 1

Compression:

Stored size: 699 Bytes

Contents

require "valid_credit_card/credit_card"
require "active_model"
require "active_model/validations"

class CreditCardValidator < ActiveModel::EachValidator

  def default_options
    { card_types: ValidCreditCard::CreditCard::CARD_TYPES.keys.map(&:to_s) }
  end

  def validate_each(record, attribute, value)
    return unless value.present?

    options = default_options.merge(self.options)

    cc = ValidCreditCard::CreditCard.new(value)

    error(record, attribute) && return unless cc.valid?

    error(record, attribute) && return unless options[:card_types].include?(cc.card_type)
  end

  def error(record, attribute)
    record.errors.add(attribute, options[:message] || :invalid)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
valid_credit_card-0.1.0 lib/valid_credit_card/credit_card_validator.rb