activemerchant 1.18.1 → 1.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. data.tar.gz.sig +5 -0
  2. data/CHANGELOG +15 -0
  3. data/CONTRIBUTORS +4 -0
  4. data/lib/active_merchant.rb +1 -0
  5. data/lib/active_merchant/billing/credit_card.rb +1 -1
  6. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +5 -1
  7. data/lib/active_merchant/billing/gateways/braintree_blue.rb +6 -2
  8. data/lib/active_merchant/billing/gateways/elavon.rb +2 -1
  9. data/lib/active_merchant/billing/gateways/exact.rb +5 -0
  10. data/lib/active_merchant/billing/gateways/moneris.rb +4 -0
  11. data/lib/active_merchant/billing/gateways/ogone.rb +94 -56
  12. data/lib/active_merchant/billing/gateways/orbital.rb +34 -26
  13. data/lib/active_merchant/billing/gateways/pay_junction.rb +6 -1
  14. data/lib/active_merchant/billing/gateways/samurai.rb +120 -0
  15. data/lib/active_merchant/billing/gateways/skip_jack.rb +6 -1
  16. data/lib/active_merchant/billing/gateways/usa_epay.rb +13 -184
  17. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +1496 -0
  18. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +194 -0
  19. data/lib/active_merchant/billing/integrations/dwolla.rb +2 -2
  20. data/lib/active_merchant/billing/integrations/dwolla/helper.rb +7 -4
  21. data/lib/active_merchant/billing/integrations/dwolla/notification.rb +5 -0
  22. data/lib/active_merchant/billing/integrations/helper.rb +6 -1
  23. data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +46 -4
  24. data/lib/active_merchant/billing/integrations/two_checkout.rb +1 -2
  25. data/lib/active_merchant/version.rb +1 -1
  26. metadata +66 -40
  27. metadata.gz.sig +0 -0
