spreedly_core 0.0.3 → 0.0.4
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.
@@ -45,13 +45,13 @@ module SpreedlyCore
|
|
45
45
|
end
|
46
46
|
|
47
47
|
# Make a purchase against the payment method
|
48
|
-
def purchase(amount, currency=
|
49
|
-
purchase_or_authorize(:purchase, amount, currency, _gateway_token)
|
48
|
+
def purchase(amount, currency=nil, _gateway_token=nil, ip_address=nil)
|
49
|
+
purchase_or_authorize(:purchase, amount, currency, _gateway_token, ip_address)
|
50
50
|
end
|
51
51
|
|
52
52
|
# Make an authorize against payment method. You can then later capture against the authorize
|
53
|
-
def authorize(amount, currency=
|
54
|
-
purchase_or_authorize(:authorize, amount, currency, _gateway_token)
|
53
|
+
def authorize(amount, currency=nil, _gateway_token=nil, ip_address=nil)
|
54
|
+
purchase_or_authorize(:authorize, amount, currency, _gateway_token, ip_address)
|
55
55
|
end
|
56
56
|
|
57
57
|
# Returns the URL that CC data should be submitted to.
|
@@ -85,18 +85,22 @@ module SpreedlyCore
|
|
85
85
|
@errors = @errors.sort
|
86
86
|
end
|
87
87
|
|
88
|
-
def purchase_or_authorize(tran_type, amount, currency, _gateway_token)
|
88
|
+
def purchase_or_authorize(tran_type, amount, currency, _gateway_token, ip_address)
|
89
89
|
transaction_type = tran_type.to_s
|
90
90
|
raise "Unknown transaction type" unless %w{purchase authorize}.include?(transaction_type)
|
91
91
|
|
92
|
+
currency ||= "USD"
|
92
93
|
_gateway_token ||= self.class.gateway_token
|
93
94
|
path = "/gateways/#{_gateway_token}/#{transaction_type}.xml"
|
94
|
-
data = {
|
95
|
-
|
95
|
+
data = {
|
96
|
+
:transaction => {
|
96
97
|
:transaction_type => transaction_type,
|
97
98
|
:payment_method_token => token,
|
98
|
-
:
|
99
|
-
|
99
|
+
:amount => amount,
|
100
|
+
:currency_code => currency,
|
101
|
+
:ip => ip_address
|
102
|
+
}
|
103
|
+
}
|
100
104
|
self.class.verify_post(path, :body => data) do |response|
|
101
105
|
klass = SpreedlyCore.const_get("#{transaction_type.capitalize}Transaction")
|
102
106
|
klass.new(response.parsed_response["transaction"])
|
@@ -46,19 +46,21 @@ module SpreedlyCore
|
|
46
46
|
module NullifiableTransaction
|
47
47
|
# Void is used to cancel out authorizations and, with some gateways, to
|
48
48
|
# cancel actual payment transactions within the first 24 hours
|
49
|
-
def void
|
50
|
-
|
49
|
+
def void(ip_address=nil)
|
50
|
+
body = {:transaction => {:ip => ip_address}}
|
51
|
+
self.class.verify_post("/transactions/#{token}/void.xml",
|
52
|
+
:body => body) do |response|
|
51
53
|
VoidedTransaction.new(response.parsed_response["transaction"])
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
55
57
|
# Credit amount. If amount is nil, then credit the entire previous purchase
|
56
58
|
# or captured amount
|
57
|
-
def credit(amount=nil)
|
59
|
+
def credit(amount=nil, ip_address=nil)
|
58
60
|
body = if amount.nil?
|
59
|
-
{}
|
61
|
+
{:ip => ip_address}
|
60
62
|
else
|
61
|
-
{:transaction => {:amount => amount}}
|
63
|
+
{:transaction => {:amount => amount, :ip => ip_address}}
|
62
64
|
end
|
63
65
|
self.class.verify_post("/transactions/#{token}/credit.xml",
|
64
66
|
:body => body) do |response|
|
@@ -67,7 +69,13 @@ module SpreedlyCore
|
|
67
69
|
end
|
68
70
|
end
|
69
71
|
|
72
|
+
module HasIpAddress
|
73
|
+
attr_reader :ip
|
74
|
+
end
|
75
|
+
|
70
76
|
class AuthorizeTransaction < Transaction
|
77
|
+
include HasIpAddress
|
78
|
+
|
71
79
|
handles "Authorization"
|
72
80
|
attr_reader :payment_method
|
73
81
|
|
@@ -81,11 +89,11 @@ module SpreedlyCore
|
|
81
89
|
# captured amount will the amount from the original authorization. Some
|
82
90
|
# gateways support partial captures which can be done by specifiying an
|
83
91
|
# amount
|
84
|
-
def capture(amount=nil)
|
92
|
+
def capture(amount=nil, ip_address=nil)
|
85
93
|
body = if amount.nil?
|
86
94
|
{}
|
87
95
|
else
|
88
|
-
{:transaction => {:amount => amount}}
|
96
|
+
{:transaction => {:amount => amount, :ip => ip_address}}
|
89
97
|
end
|
90
98
|
self.class.verify_post("/transactions/#{token}/capture.xml",
|
91
99
|
:body => body) do |response|
|
@@ -96,6 +104,7 @@ module SpreedlyCore
|
|
96
104
|
|
97
105
|
class PurchaseTransaction < Transaction
|
98
106
|
include NullifiableTransaction
|
107
|
+
include HasIpAddress
|
99
108
|
|
100
109
|
handles "Purchase"
|
101
110
|
attr_reader :payment_method
|
@@ -109,17 +118,22 @@ module SpreedlyCore
|
|
109
118
|
|
110
119
|
class CaptureTransaction < Transaction
|
111
120
|
include NullifiableTransaction
|
112
|
-
|
121
|
+
include HasIpAddress
|
122
|
+
|
113
123
|
handles "Capture"
|
114
124
|
attr_reader :reference_token
|
115
125
|
end
|
116
126
|
|
117
127
|
class VoidedTransaction < Transaction
|
128
|
+
include HasIpAddress
|
129
|
+
|
118
130
|
handles "Void"
|
119
131
|
attr_reader :reference_token
|
120
132
|
end
|
121
133
|
|
122
134
|
class CreditTransaction < Transaction
|
135
|
+
include HasIpAddress
|
136
|
+
|
123
137
|
handles "Credit"
|
124
138
|
attr_reader :reference_token
|
125
139
|
end
|
data/test/spreedly_core_test.rb
CHANGED
@@ -18,12 +18,13 @@ class SpreedlyCoreTest < Test::Unit::TestCase
|
|
18
18
|
payment_method
|
19
19
|
end
|
20
20
|
|
21
|
-
def given_a_purchase(purchase_amount=100)
|
21
|
+
def given_a_purchase(purchase_amount=100, ip_address='127.0.0.1')
|
22
22
|
payment_method = given_a_payment_method
|
23
|
-
assert transaction = payment_method.purchase(purchase_amount)
|
23
|
+
assert transaction = payment_method.purchase(purchase_amount, nil, nil, ip_address=nil)
|
24
24
|
assert_equal purchase_amount, transaction.amount
|
25
25
|
assert_equal "USD", transaction.currency_code
|
26
26
|
assert_equal "Purchase", transaction.transaction_type
|
27
|
+
assert_equal ip_address, transaction.ip
|
27
28
|
assert transaction.succeeded?
|
28
29
|
transaction
|
29
30
|
end
|
@@ -46,55 +47,60 @@ class SpreedlyCoreTest < Test::Unit::TestCase
|
|
46
47
|
transaction
|
47
48
|
end
|
48
49
|
|
49
|
-
def given_an_authorized_transaction(amount=100)
|
50
|
+
def given_an_authorized_transaction(amount=100, ip_address='127.0.0.1')
|
50
51
|
payment_method = given_a_payment_method
|
51
|
-
assert transaction = payment_method.authorize(100)
|
52
|
+
assert transaction = payment_method.authorize(100, nil, nil, ip_address)
|
52
53
|
assert_equal 100, transaction.amount
|
53
54
|
assert_equal "USD", transaction.currency_code
|
55
|
+
assert_equal ip_address, transaction.ip
|
54
56
|
assert_equal SpreedlyCore::AuthorizeTransaction, transaction.class
|
55
57
|
transaction
|
56
58
|
end
|
57
59
|
|
58
|
-
def given_a_capture(amount=100)
|
59
|
-
transaction = given_an_authorized_transaction
|
60
|
-
capture = transaction.capture(amount)
|
60
|
+
def given_a_capture(amount=100, ip_address='127.0.0.1')
|
61
|
+
transaction = given_an_authorized_transaction(amount, ip_address)
|
62
|
+
capture = transaction.capture(amount, ip_address)
|
61
63
|
assert capture.succeeded?
|
62
64
|
assert_equal amount, capture.amount
|
63
65
|
assert_equal "Capture", capture.transaction_type
|
66
|
+
assert_equal ip_address, capture.ip
|
64
67
|
assert_equal SpreedlyCore::CaptureTransaction, capture.class
|
65
68
|
capture
|
66
69
|
end
|
67
70
|
|
68
|
-
def given_a_purchase_void
|
71
|
+
def given_a_purchase_void(ip_address='127.0.0.1')
|
69
72
|
purchase = given_a_purchase
|
70
|
-
assert void = purchase.void
|
73
|
+
assert void = purchase.void(ip_address)
|
71
74
|
assert_equal purchase.token, void.reference_token
|
75
|
+
assert_equal ip_address, void.ip
|
72
76
|
assert void.succeeded?
|
73
77
|
void
|
74
78
|
end
|
75
79
|
|
76
|
-
def given_a_capture_void
|
80
|
+
def given_a_capture_void(ip_address='127.0.0.1')
|
77
81
|
capture = given_a_capture
|
78
|
-
assert void = capture.void
|
82
|
+
assert void = capture.void(ip_address)
|
79
83
|
assert_equal capture.token, void.reference_token
|
84
|
+
assert_equal ip_address, void.ip
|
80
85
|
assert void.succeeded?
|
81
86
|
void
|
82
87
|
end
|
83
88
|
|
84
|
-
def given_a_purchase_credit(purchase_amount=100, credit_amount=100)
|
85
|
-
purchase = given_a_purchase(purchase_amount)
|
86
|
-
given_a_credit(purchase, credit_amount)
|
89
|
+
def given_a_purchase_credit(purchase_amount=100, credit_amount=100, ip_address='127.0.0.1')
|
90
|
+
purchase = given_a_purchase(purchase_amount, ip_address)
|
91
|
+
given_a_credit(purchase, credit_amount, ip_address)
|
87
92
|
end
|
88
93
|
|
89
|
-
def given_a_capture_credit(capture_amount=100, credit_amount=100)
|
90
|
-
capture = given_a_capture(capture_amount)
|
91
|
-
given_a_credit(capture, credit_amount)
|
94
|
+
def given_a_capture_credit(capture_amount=100, credit_amount=100, ip_address='127.0.0.1')
|
95
|
+
capture = given_a_capture(capture_amount, ip_address)
|
96
|
+
given_a_credit(capture, credit_amount, ip_address)
|
92
97
|
end
|
93
98
|
|
94
|
-
def given_a_credit(trans, credit_amount=100)
|
95
|
-
assert credit = trans.credit(credit_amount)
|
99
|
+
def given_a_credit(trans, credit_amount=100, ip_address='127.0.0.1')
|
100
|
+
assert credit = trans.credit(credit_amount, ip_address)
|
96
101
|
assert_equal trans.token, credit.reference_token
|
97
102
|
assert_equal credit_amount, credit.amount
|
103
|
+
assert_equal ip_address, credit.ip
|
98
104
|
assert credit.succeeded?
|
99
105
|
assert SpreedlyCore::CreditTransaction, credit.class
|
100
106
|
credit
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spreedly_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- 403 Labs
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-09-13 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|