activemerchant 1.23.0 → 1.24.0

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/CHANGELOG CHANGED
@@ -1,5 +1,15 @@
1
1
  = ActiveMerchant CHANGELOG
2
2
 
3
+ == Version 1.24.0 (June 8, 2012)
4
+
5
+ * PayPal gateway: Support for incomplete captures [mbulat]
6
+ * Moneris gateway: Add support for vault [kenzie]
7
+ * NAB Transact gateway: Add support for card descriptors [nagash]
8
+ * SagePayForm: truncate long description fields [jnormore]
9
+ * Paybox Direct: treat all response codes besides '00000' as failures
10
+ [Soleone]
11
+ * Deprecate CreditCard#type method in favor of CreditCard#brand [jduff]
12
+
3
13
  == Version 1.23.0 (May 23, 2012)
4
14
 
5
15
  * Add Litle gateway [GregDrake]
@@ -22,12 +22,12 @@ module ActiveMerchant #:nodoc:
22
22
  # * Forbrugsforeningen
23
23
  # * Laser
24
24
  #
25
- # For testing purposes, use the 'bogus' credit card type. This skips the vast majority of
25
+ # For testing purposes, use the 'bogus' credit card brand. This skips the vast majority of
26
26
  # validations, allowing you to focus on your core concerns until you're ready to be more concerned
27
27
  # with the details of particular credit cards or your gateway.
28
28
  #
29
29
  # == Testing With CreditCard
30
- # Often when testing we don't care about the particulars of a given card type. When using the 'test'
30
+ # Often when testing we don't care about the particulars of a given card brand. When using the 'test'
31
31
  # mode in your {Gateway}, there are six different valid card numbers: 1, 2, 3, 'success', 'fail',
32
32
  # and 'error'.
33
33
  #
@@ -39,7 +39,7 @@ module ActiveMerchant #:nodoc:
39
39
  # :last_name => 'Smith',
40
40
  # :month => '9',
41
41
  # :year => '2010',
42
- # :type => 'visa',
42
+ # :brand => 'visa',
43
43
  # :number => '4242424242424242'
44
44
  # )
45
45
  #
@@ -68,7 +68,7 @@ module ActiveMerchant #:nodoc:
68
68
  # @return [Integer]
69
69
  attr_accessor :year
70
70
 
71
- # Returns or sets the credit card type.
71
+ # Returns or sets the credit card brand.
72
72
  #
73
73
  # Valid card types are
74
74
  #
@@ -87,8 +87,8 @@ module ActiveMerchant #:nodoc:
87
87
  #
88
88
  # Or, if you wish to test your implementation, +'bogus'+.
89
89
  #
90
- # @return (String) the credit card type
91
- attr_accessor :type
90
+ # @return (String) the credit card brand
91
+ attr_accessor :brand
92
92
 
93
93
  # Returns or sets the first name of the card holder.
94
94
  #
@@ -112,7 +112,15 @@ module ActiveMerchant #:nodoc:
112
112
  # @return [String] the verification value
113
113
  attr_accessor :verification_value
114
114
 
115
- alias_method :brand, :type
115
+ def type
116
+ self.class.deprecated "CreditCard#type is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#brand instead."
117
+ brand
118
+ end
119
+
120
+ def type=(value)
121
+ self.class.deprecated "CreditCard#type is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#brand instead."
122
+ self.brand = value
123
+ end
116
124
 
117
125
  # Provides proxy access to an expiry date object
118
126
  #
@@ -189,9 +197,9 @@ module ActiveMerchant #:nodoc:
189
197
  validate_essential_attributes
190
198
 
191
199
  # Bogus card is pretty much for testing purposes. Lets just skip these extra tests if its used
192
- return if type == 'bogus'
200
+ return if brand == 'bogus'
193
201
 
194
- validate_card_type
202
+ validate_card_brand
195
203
  validate_card_number
196
204
  validate_verification_value
197
205
  validate_switch_or_solo_attributes
@@ -209,8 +217,8 @@ module ActiveMerchant #:nodoc:
209
217
  self.start_month = start_month.to_i unless start_month.nil?
210
218
  self.start_year = start_year.to_i unless start_year.nil?
