credit_card_reader 0.0.1

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 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: []