magnet 1.3.0 → 1.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.
@@ -1,7 +1,7 @@
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-z0-9.\/ *]{2,26})\^(?<expiration>\d{4}|\^)(?<service_code>\d{3}|\^)(?<discretionary_data>[^\?]*)\?\Z/,
4
+ 1 => /\A%(?<format>[A-Z])(?<pan>[0-9 ]{1,19})\^(?<name>[A-Za-z0-9.'&_!@#\$\%*\\~,"\-\/ *]{0,26})\^(?<expiration>\d{4}|\^)(?<service_code>\d{3}|\^)(?<discretionary_data>[^\?]*)\?\Z/,
5
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
 
@@ -1,3 +1,3 @@
1
1
  module Magnet
2
- VERSION = "1.3.0"
2
+ VERSION = "1.4.0"
3
3
  end
@@ -88,10 +88,101 @@ describe Magnet::Parser do
88
88
  assert_equal "HAMMOND/G ", attributes[:name]
89
89
  end
90
90
 
91
+ it "should parse track data with no name" do
92
+ attributes = @parser.parse("%B4717270000000000^^0000000000000000000000000000000?")
93
+
94
+ assert_equal "", attributes[:name]
95
+ end
96
+
91
97
  it "should parse track data with numbers in the name" do
92
98
  attributes = @parser.parse("%B4717270000000000^LLC/TESTING SCENTS5^0000000000000000000000000000000?")
93
99
 
94
100
  assert_equal "LLC/TESTING SCENTS5", attributes[:name]
95
101
  end
102
+
103
+ it "should parse track data with single quotes in the name" do
104
+ attributes = @parser.parse("%B4717270000000000^JIM/O'CONNOR^0000000000000000000000000000000?")
105
+
106
+ assert_equal "JIM/O'CONNOR", attributes[:name]
107
+ end
108
+
109
+ it "should parse track data with double quotes in the name" do
110
+ attributes = @parser.parse('%B4717270000000000^JIM/O"CONNOR^0000000000000000000000000000000?')
111
+
112
+ assert_equal 'JIM/O"CONNOR', attributes[:name]
113
+ end
114
+
115
+ it "should parse track data with backslash in the name" do
116
+ attributes = @parser.parse('%B4717270000000000^JIM/O\CONNOR^0000000000000000000000000000000?')
117
+
118
+ assert_equal 'JIM/O\CONNOR', attributes[:name]
119
+ end
120
+
121
+ it "should parse track data with dashes in the name" do
122
+ attributes = @parser.parse("%B4717270000000000^ALISON-MAYNE/B^0000000000000000000000000000000?")
123
+
124
+ assert_equal "ALISON-MAYNE/B", attributes[:name]
125
+ end
126
+
127
+ it "should parse track data with underscore in the name" do
128
+ attributes = @parser.parse("%B4717270000000000^ALISON_MAYNE/B^0000000000000000000000000000000?")
129
+
130
+ assert_equal "ALISON_MAYNE/B", attributes[:name]
131
+ end
132
+
133
+ it "should parse track data with ampersands in the name" do
134
+ attributes = @parser.parse("%B4717270000000000^ALISON&MAYNE/B^0000000000000000000000000000000?")
135
+
136
+ assert_equal "ALISON&MAYNE/B", attributes[:name]
137
+ end
138
+
139
+ it "should parse track data with exclamation mark in the name" do
140
+ attributes = @parser.parse("%B4717270000000000^ALISON!MAYNE/B^0000000000000000000000000000000?")
141
+
142
+ assert_equal "ALISON!MAYNE/B", attributes[:name]
143
+ end
144
+
145
+ it "should parse track data with at sign in the name" do
146
+ attributes = @parser.parse("%B4717270000000000^ALISON@MAYNE/B^0000000000000000000000000000000?")
147
+
148
+ assert_equal "ALISON@MAYNE/B", attributes[:name]
149
+ end
150
+
151
+ it "should parse track data with pound sign in the name" do
152
+ attributes = @parser.parse("%B4717270000000000^ALISON#{}MAYNE/B^0000000000000000000000000000000?")
153
+
154
+ assert_equal "ALISON#{}MAYNE/B", attributes[:name]
155
+ end
156
+
157
+ it "should parse track data with dollar sign in the name" do
158
+ attributes = @parser.parse("%B4717270000000000^ALISON$MAYNE/B^0000000000000000000000000000000?")
159
+
160
+ assert_equal "ALISON$MAYNE/B", attributes[:name]
161
+ end
162
+
163
+ it "should parse track data with percent in the name" do
164
+ attributes = @parser.parse("%B4717270000000000^ALISON%MAYNE/B^0000000000000000000000000000000?")
165
+
166
+ assert_equal "ALISON%MAYNE/B", attributes[:name]
167
+ end
168
+
169
+ it "should parse track data with star in the name" do
170
+ attributes = @parser.parse("%B4717270000000000^ALISON*MAYNE/B^0000000000000000000000000000000?")
171
+
172
+ assert_equal "ALISON*MAYNE/B", attributes[:name]
173
+ end
174
+
175
+ it "should parse track data with tilda in the name" do
176
+ attributes = @parser.parse("%B4717270000000000^ALISON~MAYNE/B^0000000000000000000000000000000?")
177
+
178
+ assert_equal "ALISON~MAYNE/B", attributes[:name]
179
+ end
180
+
181
+ it "should parse track data with comma in the name" do
182
+ attributes = @parser.parse("%B4717270000000000^ALISON,MAYNE/B^0000000000000000000000000000000?")
183
+
184
+ assert_equal "ALISON,MAYNE/B", attributes[:name]
185
+ end
186
+
96
187
  end
97
188
  end
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magnet
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Samuel Kadolph
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-10-04 00:00:00.000000000 Z
12
+ date: 2013-10-10 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: minitest
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: mocha
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ~>
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ~>
39
44
  - !ruby/object:Gem::Version
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: rake
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - ~>
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ~>
53
60
  - !ruby/object:Gem::Version
@@ -68,26 +75,27 @@ files:
68
75
  - test/magnet/parser_test.rb
69
76
  homepage: http://samuelkadolph.github.com/magnet/
70
77
  licenses: []
71
- metadata: {}
72
78
  post_install_message:
73
79
  rdoc_options: []
74
80
  require_paths:
75
81
  - lib
76
82
  required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
77
84
  requirements:
78
- - - '>='
85
+ - - ! '>='
79
86
  - !ruby/object:Gem::Version
80
87
  version: 1.9.2
81
88
  required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
82
90
  requirements:
83
- - - '>='
91
+ - - ! '>='
84
92
  - !ruby/object:Gem::Version
85
93
  version: '0'
86
94
  requirements: []
87
95
  rubyforge_project:
88
- rubygems_version: 2.0.5
96
+ rubygems_version: 1.8.23
89
97
  signing_key:
90
- specification_version: 4
98
+ specification_version: 3
91
99
  summary: magnet is a library for decoding the track data on magnetic stripe cards.
92
100
  test_files:
93
101
  - test/magnet/card_test.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 06cd197b08c088af98022b59c01defacb98d6ebb
4
- data.tar.gz: 2cede75781b0f8294cfd392019653a6e0f74bead
5
- SHA512:
6
- metadata.gz: 077fe3412f76cb26975809d547b09b7af80543553ec7c715f267b2929884f3cf0ba8255290b4bf14c9c6f652ce9b77e02195f81e98222ef32b66a3dc8651ff59
7
- data.tar.gz: e6b72e3b91464bda0969317c37daca4a15e773b8744d77fa5d8bb8c660af4a04d0e4ef6b06ca9e7fd0de2bc71544c1c1526e6464252a8b6b6d8d1b8407dde976