211
219
  self.number = number.to_s.gsub(/[^\d]/, "")
212
- self.type.downcase! if type.respond_to?(:downcase)
213
- self.type = self.class.type?(number) if type.blank?
220
+ self.brand.downcase! if brand.respond_to?(:downcase)
221
+ self.brand = self.class.brand?(number) if brand.blank?
214
222
  end
215
223
 
216
224
  def validate_card_number #:nodoc:
@@ -220,16 +228,18 @@ module ActiveMerchant #:nodoc:
220
228
  errors.add :number, "is not a valid credit card number"
221
229
  end
222
230
 
223
- unless errors.on(:number) || errors.on(:type)
224
- errors.add :type, "is not the correct card type" unless CreditCard.matching_type?(number, type)
231
+ unless errors.on(:number) || errors.on(:brand)
232
+ errors.add :brand, "is not the correct card brand" unless CreditCard.matching_brand?(number, brand)
225
233
  end
226
234
  end
227
235
 
228
- def validate_card_type #:nodoc:
229
- errors.add :type, "is required" if type.blank? && number.present?
230
- errors.add :type, "is invalid" unless type.blank? || CreditCard.card_companies.keys.include?(type)
236
+ def validate_card_brand #:nodoc:
237
+ errors.add :brand, "is required" if brand.blank? && number.present?
238
+ errors.add :brand, "is invalid" unless brand.blank? || CreditCard.card_companies.keys.include?(brand)
231
239
  end
232
240
 
241
+ alias_method :validate_card_type, :validate_card_brand
242
+
233
243
  def validate_essential_attributes #:nodoc:
234
244
  errors.add :first_name, "cannot be empty" if @first_name.blank?
235
245
  errors.add :last_name, "cannot be empty" if @last_name.blank?
@@ -245,7 +255,7 @@ module ActiveMerchant #:nodoc:
245
255
  end
246
256
 
247
257
  def validate_switch_or_solo_attributes #:nodoc:
248
- if %w[switch solo].include?(type)
258
+ if %w[switch solo].include?(brand)
249
259
  unless valid_month?(@start_month) && valid_start_year?(@start_year) || valid_issue_number?(@issue_number)
250
260
  errors.add :start_month, "is invalid" unless valid_month?(@start_month)
251
261
  errors.add :start_year, "is invalid" unless valid_start_year?(@start_year)
@@ -38,8 +38,8 @@ module ActiveMerchant #:nodoc:
38
38
  end
39
39
 
40
40
  module ClassMethods
41
- # Returns true if it validates. Optionally, you can pass a card type as an argument and
42
- # make sure it is of the correct type.
41
+ # Returns true if it validates. Optionally, you can pass a card brand as an argument and
42
+ # make sure it is of the correct brand.
43
43
  #
44
44
  # References:
45
45
  # - http://perl.about.com/compute/perl/library/nosearch/P073000.htm
@@ -59,7 +59,7 @@ module ActiveMerchant #:nodoc:
59
59
  CARD_COMPANIES
60
60
  end
61
61
 
62
- # Returns a string containing the type of card from the list of known information below.
62
+ # Returns a string containing the brand of card from the list of known information below.
63
63
  # Need to check the cards in a particular order, as there is some overlap of the allowable ranges
64
64
  #--
65
65
  # TODO Refactor this method. We basically need to tighten up the Maestro Regexp.
@@ -67,12 +67,12 @@ module ActiveMerchant #:nodoc:
67
67
  # Right now the Maestro regexp overlaps with the MasterCard regexp (IIRC). If we can tighten
68
68
  # things up, we can boil this whole thing down to something like...
69
69
  #
70
- # def type?(number)
70
+ # def brand?(number)
71
71
  # return 'visa' if valid_test_mode_card_number?(number)
72
- # card_companies.find([nil]) { |type, regexp| number =~ regexp }.first.dup
72
+ # card_companies.find([nil]) { |brand, regexp| number =~ regexp }.first.dup
73
73
  # end
74
74
  #
75
- def type?(number)
75
+ def brand?(number)
76
76
  return 'bogus' if valid_test_mode_card_number?(number)
77
77
 
78
78
  card_companies.reject { |c,p| c == 'maestro' }.each do |company, pattern|
