virtual_merchant 0.3.10 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28da9c31fa38dcda6007436ecf41d42c87b4918a
4
- data.tar.gz: 02d3b57afec0ba5875295b8f5e7e718bdb4f1a28
3
+ metadata.gz: e30717bdee04d446b5cc2417afcc1f9150a6192d
4
+ data.tar.gz: b6fd4d4393eac6a25c7ab0c30a809da460d74e43
5
5
  SHA512:
6
- metadata.gz: 47df9fd6c91fd080a7fa3ee94cfe5c54f536f04bc13b6602e739192039ebf043e5e7c1e10252aad0aa20bb9fa65b9951aabddfcd17af1860bc54ea4fe4fa02b0
7
- data.tar.gz: 39e93ab7239554ddfca3f6717966571d250056489a5c595a8799b040f0f7c36fffe5974a4a478116dc44d6b4fbcf2e6a690fd24848d3a9405db377c9a86521a9
6
+ metadata.gz: 945cbe1b26950f5a61cd8a5375cb52d589cede8b9a9bbedeb5a09c4911e0aefa6ff2a68a5a6040177b6624de90fb08eb3baf2d4771598cf7990709a019693da9
7
+ data.tar.gz: 9cfecd9fa7316803cfed450af806750f46e5807366fc9bcb395cf8124d20cf1c443bb3bf999472b50c83e62f53e5f656ed2dd965dd17ac07985a7ca11b3cbd78
@@ -1,70 +1,26 @@
1
1
  require 'virtual_merchant/swipe_extractor'
2
+ require 'virtual_merchant/user_input'
2
3
  module VirtualMerchant
3
4
  class CreditCard
4
5
  attr_accessor :name_on_card, :number, :expiration, :security_code, :swipe, :track2,
5
- :encrypted_track_1, :encrypted_track_2, :last_four, :encrypted, :swiped, :valid, :errors
6
-
7
- def self.from_swipe(swipe)
8
- if swipe.class == Hash && swipe[:encrypted]
9
- new(swipe)
10
- else
11
- new(swipe: swipe)
12
- end
13
- end
14
-
15
- def self.from_manual(data)
16
- new(data)
17
- end
6
+ :encrypted_track_1, :encrypted_track_2, :last_four, :encrypted, :swiped, :valid,
7
+ :errors
18
8
 
19
9
  def initialize(info)
20
10
  @errors = {}
11
+ check_for_errors(info) unless info[:encrypted]
12
+ return unless valid?
21
13
  if info[:encrypted]
22
- self.from_encrypted(info)
14
+ from_encrypted(info)
23
15
  elsif info[:swipe]
24
- self.from_swipe(info[:swipe])
25
- else
26
- self.from_manual(info)
27
- end
28
- end
29
-
30
- def from_encrypted (info)
31
- @errors = {}
32
- @encrypted = true
33
- @encrypted_track_1 = info[:track_1]
34
- @encrypted_track_2 = info[:track_2]
35
- @last_four = info[:last_four]
36
- end
37
-
38
- def from_swipe(swipe_raw)
39
- @errors = {}
40
- if check_swipe(swipe_raw)
41
- @valid = true
42
- @swiped = true
43
- @swipe = swipe_raw
44
- @track2 = SwipeExtractor.get_track_2(swipe)
45
- @number = SwipeExtractor.get_card_number(swipe)
46
- @expiration = SwipeExtractor.get_expiration(swipe)
47
- @name_on_card = SwipeExtractor.get_name(swipe)
48
- @last_four = SwipeExtractor.get_last_four(@number)
16
+ from_unencrypted_swipe(info[:swipe])
49
17
  else
50
- @valid = false
18
+ from_manual(info)
51
19
  end
52
20
  end
53
21
 
54
- def from_manual(info)
55
- @errors = {}
56
- if info[:number] && check_luhn(info[:number].to_s.gsub(/\s+/, ""))
57
- @name_on_card = info[:name_on_card] if info[:name_on_card]
58
- @number = info[:number].to_s.gsub(/\s+/, "")
59
- @expiration = info[:expiration].to_s if info[:expiration]
60
- @security_code = info[:security_code].to_s if info[:security_code]
61
- @track2 = info[:track_2] if info[:track_2]
62
- @last_four = SwipeExtractor.get_last_four(@number)
63
- @valid = true
64
- else
65
- errors[5000] = "The Credit Card Number supplied in the authorization request appears to be invalid."
66
- @valid = false
67
- end
22
+ def check_for_errors info
23
+ @errors = VirtualMerchant::UserInput.new(info).errors
68
24
  end