@@ -0,0 +1,194 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+
4
+ class UsaEpayTransactionGateway < Gateway
5
+ URL = 'https://www.usaepay.com/gate.php'
6
+
7
+ self.supported_cardtypes = [:visa, :master, :american_express]
8
+ self.supported_countries = ['US']
9
+ self.homepage_url = 'http://www.usaepay.com/'
10
+ self.display_name = 'USA ePay'
11
+
12
+ TRANSACTIONS = {
13
+ :authorization => 'authonly',
14
+ :purchase => 'sale',
15
+ :capture => 'capture'
16
+ }
17
+
18
+ def initialize(options = {})
19
+ requires!(options, :login)
20
+ @options = options
21
+ super
22
+ end
23
+
24
+ def authorize(money, credit_card, options = {})
25
+ post = {}
26
+
27
+ add_amount(post, money)
28
+ add_invoice(post, options)
29
+ add_credit_card(post, credit_card)
30
+ add_address(post, credit_card, options)
31
+ add_customer_data(post, options)
32
+
33
+ commit(:authorization, post)
34
+ end
35
+
36
+ def purchase(money, credit_card, options = {})
37
+ post = {}
38
+
39
+ add_amount(post, money)
40
+ add_invoice(post, options)
41
+ add_credit_card(post, credit_card)
42
+ add_address(post, credit_card, options)
43
+ add_customer_data(post, options)
44
+
45
+ commit(:purchase, post)
46
+ end
47
+
48
+ def capture(money, authorization, options = {})
49
+ post = {
50
+ :refNum => authorization
51
+ }
52
+
53
+ add_amount(post, money)
54
+ commit(:capture, post)
55
+ end
56
+
57
+ private
58
+
59
+ def add_amount(post, money)
60
+ post[:amount] = amount(money)
61
+ end
62
+
63
+ def expdate(credit_card)
64
+ year = format(credit_card.year, :two_digits)
65
+ month = format(credit_card.month, :two_digits)
66
+
67
+ "#{month}#{year}"
68
+ end
69
+
70
+ def add_customer_data(post, options)
71
+ address = options[:billing_address] || options[:address] || {}
72
+ post[:street] = address[:address1]
73
+ post[:zip] = address[:zip]
74
+
75
+ if options.has_key? :email
76
+ post[:custemail] = options[:email]
77
+ post[:custreceipt] = 'No'
78
+ end
79
+
80
+ if options.has_key? :customer
81
+ post[:custid] = options[:customer]
82
+ end
83
+
84
+ if options.has_key? :ip
85
+ post[:ip] = options[:ip]
86
+ end
87
+ end
88
+
89
+ def add_address(post, credit_card, options)
90
+ billing_address = options[:billing_address] || options[:address]
91
+
92
+ add_address_for_type(:billing, post, credit_card, billing_address) if billing_address
93
+ add_address_for_type(:shipping, post, credit_card, options[:shipping_address]) if options[:shipping_address]
94
+ end
95
+
96
+ def add_address_for_type(type, post, credit_card, address)
97
+ prefix = address_key_prefix(type)
98
+
99
+ post[address_key(prefix, 'fname')] = credit_card.first_name
100
+ post[address_key(prefix, 'lname')] = credit_card.last_name
101
+ post[address_key(prefix, 'company')] = address[:company] unless address[:company].blank?
102
+ post[address_key(prefix, 'street')] = address[:address1] unless address[:address1].blank?
103
+ post[address_key(prefix, 'street2')] = address[:address2] unless address[:address2].blank?
104
+ post[address_key(prefix, 'city')] = address[:city] unless address[:city].blank?
105
+ post[address_key(prefix, 'state')] = address[:state] unless address[:state].blank?
106
+ post[address_key(prefix, 'zip')] = address[:zip] unless address[:zip].blank?
107
+ post[address_key(prefix, 'country')] = address[:country] unless address[:country].blank?
108
+ post[address_key(prefix, 'phone')] = address[:phone] unless address[:phone].blank?
109
+ end
110
+
111
+ def address_key_prefix(type)
112
+ case type
113
+ when :shipping then 'ship'
114
+ when :billing then 'bill'
115
+ end
116
+ end
117
+
118
+ def address_key(prefix, key)
119
+ "#{prefix}#{key}".to_sym
120
+ end
121
+
122
+ def add_invoice(post, options)
123
+ post[:invoice] = options[:order_id]
124
+ end
125
+
126
+ def add_credit_card(post, credit_card)
127
+ post[:card] = credit_card.number
128
+ post[:cvv2] = credit_card.verification_value if credit_card.verification_value?
129
+ post[:expir] = expdate(credit_card)
130
+ post[:name] = credit_card.name
131
+ end
132
+
133
+ def parse(body)
134
+ fields = {}
135
+ for line in body.split('&')
136
+ key, value = *line.scan( %r{^(\w+)\=(.*)$} ).flatten
137
+ fields[key] = CGI.unescape(value.to_s)
138
+ end
139
+
140
+ {
141
+ :status => fields['UMstatus'],
142
+ :auth_code => fields['UMauthCode'],
143
+ :ref_num => fields['UMrefNum'],
144
+ :batch => fields['UMbatch'],
145
+ :avs_result => fields['UMavsResult'],
146
+ :avs_result_code => fields['UMavsResultCode'],
147
+ :cvv2_result => fields['UMcvv2Result'],
148
+ :cvv2_result_code => fields['UMcvv2ResultCode'],
149
+ :vpas_result_code => fields['UMvpasResultCode'],
150
+ :result => fields['UMresult'],
151
+ :error => fields['UMerror'],
152
+ :error_code => fields['UMerrorcode'],
153
+ :acs_url => fields['UMacsurl'],
154
+ :payload => fields['UMpayload']
155
+ }.delete_if{|k, v| v.nil?}
156
+ end
157
+
158
+
159
+ def commit(action, parameters)
160
+ response = parse( ssl_post(URL, post_data(action, parameters)) )
161
+
162
+ Response.new(response[:status] == 'Approved', message_from(response), response,
163
+ :test => @options[:test] || test?,
164
+ :authorization => response[:ref_num],
165
+ :cvv_result => response[:cvv2_result_code],
166
+ :avs_result => {
167
+ :street_match => response[:avs_result_code].to_s[0,1],
168
+ :postal_match => response[:avs_result_code].to_s[1,1],
169
+ :code => response[:avs_result_code].to_s[2,1]
170
+ }
171
+ )
172
+ end
173
+
174
+ def message_from(response)
175
+ if response[:status] == "Approved"
176
+ return 'Success'
177
+ else
178
+ return 'Unspecified error' if response[:error].blank?
179
+ return response[:error]
180
+ end
181
+ end
182
+
183
+ def post_data(action, parameters = {})
184
+ parameters[:command] = TRANSACTIONS[action]
185
+ parameters[:key] = @options[:login]
186
+ parameters[:software] = 'Active Merchant'
187
+ parameters[:testmode] = @options[:test] ? 1 : 0
188
+
189
+ parameters.collect { |key, value| "UM#{key}=#{CGI.escape(value.to_s)}" }.join("&")
190
+ end
191
+ end
192
+ end
193
+ end
194
+
@@ -17,11 +17,11 @@ module ActiveMerchant #:nodoc:
17
17
  mattr_accessor :service_url