@@ -83,6 +83,11 @@ module ActiveMerchant #:nodoc:
83
83
 
84
84
  return nil
85
85
  end
86
+
87
+ def type?(number)
88
+ deprecated "CreditCard#type? is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#brand? instead."
89
+ brand?(number)
90
+ end
86
91
 
87
92
  def first_digits(number)
88
93
  number.to_s.slice(0,6)
@@ -96,9 +101,18 @@ module ActiveMerchant #:nodoc:
96
101
  "XXXX-XXXX-XXXX-#{last_digits(number)}"
97
102
  end
98
103
 
99
- # Checks to see if the calculated type matches the specified type
100
- def matching_type?(number, type)
101
- type?(number) == type
104
+ # Checks to see if the calculated brand matches the specified brand
105
+ def matching_brand?(number, brand)
106
+ brand?(number) == brand
107
+ end
108
+
109
+ def matching_type?(number, brand)
110
+ deprecated "CreditCard#matching_type? is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#matching_brand? instead."
111
+ matching_brand?(number, brand)
112
+ end
113
+
114
+ def deprecated(message)
115
+ warn(Kernel.caller[1] + message)
102
116
  end
103
117
 
104
118
  private
@@ -136,7 +136,7 @@ module ActiveMerchant #:nodoc:
136
136
  end
137
137
 
138
138
  def create_credit_card_hash(money, creditcard, options)
139
- cc_type = CARD_TYPE[creditcard.type]
139
+ cc_type = CARD_TYPE[creditcard.brand]
140
140
 
141
141
  exp_date_yr = creditcard.year.to_s()[2..3]
142
142
 
@@ -256,15 +256,15 @@ module ActiveMerchant #:nodoc:
256
256
  end
257
257
 
258
258
  def fraud_result(authorization_response)
259
- if authorization_response.respond_to?('fraudResult')
259
+ if authorization_response.respond_to?(:fraudResult)
260
260
  fraud_result = authorization_response.fraudResult
261
- if fraud_result.respond_to?('cardValidationResult')
261
+ if fraud_result.respond_to?(:cardValidationResult)
262
262
  cvv_to_pass = fraud_result.cardValidationResult
263
263
  if(cvv_to_pass == "")
264
264
  cvv_to_pass = "P"
265
265
  end
266
266
  end
267
- if fraud_result.respond_to?('avsResult')
267
+ if fraud_result.respond_to?(:avsResult)
268
268
  avs_to_pass = AVS_RESPONSE_CODE[fraud_result.avsResult]
269
269
  end
270
270
  end
@@ -31,18 +31,34 @@ module ActiveMerchant #:nodoc:
31
31
  # captured at a later date.
32
32
  #
33
33
  # Pass in +order_id+ and optionally a +customer+ parameter.
34
- def authorize(money, creditcard, options = {})
35
- debit_commit 'preauth', money, creditcard, options
34
+ def authorize(money, creditcard_or_datakey, options = {})
35
+ requires!(options, :order_id)
36
+ post = {}
37
+ add_payment_source(post, creditcard_or_datakey)
38
+ post[:amount] = amount(money)
39
+ post[:order_id] = options[:order_id]
40
+ post[:cust_id] = options[:customer]
41
+ post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
42
+ action = (post[:data_key].blank?) ? 'preauth' : 'res_preauth_cc'
43
+ commit(action, post)
36
44
  end
37
45
 
38
- # This action verifies funding on a customer's card, and readies them for
46
+ # This action verifies funding on a customer's card and readies them for
39
47
  # deposit in a merchant's account.
40
48
  #
41
49
  # Pass in <tt>order_id</tt> and optionally a <tt>customer</tt> parameter
42
- def purchase(money, creditcard, options = {})
43
- debit_commit 'purchase', money, creditcard, options
50
+ def purchase(money, creditcard_or_datakey, options = {})
51
+ requires!(options, :order_id)
52
+ post = {}
53
+ add_payment_source(post, creditcard_or_datakey)
54
+ post[:amount] = amount(money)
55
+ post[:order_id] = options[:order_id]
56
+ post[:cust_id] = options[:customer]
57
+ post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
58
+ action = (post[:data_key].blank?) ? 'purchase' : 'res_purchase_cc'
59
+ commit(action, post)
44
60
  end
