pg_creditcard 0.1.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.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ gem "creditcard"
7
+
8
+ # Add dependencies to develop your gem here.
9
+ # Include everything needed to run rake, tests, features, etc.
10
+ group :development do
11
+ gem "shoulda", ">= 0"
12
+ gem "bundler", "~> 1.0.0"
13
+ gem "jeweler", "~> 1.5.1"
14
+ gem "rcov", ">= 0"
15
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ creditcard (1.0)
5
+ git (1.2.5)
6
+ jeweler (1.5.1)
7
+ bundler (~> 1.0.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rake (0.8.7)
11
+ rcov (0.9.8)
12
+ shoulda (2.11.3)
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ bundler (~> 1.0.0)
19
+ creditcard
20
+ jeweler (~> 1.5.1)
21
+ rcov
22
+ shoulda
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Simon Chiu
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,7 @@
1
+ = pg_creditcard
2
+
3
+ This dependency library handles the credit card object for the Ruby Psigate credit card processing libraries.
4
+
5
+ == Copyright
6
+
7
+ Copyright (c) 2010 Simon Chiu. See LICENSE.txt for further details.
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "pg_creditcard"
16
+ gem.homepage = "http://github.com/drchiu/pg_creditcard"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{Dependency library for handling Psigate's credit card object}
19
+ gem.description = %Q{Dependency library for handling Psigate's credit card object}
20
+ gem.email = "skhchiu@gmail.com"
21
+ gem.authors = ["Simon Chiu"]
22
+ # Include your dependencies below. Runtime dependencies are required when using your gem,
23
+ # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
+ # gem.add_runtime_dependency 'jabber4r', '> 0.1'
25
+ # gem.add_development_dependency 'rspec', '> 1.2.3'
26
+ end
27
+ Jeweler::RubygemsDotOrgTasks.new
28
+
29
+ require 'rake/testtask'
30
+ Rake::TestTask.new(:test) do |test|
31
+ test.libs << 'lib' << 'test'
32
+ test.pattern = 'test/**/test_*.rb'
33
+ test.verbose = true
34
+ end
35
+
36
+ require 'rcov/rcovtask'
37
+ Rcov::RcovTask.new do |test|
38
+ test.libs << 'test'
39
+ test.pattern = 'test/**/test_*.rb'
40
+ test.verbose = true
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "pg_creditcard #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,53 @@
1
+ require 'creditcard'
2
+
3
+ class PgCreditcard
4
+
5
+ def initialize(options)
6
+ raise ArgumentError if options.nil?
7
+ @name = options[:name]
8
+ @number = options[:number]
9
+ @month = options[:month]
10
+ @year = set_year(options[:year])
11
+ @cvv = options[:cvv]
12
+ end
13
+
14
+ def type
15
+ return nil if @number.nil?
16
+ @type ||= @number.to_s.creditcard_type
17
+ end
18
+
19
+ def valid?
20
+ @number.to_s.creditcard?
21
+ end
22
+
23
+ def expired?
24
+ today = Time.now
25
+ expiry = Time.new(@year, @month, days_in_a_month(@year, @month))
26
+ today > expiry
27
+ end
28
+
29
+ private
30
+
31
+ def set_year(x)
32
+ if x.length == 2
33
+ year = "20".concat(x)
34
+ else
35
+ year = x
36
+ end
37
+ year
38
+ end
39
+
40
+ def days_in_a_month(year, month)
41
+ if month == 12
42
+ year += 1
43
+ next_month = 1
44
+ else
45
+ next_month = month.to_i + 1
46
+ end
47
+ next_month_first_day = Time.new(year, next_month)
48
+ last_day_current_month = (next_month_first_day-1).day
49
+ days = last_day_current_month
50
+ days
51
+ end
52
+
53
+ end
@@ -0,0 +1,67 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{pg_creditcard}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Simon Chiu"]
12
+ s.date = %q{2010-11-16}
13
+ s.description = %q{Dependency library for handling Psigate's credit card object}
14
+ s.email = %q{skhchiu@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/pg_creditcard.rb",
28
+ "pg_creditcard.gemspec",
29
+ "test/helper.rb",
30
+ "test/test_pg_creditcard.rb"
31
+ ]
32
+ s.homepage = %q{http://github.com/drchiu/pg_creditcard}
33
+ s.licenses = ["MIT"]
34
+ s.require_paths = ["lib"]
35
+ s.rubygems_version = %q{1.3.7}
36
+ s.summary = %q{Dependency library for handling Psigate's credit card object}
37
+ s.test_files = [
38
+ "test/helper.rb",
39
+ "test/test_pg_creditcard.rb"
40
+ ]
41
+
42
+ if s.respond_to? :specification_version then
43
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
44
+ s.specification_version = 3
45
+
46
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
+ s.add_runtime_dependency(%q<creditcard>, [">= 0"])
48
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
49
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
50
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
51
+ s.add_development_dependency(%q<rcov>, [">= 0"])
52
+ else
53
+ s.add_dependency(%q<creditcard>, [">= 0"])
54
+ s.add_dependency(%q<shoulda>, [">= 0"])
55
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
56
+ s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
57
+ s.add_dependency(%q<rcov>, [">= 0"])
58
+ end
59
+ else
60
+ s.add_dependency(%q<creditcard>, [">= 0"])
61
+ s.add_dependency(%q<shoulda>, [">= 0"])
62
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
63
+ s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
64
+ s.add_dependency(%q<rcov>, [">= 0"])
65
+ end
66
+ end
67
+
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'pg_creditcard'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,89 @@
1
+ require 'helper'
2
+
3
+ class TestPgCreditcard < Test::Unit::TestCase
4
+
5
+ def test_raises_argument_error_if_options_nil
6
+ assert_raise(ArgumentError) do
7
+ @cc = PgCreditcard.new
8
+ end
9
+ end
10
+
11
+ def test_does_not_raise_argument_error_if_options_nil
12
+ assert_nothing_raised(ArgumentError) do
13
+ @cc = PgCreditcard.new(
14
+ :name => "Homer Simpsons",
15
+ :number => "4111111111111111",
16
+ :month => "03",
17
+ :year => "20",
18
+ :cvv => "123"
19
+ )
20
+ end
21
+ end
22
+
23
+ def test_initializing_new_pg_creditcard_instance
24
+ @cc = PgCreditcard.new(
25
+ :name => "Homer Simpsons",
26
+ :number => "4111111111111111",
27
+ :month => "03",
28
+ :year => "20",
29
+ :cvv => "123"
30
+ )
31
+ assert @cc, "PgCreditcard instance not set"
32
+ end
33
+
34
+ def test_determine_cc_type_from_cc_number
35
+ @cc = PgCreditcard.new(
36
+ :name => "Homer Simpsons",
37
+ :number => "4111111111111111",
38
+ :month => "03",
39
+ :year => "20",
40
+ :cvv => "123"
41
+ )
42
+ assert_equal @cc.type, "visa"
43
+ end
44
+
45
+ def test_return_false_if_not_expired
46
+ @cc = PgCreditcard.new(
47
+ :name => "Homer Simpsons",
48
+ :number => "4111111111111111",
49
+ :month => "03",
50
+ :year => "12",
51
+ :cvv => "123"
52
+ )
53
+ assert !@cc.expired?, "PgCreditcard is expired when it is not"
54
+ end
55
+
56
+ def test_return_true_if_expired
57
+ @cc = PgCreditcard.new(
58
+ :name => "Homer Simpsons",
59
+ :number => "4111111111111111",
60
+ :month => "03",
61
+ :year => "10",
62
+ :cvv => "123"
63
+ )
64
+ assert @cc.expired?, "PgCreditcard is not expired when it should be expired"
65
+ end
66
+
67
+ def test_return_false_if_invalid_credit_card
68
+ @cc = PgCreditcard.new(
69
+ :name => "Homer Simpsons",
70
+ :number => "4111111111111110",
71
+ :month => "03",
72
+ :year => "20",
73
+ :cvv => "123"
74
+ )
75
+ assert !@cc.valid?, "PgCreditcard is valid when credit card number is invalid"
76
+ end
77
+
78
+ def test_return_true_if_valid_credit_card
79
+ @cc = PgCreditcard.new(
80
+ :name => "Homer Simpsons",
81
+ :number => "4111111111111111",
82
+ :month => "03",
83
+ :year => "10",
84
+ :cvv => "123"
85
+ )
86
+ assert @cc.valid?, "PgCreditcard is invalid when credit card number is valid"
87
+ end
88
+
89
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pg_creditcard
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Simon Chiu
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-11-16 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: creditcard
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ prerelease: false
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: shoulda
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 0
42
+ version: "0"
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: &id003 !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 1
55
+ - 0
56
+ - 0
57
+ version: 1.0.0
58
+ type: :development
59
+ prerelease: false
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: jeweler
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 1
70
+ - 5
71
+ - 1
72
+ version: 1.5.1
73
+ type: :development
74
+ prerelease: false
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: rcov
78
+ requirement: &id005 !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: *id005
89
+ description: Dependency library for handling Psigate's credit card object
90
+ email: skhchiu@gmail.com
91
+ executables: []
92
+
93
+ extensions: []
94
+
95
+ extra_rdoc_files:
96
+ - LICENSE.txt
97
+ - README.rdoc
98
+ files:
99
+ - .document
100
+ - Gemfile
101
+ - Gemfile.lock
102
+ - LICENSE.txt
103
+ - README.rdoc
104
+ - Rakefile
105
+ - VERSION
106
+ - lib/pg_creditcard.rb
107
+ - pg_creditcard.gemspec
108
+ - test/helper.rb
109
+ - test/test_pg_creditcard.rb
110
+ has_rdoc: true
111
+ homepage: http://github.com/drchiu/pg_creditcard
112
+ licenses:
113
+ - MIT
114
+ post_install_message:
115
+ rdoc_options: []
116
+
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ hash: -2042770674871042204
125
+ segments:
126
+ - 0
127
+ version: "0"
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ segments:
134
+ - 0
135
+ version: "0"
136
+ requirements: []
137
+
138
+ rubyforge_project:
139
+ rubygems_version: 1.3.7
140
+ signing_key:
141
+ specification_version: 3
142
+ summary: Dependency library for handling Psigate's credit card object
143
+ test_files:
144
+ - test/helper.rb
145
+ - test/test_pg_creditcard.rb