Sha256: ac15b931dbf67c275f42eb59634bafbdabf24259a1e44b70dc5da02fac92100b

Contents?: true

Size: 737 Bytes

Versions: 5

Compression:

Stored size: 737 Bytes

Contents

module BraintreeRails
  class Luhn10Validator < ActiveModel::Validator
    def validate(record)
      record.errors.add(attribute, 'must be an integer') unless valid_integer?(value(record))
      record.errors.add(attribute, message) unless valid_luhn_10_number?(value(record))
    end

    private
    def valid_integer?(number)
      number =~ /^\d+$/
    end

    def valid_luhn_10_number?(number)
      number.split('').reverse.each_slice(2).sum{|odd, even| [odd, even.to_i*2].join.split('').sum(&:to_i) } % 10 == 0
    end

    def attribute
      options[:attribute]
    end

    def value(record)
      record.send(attribute).to_s
    end

    def message
      options[:message] || "failed Luhn 10 validation."
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
braintree-rails-0.4.5 lib/braintree_rails/luhn_10_validator.rb
braintree-rails-0.4.4 lib/braintree_rails/luhn_10_validator.rb
braintree-rails-0.4.3 lib/braintree_rails/luhn_10_validator.rb
braintree-rails-0.4.2 lib/braintree_rails/luhn_10_validator.rb
braintree-rails-0.4.1 lib/braintree_rails/luhn_10_validator.rb