Class: FakePin::Card

Inherits:
Object
  • Object
show all
Defined in:
lib/fake_pin/card.rb

Defined Under Namespace

Classes: UnrecognisedCardSchemeError

Constant Summary collapse

REQUIRED_PARAMS =
:number, :expiry_month, :expiry_year, :name
REQUIRED_ADDRESS_PARAMS =
:address_line1, :address_city, :address_postcode, :address_state, :address_country
SCHEMES =
{
  'visa'               => /^4\d{12}(\d{3})?$/,
  'master'             => /^(5[1-5]\d{4}|677189)\d{10}$/,
  'discover'           => /^(6011|65\d{2}|64[4-9]\d)\d{12}|(62\d{14})$/,
  'american_express'   => /^3[47]\d{13}$/,
  'diners_club'        => /^3(0[0-5]|[68]\d)\d{11}$/,
  'jcb'                => /^35(28|29|[3-8]\d)\d{12}$/,
  'switch'             => /^6759\d{12}(\d{2,3})?$/,
  'solo'               => /^6767\d{12}(\d{2,3})?$/,
  'dankort'            => /^5019\d{12}$/,
  'maestro'            => /^(5[06-8]|6\d)\d{10,17}$/,
  'forbrugsforeningen' => /^600722\d{10}$/,
  'laser'              => /^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/
}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params) ⇒ Card

Returns a new instance of Card.



27
28
29
# File 'lib/fake_pin/card.rb', line 27

def initialize(params)
  @params = params
end

Class Method Details

.create(params) ⇒ Object



23
24
25
# File 'lib/fake_pin/card.rb', line 23

def self.create(params)
  new(params).create
end

Instance Method Details

#createObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/fake_pin/card.rb', line 31

def create
  required_params = if FakePin.configuration.require_address
                      [ *REQUIRED_PARAMS, *REQUIRED_ADDRESS_PARAMS ]
                    else
                      REQUIRED_PARAMS
                    end

  @params.require(*required_params)

  number = @params['number'].to_s.gsub(/[^0-9]+/, '')

  {
    "token"            => Token.generate('card'),
    "display_number"   => obfuscate_card_number(number),
    "expiry_month"     => @params['expiry_month'],
    "expiry_year"      => @params['expiry_year'],
    "name"             => @params['name'],
    "address_line1"    => @params['address_line1'],
    "address_line2"    => @params['address_line2'],
    "address_city"     => @params['address_city'],
    "address_postcode" => @params['address_postcode'],
    "address_state"    => @params['address_state'],
    "address_country"  => @params['address_country'],
    "scheme"           => card_scheme(number)
  }
end