69
25
 
70
26
  def encrypted?
@@ -76,57 +32,55 @@ module VirtualMerchant
76
32
  end
77
33
 
78
34
  def valid?
79
- self.valid
35
+ errors.count == 0
80
36
  end
81
37
 
82
- def check_swipe(swipe_raw)
83
- if swipe_raw.index('%') == nil
84
- @errors[5012] = "The track data sent appears to be invalid."
85
- return false
86
- end
87
- if swipe_raw.index(';') == nil
88
- @errors[5013] = "Transaction requires Track2 data to be sent."
89
- return false
38
+ def blurred_number
39
+ begin
40
+ number = self.number.to_s
41
+ leng = number.length
42
+ n = number[0..1]
43
+ (leng-6).times {n+= "*"}
44
+ n += number[number.length-4..number.length]
45
+ n
46
+ rescue Exception => e
47
+ puts "-"
48
+ puts "Error in VirtualMerchant-Ruby Gem when trying to blur card number: #{e}."
49
+ puts "You either passed a nil value for card_number or a number that is too short."
50
+ puts caller
51
+ puts "-"
90
52
  end
91
- track1 = swipe_raw[1.. swipe_raw.index('?')-1]
92
- if track1 == nil || track1 == "E"
93
- @errors[5012] = "The track data sent appears to be invalid."
94
- return false
53
+ end
54
+
55
+ private
56
+ def from_encrypted (info)
57
+ @encrypted = true
58
+ @encrypted_track_1 = info[:track_1]
59
+ @encrypted_track_2 = info[:track_2]
60
+ @last_four = info[:last_four]
95
61
  end
96
- track2 = swipe_raw[swipe_raw.index(';')+1.. swipe_raw.length-2]
97
- if track2 == nil || track2 == "E"
98
- @errors[5013] = "Transaction requires Track2 data to be sent."
99
- return false
62
+
63
+ def from_unencrypted_swipe(swipe_raw)
64
+ build_card_from swipe_raw if valid?
100
65
  end
101
- return true
102
- end
103
66
 
104
- def check_luhn(code)
105
- s1 = s2 = 0
106
- code.to_s.reverse.chars.each_slice(2) do |odd, even|
107
- s1 += odd.to_i
108
- double = even.to_i * 2
109
- double -= 9 if double >= 10
110
- s2 += double
67
+ def build_card_from swipe
68
+ @swiped = true
69
+ @swipe = swipe
70
+ @track2 = SwipeExtractor.get_track_2(swipe)
71
+ @number = SwipeExtractor.get_card_number(swipe)
72
+ @expiration = SwipeExtractor.get_expiration(swipe)
73
+ @name_on_card = SwipeExtractor.get_name(swipe)
74
+ @last_four = SwipeExtractor.get_last_four(@number)
111
75
  end
112
- (s1 + s2) % 10 == 0
113
- end
114
76
 
115
- def blurred_number
116
- begin
117
- number = self.number.to_s
118
- leng = number.length
119
- n = number[0..1]
120
- (leng-6).times {n+= "*"}
121
- n += number[number.length-4..number.length]
122
- n
123
- rescue Exception => e
124
- puts "-"
125
- puts "Error in VirtualMerchant-Ruby Gem when trying to blur card number: #{e}."
126
- puts "You either passed a nil value for card_number or a number that is too short."
127
- puts caller
128
- puts "-"
129
- end
130
- end
77
+ def from_manual(info)
78
+ @name_on_card = info[:name_on_card] if info[:name_on_card]
79
+ @number = info[:number].to_s.gsub(/\s+/, "")
80
+ @expiration = info[:expiration].to_s if info[:expiration]
81
+ @security_code = info[:security_code].to_s if info[:security_code]
82
+ @track2 = info[:track_2] if info[:track_2]
83
+ @last_four = SwipeExtractor.get_last_four(@number)
84
+ end
131
85
  end
132
86
  end