45
-
61
+
46
62
  # This method retrieves locked funds from a customer's account (from a
47
63
  # PreAuth) and prepares them for deposit in a merchant's account.
48
64
  #
@@ -79,30 +95,46 @@ module ActiveMerchant #:nodoc:
79
95
  commit 'refund', crediting_params(authorization, :amount => amount(money))
80
96
  end
81
97
 
98
+ def store(credit_card, options = {})
99
+ post = {}
100
+ post[:pan] = credit_card.number
101
+ post[:expdate] = expdate(credit_card)
102
+ post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
103
+ commit('res_add_cc', post)
104
+ end
105
+
106
+ def unstore(data_key)
107
+ post = {}
108
+ post[:data_key] = data_key
109
+ commit('res_delete', post)
110
+ end
111
+
112
+ def update(data_key, credit_card, options = {})
113
+ post = {}
114
+ post[:pan] = credit_card.number
115
+ post[:expdate] = expdate(credit_card)
116
+ post[:data_key] = data_key
117
+ post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
118
+ commit('res_update_cc', post)
119
+ end
120
+
82
121
  def test?
83
122
  @options[:test] || super
84
123
  end
124
+
85
125
  private # :nodoc: all
86
126
 
87
127
  def expdate(creditcard)
88
128
  sprintf("%.4i", creditcard.year)[-2..-1] + sprintf("%.2i", creditcard.month)
89
129
  end
90
-
91
- def debit_commit(commit_type, money, creditcard, options)
92
- requires!(options, :order_id)
93
- commit(commit_type, debit_params(money, creditcard, options))
94
- end
95
-
96
- # Common params used amongst the +purchase+ and +authorization+ methods
97
- def debit_params(money, creditcard, options = {})
98
- {
99
- :order_id => options[:order_id],
100
- :cust_id => options[:customer],
101
- :amount => amount(money),
102
- :pan => creditcard.number,
103
- :expdate => expdate(creditcard),
104
- :crypt_type => options[:crypt_type] || @options[:crypt_type]
105
- }
130
+
131
+ def add_payment_source(post, source)
132
+ if source.is_a?(String)
133
+ post[:data_key] = source
134
+ else
135
+ post[:pan] = source.number
136
+ post[:expdate] = expdate(source)
137
+ end
106
138
  end
107
139
 
108
140
  # Common params used amongst the +credit+, +void+ and +capture+ methods
@@ -205,7 +237,12 @@ module ActiveMerchant #:nodoc:
205
237
  "transact" => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type],
206
238
  "Batchcloseall" => [],
207
239
  "opentotals" => [:ecr_number],
208
- "batchclose" => [:ecr_number]
240
+ "batchclose" => [:ecr_number],
241
+ "res_add_cc" => [:pan, :expdate, :crypt_type],
242
+ "res_delete" => [:data_key],
243
+ "res_update_cc" => [:data_key, :pan, :expdate, :crypt_type],
244
+ "res_purchase_cc" => [:data_key, :order_id, :cust_id, :amount, :crypt_type],
245
+ "res_preauth_cc" => [:data_key, :order_id, :cust_id, :amount, :crypt_type]
209
246
  }
210
247
  end
211
248
  end
@@ -81,6 +81,15 @@ module ActiveMerchant #:nodoc:
81
81
 
82
82
  private
83
83
 
84
+ def add_metadata(xml, options)
85
+ if options[:merchant_name] || options[:merchant_location]
86
+ xml.tag! 'metadata' do
87
+ xml.tag! 'meta', :name => 'ca_name', :value => options[:merchant_name] if options[:merchant_name]
88
+ xml.tag! 'meta', :name => 'ca_location', :value => options[:merchant_location] if options[:merchant_location]
89
+ end
90
+ end
91
+ end
92
+
84
93
  def build_purchase_request(money, credit_card, options)
85
94
  xml = Builder::XmlMarkup.new
86
95
  xml.tag! 'amount', amount(money)
@@ -93,6 +102,8 @@ module ActiveMerchant #:nodoc:
93
102
  xml.tag! 'cvv', credit_card.verification_value if credit_card.verification_value?
