samurai 0.2.2 → 0.2.3
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/.rvmrc +8 -0
- data/Gemfile.lock +53 -0
- data/README.markdown +17 -18
- data/lib/samurai.rb +3 -3
- data/lib/samurai/base.rb +1 -1
- data/lib/samurai/cacheable_by_token.rb +1 -1
- data/lib/samurai/{gateway.rb → processor.rb} +17 -17
- data/lib/samurai/transaction.rb +3 -3
- data/lib/samurai/version.rb +1 -1
- data/samurai.gemspec +8 -3
- data/test/spec/authorization_spec.rb +8 -8
- data/test/spec/{gateway_spec.rb → processor_spec.rb} +10 -10
- data/test/spec/purchase_spec.rb +5 -5
- data/test/spec_helper.rb +7 -7
- metadata +67 -91
data/.rvmrc
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
samurai (0.2.3)
|
5
|
+
activeresource (>= 2.2.2)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (3.0.9)
|
11
|
+
activesupport (= 3.0.9)
|
12
|
+
builder (~> 2.1.2)
|
13
|
+
i18n (~> 0.5.0)
|
14
|
+
activeresource (3.0.9)
|
15
|
+
activemodel (= 3.0.9)
|
16
|
+
activesupport (= 3.0.9)
|
17
|
+
activesupport (3.0.9)
|
18
|
+
archive-tar-minitar (0.5.2)
|
19
|
+
builder (2.1.2)
|
20
|
+
columnize (0.3.4)
|
21
|
+
diff-lcs (1.1.2)
|
22
|
+
fakeweb (1.3.0)
|
23
|
+
i18n (0.5.0)
|
24
|
+
linecache19 (0.5.12)
|
25
|
+
ruby_core_source (>= 0.1.4)
|
26
|
+
rspec (2.6.0)
|
27
|
+
rspec-core (~> 2.6.0)
|
28
|
+
rspec-expectations (~> 2.6.0)
|
29
|
+
rspec-mocks (~> 2.6.0)
|
30
|
+
rspec-core (2.6.4)
|
31
|
+
rspec-expectations (2.6.0)
|
32
|
+
diff-lcs (~> 1.1.2)
|
33
|
+
rspec-mocks (2.6.0)
|
34
|
+
ruby-debug-base19 (0.11.25)
|
35
|
+
columnize (>= 0.3.1)
|
36
|
+
linecache19 (>= 0.5.11)
|
37
|
+
ruby_core_source (>= 0.1.4)
|
38
|
+
ruby-debug19 (0.11.6)
|
39
|
+
columnize (>= 0.3.1)
|
40
|
+
linecache19 (>= 0.5.11)
|
41
|
+
ruby-debug-base19 (>= 0.11.19)
|
42
|
+
ruby_core_source (0.1.5)
|
43
|
+
archive-tar-minitar (>= 0.5.2)
|
44
|
+
|
45
|
+
PLATFORMS
|
46
|
+
ruby
|
47
|
+
|
48
|
+
DEPENDENCIES
|
49
|
+
bundler (>= 1.0.0)
|
50
|
+
fakeweb
|
51
|
+
rspec (>= 2.6.0)
|
52
|
+
ruby-debug19
|
53
|
+
samurai!
|
data/README.markdown
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
Samurai
|
2
2
|
=======
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
application to track a few identifying tokens with your.
|
4
|
+
If you are an online merchant and using samurai.feefighers.com, this gem will
|
5
|
+
make your life easy. Integrate with the samuari.feefighters.com portal and
|
6
|
+
process transactions.
|
8
7
|
|
9
8
|
|
10
9
|
Installation
|
@@ -37,14 +36,14 @@ it. Typically this belongs in your environment.rb file or it's own initializer.
|
|
37
36
|
Samurai.options = {
|
38
37
|
:merchant_key => 'your_merchant_key',
|
39
38
|
:merchant_password => 'your_merchant_password',
|
40
|
-
:
|
39
|
+
:processor_token => 'your_default_processor_token'
|
41
40
|
}
|
42
41
|
end
|
43
42
|
|
44
|
-
The :
|
45
|
-
`Samurai::
|
46
|
-
can always call `Samurai::
|
47
|
-
retrieve any of your
|
43
|
+
The :processor_token param is optional. If you set it,
|
44
|
+
`Samurai::Processor.the_processor` will return the processor with this token. You
|
45
|
+
can always call `Samurai::Processor.find('an_arbitrary_processor_token')` to
|
46
|
+
retrieve any of your processors.
|
48
47
|
|
49
48
|
|
50
49
|
Payment Methods
|
@@ -58,7 +57,7 @@ in Samurai.
|
|
58
57
|
To let your customers create a Payment Method, place a credit card
|
59
58
|
entry form on your site like the one below.
|
60
59
|
|
61
|
-
<form action="https://
|
60
|
+
<form action="https://samurai.feefighters.com/v1/payment_methods" method="POST">
|
62
61
|
<fieldset>
|
63
62
|
<input name="redirect_url" type="hidden" value="http://yourdomain.com/anywhere" />
|
64
63
|
<input name="merchant_key" type="hidden" value="[Your Merchant Key]" />
|
@@ -166,18 +165,18 @@ transaction.
|
|
166
165
|
### Purchases and Authorizations
|
167
166
|
|
168
167
|
When you want to start to process a new purchase or authorization on a payment
|
169
|
-
method, Samurai needs to know which of your
|
170
|
-
initiate a purchase (if your
|
171
|
-
a
|
168
|
+
method, Samurai needs to know which of your processors you want to use. You can
|
169
|
+
initiate a purchase (if your processor supports it) or an authorization against
|
170
|
+
a processor by:
|
172
171
|
|
173
|
-
|
174
|
-
|
175
|
-
purchase =
|
172
|
+
processor = Samurai::Processor.the_processor # if you set Samurai.options[:processor_token]
|
173
|
+
processor = Samurai::Processor.find('a_processor_token') # if you have multiple processors
|
174
|
+
purchase = processor.purchase(payment_method_token, amount, options)
|
176
175
|
purchase_reference_id = purchase.reference_id # save this value, you can find the transaction with it later
|
177
176
|
|
178
177
|
An authorization is created the same way:
|
179
178
|
|
180
|
-
authorization =
|
179
|
+
authorization = processor.authorize(payment_method_token, amount, options)
|
181
180
|
authorization_reference_id = authorization.reference_id # save this value, you can find the transaction with it later
|
182
181
|
|
183
182
|
You can specify options for either transaction type. Options is a hash that may contain:
|
@@ -185,7 +184,7 @@ You can specify options for either transaction type. Options is a hash that may
|
|
185
184
|
* descriptor: a string description of the charge
|
186
185
|
* billing_reference: a string reference for the transaction
|
187
186
|
* customer_reference: a string that identifies the customer to your application
|
188
|
-
* custom: a custom value that Samurai will store but not forward to the
|
187
|
+
* custom: a custom value that Samurai will store but not forward to the processor
|
189
188
|
|
190
189
|
### Capturing an Authorization
|
191
190
|
|
data/lib/samurai.rb
CHANGED
@@ -18,8 +18,8 @@ module Samurai
|
|
18
18
|
@@options[:merchant_password]
|
19
19
|
end
|
20
20
|
|
21
|
-
def self.
|
22
|
-
@@options[:
|
21
|
+
def self.processor_token # ::nodoc::
|
22
|
+
@@options[:processor_token]
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.options
|
@@ -35,7 +35,7 @@ end
|
|
35
35
|
|
36
36
|
require 'samurai/cacheable_by_token'
|
37
37
|
require 'samurai/base'
|
38
|
-
require 'samurai/
|
38
|
+
require 'samurai/processor'
|
39
39
|
require 'samurai/payment_method'
|
40
40
|
require 'samurai/transaction'
|
41
41
|
require 'samurai/message'
|
data/lib/samurai/base.rb
CHANGED
@@ -4,7 +4,7 @@ module Samurai::CacheableByToken
|
|
4
4
|
# Different caching strategies can be employed to keep the data around longer:
|
5
5
|
# * class variables
|
6
6
|
# * Rails.cache
|
7
|
-
# *
|
7
|
+
# * memcached
|
8
8
|
# * redis cache
|
9
9
|
def self.included(klass)
|
10
10
|
klass.send :cattr_accessor, :cache
|
@@ -1,30 +1,30 @@
|
|
1
|
-
class Samurai::
|
1
|
+
class Samurai::Processor < Samurai::Base
|
2
2
|
|
3
|
-
# Returns the default
|
4
|
-
def self.
|
5
|
-
Samurai::
|
3
|
+
# Returns the default processor specified by Samurai.processor_token if you passed it into Samurai.setup_site.
|
4
|
+
def self.the_processor
|
5
|
+
Samurai::Processor.new(:id => Samurai.processor_token)
|
6
6
|
end
|
7
7
|
|
8
|
-
#
|
8
|
+
# Convenience method that calls the purchase method on the default processor.
|
9
9
|
def self.purchase(*args)
|
10
|
-
|
10
|
+
the_processor.purchase(*args)
|
11
11
|
end
|
12
12
|
|
13
|
-
#
|
13
|
+
# Convenience method that calls the authorize method on the default processor.
|
14
14
|
def self.authorize(*args)
|
15
|
-
|
15
|
+
the_processor.authorize(*args)
|
16
16
|
end
|
17
17
|
|
18
|
-
#
|
18
|
+
# Convenience method to authorize and capture a payment_method for a particular amount in one transaction.
|
19
19
|
# Parameters:
|
20
20
|
# +payment_method_token+:: token identifying the payment method to authorize
|
21
21
|
# +amount+:: amount to authorize
|
22
22
|
# options:: an optional has of additional values to pass in accepted values are:
|
23
23
|
# *+descriptor+:: descriptor for the transaction
|
24
|
-
# *+custom+:: custom data, this data does not get passed to the
|
25
|
-
# *+customer_reference+:: an identifier for the customer, this will appear in the
|
26
|
-
# *+billing_reference::+ an
|
27
|
-
# Returns a Samurai::Transaction containing the
|
24
|
+
# *+custom+:: custom data, this data does not get passed to the processor, it is stored within samurai.feefighters.com only
|
25
|
+
# *+customer_reference+:: an identifier for the customer, this will appear in the processor if supported
|
26
|
+
# *+billing_reference::+ an identifier for the purchase, this will appear in the processor if supported
|
27
|
+
# Returns a Samurai::Transaction containing the processor's response.
|
28
28
|
def purchase(payment_method_token, amount, options = {})
|
29
29
|
execute(:purchase, options.merge(:payment_method_token => payment_method_token, :amount => amount))
|
30
30
|
end
|
@@ -35,10 +35,10 @@ class Samurai::Gateway < Samurai::Base
|
|
35
35
|
# +amount+:: amount to authorize
|
36
36
|
# options:: an optional has of additional values to pass in accepted values are:
|
37
37
|
# *+descriptor+:: descriptor for the transaction
|
38
|
-
# *+custom+:: custom data, this data does not get passed to the
|
39
|
-
# *+customer_reference+:: an identifier for the customer, this will appear in the
|
40
|
-
# *+billing_reference::+ an
|
41
|
-
# Returns a Samurai::Transaction containing the
|
38
|
+
# *+custom+:: custom data, this data does not get passed to the processor, it is stored within samurai.feefighters.com only
|
39
|
+
# *+customer_reference+:: an identifier for the customer, this will appear in the processor if supported
|
40
|
+
# *+billing_reference::+ an identifier for the purchase, this will appear in the processor if supported
|
41
|
+
# Returns a Samurai::Transaction containing the processor's response.
|
42
42
|
def authorize(payment_method_token, amount, options = {})
|
43
43
|
execute(:authorize, options.merge(:payment_method_token => payment_method_token, :amount => amount))
|
44
44
|
end
|
data/lib/samurai/transaction.rb
CHANGED
@@ -9,13 +9,13 @@ class Samurai::Transaction < Samurai::Base
|
|
9
9
|
alias_method :token, :id
|
10
10
|
|
11
11
|
# Captures an authorization. Optionally specify an +amount+ to do a partial capture of the initial
|
12
|
-
# authorization. The default is to capture the full amount of the
|
12
|
+
# authorization. The default is to capture the full amount of the authorization.
|
13
13
|
def capture(amount = nil, options = {})
|
14
14
|
execute(:capture, {:amount => amount || self.amount}.reverse_merge(options))
|
15
15
|
end
|
16
16
|
|
17
17
|
# Void this transaction. If the transaction has not yet been captured and settled it can be voided to
|
18
|
-
# prevent any funds from
|
18
|
+
# prevent any funds from transferring.
|
19
19
|
def void(options = {})
|
20
20
|
execute(:void, options)
|
21
21
|
end
|
@@ -35,7 +35,7 @@ class Samurai::Transaction < Samurai::Base
|
|
35
35
|
Samurai::Transaction.new.load_attributes_from_response(resp)
|
36
36
|
end
|
37
37
|
|
38
|
-
# Builds an xml payload that represents the transaction data to submit to
|
38
|
+
# Builds an xml payload that represents the transaction data to submit to samurai.feefighters.com
|
39
39
|
def self.transaction_payload(options = {})
|
40
40
|
{
|
41
41
|
:amount => options[:amount],
|
data/lib/samurai/version.rb
CHANGED
data/samurai.gemspec
CHANGED
@@ -3,22 +3,27 @@ require File.expand_path("../lib/samurai/version", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "samurai"
|
6
|
-
s.version = Samurai::VERSION
|
6
|
+
s.version = Samurai::VERSION.dup
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
s.authors = ["Graeme Rouse", "Derek Zak"]
|
9
9
|
s.email = ["graeme@ubergateway.com", "derek@ubergateway.com"]
|
10
10
|
s.homepage = "http://rubygems.org/gems/samurai"
|
11
11
|
s.summary = "Integration gem for samurai.feefighters.com"
|
12
|
-
s.description = "If you are an online merchant and using samurai.
|
12
|
+
s.description = "If you are an online merchant and using samurai.feefighters.com, this gem will make your life easy. Integrate with the samurai.feefighters.com portal and process transaction."
|
13
13
|
|
14
14
|
s.required_rubygems_version = ">= 1.3.5"
|
15
15
|
# s.rubyforge_project = "samurai"
|
16
16
|
|
17
|
-
s.add_dependency "
|
17
|
+
s.add_dependency "activeresource", ">= 2.2.2"
|
18
18
|
|
19
19
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
20
20
|
s.add_development_dependency "rspec", ">= 2.6.0"
|
21
21
|
s.add_development_dependency 'fakeweb'
|
22
|
+
if RUBY_VERSION =~ /^1\.9/
|
23
|
+
s.add_development_dependency 'ruby-debug19'
|
24
|
+
else
|
25
|
+
s.add_development_dependency 'ruby-debug'
|
26
|
+
end
|
22
27
|
|
23
28
|
s.files = `git ls-files`.split("\n")
|
24
29
|
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
@@ -4,11 +4,11 @@ describe "processing authorizations" do
|
|
4
4
|
|
5
5
|
before :each do
|
6
6
|
register_transaction_response(:type => 'authorize')
|
7
|
-
@authorization = Samurai::
|
7
|
+
@authorization = Samurai::Processor.authorize(PAYMENT_METHOD_TOKEN, @@seed)
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should create a new authorization transaction" do
|
11
|
-
@authorization.
|
11
|
+
@authorization.processor_response.success.should be_true
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should find the authorization" do
|
@@ -20,27 +20,27 @@ describe "processing authorizations" do
|
|
20
20
|
it "should successfully capture" do
|
21
21
|
register_transaction_response(:method => :post, :path => "transactions/#{@authorization.id}/capture", :type => 'capture')
|
22
22
|
capture = @authorization.capture(@@seed)
|
23
|
-
capture.
|
23
|
+
capture.processor_response.success.should be_true
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should capture an authorization without specifying an amount" do
|
27
27
|
register_transaction_response(:method => :post, :path => "transactions/#{@authorization.id}/capture", :type => 'capture', :amount => @@seed)
|
28
28
|
capture = @authorization.capture
|
29
29
|
capture.amount.intern.should be_equal "#{@@seed}".intern
|
30
|
-
capture.
|
30
|
+
capture.processor_response.success.should be_true
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should partially capture an authorization" do
|
34
34
|
register_transaction_response(:method => :post, :path => "transactions/#{@authorization.id}/capture", :type => 'capture', :amount => @@seed - 1.0)
|
35
35
|
capture = @authorization.capture(@@seed - 1.0)
|
36
36
|
capture.amount.intern.should be_equal "#{@@seed - 1.0}".intern
|
37
|
-
capture.
|
37
|
+
capture.processor_response.success.should be_true
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should void an authorization" do
|
41
41
|
register_transaction_response(:method => :post, :path => "transactions/#{@authorization.id}/void", :type => 'void', :amount => @@seed)
|
42
42
|
void = @authorization.void
|
43
|
-
void.
|
43
|
+
void.processor_response.success.should be_true
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should credit an authorization for the full amount by default" do
|
@@ -48,7 +48,7 @@ describe "processing authorizations" do
|
|
48
48
|
credit = @authorization.credit
|
49
49
|
credit.amount.intern.should be_equal "#{@@seed}".intern
|
50
50
|
pending "the response is not successful since the authorization hasn't settled" do
|
51
|
-
credit.
|
51
|
+
credit.processor_response.success.should be_true
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -57,7 +57,7 @@ describe "processing authorizations" do
|
|
57
57
|
credit = @authorization.credit(@@seed - 1.0)
|
58
58
|
credit.amount.intern.should be_equal "#{@@seed - 1.0}".intern
|
59
59
|
pending "the response is not successful since the authorization hasn't settled" do
|
60
|
-
credit.
|
60
|
+
credit.processor_response.success.should be_true
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -1,37 +1,37 @@
|
|
1
1
|
require 'test/spec_helper'
|
2
2
|
|
3
|
-
describe "
|
3
|
+
describe "Processor actions" do
|
4
4
|
|
5
|
-
it "should return an empty
|
6
|
-
|
7
|
-
|
5
|
+
it "should return an empty processor" do
|
6
|
+
processor = Samurai::Processor.the_processor
|
7
|
+
processor.should_not be_nil
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should create a new purchase" do
|
11
11
|
register_transaction_response(:type => 'purchase')
|
12
12
|
|
13
|
-
purchase = Samurai::
|
14
|
-
purchase.
|
13
|
+
purchase = Samurai::Processor.purchase(PAYMENT_METHOD_TOKEN, @@seed)
|
14
|
+
purchase.processor_response.success.should be_true
|
15
15
|
# FakeWeb.last_request
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should create a new purchase with tracking data" do
|
19
19
|
register_transaction_response(:type => 'purchase')
|
20
20
|
|
21
|
-
purchase = Samurai::
|
21
|
+
purchase = Samurai::Processor.purchase(PAYMENT_METHOD_TOKEN, @@seed, {
|
22
22
|
:descriptor => "A test purchase",
|
23
23
|
:custom => "some optional custom data",
|
24
24
|
:billing_reference => "ABC123",
|
25
25
|
:customer_reference => "Customer (123)"
|
26
26
|
})
|
27
|
-
purchase.
|
27
|
+
purchase.processor_response.success.should be_true
|
28
28
|
# FakeWeb.last_request
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should create a non-new authorization" do
|
32
32
|
register_transaction_response(:type => 'authorize')
|
33
|
-
authorization = Samurai::
|
34
|
-
authorization.
|
33
|
+
authorization = Samurai::Processor.authorize(PAYMENT_METHOD_TOKEN, @@seed)
|
34
|
+
authorization.processor_response.success.should be_true
|
35
35
|
end
|
36
36
|
|
37
37
|
end
|
data/test/spec/purchase_spec.rb
CHANGED
@@ -4,30 +4,30 @@ describe "processing purchases" do
|
|
4
4
|
|
5
5
|
before :each do
|
6
6
|
register_transaction_response(:type => 'purchase')
|
7
|
-
@purchase = Samurai::
|
7
|
+
@purchase = Samurai::Processor.purchase(PAYMENT_METHOD_TOKEN, @@seed)
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should process successfully" do
|
11
|
-
@purchase.
|
11
|
+
@purchase.processor_response.success.should be_true
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should be able to void a recent purchase" do
|
15
15
|
register_transaction_response(:method => :post, :path => "transactions/#{@purchase.id}/void", :type => 'void', :success => 'false')
|
16
16
|
void = @purchase.void
|
17
|
-
void.
|
17
|
+
void.processor_response.success.should be_true
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should not be able to credit a recent purchase" do
|
21
21
|
register_transaction_response(:method => :post, :path => "transactions/#{@purchase.id}/credit", :type => 'void', :success => 'false')
|
22
22
|
credit = @purchase.credit
|
23
|
-
credit.
|
23
|
+
credit.processor_response.success.should be_false
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should be able to credit a settled purchase" do
|
27
27
|
pending "currently we cannot force settle a purchase, so can't test this properly" do
|
28
28
|
register_transaction_response(:method => :post, :path => "transactions/#{@purchase.id}/credit", :type => 'void', :success => 'false')
|
29
29
|
credit = @purchase.credit
|
30
|
-
credit.
|
30
|
+
credit.processor_response.success.should be_true
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
data/test/spec_helper.rb
CHANGED
@@ -25,7 +25,7 @@ Samurai.options = {
|
|
25
25
|
:site => SITE,
|
26
26
|
:merchant_key => ENV['merchant_key'] || 'e62c5a006cdd9908234193bc',
|
27
27
|
:merchant_password => ENV['merchant_password'] || '18e87d97b3a44b56fe07497e4812f14555db69df9e6ca16f',
|
28
|
-
:
|
28
|
+
:processor_token => ENV['processor_token'] || 'af762c3499f77c5f181650a7'
|
29
29
|
}
|
30
30
|
|
31
31
|
def register_transaction_response(options)
|
@@ -35,7 +35,7 @@ def register_transaction_response(options)
|
|
35
35
|
|
36
36
|
method = options[:method] && options[:method].to_sym || :post
|
37
37
|
type = options[:type]
|
38
|
-
path = options[:path] || "
|
38
|
+
path = options[:path] || "processors/af762c3499f77c5f181650a7/#{type}"
|
39
39
|
payment_method_token = options[:payment_method_token] || PAYMENT_METHOD_TOKEN
|
40
40
|
amount = options[:amount] || 15.00
|
41
41
|
success = options[:success].blank? ? true : options[:success]
|
@@ -47,19 +47,19 @@ def register_transaction_response(options)
|
|
47
47
|
<reference_id>3dcFjTC7LDjIjTY3nkKjBVZ8qkZ</reference_id>
|
48
48
|
<transaction_token>53VFyQKYBmN9vKfA9mHCTs79L9a</transaction_token>
|
49
49
|
<created_at type="datetime">2011-04-22T17:57:56Z</created_at>
|
50
|
-
<descriptor>Custom descriptor here if your
|
50
|
+
<descriptor>Custom descriptor here if your processor supports it.</descriptor>
|
51
51
|
<custom>Any value you like.</custom>
|
52
52
|
<transaction_type>#{type}</transaction_type>
|
53
53
|
<amount>#{amount}</amount>
|
54
54
|
<currency_code>USD</currency_code>
|
55
|
-
<
|
56
|
-
<
|
55
|
+
<processor_token>af762c3499f77c5f181650a7</processor_token>
|
56
|
+
<processor_response>
|
57
57
|
<success type="boolean">#{success}</success>
|
58
58
|
<messages type="array">
|
59
|
-
<message class="error" context="
|
59
|
+
<message class="error" context="processor.avs" key="country_not_supported" />
|
60
60
|
<message class="error" context="input.cvv" key="too_short" />
|
61
61
|
</messages>
|
62
|
-
</
|
62
|
+
</processor_response>
|
63
63
|
<payment_method>
|
64
64
|
<payment_method_token>#{payment_method_token}</payment_method_token>
|
65
65
|
<created_at type="datetime">2011-02-12T20:20:46Z</created_at>
|
metadata
CHANGED
@@ -1,149 +1,125 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: samurai
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 2
|
10
|
-
version: 0.2.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.3
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Graeme Rouse
|
14
9
|
- Derek Zak
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
date: 2011-07-20 00:00:00 -07:00
|
13
|
+
date: 2011-08-04 00:00:00.000000000 -05:00
|
20
14
|
default_executable:
|
21
|
-
dependencies:
|
22
|
-
- !ruby/object:Gem::Dependency
|
23
|
-
name:
|
24
|
-
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: activeresource
|
18
|
+
requirement: &70154627048120 !ruby/object:Gem::Requirement
|
26
19
|
none: false
|
27
|
-
requirements:
|
28
|
-
- -
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
hash: 3
|
31
|
-
segments:
|
32
|
-
- 2
|
33
|
-
- 2
|
34
|
-
- 2
|
20
|
+
requirements:
|
21
|
+
- - ! '>='
|
22
|
+
- !ruby/object:Gem::Version
|
35
23
|
version: 2.2.2
|
36
24
|
type: :runtime
|
37
|
-
version_requirements: *id001
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: bundler
|
40
25
|
prerelease: false
|
41
|
-
|
26
|
+
version_requirements: *70154627048120
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: &70154627047660 !ruby/object:Gem::Requirement
|
42
30
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
hash: 23
|
47
|
-
segments:
|
48
|
-
- 1
|
49
|
-
- 0
|
50
|
-
- 0
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
51
34
|
version: 1.0.0
|
52
35
|
type: :development
|
53
|
-
version_requirements: *id002
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
name: rspec
|
56
36
|
prerelease: false
|
57
|
-
|
37
|
+
version_requirements: *70154627047660
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: rspec
|
40
|
+
requirement: &70154627047200 !ruby/object:Gem::Requirement
|
58
41
|
none: false
|
59
|
-
requirements:
|
60
|
-
- -
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
hash: 23
|
63
|
-
segments:
|
64
|
-
- 2
|
65
|
-
- 6
|
66
|
-
- 0
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
67
45
|
version: 2.6.0
|
68
46
|
type: :development
|
69
|
-
|
70
|
-
|
47
|
+
prerelease: false
|
48
|
+
version_requirements: *70154627047200
|
49
|
+
- !ruby/object:Gem::Dependency
|
71
50
|
name: fakeweb
|
51
|
+
requirement: &70154627046820 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
type: :development
|
72
58
|
prerelease: false
|
73
|
-
|
59
|
+
version_requirements: *70154627046820
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: ruby-debug19
|
62
|
+
requirement: &70154627046320 !ruby/object:Gem::Requirement
|
74
63
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
|
79
|
-
segments:
|
80
|
-
- 0
|
81
|
-
version: "0"
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
82
68
|
type: :development
|
83
|
-
|
84
|
-
|
85
|
-
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: *70154627046320
|
71
|
+
description: If you are an online merchant and using samurai.feefighters.com, this
|
72
|
+
gem will make your life easy. Integrate with the samurai.feefighters.com portal
|
73
|
+
and process transaction.
|
74
|
+
email:
|
86
75
|
- graeme@ubergateway.com
|
87
76
|
- derek@ubergateway.com
|
88
77
|
executables: []
|
89
|
-
|
90
78
|
extensions: []
|
91
|
-
|
92
79
|
extra_rdoc_files: []
|
93
|
-
|
94
|
-
files:
|
80
|
+
files:
|
95
81
|
- .gitignore
|
82
|
+
- .rvmrc
|
96
83
|
- Gemfile
|
84
|
+
- Gemfile.lock
|
97
85
|
- README.markdown
|
98
86
|
- Rakefile
|
99
87
|
- lib/samurai.rb
|
100
88
|
- lib/samurai/base.rb
|
101
89
|
- lib/samurai/cacheable_by_token.rb
|
102
|
-
- lib/samurai/gateway.rb
|
103
90
|
- lib/samurai/message.rb
|
104
91
|
- lib/samurai/payment_method.rb
|
92
|
+
- lib/samurai/processor.rb
|
105
93
|
- lib/samurai/transaction.rb
|
106
94
|
- lib/samurai/version.rb
|
107
95
|
- samurai.gemspec
|
108
96
|
- test/spec/authorization_spec.rb
|
109
|
-
- test/spec/
|
97
|
+
- test/spec/processor_spec.rb
|
110
98
|
- test/spec/purchase_spec.rb
|
111
99
|
- test/spec_helper.rb
|
112
100
|
has_rdoc: true
|
113
101
|
homepage: http://rubygems.org/gems/samurai
|
114
102
|
licenses: []
|
115
|
-
|
116
103
|
post_install_message:
|
117
104
|
rdoc_options: []
|
118
|
-
|
119
|
-
require_paths:
|
105
|
+
require_paths:
|
120
106
|
- lib
|
121
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
108
|
none: false
|
123
|
-
requirements:
|
124
|
-
- -
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
|
127
|
-
|
128
|
-
- 0
|
129
|
-
version: "0"
|
130
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ! '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
114
|
none: false
|
132
|
-
requirements:
|
133
|
-
- -
|
134
|
-
- !ruby/object:Gem::Version
|
135
|
-
hash: 17
|
136
|
-
segments:
|
137
|
-
- 1
|
138
|
-
- 3
|
139
|
-
- 5
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
140
118
|
version: 1.3.5
|
141
119
|
requirements: []
|
142
|
-
|
143
120
|
rubyforge_project:
|
144
|
-
rubygems_version: 1.
|
121
|
+
rubygems_version: 1.6.2
|
145
122
|
signing_key:
|
146
123
|
specification_version: 3
|
147
124
|
summary: Integration gem for samurai.feefighters.com
|
148
125
|
test_files: []
|
149
|
-
|