class CreditCard

Constants

VALUES

Attributes

cvv[RW]
expiration_date[RW]
name_on_card[RW]
number[RW]

Public Class Methods

new(config = {}) click to toggle source
# File lib/order_payment.rb, line 127
def initialize(config = {})
  info = config.map { |key, value| [(key.to_sym rescue key), value.to_s] }.to_h

  self.number = info[:number] || ""
  self.cvv = info[:cvv]
  self.expiration_date = info[:expiration_date]
  self.name_on_card = info[:name]
end

Public Instance Methods

input(default_name = nil) click to toggle source
# File lib/order_payment.rb, line 136
def input(default_name = nil)
  loop do
    until number.valid_credit_card_brand?(:visa, :mastercard, :jcb, :amex, :diners)
      puts "Invalid card number" unless number == ""
      self.number = Ask.input "Credit Card Number"
    end

    unless number.credit_card_brand == :diners
      self.cvv ||= HighLine.new.ask("CVV: ") { |q| q.echo = "*" }
    end

    expiration_month, expiration_year = (expiration_date || "").split("/")
    while !(1..12).cover?(expiration_month.to_i) || !(17..31).cover?(expiration_year.to_i)
      self.expiration_date = Ask.input "Expiration Date (mm/yy)"
      expiration_month, expiration_year = expiration_date.split("/")
    end

    self.name_on_card ||= Ask.input "Name on Card", default: default_name

    break if valid?
  end
end
params() click to toggle source
# File lib/order_payment.rb, line 159
def params
  {
    "existCreditCardF" => "",
    "reuseCredit_check" => "1", # Seems to be 1 but it doesn't save the CC info
    "cardComCd" => VALUES[number.credit_card_brand],
    "creditCardNo" => number,
    "creditCardSecurityCode" => cvv,
    "creditCardSignature" => name_on_card,
    "goodThruMonth" => expiration_date.split("/").first.rjust(2, "0"),
    "goodThruYear" => expiration_date.split("/").last
  }
end
valid?() click to toggle source
# File lib/order_payment.rb, line 172
def valid?
  response = Request.post(
    "https://order.dominos.jp/eng/webapi/regi/validate/creditCard/", params,
    expect: :ok, failure: "Couldn't validate credit card info"
  )

  result = JSON.parse(response.body)
  if result["errorDetails"]
    puts result
    return false
  end

  true
end