94
103
  end
95
104
 
105
+ add_metadata(xml, options)
106
+
96
107
  xml.target!
97
108
  end
98
109
 
@@ -228,8 +228,8 @@ module ActiveMerchant #:nodoc:
228
228
  xml.tag! 'month' , @credit_card.month
229
229
  xml.tag! 'year' , @credit_card.year
230
230
  end
231
- if type = card_type(@credit_card.type)
232
- xml.tag! 'cardType' , type
231
+ if brand = card_type(@credit_card.brand)
232
+ xml.tag! 'cardType' , brand
233
233
  end
234
234
  if @credit_card.verification_value
235
235
  xml.tag! 'cvdIndicator' , '1' # Value Provided
@@ -37,7 +37,6 @@ module ActiveMerchant #:nodoc:
37
37
 
38
38
  SUCCESS_CODES = ['00000']
39
39
  UNAVAILABILITY_CODES = ['00001', '00097', '00098']
40
- FRAUD_CODES = ['00102','00104','00134','00138','00141','00143','00157','00159']
41
40
  SUCCESS_MESSAGE = 'The transaction was approved'
42
41
  FAILURE_MESSAGE = 'The transaction failed'
43
42
 
@@ -148,7 +147,7 @@ module ActiveMerchant #:nodoc:
148
147
  :timestamp => parameters[:dateq]),
149
148
  :test => test?,
150
149
  :authorization => response[:numappel].to_s + response[:numtrans].to_s,
151
- :fraud_review => fraud_review?(response),
150
+ :fraud_review => false,
152
151
  :sent_params => parameters.delete_if{|key,value| ['porteur','dateval','cvv'].include?(key.to_s)}
153
152
  )
154
153
  end
@@ -157,10 +156,6 @@ module ActiveMerchant #:nodoc:
157
156
  SUCCESS_CODES.include?(response[:codereponse])
158
157
  end
159
158
 
160
- def fraud_review?(response)
161
- FRAUD_CODES.include?(response[:codereponse])
162
- end
163
-
164
159
  def service_unavailable?(response)
165
160
  UNAVAILABILITY_CODES.include?(response[:codereponse])
166
161
  end
@@ -291,7 +291,7 @@ module ActiveMerchant #:nodoc:
291
291
  xml.tag! 'n2:Version', API_VERSION
292
292
  xml.tag! 'AuthorizationID', authorization
293
293
  xml.tag! 'Amount', amount(money), 'currencyID' => options[:currency] || currency(money)
294
- xml.tag! 'CompleteType', 'Complete'
294
+ xml.tag! 'CompleteType', options[:complete_type] || 'Complete'
295
295
  xml.tag! 'InvoiceID', options[:order_id] unless options[:order_id].blank?
296
296
  xml.tag! 'Note', options[:description]
297
297
  end
@@ -107,7 +107,7 @@ module ActiveMerchant #:nodoc:
107
107
  def add_credit_card(post, credit_card)
108
108
 
109
109
  post[:cn] = credit_card.number
110
- post[:ct] = credit_card.type
110
+ post[:ct] = credit_card.brand
111
111
  post[:ex] = format_date(credit_card.month, credit_card.year)
112
112
  post[:cc] = credit_card.verification_value if credit_card.verification_value?
113
113
 
@@ -269,7 +269,7 @@ module ActiveMerchant #:nodoc:
269
269
  :accountHolderName => creditcard.name,
270
270
  :nameValues => [{ :name => 'CVN', :value => creditcard.verification_value }],
271
271
  :billingAddress => convert_am_address_to_vindicia(options[:billing_address] || options[:address]),
272
- :customerSpecifiedType => creditcard.type.capitalize,
272
+ :customerSpecifiedType => creditcard.brand.capitalize,
273
273
  :active => !!options[:recurring]
274
274
  }
275
275
  end
@@ -107,6 +107,8 @@ module ActiveMerchant #:nodoc:
107
107
  exact = /^[A-Z]{3}$/
108
108
  when /State$/
109
109
  exact = /^[A-Z]{2}$/
110
+ when 'Description'
111
+ value = value.truncate(100)
110
112
  else
111
113
  reject = /&+/