18
18
  self.service_url = 'https://www.dwolla.com/payment/pay'
19
19
 
20
- def self.notification(post)
20
+ def self.notification(post, options={})
21
21
  Notification.new(post)
22
22
  end
23
23
 
24
- def self.return(query_string)
24
+ def self.return(query_string, options={})
25
25
  Return.new(query_string)
26
26
  end
27
27
  end
@@ -7,16 +7,19 @@ module ActiveMerchant #:nodoc:
7
7
  def initialize(order, account, options = {})
8
8
  super
9
9
  add_field('name', 'Store Purchase')
10
+
11
+ if ActiveMerchant::Billing::Base.integration_mode == :test || options[:test]
12
+ add_field('test', 'true')
13
+ end
10
14
  end
11
15
 
12
16
  # Replace with the real mapping
13
- mapping :credential1, 'key'
14
- mapping :credential2, 'secret'
17
+ mapping :account, 'destinationid'
18
+ mapping :credential2, 'key'
19
+ mapping :credential3, 'secret'
15
20
  mapping :notify_url, 'callback'
16
21
  mapping :return_url, 'redirect'
17
- mapping :test_mode, 'test'
18
22
  mapping :description, 'description'
19
- mapping :account, 'destinationid'
20
23
  mapping :amount, 'amount'
21
24
  mapping :tax, 'tax'
22
25
  mapping :shipping, 'shipping'
@@ -14,6 +14,10 @@ module ActiveMerchant #:nodoc:
14
14
  end
15
15
 
16
16
  def transaction_id
17
+ params['TransactionId']
18
+ end
19
+
20
+ def item_id
17
21
  params['OrderId']
18
22
  end
19
23
 
@@ -40,6 +44,7 @@ module ActiveMerchant #:nodoc:
40
44
  private
41
45
  # Take the posted data and move the relevant data into a hash
42
46
  def parse(post)
47
+ @raw = post.to_s
43
48
  json_post = JSON.parse(post)
44
49
  params.merge!(json_post)
45
50
  end
@@ -15,7 +15,8 @@ module ActiveMerchant #:nodoc:
15
15
 
16
16
  def initialize(order, account, options = {})
17
17
  options.assert_valid_keys([:amount, :currency, :test, :credential2, :credential3, :credential4, :country, :account_name])
18
- @fields = {}
18
+ @fields = {}
19
+ @test = options[:test]
19
20
  self.order = order
20
21
  self.account = account
21
22
  self.amount = options[:amount]
@@ -54,6 +55,10 @@ module ActiveMerchant #:nodoc:
54
55
  @fields
55
56
  end
56
57
 
58
+ def test?
59
+ @test_mode ||= ActiveMerchant::Billing::Base.integration_mode == :test || @test
60
+ end
61
+
57
62
  private
58
63
 
59
64
  def add_address(key, params)
@@ -3,22 +3,27 @@ module ActiveMerchant #:nodoc:
3
3
  module Integrations #:nodoc:
4
4
  module PayflowLink
5
5
  class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+ include PostsData
6
7
 
7
8
  def initialize(order, account, options = {})
8
9
  super
9
10
  add_field('login', account)
10
- add_field('type', 'S')
11
11
  add_field('echodata', 'True')
12
- add_field('user2', ActiveMerchant::Billing::Base.integration_mode == :test || options[:test])
12
+ add_field('user2', self.test?)
13
13
  add_field('invoice', order)
14
+ add_field('vendor', account)
15
+ add_field('user', options[:credential4] || account)
16
+ add_field('trxtype', 'S')
14
17
  end
15
18
 
16
- mapping :amount, 'amount'
17
19
  mapping :account, 'login'
