paystack 0.1.3 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,7 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
- RSpec::Core::RakeTask.new
4
+ RSpec::Core::RakeTask.new(:spec)
5
5
 
6
6
  task :default => :spec
7
- task :test => :spec
data/bin/console CHANGED
File without changes
data/bin/setup CHANGED
File without changes
data/lib/paystack.rb CHANGED
@@ -1,84 +1,58 @@
1
- require 'rest-client'
2
- require 'paystack/modules/tokenmanager.rb'
3
- require 'paystack/error.rb'
4
- require 'paystack/utils/utils.rb'
5
-
6
- require 'paystack/objects/card.rb'
7
- require 'paystack/objects/customers.rb'
8
- require 'paystack/objects/plans.rb'
9
- require 'paystack/objects/transactions.rb'
10
-
11
-
12
- class Paystack
13
- attr_reader :public_key, :private_key
14
-
15
- def initialize paystack_public_key=nil, paystack_private_key=nil
16
- if(paystack_public_key.nil?)
17
- @public_key = ENV['PAYSTACK_PUBLIC_KEY']
18
-
19
- else
20
- @public_key = paystack_public_key
21
- end
22
-
23
- if(paystack_private_key.nil?)
24
- @private_key = ENV['PAYSTACK_PRIVATE_KEY']
25
- else
26
- @private_key = paystack_private_key
27
- end
28
-
29
- unless !@public_key.nil?
30
- raise PaystackBadKeyError, "No public key supplied and couldn't find any in environment variables. Make sure to set public key as an environment variable PAYSTACK_PUBLIC_KEY"
31
- end
32
- unless @public_key[0..2] == 'pk_'
33
- raise PaystackBadKeyError, "Invalid public key #{@public_key}"
34
- end
35
-
36
- unless !@private_key.nil?
37
- raise PaystackBadKeyError, "No private key supplied and couldn't find any in environment variables. Make sure to set private key as an environment variable PAYSTACK_PRIVATE_KEY"
38
- end
39
- unless @private_key[0..2] == 'sk_'
40
- raise PaystackBadKeyError, "Invalid private key #{@private_key}"
41
- end
42
-
43
-
44
- end
45
-
46
- def getToken card
47
- return TokenManager.create(card, @public_key)
48
- end
49
-
50
- def setPublicKey public_key
51
- @public_key = public_key
52
- end
53
-
54
- def setPrivateKey public_key
55
- @public_key = public_key
56
- end
57
-
58
- # def chargeToken(token, amount,args = {})
59
- # token = token;
60
- # amount = amount
61
- # email = args[:email]
62
- # reference = args[:reference]
63
- # result = nil;
64
- #
65
- # begin
66
- # response = RestClient.post "#{API::BASE_URL}#{API::TRANSACTION_PATH}/charge_token", {:token => token, :amount => amount, :email => email, :reference => reference}.to_json, :Authorization => "Bearer #{@private_key}", :content_type => :json, :accept => :json
67
- # unless (response.code == 200 || response.code == 201)
68
- # raise PaystackServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
69
- # end
70
- # result = JSON.parse(response.body)
71
- # unless(result['status'] != 0 )
72
- # raise PaystackServerError.new(response), "Server Message: #{result['message']}"
73
- # end
74
- #
75
- # rescue JSON::ParserError => jsonerr
76
- # raise PaystackServerError.new(response) , "Invalid result data. Could not parse JSON response body \n #{jsonerr.message}"
77
- #
78
- # rescue PaystackServerError => e
79
- # Utils.serverErrorHandler(e)
80
- # end
81
- # return result
82
- # end
83
-
84
- end
1
+ require 'rest-client'
2
+ require 'paystack/error.rb'
3
+ require 'paystack/modules/api.rb'
4
+ require 'paystack/utils/utils.rb'
5
+ require 'paystack/objects/card.rb'
6
+ require 'paystack/objects/customers.rb'
7
+ require 'paystack/objects/plans.rb'
8
+ require 'paystack/objects/subscriptions.rb'
9
+ require 'paystack/objects/transactions.rb'
10
+ require 'paystack/objects/banks.rb'
11
+ require 'paystack/objects/balance.rb'
12
+ require 'paystack/objects/settlements.rb'
13
+ require 'paystack/objects/recipients.rb'
14
+ require 'paystack/objects/transfers.rb'
15
+ require 'paystack/objects/subaccounts.rb'
16
+
17
+
18
+ class Paystack
19
+ attr_reader :public_key, :private_key
20
+
21
+ def initialize paystack_public_key=nil, paystack_private_key=nil
22
+ if (paystack_public_key.nil?)
23
+ @public_key = ENV['PAYSTACK_PUBLIC_KEY']
24
+ else
25
+ @public_key = paystack_public_key
26
+ end
27
+
28
+ if (paystack_private_key.nil?)
29
+ @private_key = ENV['PAYSTACK_PRIVATE_KEY']
30
+ else
31
+ @private_key = paystack_private_key
32
+ end
33
+
34
+ unless !@public_key.nil?
35
+ raise PaystackBadKeyError, "No public key supplied and couldn't find any in environment variables. Make sure to set public key as an environment variable PAYSTACK_PUBLIC_KEY"
36
+ end
37
+ unless @public_key[0..2] == 'pk_'
38
+ raise PaystackBadKeyError, "Invalid public key #{@public_key}"
39
+ end
40
+
41
+ unless !@private_key.nil?
42
+ raise PaystackBadKeyError, "No private key supplied and couldn't find any in environment variables. Make sure to set private key as an environment variable PAYSTACK_PRIVATE_KEY"
43
+ end
44
+ unless @private_key[0..2] == 'sk_'
45
+ raise PaystackBadKeyError, "Invalid private key #{@private_key}"
46
+ end
47
+ end
48
+
49
+ #TODO delete if not used
50
+ def setPublicKey public_key
51
+ @public_key = public_key
52
+ end
53
+
54
+ def setPrivateKey public_key
55
+ @public_key = public_key
56
+ end
57
+
58
+ end
@@ -1,13 +1,12 @@
1
-
2
- class PaystackServerError < StandardError
3
- attr_reader :response
4
- def initialize(response=nil)
5
- @response = response
6
- end
7
- end
8
-
9
- class PaystackCardError < StandardError
10
- end
11
-
12
- class PaystackBadKeyError < StandardError
1
+ class PaystackServerError < StandardError
2
+ attr_reader :response
3
+ def initialize(response=nil)
4
+ @response = response
5
+ end
6
+ end
7
+
8
+ class PaystackCardError < StandardError
9
+ end
10
+
11
+ class PaystackBadKeyError < StandardError
13
12
  end