112
114
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveMerchant
2
- VERSION = "1.23.0"
2
+ VERSION = "1.24.0"
3
3
  end
metadata CHANGED
@@ -1,218 +1,188 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: activemerchant
3
- version: !ruby/object:Gem::Version
4
- hash: 75
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.24.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 23
9
- - 0
10
- version: 1.23.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Tobias Luetke
14
9
  autorequire:
15
10
  bindir: bin
16
- cert_chain:
17
- - |
18
- -----BEGIN CERTIFICATE-----
11
+ cert_chain:
12
+ - ! '-----BEGIN CERTIFICATE-----
13
+
19
14
  MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDApjb2R5
15
+
20
16
  ZmF1c2VyMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNj
17
+
21
18
  b20wHhcNMDcwMjIyMTcyMTI3WhcNMDgwMjIyMTcyMTI3WjBBMRMwEQYDVQQDDApj
19
+
22
20
  b2R5ZmF1c2VyMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
21
+
23
22
  FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6T4Iqt5iWvAlU
23
+
24
24
  iXI6L8UO0URQhIC65X/gJ9hL/x4lwSl/ckVm/R/bPrJGmifT+YooFv824N3y/TIX
25
+
25
26
  25o/lZtRj1TUZJK4OCb0aVzosQVxBHSe6rLmxO8cItNTMOM9wn3thaITFrTa1DOQ
27
+
26
28
  O3wqEjvW2L6VMozVfK1MfjL9IGgy0rCnl+2g4Gh4jDDpkLfnMG5CWI6cTCf3C1ye
29
+
27
30
  ytOpWgi0XpOEy8nQWcFmt/KCQ/kFfzBo4QxqJi54b80842EyvzWT9OB7Oew/CXZG
31
+
28
32
  F2yIHtiYxonz6N09vvSzq4CvEuisoUFLKZnktndxMEBKwJU3XeSHAbuS7ix40OKO
33
+
29
34
  WKuI54fHAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
35
+
30
36
  BBR9QQpefI3oDCAxiqJW/3Gg6jI6qjANBgkqhkiG9w0BAQUFAAOCAQEAs0lX26O+
37
+
31
38
  HpyMp7WL+SgZuM8k76AjfOHuKajl2GEn3S8pWYGpsa0xu07HtehJhKLiavrfUYeE
39
+
32
40
  qlFtyYMUyOh6/1S2vfkH6VqjX7mWjoi7XKHW/99fkMS40B5SbN+ypAUst+6c5R84
41
+
33
42
  w390mjtLHpdDE6WQYhS6bFvBN53vK6jG3DLyCJc0K9uMQ7gdHWoxq7RnG92ncQpT
43
+
34
44
  ThpRA+fky5Xt2Q63YJDnJpkYAz79QIama1enSnd4jslKzSl89JS2luq/zioPe/Us
45
+
35
46
  hbyalWR1+HrhgPoSPq7nk+s2FQUBJ9UZFK1lgMzho/4fZgzJwbu+cO8SNuaLS/bj
47
+
36
48
  hPaSTyVU0yCSnw==
49
+
37
50
  -----END CERTIFICATE-----
38
51
 
39
- date: 2012-05-23 00:00:00 Z
40
- dependencies:
41
- - !ruby/object:Gem::Dependency
52
+ '
53
+ date: 2012-06-08 00:00:00.000000000 Z
54
+ dependencies:
55
+ - !ruby/object:Gem::Dependency
42
56
  name: activesupport
43
- prerelease: false
44
- requirement: &id001 !ruby/object:Gem::Requirement
57
+ requirement: &2152304360 !ruby/object:Gem::Requirement
45
58
  none: false
46
- requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- hash: 21
50
- segments:
51
- - 2
52
- - 3
53
- - 11
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
54
62
  version: 2.3.11
55
63
  type: :runtime
56
- version_requirements: *id001
57
- - !ruby/object:Gem::Dependency
58
- name: i18n
59
64
  prerelease: false
60
- requirement: &id002 !ruby/object:Gem::Requirement
65
+ version_requirements: *2152304360
66
+ - !ruby/object:Gem::Dependency
67
+ name: i18n
68
+ requirement: &2152303820 !ruby/object:Gem::Requirement
61
69
  none: false
