magnet 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -14
- data/lib/magnet/card.rb +5 -1
- data/lib/magnet/parser.rb +2 -2
- data/lib/magnet/version.rb +1 -1
- data/test/magnet/card_test.rb +21 -0
- data/test/magnet/parser_test.rb +16 -0
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
NmM1MzAyNzRmMzdhMTIwZWMxYzI4NWRhMmRlN2E0MDgwOGMwODU5NzE3Yzlj
|
10
|
-
YzE0YzM0NjBhNDgxMjNjMGI5YTMwMzFhNDVhNjljYWE2ZWViNTYyMzM1NmNk
|
11
|
-
MDdhYzBlNTVkMWExMDY0ZGQzMDA0MjU1MTZkMDYwMjU5MWVjMTI=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ODQ4ODFhYzA5MmQwNzA0OTA1YzM2OWEyZjRhNWRlNGM0ZTljOWI1MWU2YTk3
|
14
|
-
NWRkZjY3ODAzNGRlYzc5YWI2YWI4YjJlNGZmNjQ5Y2MwMmVjNzQ5MTUzMjQ0
|
15
|
-
ZmU1NjMxZDJiMTIxNGExMzRkNjdhNjlkNmI0NTE1NWU1MzhhNTQ=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c3717dd5953a1c90ed674b2c92413241a4f53fbf
|
4
|
+
data.tar.gz: 229a5f369ae86f31a8b8950fedf5f5e847494377
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f8fbb57a6b7a19cf0c4902a1646dd1a6b49c4c5e3331f11edd8287dbbfce5cd80796570f91b8175d388a7eb09f83891641ec937dabbec25d1314d2c91ffe1c57
|
7
|
+
data.tar.gz: ce15422bc6904821202f11be135601bc4997c1c50fc4379d52e7d625189b62fb7ab1bee60fdb5f5231b4fd9cc5c1c2691c1bf5524b9c9996aadfbd369912831c
|
data/lib/magnet/card.rb
CHANGED
@@ -62,7 +62,7 @@ module Magnet
|
|
62
62
|
card.initial = initial
|
63
63
|
card.interchange = hash_lookup(INTERCHANGE, position1)
|
64
64
|
card.last_name = last_name
|
65
|
-
card.number = attributes[:pan]
|
65
|
+
card.number = parse_pan(attributes[:pan])
|
66
66
|
card.pin_requirements = hash_lookup(PIN_REQUIREMENTS, position3)
|
67
67
|
card.technology = hash_lookup(TECHNOLOGY, position1)
|
68
68
|
card.title = title
|
@@ -83,6 +83,10 @@ module Magnet
|
|
83
83
|
initial, title = initial.split(".", 2) if initial
|
84
84
|
[title, first, initial, last]
|
85
85
|
end
|
86
|
+
|
87
|
+
def parse_pan(pan)
|
88
|
+
pan.delete(" ")
|
89
|
+
end
|
86
90
|
end
|
87
91
|
|
88
92
|
def atm_only?
|
data/lib/magnet/parser.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Magnet
|
2
2
|
class Parser
|
3
3
|
TRACKS = {
|
4
|
-
1 => /\A%(?<format>[A-Z])(?<pan>[0-9]{1,19})\^(?<name>[A-Za-z.\/ ]{2,26})\^(?<expiration>\d{4}|\^)(?<service_code>\d{3}|\^)(?<discretionary_data>[^\?]*)\?\Z/,
|
5
|
-
2 => /\A;(?<format>[A-Z])(?<pan>[0-9]{1,19})=(?<expiration>\d{4}|=)(?<service_code>\d{3}|=)(?<discretionary_data>[^\?]*)\?\Z/
|
4
|
+
1 => /\A%(?<format>[A-Z])(?<pan>[0-9 ]{1,19})\^(?<name>[A-Za-z.\/ *]{2,26})\^(?<expiration>\d{4}|\^)(?<service_code>\d{3}|\^)(?<discretionary_data>[^\?]*)\?\Z/,
|
5
|
+
2 => /\A;(?<format>[A-Z])(?<pan>[0-9 ]{1,19})=(?<expiration>\d{4}|=)(?<service_code>\d{3}|=)(?<discretionary_data>[^\?]*)\?\Z/
|
6
6
|
}.freeze
|
7
7
|
|
8
8
|
def initialize(track = :auto)
|
data/lib/magnet/version.rb
CHANGED
data/test/magnet/card_test.rb
CHANGED
@@ -51,5 +51,26 @@ describe Magnet::Card do
|
|
51
51
|
assert_equal "HOGAN", card.last_name
|
52
52
|
assert_equal "DR", card.title
|
53
53
|
end
|
54
|
+
|
55
|
+
it "should parse names with asterisks in them" do
|
56
|
+
@track_data = "%B4750550000000000^MCTEST/SYDNEY*GEE^^^?"
|
57
|
+
@attributes = { format: "B", pan: "4750550000000000", name: "MCTEST/SYDNEY*GEE", expiration: nil, service_code: nil, discretionary_data: nil }
|
58
|
+
@parser.stubs(:parse).with(@track_data).returns(@attributes)
|
59
|
+
|
60
|
+
card = Magnet::Card.parse(@track_data, @parser)
|
61
|
+
|
62
|
+
assert_equal "SYDNEY*GEE", card.first_name
|
63
|
+
assert_equal "MCTEST", card.last_name
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should parse track data with spaces in the pan" do
|
67
|
+
@track_data = "%B4750550000000000^MCTEST/SYDNEY*GEE^^^?"
|
68
|
+
@attributes = { format: "B", pan: "3715 700000 00000", name: "HAMMOND/G ", expiration: nil, service_code: nil, discretionary_data: nil }
|
69
|
+
@parser.stubs(:parse).with(@track_data).returns(@attributes)
|
70
|
+
|
71
|
+
card = Magnet::Card.parse(@track_data, @parser)
|
72
|
+
|
73
|
+
assert_equal "371570000000000", card.number
|
74
|
+
end
|
54
75
|
end
|
55
76
|
end
|
data/test/magnet/parser_test.rb
CHANGED
@@ -71,5 +71,21 @@ describe Magnet::Parser do
|
|
71
71
|
assert_equal nil, attributes[:service_code]
|
72
72
|
assert_equal nil, attributes[:discretionary_data]
|
73
73
|
end
|
74
|
+
|
75
|
+
it "should parse track data with asterisk in the name" do
|
76
|
+
attributes = @parser.parse("%B4750550000000000^MCTEST/SYDNEY*GEE^^^?")
|
77
|
+
|
78
|
+
assert_equal "B", attributes[:format]
|
79
|
+
assert_equal "4750550000000000", attributes[:pan]
|
80
|
+
assert_equal "MCTEST/SYDNEY*GEE", attributes[:name]
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should parse track data with spaces in the pan" do
|
84
|
+
attributes = @parser.parse("%B3715 700000 00000^HAMMOND/G ^^^?")
|
85
|
+
|
86
|
+
assert_equal "B", attributes[:format]
|
87
|
+
assert_equal "3715 700000 00000", attributes[:pan]
|
88
|
+
assert_equal "HAMMOND/G ", attributes[:name]
|
89
|
+
end
|
74
90
|
end
|
75
91
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magnet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Kadolph
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -75,17 +75,17 @@ require_paths:
|
|
75
75
|
- lib
|
76
76
|
required_ruby_version: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
|
-
- -
|
78
|
+
- - '>='
|
79
79
|
- !ruby/object:Gem::Version
|
80
80
|
version: 1.9.2
|
81
81
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - '>='
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
86
|
requirements: []
|
87
87
|
rubyforge_project:
|
88
|
-
rubygems_version: 2.0.
|
88
|
+
rubygems_version: 2.0.5
|
89
89
|
signing_key:
|
90
90
|
specification_version: 4
|
91
91
|
summary: magnet is a library for decoding the track data on magnetic stripe cards.
|