samurai 0.2.23 → 0.2.24
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/samurai/payment_method.rb +1 -1
- data/lib/samurai/transaction.rb +1 -1
- data/lib/samurai/version.rb +1 -1
- data/spec/lib/purchase_spec.rb +68 -26
- data/spec/spec_helper.rb +33 -31
- metadata +11 -11
data/Gemfile.lock
CHANGED
@@ -38,7 +38,7 @@ class Samurai::PaymentMethod < Samurai::Base
|
|
38
38
|
def process_response_errors
|
39
39
|
if respond_to?(:messages) && self.messages
|
40
40
|
self.messages.each do |message|
|
41
|
-
self.errors.add message.context
|
41
|
+
self.errors.add message.context, message.description
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
data/lib/samurai/transaction.rb
CHANGED
@@ -70,7 +70,7 @@ class Samurai::Transaction < Samurai::Base
|
|
70
70
|
if self.processor_response && self.processor_response.messages
|
71
71
|
self.processor_response.messages.each do |message|
|
72
72
|
if message.subclass == 'error'
|
73
|
-
self.errors.add message.context
|
73
|
+
self.errors.add message.context, message.description
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
data/lib/samurai/version.rb
CHANGED
data/spec/lib/purchase_spec.rb
CHANGED
@@ -2,39 +2,81 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe "processing purchases" do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
it "should process successfully" do
|
11
|
-
@purchase.processor_response.success.should be_true
|
12
|
-
end
|
5
|
+
describe 'for a successful transaction' do
|
6
|
+
before :each do
|
7
|
+
@payment_method_token = create_payment_method(default_payment_method_params)[:payment_method_token]
|
8
|
+
@purchase = Samurai::Processor.purchase(@payment_method_token, 1.0, :billing_reference=>rand(1000))
|
9
|
+
end
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
it "should process successfully" do
|
12
|
+
@purchase.processor_response.success.should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be able to void a recent purchase" do
|
16
|
+
void = @purchase.void
|
17
|
+
void.processor_response.success.should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should not be able to credit a recent purchase" do
|
21
|
+
credit = @purchase.credit
|
22
|
+
credit.processor_response.success.should be_false
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should be able to reverse a recent purchase" do
|
26
|
+
reverse = @purchase.reverse
|
27
|
+
reverse.processor_response.success.should be_true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should be able to reverse a settled purchase" do
|
31
|
+
pending "currently we cannot force settle a purchase, so can't test this properly"
|
32
|
+
reverse = @purchase.reverse
|
33
|
+
reverse.processor_response.success.should be_true
|
34
|
+
end
|
18
35
|
|
19
|
-
|
20
|
-
|
21
|
-
|
36
|
+
it "should be able to credit a settled purchase" do
|
37
|
+
pending "currently we cannot force settle a purchase, so can't test this properly"
|
38
|
+
credit = @purchase.credit
|
39
|
+
credit.processor_response.success.should be_true
|
40
|
+
end
|
22
41
|
end
|
23
42
|
|
24
|
-
|
25
|
-
|
26
|
-
|
43
|
+
describe 'for a declined transaction' do
|
44
|
+
before :each do
|
45
|
+
@payment_method_token = create_payment_method(default_payment_method_params)[:payment_method_token]
|
46
|
+
@purchase = Samurai::Processor.purchase(@payment_method_token, 1.02)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should process" do
|
50
|
+
@purchase.processor_response.success.should be_false
|
51
|
+
[@purchase.errors['processor.transaction']].flatten.first.should == 'The card was declined.'
|
52
|
+
end
|
27
53
|
end
|
28
54
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
55
|
+
|
56
|
+
describe 'for a invalid card number transaction' do
|
57
|
+
before :each do
|
58
|
+
@payment_method_token = create_payment_method(default_payment_method_params)[:payment_method_token]
|
59
|
+
@purchase = Samurai::Processor.purchase(@payment_method_token, 1.07)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should process" do
|
63
|
+
@purchase.processor_response.success.should be_false
|
64
|
+
[@purchase.errors['input.card_number']].flatten.first.should == 'The card number was invalid.'
|
65
|
+
end
|
33
66
|
end
|
34
67
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
68
|
+
describe 'for a expired card transaction' do
|
69
|
+
before :each do
|
70
|
+
@payment_method_token = create_payment_method(default_payment_method_params)[:payment_method_token]
|
71
|
+
@purchase = Samurai::Processor.purchase(@payment_method_token, 1.08)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should process" do
|
75
|
+
@purchase.processor_response.success.should be_false
|
76
|
+
[@purchase.errors['input.expiry_month']].flatten.first.should == 'The expiration date month was invalid, or prior to today.'
|
77
|
+
[@purchase.errors['input.expiry_year']].flatten.first.should == 'The expiration date year was invalid, or prior to today.'
|
78
|
+
end
|
39
79
|
end
|
80
|
+
|
81
|
+
|
40
82
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -38,41 +38,43 @@ Samurai.options = {
|
|
38
38
|
require 'logger'
|
39
39
|
ActiveResource::Base.logger = Logger.new(STDOUT)
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
41
|
+
if [ActiveResource::VERSION::MAJOR, ActiveResource::VERSION::MINOR].compact.join('.').to_f >= 3.0
|
42
|
+
module ActiveResource
|
43
|
+
class Connection
|
44
|
+
private
|
45
|
+
# Makes a request to the remote service.
|
46
|
+
def request(method, path, *arguments)
|
47
|
+
result = ActiveSupport::Notifications.instrument("request.active_resource") do |payload|
|
48
|
+
payload[:method] = method
|
49
|
+
payload[:request_uri] = "#{site.scheme}://#{site.host}:#{site.port}#{path}"
|
50
|
+
payload[:request_arguments] = arguments
|
51
|
+
payload[:result] = http.send(method, path, *arguments)
|
52
|
+
end
|
53
|
+
handle_response(result)
|
54
|
+
rescue Timeout::Error => e
|
55
|
+
raise TimeoutError.new(e.message)
|
56
|
+
rescue OpenSSL::SSL::SSLError => e
|
57
|
+
raise SSLError.new(e.message)
|
51
58
|
end
|
52
|
-
|
53
|
-
rescue Timeout::Error => e
|
54
|
-
raise TimeoutError.new(e.message)
|
55
|
-
rescue OpenSSL::SSL::SSLError => e
|
56
|
-
raise SSLError.new(e.message)
|
57
|
-
end
|
59
|
+
end
|
58
60
|
end
|
59
|
-
end
|
60
61
|
|
61
|
-
module ActiveResource
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
62
|
+
module ActiveResource
|
63
|
+
class VerboseLogSubscriber < ActiveSupport::LogSubscriber
|
64
|
+
def request(event)
|
65
|
+
result = event.payload[:result]
|
66
|
+
info "#{event.payload[:method].to_s.upcase} #{event.payload[:request_uri]}"
|
67
|
+
event.payload[:request_arguments].each {|s| debug s }
|
68
|
+
info "--> %d %s %d (%.1fms)" % [result.code, result.message, result.body.to_s.length, event.duration]
|
69
|
+
debug result.body.to_s
|
70
|
+
end
|
70
71
|
|
71
|
-
|
72
|
-
|
72
|
+
def logger
|
73
|
+
ActiveResource::Base.logger
|
74
|
+
end
|
73
75
|
end
|
74
76
|
end
|
75
|
-
end
|
76
77
|
|
77
|
-
ActiveSupport::Notifications.unsubscribe "request.active_resource"
|
78
|
-
ActiveResource::VerboseLogSubscriber.attach_to :active_resource
|
78
|
+
ActiveSupport::Notifications.unsubscribe "request.active_resource"
|
79
|
+
ActiveResource::VerboseLogSubscriber.attach_to :active_resource
|
80
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: samurai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.24
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ date: 2011-11-04 00:00:00.000000000Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activeresource
|
17
|
-
requirement: &
|
17
|
+
requirement: &70345403388140 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 2.2.2
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70345403388140
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: bundler
|
28
|
-
requirement: &
|
28
|
+
requirement: &70345403387640 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 1.0.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70345403387640
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rspec
|
39
|
-
requirement: &
|
39
|
+
requirement: &70345403387140 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 2.6.0
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70345403387140
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: fakeweb
|
50
|
-
requirement: &
|
50
|
+
requirement: &70345403386760 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70345403386760
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: ruby-debug19
|
61
|
-
requirement: &
|
61
|
+
requirement: &70345403386220 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70345403386220
|
70
70
|
description: If you are an online merchant and using samurai.feefighters.com, this
|
71
71
|
gem will make your life easy. Integrate with the samurai.feefighters.com portal
|
72
72
|
and process transaction.
|