18
- mapping :credential2, 'partner'
20
+ mapping :credential2, 'pwd'
21
+ mapping :credential3, 'partner'
19
22
  mapping :order, 'user1'
20
23
  mapping :description, 'description'
21
24
 
25
+ mapping :amount, 'amt'
26
+
22
27
 
23
28
  mapping :billing_address, :city => 'city',
24
29
  :address => 'address',
@@ -51,6 +56,43 @@ module ActiveMerchant #:nodoc:
51
56
  add_field(field, v) unless field.nil?
52
57
  end
53
58
  end
59
+
60
+ def form_fields
61
+ token, token_id = request_secure_token
62
+
63
+ {"securetoken" => token, "securetokenid" => token_id, "mode" => test? ? "test" : "live"}
64
+ end
65
+
66
+ private
67
+
68
+ def secure_token_id
69
+ @secure_token_id ||= Utils.generate_unique_id
70
+ end
71
+
72
+ def secure_token_url
73
+ test? ? "https://pilot-payflowpro.paypal.com" : "https://payflowpro.paypal.com"
74
+ end
75
+
76
+ def request_secure_token
77
+ @fields["securetokenid"] = secure_token_id
78
+ @fields["createsecuretoken"] = "Y"
79
+
80
+ fields = @fields.collect {|key, value| "#{key}[#{value.length}]=#{value}" }.join("&")
81
+
82
+ response = ssl_post(secure_token_url, fields)
83
+
84
+ parse_response(response)
85
+ end
86
+
87
+ def parse_response(response)
88
+ response = response.split("&").inject({}) do |hash, param|
89
+ key, value = param.split("=")
90
+ hash[key] = value
91
+ hash
92
+ end
93
+
94
+ [response['SECURETOKEN'], response['SECURETOKENID']] if response['RESPMSG'] && response['RESPMSG'].downcase == "approved"
95
+ end
54
96
  end
55
97
  end
56
98
  end
@@ -1,4 +1,3 @@
1
-
2
1
  module ActiveMerchant #:nodoc:
3
2
  module Billing #:nodoc:
4
3
  module Integrations #:nodoc:
@@ -8,7 +7,7 @@ module ActiveMerchant #:nodoc:
8
7
  autoload 'Notification', File.dirname(__FILE__) + '/two_checkout/notification'
9
8
 
10
9
  mattr_accessor :service_url
11
- self.service_url = 'https://www.2checkout.com/2co/buyer/purchase'
10
+ self.service_url = 'https://www.2checkout.com/checkout/purchase'
12
11
 
13
12
  def self.notification(post, options = {})
14
13
  Notification.new(post)
@@ -1,3 +1,3 @@
1
1
  module ActiveMerchant
2
- VERSION = "1.18.1"
2
+ VERSION = "1.20.0"
3
3
  end
metadata CHANGED
@@ -1,26 +1,46 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activemerchant
3
3
  version: !ruby/object:Gem::Version