62
- requirements:
63
- - - ">="
64
- - !ruby/object:Gem::Version
65
- hash: 3
66
- segments:
67
- - 0
68
- version: "0"
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
69
74
  type: :runtime
70
- version_requirements: *id002
71
- - !ruby/object:Gem::Dependency
72
- name: money
73
75
  prerelease: false
74
- requirement: &id003 !ruby/object:Gem::Requirement
76
+ version_requirements: *2152303820
77
+ - !ruby/object:Gem::Dependency
78
+ name: money
79
+ requirement: &2152303240 !ruby/object:Gem::Requirement
75
80
  none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- hash: 3
80
- segments:
81
- - 0
82
- version: "0"
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
83
85
  type: :runtime
84
- version_requirements: *id003
85
- - !ruby/object:Gem::Dependency
86
- name: builder
87
86
  prerelease: false
88
- requirement: &id004 !ruby/object:Gem::Requirement
87
+ version_requirements: *2152303240
88
+ - !ruby/object:Gem::Dependency
89
+ name: builder
90
+ requirement: &2152302600 !ruby/object:Gem::Requirement
89
91
  none: false
90
- requirements:
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- hash: 15
94
- segments:
95
- - 2
96
- - 0
97
- - 0
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
98
95
  version: 2.0.0
99
96
  type: :runtime
100
- version_requirements: *id004
101
- - !ruby/object:Gem::Dependency
102
- name: json
103
97
  prerelease: false
104
- requirement: &id005 !ruby/object:Gem::Requirement
98
+ version_requirements: *2152302600
99
+ - !ruby/object:Gem::Dependency
100
+ name: json
101
+ requirement: &2152302000 !ruby/object:Gem::Requirement
105
102
  none: false
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- hash: 1
110
- segments:
111
- - 1
112
- - 5
113
- - 1
103
+ requirements:
104
+ - - ! '>='
105
+ - !ruby/object:Gem::Version
114
106
  version: 1.5.1
115
107
  type: :runtime
116
- version_requirements: *id005
117
- - !ruby/object:Gem::Dependency
118
- name: active_utils
119
108
  prerelease: false
120
- requirement: &id006 !ruby/object:Gem::Requirement
109
+ version_requirements: *2152302000
110
+ - !ruby/object:Gem::Dependency
111
+ name: active_utils
112
+ requirement: &2152301460 !ruby/object:Gem::Requirement
121
113
  none: false
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- hash: 19
126
- segments:
127
- - 1
128
- - 0
129
- - 2
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
130
117
  version: 1.0.2
131
118
  type: :runtime
132
- version_requirements: *id006
133
- - !ruby/object:Gem::Dependency
134
- name: nokogiri
135
119
  prerelease: false
136
- requirement: &id007 !ruby/object:Gem::Requirement
120
+ version_requirements: *2152301460
121
+ - !ruby/object:Gem::Dependency
122
+ name: nokogiri
123
+ requirement: &2152300940 !ruby/object:Gem::Requirement
137
124
  none: false
138
- requirements:
139
- - - ">="
140
- - !ruby/object:Gem::Version
141
- hash: 3
142
- segments:
143
- - 0
144
- version: "0"
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
145
129
  type: :runtime
146
- version_requirements: *id007
147
- - !ruby/object:Gem::Dependency
148
- name: rake
149
130
  prerelease: false
150
- requirement: &id008 !ruby/object:Gem::Requirement
131
+ version_requirements: *2152300940
132
+ - !ruby/object:Gem::Dependency
133
+ name: rake
134
+ requirement: &2152299940 !ruby/object:Gem::Requirement
151
135
  none: false
152
- requirements:
153
- - - ">="
154
- - !ruby/object:Gem::Version
155
- hash: 3
156
- segments:
157
- - 0
158
- version: "0"
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
159
140
  type: :development
160
- version_requirements: *id008
161
- - !ruby/object:Gem::Dependency
162
- name: mocha
163
141
  prerelease: false
164
- requirement: &id009 !ruby/object:Gem::Requirement
142
+ version_requirements: *2152299940
143
+ - !ruby/object:Gem::Dependency
144
+ name: mocha
145
+ requirement: &2152298900 !ruby/object:Gem::Requirement
165
146
  none: false
