plastic 0.2.1 → 0.2.2
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.
- data/.gitignore +0 -1
- data/README.rdoc +1 -1
- data/lib/plastic/core.rb +10 -7
- data/lib/plastic/version.rb +1 -1
- data/plastic.gemspec +62 -0
- data/spec/plastic/core_spec.rb +79 -8
- metadata +5 -4
data/README.rdoc
CHANGED
data/lib/plastic/core.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Plastic
|
2
|
-
BRANDS = [:visa, :mastercard, :american_express, :discover]
|
2
|
+
BRANDS = [:visa, :mastercard, :american_express, :discover, :jcb]
|
3
3
|
|
4
4
|
attr_accessor :pan, :expiration
|
5
5
|
attr_accessor :track_name, :surname, :given_name, :title
|
@@ -40,12 +40,15 @@ class Plastic
|
|
40
40
|
|
41
41
|
def brand
|
42
42
|
case pan
|
43
|
-
when /^4
|
44
|
-
when /^5[1-5]
|
45
|
-
when /^677189
|
46
|
-
when /^6011
|
47
|
-
when /^
|
48
|
-
when /^
|
43
|
+
when /^4\d{15}$/ then :visa
|
44
|
+
when /^5[1-5]\d{14}$/ then :mastercard
|
45
|
+
when /^677189\d{10}$/ then :mastercard
|
46
|
+
when /^6011\d{12}$/ then :discover
|
47
|
+
when /^64[4-9]\d{13}$/ then :discover
|
48
|
+
when /^65\d{14}$/ then :discover
|
49
|
+
when /^3[47]\d{13}$/ then :american_express
|
50
|
+
when /^352[8-9]\d{12}$/ then :jcb
|
51
|
+
when /^35[3-8]\d{13}$/ then :jcb
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
data/lib/plastic/version.rb
CHANGED
data/plastic.gemspec
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{plastic}
|
8
|
+
s.version = "0.2.2"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Randy Reddig", "Cameron Walters", "Chris Kampmeier", "Erica Kwan", "Matthew O'Connor", "Damon McCormick", "Brian Jenkins"]
|
12
|
+
s.date = %q{2010-09-01}
|
13
|
+
s.description = %q{Handle credit, debit, bank and other cards.}
|
14
|
+
s.email = %q{github@squareup.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".gitignore",
|
21
|
+
"HISTORY.rdoc",
|
22
|
+
"LICENSE.txt",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"lib/plastic.rb",
|
26
|
+
"lib/plastic/core.rb",
|
27
|
+
"lib/plastic/duck_type.rb",
|
28
|
+
"lib/plastic/track.rb",
|
29
|
+
"lib/plastic/validations.rb",
|
30
|
+
"lib/plastic/version.rb",
|
31
|
+
"plastic.gemspec",
|
32
|
+
"spec/plastic/core_spec.rb",
|
33
|
+
"spec/plastic/duck_type_spec.rb",
|
34
|
+
"spec/plastic/track_spec.rb",
|
35
|
+
"spec/plastic/validations_spec.rb",
|
36
|
+
"spec/spec.opts",
|
37
|
+
"spec/spec_helper.rb"
|
38
|
+
]
|
39
|
+
s.homepage = %q{http://github.com/square/plastic}
|
40
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
41
|
+
s.require_paths = ["lib"]
|
42
|
+
s.rubygems_version = %q{1.3.7}
|
43
|
+
s.summary = %q{Credit card library for Ruby.}
|
44
|
+
s.test_files = [
|
45
|
+
"spec/plastic/core_spec.rb",
|
46
|
+
"spec/plastic/duck_type_spec.rb",
|
47
|
+
"spec/plastic/track_spec.rb",
|
48
|
+
"spec/plastic/validations_spec.rb",
|
49
|
+
"spec/spec_helper.rb"
|
50
|
+
]
|
51
|
+
|
52
|
+
if s.respond_to? :specification_version then
|
53
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
54
|
+
s.specification_version = 3
|
55
|
+
|
56
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
57
|
+
else
|
58
|
+
end
|
59
|
+
else
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
data/spec/plastic/core_spec.rb
CHANGED
@@ -155,37 +155,108 @@ describe Plastic do
|
|
155
155
|
Plastic.new(:pan => "4111111111111111").brand.should == :visa
|
156
156
|
end
|
157
157
|
|
158
|
+
it "does not recognize pseudo-Visa cards with 13, 14, 15, or 17 digits" do
|
159
|
+
# Visa once used 13-digit PANs, but these accounts have all been migrated
|
160
|
+
# to 16-digit PANs. The old numbers are not valid for new transactions.
|
161
|
+
Plastic.new(:pan => "4111111111111").brand.should_not == :visa
|
162
|
+
Plastic.new(:pan => "41111111111111").brand.should_not == :visa
|
163
|
+
Plastic.new(:pan => "411111111111111").brand.should_not == :visa
|
164
|
+
Plastic.new(:pan => "41111111111111111").brand.should_not == :visa
|
165
|
+
end
|
166
|
+
|
158
167
|
it "recognizes MasterCard cards" do
|
159
168
|
Plastic.new(:pan => "5100000000000000").brand.should == :mastercard
|
160
169
|
Plastic.new(:pan => "5200000000000000").brand.should == :mastercard
|
161
170
|
Plastic.new(:pan => "5300000000000000").brand.should == :mastercard
|
162
171
|
Plastic.new(:pan => "5400000000000000").brand.should == :mastercard
|
163
172
|
Plastic.new(:pan => "5500000000000000").brand.should == :mastercard
|
164
|
-
|
173
|
+
# TODO: confirm that 677189- is really MasterCard
|
174
|
+
Plastic.new(:pan => "6771890000000000").brand.should == :mastercard
|
175
|
+
end
|
176
|
+
|
177
|
+
it "does not recognize pseudo-MasterCards with invalid IINs" do
|
178
|
+
Plastic.new(:pan => "5000000000000000").brand.should_not == :mastercard
|
179
|
+
Plastic.new(:pan => "5600000000000000").brand.should_not == :mastercard
|
180
|
+
Plastic.new(:pan => "5700000000000000").brand.should_not == :mastercard
|
181
|
+
Plastic.new(:pan => "5800000000000000").brand.should_not == :mastercard
|
182
|
+
Plastic.new(:pan => "5900000000000000").brand.should_not == :mastercard
|
165
183
|
end
|
166
184
|
|
167
|
-
it "
|
168
|
-
Plastic.new(:pan => "
|
169
|
-
Plastic.new(:pan => "
|
170
|
-
Plastic.new(:pan => "
|
171
|
-
Plastic.new(:pan => "
|
172
|
-
|
185
|
+
it "does not recognize pseudo-MasterCards with 15 or 17 digits" do
|
186
|
+
Plastic.new(:pan => "510000000000000").brand.should_not == :mastercard
|
187
|
+
Plastic.new(:pan => "520000000000000").brand.should_not == :mastercard
|
188
|
+
Plastic.new(:pan => "53000000000000000").brand.should_not == :mastercard
|
189
|
+
Plastic.new(:pan => "54000000000000000").brand.should_not == :mastercard
|
190
|
+
# TODO: confirm that 677189- is really MasterCard
|
191
|
+
Plastic.new(:pan => "677189000000000").brand.should_not == :mastercard
|
192
|
+
Plastic.new(:pan => "67718900000000000").brand.should_not == :mastercard
|
173
193
|
end
|
174
194
|
|
175
195
|
it "recognizes Discover cards" do
|
176
196
|
Plastic.new(:pan => "6011000000000000").brand.should == :discover
|
197
|
+
Plastic.new(:pan => "6440000000000000").brand.should == :discover
|
198
|
+
Plastic.new(:pan => "6450000000000000").brand.should == :discover
|
199
|
+
Plastic.new(:pan => "6460000000000000").brand.should == :discover
|
200
|
+
Plastic.new(:pan => "6470000000000000").brand.should == :discover
|
201
|
+
Plastic.new(:pan => "6480000000000000").brand.should == :discover
|
202
|
+
Plastic.new(:pan => "6490000000000000").brand.should == :discover
|
177
203
|
Plastic.new(:pan => "6500000000000000").brand.should == :discover
|
178
204
|
end
|
179
205
|
|
206
|
+
it "does not recognize pseudo-Discover cards with 15 digits" do
|
207
|
+
Plastic.new(:pan => "601100000000000").brand.should_not == :discover
|
208
|
+
Plastic.new(:pan => "644000000000000").brand.should_not == :discover
|
209
|
+
Plastic.new(:pan => "645000000000000").brand.should_not == :discover
|
210
|
+
Plastic.new(:pan => "646000000000000").brand.should_not == :discover
|
211
|
+
Plastic.new(:pan => "647000000000000").brand.should_not == :discover
|
212
|
+
Plastic.new(:pan => "648000000000000").brand.should_not == :discover
|
213
|
+
Plastic.new(:pan => "649000000000000").brand.should_not == :discover
|
214
|
+
Plastic.new(:pan => "650000000000000").brand.should_not == :discover
|
215
|
+
end
|
216
|
+
|
217
|
+
it "does not recognize pseudo-Discover cards with 17 digits" do
|
218
|
+
Plastic.new(:pan => "60110000000000000").brand.should_not == :discover
|
219
|
+
Plastic.new(:pan => "64400000000000000").brand.should_not == :discover
|
220
|
+
Plastic.new(:pan => "64500000000000000").brand.should_not == :discover
|
221
|
+
Plastic.new(:pan => "64600000000000000").brand.should_not == :discover
|
222
|
+
Plastic.new(:pan => "64700000000000000").brand.should_not == :discover
|
223
|
+
Plastic.new(:pan => "64800000000000000").brand.should_not == :discover
|
224
|
+
Plastic.new(:pan => "64900000000000000").brand.should_not == :discover
|
225
|
+
Plastic.new(:pan => "65000000000000000").brand.should_not == :discover
|
226
|
+
end
|
227
|
+
|
180
228
|
it "recognizes American Express cards" do
|
181
229
|
Plastic.new(:pan => "340000000000000").brand.should == :american_express
|
182
230
|
Plastic.new(:pan => "370000000000000").brand.should == :american_express
|
183
231
|
end
|
232
|
+
|
233
|
+
it "does not recognize pseudo-American Express cards with 14 or 16 digits" do
|
234
|
+
Plastic.new(:pan => "34000000000000").brand.should_not == :american_express
|
235
|
+
Plastic.new(:pan => "37000000000000").brand.should_not == :american_express
|
236
|
+
Plastic.new(:pan => "3400000000000000").brand.should_not == :american_express
|
237
|
+
Plastic.new(:pan => "3700000000000000").brand.should_not == :american_express
|
238
|
+
end
|
239
|
+
|
240
|
+
it "recognizes JCB cards" do
|
241
|
+
Plastic.new(:pan => "3540123456789012").brand.should == :jcb
|
242
|
+
Plastic.new(:pan => "3528000000000000").brand.should == :jcb
|
243
|
+
Plastic.new(:pan => "3589990000000000").brand.should == :jcb
|
244
|
+
end
|
245
|
+
|
246
|
+
it "does not recognize pseudo-JCB cards with 15 or 17 digits" do
|
247
|
+
Plastic.new(:pan => "354012345678901").brand.should_not == :jcb
|
248
|
+
Plastic.new(:pan => "352800000000000").brand.should_not == :jcb
|
249
|
+
Plastic.new(:pan => "358999000000000").brand.should_not == :jcb
|
250
|
+
Plastic.new(:pan => "35401234567890123").brand.should_not == :jcb
|
251
|
+
Plastic.new(:pan => "35280000000000000").brand.should_not == :jcb
|
252
|
+
Plastic.new(:pan => "35899900000000000").brand.should_not == :jcb
|
253
|
+
end
|
184
254
|
end
|
185
255
|
|
186
256
|
describe "BRANDS constant" do
|
187
257
|
it "returns a list of the brands as symbols" do
|
188
|
-
Plastic::BRANDS.should == [:visa, :mastercard, :american_express,
|
258
|
+
Plastic::BRANDS.should == [:visa, :mastercard, :american_express,
|
259
|
+
:discover, :jcb]
|
189
260
|
end
|
190
261
|
end
|
191
262
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plastic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Randy Reddig
|
@@ -21,7 +21,7 @@ autorequire:
|
|
21
21
|
bindir: bin
|
22
22
|
cert_chain: []
|
23
23
|
|
24
|
-
date: 2010-
|
24
|
+
date: 2010-09-01 00:00:00 -07:00
|
25
25
|
default_executable:
|
26
26
|
dependencies: []
|
27
27
|
|
@@ -46,6 +46,7 @@ files:
|
|
46
46
|
- lib/plastic/track.rb
|
47
47
|
- lib/plastic/validations.rb
|
48
48
|
- lib/plastic/version.rb
|
49
|
+
- plastic.gemspec
|
49
50
|
- spec/plastic/core_spec.rb
|
50
51
|
- spec/plastic/duck_type_spec.rb
|
51
52
|
- spec/plastic/track_spec.rb
|