credit_card_reader 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a6e0906c1984559719ffab18e1d379fbc0ca71c1
4
+ data.tar.gz: a07162b00f9b1be4f1c0178ff7797e5dd4f3fe5c
5
+ SHA512:
6
+ metadata.gz: fee4feb0035d4751bd9233212e0e52f0e5e03de82fb252b994cece0cf8b7ef2459be9b68200bad70bdbf517631136afefcccef844a6177dbc8ccf05a457d16ad
7
+ data.tar.gz: feb831cd2a54557c94195dd356aa537c027212e8184c03f05e129053e3db8e511de82d2e3c613c99bdf503f1f377d595d5762e07f3083ffb0bf03b6fc26c8ffb
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ /Gemfile.lock
2
+ /coverage
3
+ *swp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.0
6
+ - 2.2.0
7
+ script: bundle exec rspec
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :test do
4
+ gem 'simplecov', require: false
5
+ gem "codeclimate-test-reporter", require: nil
6
+ end
7
+
8
+ gemspec
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # credit_card_reader
2
+
3
+ [![Build Status](https://travis-ci.org/camelmasa/credit_card_reader.png)](https://travis-ci.org/camelmasa/credit_card_reader)
4
+ [![Code Climate](https://codeclimate.com/github/camelmasa/credit_card_reader/badges/gpa.svg)](https://codeclimate.com/github/camelmasa/credit_card_reader)
5
+ [![Test Coverage](https://codeclimate.com/github/camelmasa/credit_card_reader/badges/coverage.svg)](https://codeclimate.com/github/camelmasa/credit_card_reader)
6
+
7
+ Detect credit card information.
8
+
9
+ Instration
10
+ ----------
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ gem 'credit_card_reader'
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install credit_card_reader
23
+
24
+ Usage
25
+ -----
26
+
27
+ ```rb
28
+ require "credit_card_reader"
29
+
30
+ detector = CreditCardReader::Detector.new
31
+ detector.detect("0123456789012345")
32
+ ```
33
+
34
+ Test
35
+ ----
36
+
37
+ ```
38
+ bundle exec rspec
39
+ ```
40
+
41
+ Sources
42
+ ----
43
+
44
+ - https://github.com/Shopify/active_merchant/blob/master/lib/active_merchant/billing/credit_card_methods.rb
45
+ - http://www.skilledmonster.com/2014/04/19/java-regular-expressions-validate-credit-cards/
46
+ - http://www.richardsramblings.com/regex/credit-card-numbers/
@@ -0,0 +1,19 @@
1
+ $:.push File.expand_path('../lib', __FILE__)
2
+ require 'credit_card_reader/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'credit_card_reader'
6
+ s.version = CreditCardReader::VERSION
7
+ s.authors = ['Masahiro Saito']
8
+ s.email = ['camelmasa@gmail.com']
9
+ s.summary = 'Detect credit card information'
10
+ s.description = 'Detect credit card information'
11
+ s.homepage = 'https://github.com/camelmasa/credit_card_reader'
12
+ s.license = 'MIT'
13
+
14
+ s.files = `git ls-files`.split($/)
15
+ s.require_paths = ['lib']
16
+
17
+ s.add_development_dependency "pry", "~> 0.10.0"
18
+ s.add_development_dependency 'rspec', '~> 3.0', '>= 3.0.0'
19
+ end
@@ -0,0 +1,33 @@
1
+ module CreditCardReader
2
+ class Detector
3
+ CARD_BRANDS = {
4
+ american_express: /^3[47]\d{13}$/,
5
+ dankort: /^5019\d{12}$/,
6
+ discover: /^65[4-9][0-9]{13}|64[4-9][0-9]{13}|6011[0-9]{12}|(622(?:12[6-9]|1[3-9][0-9]|[2-8][0-9][0-9]|9[01][0-9]|92[0-5])[0-9]{10})$/,
7
+ diners_club: /^3(0[0-5]|[68]\d)\d{11}$/,
8
+ forbrugsforeningen: /^600722\d{10}$/,
9
+ jcb: /^35(28|29|[3-8]\d)\d{12}$/,
10
+ laser: /^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/,
11
+ master: /^(5[1-5]\d{4}|677189)\d{10}$/,
12
+ solo: /^6767\d{12}(\d{2,3})?$/,
13
+ switch: /^6759\d{12}(\d{2,3})?$/,
14
+ union_pay: /^62[0-5]\d{13,16}$/,
15
+ visa: /^4\d{12}(\d{3})?(\d{3})?$/,
16
+ maestro: /^(?:5[0678]\d\d|6304|6390|67\d\d)\d{8,15}$/,
17
+ }
18
+
19
+ def detect(number)
20
+ Result.new(brand: detect_brand(number))
21
+ end
22
+
23
+ private
24
+
25
+ def detect_brand(number)
26
+ CARD_BRANDS.each do |brand, pattern|
27
+ return brand if number =~ pattern
28
+ end
29
+
30
+ nil
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,9 @@
1
+ module CreditCardReader
2
+ class Result
3
+ attr_reader :brand
4
+
5
+ def initialize(options)
6
+ @brand = options[:brand]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ module CreditCardReader
2
+ MAJOR = 0
3
+ MINOR = 0
4
+ PATCH = 1
5
+ VERSION = [MAJOR, MINOR, PATCH].join('.').freeze
6
+ end
@@ -0,0 +1,3 @@
1
+ require 'credit_card_reader/detector'
2
+ require 'credit_card_reader/result'
3
+ require 'credit_card_reader/version'
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe CreditCardReader::Detector do
4
+ describe "#detect" do
5
+ subject { described_class.new.detect(number) }
6
+
7
+ shared_examples "a detect result" do |brand, number|
8
+ context "with #{brand}" do
9
+ let(:number) { number }
10
+
11
+ it { should be_a CreditCardReader::Result }
12
+ it { expect(subject.brand).to eq brand }
13
+ end
14
+ end
15
+
16
+ it_behaves_like 'a detect result', :american_express, "340123456789012"
17
+ it_behaves_like 'a detect result', :dankort, "5019012345678901"
18
+ it_behaves_like 'a detect result', :discover, "6011012345678912"
19
+ it_behaves_like 'a detect result', :diners_club, "30001234567890"
20
+ it_behaves_like 'a detect result', :forbrugsforeningen, "6007220123456789"
21
+ it_behaves_like 'a detect result', :jcb, "3528012345678901"
22
+ it_behaves_like 'a detect result', :laser, "6304012345670123"
23
+ it_behaves_like 'a detect result', :maestro, "5060123456789"
24
+ it_behaves_like 'a detect result', :master, "5101230123456789"
25
+ it_behaves_like 'a detect result', :solo, "6767012345678901"
26
+ it_behaves_like 'a detect result', :switch, "6759012345678901"
27
+ it_behaves_like 'a detect result', :union_pay, "6200123456789012"
28
+ it_behaves_like 'a detect result', :visa, "4012345678901"
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ require "codeclimate-test-reporter"
4
+ CodeClimate::TestReporter.start
5
+
6
+ require 'simplecov'
7
+ SimpleCov.start do
8
+ add_filter "spec"
9
+ end
10
+
11
+ require 'credit_card_reader'
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: credit_card_reader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Masahiro Saito
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.10.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.10.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 3.0.0
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '3.0'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 3.0.0
47
+ description: Detect credit card information
48
+ email:
49
+ - camelmasa@gmail.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - ".gitignore"
55
+ - ".rspec"
56
+ - ".travis.yml"
57
+ - Gemfile
58
+ - README.md
59
+ - credit_card_detector.gemspec
60
+ - lib/credit_card_reader.rb
61
+ - lib/credit_card_reader/detector.rb
62
+ - lib/credit_card_reader/result.rb
63
+ - lib/credit_card_reader/version.rb
64
+ - spec/credit_card_reader/detector_spec.rb
65
+ - spec/spec_helper.rb
66
+ homepage: https://github.com/camelmasa/credit_card_reader
67
+ licenses:
68
+ - MIT
69
+ metadata: {}
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 2.4.5
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: Detect credit card information
90
+ test_files: []