166
- requirements:
147
+ requirements:
167
148
  - - ~>
168
- - !ruby/object:Gem::Version
169
- hash: 53
170
- segments:
171
- - 0
172
- - 11
173
- - 3
149
+ - !ruby/object:Gem::Version
174
150
  version: 0.11.3
175
151
  type: :development
176
- version_requirements: *id009
177
- - !ruby/object:Gem::Dependency
178
- name: rails
179
152
  prerelease: false
180
- requirement: &id010 !ruby/object:Gem::Requirement
153
+ version_requirements: *2152298900
154
+ - !ruby/object:Gem::Dependency
155
+ name: rails
156
+ requirement: &2152298100 !ruby/object:Gem::Requirement
181
157
  none: false
182
- requirements:
183
- - - ">="
184
- - !ruby/object:Gem::Version
185
- hash: 21
186
- segments:
187
- - 2
188
- - 3
189
- - 11
158
+ requirements:
159
+ - - ! '>='
160
+ - !ruby/object:Gem::Version
190
161
  version: 2.3.11
191
162
  type: :development
192
- version_requirements: *id010
193
- - !ruby/object:Gem::Dependency
194
- name: rubigen
195
163
  prerelease: false
196
- requirement: &id011 !ruby/object:Gem::Requirement
164
+ version_requirements: *2152298100
165
+ - !ruby/object:Gem::Dependency
166
+ name: rubigen
167
+ requirement: &2160074260 !ruby/object:Gem::Requirement
197
168
  none: false
198
- requirements:
199
- - - ">="
200
- - !ruby/object:Gem::Version
201
- hash: 3
202
- segments:
203
- - 0
204
- version: "0"
169
+ requirements:
170
+ - - ! '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
205
173
  type: :development
206
- version_requirements: *id011
207
- 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
+ prerelease: false
175
+ version_requirements: *2160074260
176
+ description: Active Merchant is a simple payment abstraction library used in and sponsored
177
+ by Shopify. It is written by Tobias Luetke, Cody Fauser, and contributors. The aim
178
+ of the project is to feel natural to Ruby users and to abstract as many parts as
179
+ possible away from the user to offer a consistent interface across all supported
180
+ gateways.
208
181
  email: tobi@leetsoft.com
209
182
  executables: []
210
-
211
183
  extensions: []
212
-
213
184
  extra_rdoc_files: []
214
-
215
- files:
185
+ files:
216
186
  - CHANGELOG
217
187
  - README.md
218
188
  - MIT-LICENSE
@@ -433,36 +403,26 @@ files:
433
403
  - lib/support/outbound_hosts.rb
434
404
  homepage: http://activemerchant.org/
435
405
  licenses: []
436
-
437
406
  post_install_message:
438
407
  rdoc_options: []
439
-
440
- require_paths:
408
+ require_paths:
441
409
  - lib
442
- required_ruby_version: !ruby/object:Gem::Requirement
410
+ required_ruby_version: !ruby/object:Gem::Requirement
443
411
  none: false
444
- requirements:
445
- - - ">="
446
- - !ruby/object:Gem::Version
447
- hash: 3
448
- segments:
449
- - 0
450
- version: "0"
451
- required_rubygems_version: !ruby/object:Gem::Requirement
412
+ requirements:
413
+ - - ! '>='
414
+ - !ruby/object:Gem::Version
415
+ version: '0'
416
+ required_rubygems_version: !ruby/object:Gem::Requirement
452
417
  none: false
453
- requirements:
454
- - - ">="
455
- - !ruby/object:Gem::Version
456
- hash: 3
457
- segments:
458
- - 0
459
- version: "0"
418
+ requirements:
419
+ - - ! '>='
420
+ - !ruby/object:Gem::Version
421
+ version: '0'
460
422
  requirements: []
461
-
462
423
  rubyforge_project: activemerchant
463
- rubygems_version: 1.8.15
424
+ rubygems_version: 1.8.16
464
425
  signing_key:
465
426
  specification_version: 3
466
427
  summary: Framework and tools for dealing with credit card transactions.
467
428
  test_files: []
468
-
metadata.gz.sig CHANGED
Binary file