4
- hash: 93
4
+ hash: 71
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 18
9
- - 1
10
- version: 1.18.1
8
+ - 20
9
+ - 0
10
+ version: 1.20.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Luetke
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain:
17
- - gem-public_cert.pem
18
- date: 2011-09-30 00:00:00 -04:00
17
+ - |
18
+ -----BEGIN CERTIFICATE-----
19
+ MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDApjb2R5
20
+ ZmF1c2VyMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNj
21
+ b20wHhcNMDcwMjIyMTcyMTI3WhcNMDgwMjIyMTcyMTI3WjBBMRMwEQYDVQQDDApj
22
+ b2R5ZmF1c2VyMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
23
+ FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6T4Iqt5iWvAlU
24
+ iXI6L8UO0URQhIC65X/gJ9hL/x4lwSl/ckVm/R/bPrJGmifT+YooFv824N3y/TIX
25
+ 25o/lZtRj1TUZJK4OCb0aVzosQVxBHSe6rLmxO8cItNTMOM9wn3thaITFrTa1DOQ
26
+ O3wqEjvW2L6VMozVfK1MfjL9IGgy0rCnl+2g4Gh4jDDpkLfnMG5CWI6cTCf3C1ye
27
+ ytOpWgi0XpOEy8nQWcFmt/KCQ/kFfzBo4QxqJi54b80842EyvzWT9OB7Oew/CXZG
28
+ F2yIHtiYxonz6N09vvSzq4CvEuisoUFLKZnktndxMEBKwJU3XeSHAbuS7ix40OKO
29
+ WKuI54fHAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
30
+ BBR9QQpefI3oDCAxiqJW/3Gg6jI6qjANBgkqhkiG9w0BAQUFAAOCAQEAs0lX26O+
31
+ HpyMp7WL+SgZuM8k76AjfOHuKajl2GEn3S8pWYGpsa0xu07HtehJhKLiavrfUYeE
32
+ qlFtyYMUyOh6/1S2vfkH6VqjX7mWjoi7XKHW/99fkMS40B5SbN+ypAUst+6c5R84
33
+ w390mjtLHpdDE6WQYhS6bFvBN53vK6jG3DLyCJc0K9uMQ7gdHWoxq7RnG92ncQpT
34
+ ThpRA+fky5Xt2Q63YJDnJpkYAz79QIama1enSnd4jslKzSl89JS2luq/zioPe/Us
35
+ hbyalWR1+HrhgPoSPq7nk+s2FQUBJ9UZFK1lgMzho/4fZgzJwbu+cO8SNuaLS/bj
36
+ hPaSTyVU0yCSnw==
37
+ -----END CERTIFICATE-----
38
+
39
+ date: 2011-11-14 00:00:00 -05:00
19
40
  default_executable:
20
41
  dependencies:
21
42
  - !ruby/object:Gem::Dependency
22
- type: :runtime
23
- requirement: &id001 !ruby/object:Gem::Requirement
43
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
44
  none: false
25
45
  requirements:
26
46
  - - ">="
@@ -32,11 +52,11 @@ dependencies:
32
52
  - 11
33
53
  version: 2.3.11
34
54
  name: activesupport
35
- version_requirements: *id001
55
+ type: :runtime
36
56
  prerelease: false
57
+ requirement: *id001
37
58
  - !ruby/object:Gem::Dependency
38
- type: :runtime
39
- requirement: &id002 !ruby/object:Gem::Requirement
59
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
60
  none: false
41
61
  requirements:
42
62
  - - ">="
@@ -46,25 +66,27 @@ dependencies:
46
66
  - 0
47
67
  version: "0"
48
68
  name: i18n
49
- version_requirements: *id002
69
+ type: :runtime
50
70
  prerelease: false
71
+ requirement: *id002
51
72
  - !ruby/object:Gem::Dependency
52
- type: :runtime
53
- requirement: &id003 !ruby/object:Gem::Requirement
73
+ version_requirements: &id003 !ruby/object:Gem::Requirement
54
74
  none: false
55
75
  requirements:
56
- - - ">="
76
+ - - <=
57
77
  - !ruby/object:Gem::Version
58
- hash: 3
78
+ hash: 25
59
79
  segments:
60
- - 0
61
- version: "0"
80
+ - 3
81
+ - 7
82
+ - 1
83
+ version: 3.7.1
62
84
  name: money
63
- version_requirements: *id003
85
+ type: :runtime
64
86
  prerelease: false
87
+ requirement: *id003
65
88
  - !ruby/object:Gem::Dependency
66
- type: :runtime
67
- requirement: &id004 !ruby/object:Gem::Requirement
89
+ version_requirements: &id004 !ruby/object:Gem::Requirement
68
90
  none: false
69
91
  requirements:
70
92
  - - ">="
@@ -76,11 +98,11 @@ dependencies:
76
98
  - 0
77
99
  version: 2.0.0
78
100
  name: builder
79
- version_requirements: *id004
101
+ type: :runtime
80
102
  prerelease: false
103
+ requirement: *id004
81
104
  - !ruby/object:Gem::Dependency
82
- type: :runtime
83
- requirement: &id005 !ruby/object:Gem::Requirement
105
+ version_requirements: &id005 !ruby/object:Gem::Requirement
84
106
  none: false
85
107
  requirements:
86
108
  - - ">="
@@ -92,11 +114,11 @@ dependencies:
92
114
  - 0
93
115
  version: 2.0.0
94
116
  name: braintree
95
- version_requirements: *id005
117
+ type: :runtime
96
118
  prerelease: false
119
+ requirement: *id005
97
120
  - !ruby/object:Gem::Dependency