@@ -0,0 +1,55 @@
1
+ module VirtualMerchant
2
+ class UserInput
3
+ attr_accessor :errors
4
+ def initialize(user_input)
5
+ @errors = {}
6
+ if user_input[:swipe]
7
+ validate_unencrypted_swipe(user_input[:swipe])
8
+ else
9
+ validate_card_number(user_input[:number])
10
+ end
11
+ end
12
+
13
+ def validate_card_number(number)
14
+ unless number && luhn_validate(number.to_s.gsub(/\s+/, ""))
15
+ errors[5000] = "The Credit Card Number supplied in the authorization request appears to be invalid."
16
+ end
17
+ end
18
+
19
+ private
20
+ def luhn_validate(number)
21
+ s1 = s2 = 0
22
+ number.to_s.reverse.chars.each_slice(2) do |odd, even|
23
+ s1 += odd.to_i
24
+ double = even.to_i * 2
25
+ double -= 9 if double >= 10
26
+ s2 += double
27
+ end
28
+ (s1 + s2) % 10 == 0
29
+ end
30
+
31
+ def validate_unencrypted_swipe(swipe_raw)
32
+ if swipe_raw.index('%') == nil
33
+ @errors[5012] = "The track data sent appears to be invalid."
34
+ end
35
+ validate_track_1 swipe_raw
36
+ validate_track_2 swipe_raw
37
+ end
38
+
39
+ def validate_track_1 swipe_raw
40
+ track1 = swipe_raw[1.. swipe_raw.index('?') - 1]
41
+ if track1 == nil || track1 == "E"
42
+ @errors[5012] = "The track data sent appears to be invalid."
43
+ end
44
+ end
45
+
46
+ def validate_track_2 swipe_raw
47
+ unless swipe_raw.index(';')
48
+ return @errors[5013] = "Transaction requires Track2 data to be sent."
49
+ end
50
+ track2 = swipe_raw[(swipe_raw.index(';') + 1).. swipe_raw.length-2]
51
+ return unless track2 == nil || track2 == "E"
52
+ @errors[5013] = "Transaction requires track 2 data to be sent."
53
+ end
54
+ end
55
+ end
@@ -3,10 +3,10 @@ require 'virtual_merchant/amount'
3
3
  require 'virtual_merchant/communication'
4
4
  require 'virtual_merchant/credentials'
5
5
  require 'virtual_merchant/credit_card'
6
- require 'virtual_merchant/response'
6
+ require 'virtual_merchant/gateway'
7
7
  require 'virtual_merchant/logger'
8
+ require 'virtual_merchant/response'
8
9
  require 'virtual_merchant/xml_generator'
9
- require 'virtual_merchant/gateway'
10
10
  module VirtualMerchant
11
11
  def self.charge(card, amount, creds, custom_fields={}, gateway=Gateway.new(creds))
12
12
  gateway.ccsale(card, amount, custom_fields)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virtual_merchant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.10
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Quarella
@@ -21,11 +21,12 @@ files:
21
21
  - lib/virtual_merchant/communication.rb
22
22
  - lib/virtual_merchant/credentials.rb
23
23
  - lib/virtual_merchant/credit_card.rb
24
- - lib/virtual_merchant/gateway.rb
25
24
  - lib/virtual_merchant/logger.rb
26
25
  - lib/virtual_merchant/response.rb
27
26
  - lib/virtual_merchant/swipe_extractor.rb
27
+ - lib/virtual_merchant/user_input.rb
28
28
  - lib/virtual_merchant/xml_generator.rb
29
+ - lib/virtual_merchant/gateway.rb
29
30
  homepage: https://github.com/leequarella/VirtualMerchant-Ruby
30
31
  licenses:
31
32
  - MIT
@@ -36,17 +37,17 @@ require_paths:
36
37
  - lib
37
38
  required_ruby_version: !ruby/object:Gem::Requirement
38
39
  requirements:
39
- - - ">="
40
+ - - '>='
40
41
  - !ruby/object:Gem::Version
41
42
  version: '0'
42
43
  required_rubygems_version: !ruby/object:Gem::Requirement
43
44
  requirements:
44
- - - ">="
45
+ - - '>='
45
46
  - !ruby/object:Gem::Version
46
47
  version: '0'
47
48
  requirements: []
48
49
  rubyforge_project:
49
- rubygems_version: 2.2.2
50
+ rubygems_version: 2.1.10
50
51
  signing_key:
51
52
  specification_version: 4
52
53
  summary: Virtual Merchant API