@@ -1,7 +1,14 @@
1
- module API
2
- BASE_URL = "https://api.paystack.co"
3
- TOKEN_URL ='https://standard.paystack.co/bosco/createmobiletoken'
4
- TRANSACTION_PATH = "/transaction"
5
- PLAN_PATH = "/plan"
6
- CUSTOMER_PATH = "/customer"
7
- end
1
+ module API
2
+ BASE_URL = "https://api.paystack.co"
3
+ TOKEN_URL ='https://standard.paystack.co/bosco/createmobiletoken'
4
+ TRANSACTION_PATH = "/transaction"
5
+ PLAN_PATH = "/plan"
6
+ CUSTOMER_PATH = "/customer"
7
+ SUBSCRIPTION_PATH = "/subscription"
8
+ BANK_PATH = "/bank"
9
+ SUBACCOUNT_PATH = "/subaccount"
10
+ BALANCE_PATH = "/balance"
11
+ RECIPIENT_PATH = "/transferrecipient"
12
+ TRANSFER_PATH = "/transfer"
13
+ SETTLEMENT_PATH = "/settlement"
14
+ end
@@ -0,0 +1,12 @@
1
+ require 'paystack/objects/base.rb'
2
+
3
+ class PaystackBalance < PaystackBaseObject
4
+ def get
5
+ return PaystackBalance.get(@paystack)
6
+ end
7
+
8
+
9
+ def PaystackBalance.get(paystackObj)
10
+ initGetRequest(paystackObj, "#{API::BALANCE_PATH}")
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'paystack/objects/base.rb'
2
+
3
+ class PaystackBanks < PaystackBaseObject
4
+ def list(page=1)
5
+ return PaystackBanks.list(@paystack, page)
6
+ end
7
+
8
+
9
+ def PaystackBanks.list(paystackObj, page=1)
10
+ initGetRequest(paystackObj, "#{API::BANK_PATH}?page=#{page}")
11
+ end
12
+ end
@@ -1,102 +1,103 @@
1
- class PaystackBaseObject
2
-
3
- attr_reader :paystack
4
-
5
- def initialize(paystackObj)
6
- unless !paystackObj.nil?
7
- raise ArgumentError, "Paystack object cannot be nil!!"
8
- end
9
- @paystack = paystackObj
10
- end
11
-
12
- protected
13
- # =>Static methods
14
- def self.initGetRequest(paystackObj, url)
15
- result = nil
16
- begin
17
- response = RestClient.get "#{API::BASE_URL}#{url}" , :Authorization => "Bearer #{paystackObj.private_key}", :content_type => :json, :accept => :json
18
- unless (response.code == 200 || response.code == 201)
19
- raise PaystackServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
20
- end
21
- result = JSON.parse(response.body)
22
- unless(result['status'] != 0 )
23
- raise PaystackServerError.new(response), "Server Message: #{result['message']}"
24
- end
25
-
26
- rescue JSON::ParserError => jsonerr
27
- raise PaystackServerError.new(response) , "Invalid result data. Could not parse JSON response body \n #{jsonerr.message}"
28
-
29
- rescue PayStackServerError => e
30
- Utils.serverErrorHandler(e)
31
- end
32
- return result
33
- end
34
-
35
- def self.initPostRequest(paystackObj, url, data = {}, json=false )
36
- result = nil
37
- begin
38
- if !json
39
- response = RestClient.post "#{API::BASE_URL}#{url}" , data, :Authorization => "Bearer #{paystackObj.private_key}"
40
- else
41
- response = RestClient.post "#{API::BASE_URL}#{url}" , data.to_json, :Authorization => "Bearer #{paystackObj.private_key}", :content_type => :json, :accept => :json
42
-
43
- end
44
- unless (response.code == 200 || response.code == 201)
45
- raise PaystackServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
46
- end
47
- result = JSON.parse(response.body)
48
- unless(result['status'] != 0 )
49
- raise PaystackServerError.new(response), "Server Message: #{result['message']}"
50
- end
51
-
52
- rescue JSON::ParserError => jsonerr
53
- raise PaystackServerError.new(response) , "Invalid result data. Could not parse JSON response body \n #{jsonerr.message}"
54
-
55
- rescue PayStackServerError => e
56
- Utils.serverErrorHandler(e)
57
- end
58
- return result
59
- end
60
-
61
- def self.initPutRequest(paystackObj, url, data = {} )
62
- result = nil
63
- begin
64
- response = RestClient.put "#{API::BASE_URL}#{url}" , data, :Authorization => "Bearer #{paystackObj.private_key}"
65
- unless (response.code == 200 || response.code == 201)
66
- raise PaystackServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
67
- end
68
- result = JSON.parse(response.body)
69
- unless(result['status'] != 0 )
70
- raise PaystackServerError.new(response), "Server Message: #{result['message']}"
71
- end
72
-
73
- rescue JSON::ParserError => jsonerr
74
- raise PaystackServerError.new(response) , "Invalid result data. Could not parse JSON response body \n #{jsonerr.message}"
75
-
76
- rescue PayStackServerError => e
77
- Utils.serverErrorHandler(e)
78
- end
79
- return result
80
- end
81
-
82
- def self.initDeleteRequest(paystackObj, url)
83
- result = nil
84
- begin
85
- response = RestClient.delete "#{API::BASE_URL}#{url}" , :Authorization => "Bearer #{paystackObj.private_key}"
86
- unless (response.code == 200 || response.code == 201)
87
- raise PaystackServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
88
- end
89
- result = JSON.parse(response.body)
90
- unless(result['status'] != 0 )
91
- raise PaystackServerError.new(response), "Server Message: #{result['message']}"
92
- end
93
-
94
- rescue JSON::ParserError => jsonerr
95
- raise PaystackServerError.new(response) , "Invalid result data. Could not parse JSON response body \n #{jsonerr.message}"
96
-
97
- rescue PayStackServerError => e
98
- Utils.serverErrorHandler(e)
99
- end
100
- return result
101
- end
102
- end
1
+ class PaystackBaseObject
2
+ require 'json'
3
+
4
+ attr_reader :paystack
5
+
6
+ def initialize(paystackObj)
7
+ unless !paystackObj.nil?
8
+ raise ArgumentError, "Paystack object cannot be nil!!"
9
+ end
10
+ @paystack = paystackObj
11
+ end
12
+
13
+ protected
14
+ # =>Static methods
15
+ def self.initGetRequest(paystackObj, url)
16
+ result = nil
17
+ begin
18
+ response = RestClient.get "#{API::BASE_URL}#{url}" , :Authorization => "Bearer #{paystackObj.private_key}", :content_type => :json, :accept => :json
19
+ unless (response.code == 200 || response.code == 201)
20
+ raise PaystackServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
21
+ end
22
+ result = JSON.parse(response.body)
23
+ unless(result['status'] != 0 )
24
+ raise PaystackServerError.new(response), "Server Message: #{result['message']}"
25
+ end
26
+
27
+ rescue JSON::ParserError => jsonerr
28
+ raise PaystackServerError.new(response) , "Invalid result data. Could not parse JSON response body \n #{jsonerr.message}"
29
+
30
+ rescue PaystackServerError => e
31
+ Utils.serverErrorHandler(e)
32
+ end
33
+ return result
34
+ end
35
+
36
+ def self.initPostRequest(paystackObj, url, data = {}, json=false )
37
+ result = nil
38
+ begin
39
+ if !json
40
+ response = RestClient.post "#{API::BASE_URL}#{url}" , data, :authorization => "Bearer #{paystackObj.private_key}"
41
+ else
42
+ response = RestClient.post "#{API::BASE_URL}#{url}" , data.to_json, :authorization => "Bearer #{paystackObj.private_key}", :content_type => :json, :accept => :json
43
+
44
+ end
45
+ unless (response.code == 200 || response.code == 201)
46
+ raise PaystackServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
47
+ end
48
+ result = JSON.parse(response.body)
49
+ unless(result['status'] != 0 )
50
+ raise PaystackServerError.new(response), "Server Message: #{result['message']}"
51
+ end
52
+
53
+ rescue JSON::ParserError => jsonerr
54
+ raise PaystackServerError.new(response) , "Invalid result data. Could not parse JSON response body \n #{jsonerr.message}"
55
+
56
+ rescue PaystackServerError => e
57
+ Utils.serverErrorHandler(e)
58
+ end
59
+ return result
60
+ end
61
+
62
+ def self.initPutRequest(paystackObj, url, data = {} )
63
+ result = nil
64
+ begin
65
+ response = RestClient.put "#{API::BASE_URL}#{url}" , data, :Authorization => "Bearer #{paystackObj.private_key}"
66
+ unless (response.code == 200 || response.code == 201)
67
+ raise PaystackServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
68
+ end
69
+ result = JSON.parse(response.body)
70
+ unless(result['status'] != 0 )
71
+ raise PaystackServerError.new(response), "Server Message: #{result['message']}"
72
+ end
73
+
74
+ rescue JSON::ParserError => jsonerr
75
+ raise PaystackServerError.new(response) , "Invalid result data. Could not parse JSON response body \n #{jsonerr.message}"
76
+
77
+ rescue PaystackServerError => e
78
+ Utils.serverErrorHandler(e)
79
+ end
80
+ return result
81
+ end
82
+
83
+ def self.initDeleteRequest(paystackObj, url)
84
+ result = nil
85
+ begin
86
+ response = RestClient.delete "#{API::BASE_URL}#{url}" , :Authorization => "Bearer #{paystackObj.private_key}"
87
+ unless (response.code == 200 || response.code == 201)
88
+ raise PaystackServerError.new(response), "HTTP Code #{response.code}: #{response.body}"
89
+ end
90
+ result = JSON.parse(response.body)
91
+ unless(result['status'] != 0 )
92
+ raise PaystackServerError.new(response), "Server Message: #{result['message']}"
93
+ end
94
+
95
+ rescue JSON::ParserError => jsonerr
96
+ raise PaystackServerError.new(response) , "Invalid result data. Could not parse JSON response body \n #{jsonerr.message}"
97
+
98
+ rescue PaystackServerError => e
99
+ Utils.serverErrorHandler(e)
100
+ end
101
+ return result
102
+ end
103
+ end
@@ -1,106 +1,106 @@
1
- require 'paystack/utils/utils.rb'
2
-
3
- class PaystackCard
4
- attr_reader :name, :number,:cvc,:expiryMonth,:expiryYear, :addressLine1,:addressLine2, :addressLine3, :addressLine4, :addressCountry, :addressPostalCode, :email, :cardCountry, :cardIssuer
5
-
6
- MAX_DINERS_CARD_LENGTH = 14
7
- MAX_AMERICAN_EXPRESS_CARD_LENGTH = 15
8
- MAX_NORMAL_CARD_LENGTH = 16
9
-
10
- PATTERN_VISA = /^4[0-9]{6,}$/
11
- PATTERN_MASTERCARD = /^5[1-5][0-9]{5,}$/
12
- PATTERN_AMERICAN_EXPRESS = /^3[47][0-9]{5,}$/
13
- PATTERN_DINERS_CLUB = /^3(?:0[0-5]|[68][0-9])[0-9]{4,}$/
14
- PATTERN_DISCOVER = /^6(?:011|5[0-9]{2})[0-9]{3,}$/
15
- PATTERN_JCB = /^(?:2131|1800|35[0-9]{3})[0-9]{3,}/
16
-
17
- def initialize(args = {})
18
- @name = Utils.nullifyString(args[:name])
19
- @number = Utils.nullifyString(args[:number])
20
- @cvc = Utils.nullifyString(args[:cvc])
21
- @expiryMonth = Utils.nullifyString(args[:expiryMonth])
22
- @expiryYear = Utils.nullifyString(args[:expiryYear])
23
- @cardIssuer = PaystackCard.getCardType(@number)
24
- end
25
-
26
- def isValidCard()
27
- if (@cvc != nil)
28
- return isValidNumber() && isValidExpiryDate() && isValidCVC()
29
- else
30
- return isValidNumber() && isValidExpiryDate()
31
- end
32
-
33
- end
34
-
35
- def PaystackCard.getCardType(number)
36
- if(number == nil)
37
- return 'invalid'
38
- end
39
- if(number =~ PATTERN_VISA) != nil
40
- return 'visa'
41
- end
42
-
43
- if(number =~ PATTERN_MASTERCARD) != nil
44
- return 'mastercard'
45
- end
46
-
47
- if(number =~ PATTERN_AMERICAN_EXPRESS) != nil
48
- return 'american_express'
49
- end
50
-
51
- if(number =~ PATTERN_DINERS_CLUB)
52
- return 'diners'
53
- end
54
- if(number =~ PATTERN_DISCOVER)
55
- return 'discover'
56
- end
57
- if(number =~ PATTERN_JCB)
58
- return 'jcb'
59
- end
60
- return 'unknown'
61
- end
62
-
63
-
64
-
65
-
66
-
67
-
68
- def isValidNumber
69
- if(Utils.isEmpty(@number))
70
- return false
71
- end
72
- formatted_number = @number.gsub(/\s+|-/) {|s| '' }.strip
73
-
74
- if(Utils.isEmpty(formatted_number) || !Utils.isWholePositiveNumber(formatted_number) || !Utils.isLuthValidNumber(formatted_number))
75
-
76
- return false
77
- end
78
- if PaystackCard.getCardType(formatted_number).eql?('diners')
79
- return (formatted_number.length == MAX_DINERS_CARD_LENGTH)
80
- end
81
-
82
- if PaystackCard.getCardType(formatted_number).eql?('american_express')
83
- return (formatted_number.length == MAX_AMERICAN_EXPRESS_CARD_LENGTH)
84
- end
85
-
86
- return (formatted_number.length == MAX_NORMAL_CARD_LENGTH)
87
-
88
- end
89
-
90
- def isValidCVC
91
- if(@cvc.eql?(""))
92
- return false
93
- end
94
- cvc = @cvc.strip
95
- cvc_len = cvc.length
96
-
97
- validLength = ((cvc_len >= 3 && cvc_len <= 4) || (@cardIssuer.eql?('american_express') && cvc_len == 4) ||(!@cardIssuer.eql?('american_express') && cvc_len == 3))
98
-
99
- end
100
-
101
- def isValidExpiryDate()
102
- return !(@expiryMonth == nil || @expiryYear == nil) && Utils.hasCardExpired(@expiryYear, @expiryMonth);
103
- end
104
-
105
-
1
+ require 'paystack/utils/utils.rb'
2
+
3
+ class PaystackCard
4
+ attr_reader :name, :number,:cvc,:expiryMonth,:expiryYear, :addressLine1,:addressLine2, :addressLine3, :addressLine4, :addressCountry, :addressPostalCode, :email, :cardCountry, :cardIssuer
5
+
6
+ MAX_DINERS_CARD_LENGTH = 14
7
+ MAX_AMERICAN_EXPRESS_CARD_LENGTH = 15
8
+ MAX_NORMAL_CARD_LENGTH = 16
9
+
10
+ PATTERN_VISA = /^4[0-9]{6,}$/
11
+ PATTERN_MASTERCARD = /^5[1-5][0-9]{5,}$/
12
+ PATTERN_AMERICAN_EXPRESS = /^3[47][0-9]{5,}$/
13
+ PATTERN_DINERS_CLUB = /^3(?:0[0-5]|[68][0-9])[0-9]{4,}$/
14
+ PATTERN_DISCOVER = /^6(?:011|5[0-9]{2})[0-9]{3,}$/
15
+ PATTERN_JCB = /^(?:2131|1800|35[0-9]{3})[0-9]{3,}/
16
+
17
+ def initialize(args = {})
18
+ @name = Utils.nullifyString(args[:name])
19
+ @number = Utils.nullifyString(args[:number])
20
+ @cvc = Utils.nullifyString(args[:cvc])
21
+ @expiryMonth = Utils.nullifyString(args[:expiryMonth])
22
+ @expiryYear = Utils.nullifyString(args[:expiryYear])
23
+ @cardIssuer = PaystackCard.getCardType(@number)
24
+ end
25
+
26
+ def isValidCard()
27
+ if (@cvc != nil)
28
+ return isValidNumber() && isValidExpiryDate() && isValidCVC()
29
+ else
30
+ return isValidNumber() && isValidExpiryDate()
31
+ end
32
+
33
+ end
34
+
35
+ def PaystackCard.getCardType(number)
36
+ if(number == nil)
37
+ return 'invalid'
38
+ end
39
+ if(number =~ PATTERN_VISA) != nil
40
+ return 'visa'
41
+ end
42
+
43
+ if(number =~ PATTERN_MASTERCARD) != nil
44
+ return 'mastercard'
45
+ end
46
+
47
+ if(number =~ PATTERN_AMERICAN_EXPRESS) != nil
48
+ return 'american_express'
49
+ end
50
+
51
+ if(number =~ PATTERN_DINERS_CLUB)
52
+ return 'diners'
53
+ end
54
+ if(number =~ PATTERN_DISCOVER)
55
+ return 'discover'
56
+ end
57
+ if(number =~ PATTERN_JCB)
58
+ return 'jcb'
59
+ end
60
+ return 'unknown'
61
+ end
62
+
63
+
64
+
65
+
66
+
67
+
68
+ def isValidNumber
69
+ if(Utils.isEmpty(@number))
70
+ return false
71
+ end
72
+ formatted_number = @number.gsub(/\s+|-/) {|s| '' }.strip
73
+
74
+ if(Utils.isEmpty(formatted_number) || !Utils.isWholePositiveNumber(formatted_number) || !Utils.isLuhnValidNumber(formatted_number))
75
+
76
+ return false
77
+ end
78
+ if PaystackCard.getCardType(formatted_number).eql?('diners')
79
+ return (formatted_number.length == MAX_DINERS_CARD_LENGTH)
80
+ end
81
+
82
+ if PaystackCard.getCardType(formatted_number).eql?('american_express')
83
+ return (formatted_number.length == MAX_AMERICAN_EXPRESS_CARD_LENGTH)
84
+ end
85
+
86
+ return (formatted_number.length == MAX_NORMAL_CARD_LENGTH)
87
+
88
+ end
89
+
90
+ def isValidCVC
91
+ if(@cvc.eql?(""))
92
+ return false
93
+ end
94
+ cvc = @cvc.strip
95
+ cvc_len = cvc.length
96
+
97
+ validLength = ((cvc_len >= 3 && cvc_len <= 4) || (@cardIssuer.eql?('american_express') && cvc_len == 4) ||(!@cardIssuer.eql?('american_express') && cvc_len == 3))
98
+
99
+ end
100
+
101
+ def isValidExpiryDate()
102
+ return !(@expiryMonth == nil || @expiryYear == nil) && Utils.hasCardExpired(@expiryYear, @expiryMonth);
103
+ end
104
+
105
+
106
106
  end