98
- type: :runtime
99
- requirement: &id006 !ruby/object:Gem::Requirement
121
+ version_requirements: &id006 !ruby/object:Gem::Requirement
100
122
  none: false
101
123
  requirements:
102
124
  - - ">="
@@ -108,11 +130,11 @@ dependencies:
108
130
  - 1
109
131
  version: 1.5.1
110
132
  name: json
111
- version_requirements: *id006
133
+ type: :runtime
112
134
  prerelease: false
135
+ requirement: *id006
113
136
  - !ruby/object:Gem::Dependency
114
- type: :runtime
115
- requirement: &id007 !ruby/object:Gem::Requirement
137
+ version_requirements: &id007 !ruby/object:Gem::Requirement
116
138
  none: false
117
139
  requirements:
118
140
  - - ">="
@@ -124,11 +146,11 @@ dependencies:
124
146
  - 1
125
147
  version: 1.0.1
126
148
  name: active_utils
127
- version_requirements: *id007
149
+ type: :runtime
128
150
  prerelease: false
151
+ requirement: *id007
129
152
  - !ruby/object:Gem::Dependency
130
- type: :development
131
- requirement: &id008 !ruby/object:Gem::Requirement
153
+ version_requirements: &id008 !ruby/object:Gem::Requirement
132
154
  none: false
133
155
  requirements:
134
156
  - - ">="
@@ -138,11 +160,11 @@ dependencies:
138
160
  - 0
139
161
  version: "0"
140
162
  name: rake
141
- version_requirements: *id008
163
+ type: :development
142
164
  prerelease: false
165
+ requirement: *id008
143
166
  - !ruby/object:Gem::Dependency
144
- type: :development
145
- requirement: &id009 !ruby/object:Gem::Requirement
167
+ version_requirements: &id009 !ruby/object:Gem::Requirement
146
168
  none: false
147
169
  requirements:
148
170
  - - ">="
@@ -152,11 +174,11 @@ dependencies:
152
174
  - 0
153
175
  version: "0"
154
176
  name: mocha
155
- version_requirements: *id009
177
+ type: :development
156
178
  prerelease: false
179
+ requirement: *id009
157
180
  - !ruby/object:Gem::Dependency
158
- type: :development
159
- requirement: &id010 !ruby/object:Gem::Requirement
181
+ version_requirements: &id010 !ruby/object:Gem::Requirement
160
182
  none: false
161
183
  requirements:
162
184
  - - ">="
@@ -168,8 +190,9 @@ dependencies:
168
190
  - 11
169
191
  version: 2.3.11
170
192
  name: rails
171
- version_requirements: *id010
193
+ type: :development
172
194
  prerelease: false
195
+ requirement: *id010
173
196
  description: Active Merchant is a simple payment abstraction library used in and sponsored by Shopify. It is written by Tobias Luetke, Cody Fauser, and contributors. The aim of the project is to feel natural to Ruby users and to abstract as many parts as possible away from the user to offer a consistent interface across all supported gateways.
174
197
  email: tobi@leetsoft.com
175
198
  executables: []
@@ -270,6 +293,7 @@ files:
270
293
  - lib/active_merchant/billing/gateways/sage.rb
271
294
  - lib/active_merchant/billing/gateways/sage_pay.rb
272
295
  - lib/active_merchant/billing/gateways/sallie_mae.rb
296
+ - lib/active_merchant/billing/gateways/samurai.rb
273
297
  - lib/active_merchant/billing/gateways/secure_net.rb
274
298
  - lib/active_merchant/billing/gateways/secure_pay.rb
275
299
  - lib/active_merchant/billing/gateways/secure_pay_au.rb
@@ -281,6 +305,8 @@ files:
281
305
  - lib/active_merchant/billing/gateways/transax.rb
282
306
  - lib/active_merchant/billing/gateways/trust_commerce.rb
283
307
  - lib/active_merchant/billing/gateways/usa_epay.rb
308
+ - lib/active_merchant/billing/gateways/usa_epay_advanced.rb
309
+ - lib/active_merchant/billing/gateways/usa_epay_transaction.rb
284
310
  - lib/active_merchant/billing/gateways/verifi.rb
285
311
  - lib/active_merchant/billing/gateways/viaklix.rb
286
312
  - lib/active_merchant/billing/gateways/wirecard.rb