samurai 0.2.23 → 0.2.24
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/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.
|