activemerchant 1.37.0 → 1.38.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,13 +1,25 @@
1
1
  = ActiveMerchant CHANGELOG
2
2
 
3
+ == Version 1.38.0 (September 6, 2013)
4
+
5
+ * FirstData E4: Include missing address information for AVS and CVV [melari]
6
+ * Litle: Deprecate credit method in favor of refund [melari]
7
+ * Moneris: Add verification_value support [duff]
8
+ * Webpay: Fixes issues with partial JPY currency [keikubo, melari]
9
+ * SecureNet: Add INVOICENUM and INVOICEDESC optional fields [duff]
10
+ * Balanced: Make BalancedGateway::Error inherit from ActiveMerchantError [duff]
11
+ * Balanced: Fix #void interface [duff]
12
+ * HiTrust: Return correct error message for positive retcodes [melari]
13
+ * Moving to pessimistic versioning [davefp]
14
+
15
+ == Version 1.37.0 (August 20, 2013)
16
+
3
17
  * MerchantWarrior: Fix handling of amounts [duff]
4
18
  * Ipay88: New gateway [kamal, siong1987, jduff]
5
19
  * IATS: New gateway [unkown, jduff]
6
20
  * MerchantWarrior: Send the CVV to the gateway [duff]
7
21
  * PayU: Fix a major bug with status types [melari]
8
22
  * SecureNet: Allow production transactions [duff]
9
- * Stripe: Allow a card_not_present_fee to be specified [melari]
10
-
11
23
 
12
24
  == Version 1.36.0 (August 2, 2013)
13
25
 
data/README.md CHANGED
@@ -166,7 +166,7 @@ The [ActiveMerchant Wiki](http://github.com/Shopify/active_merchant/wikis) conta
166
166
  * [SecurePayTech](http://www.securepaytech.com/) - NZ
167
167
  * [SkipJack](http://www.skipjack.com/) - US, CA
168
168
  * [Spreedly Core](https://spreedlycore.com/) - AD, AE, AT, AU, BD, BE, BG, BN, CA, CH, CY, CZ, DE, DK, EE, EG, ES, FI, FR, GB, GI, GR, HK, HU, ID, IE, IL, IM, IN, IS, IT, JO, KW, LB, LI, LK, LT, LU, LV, MC, MT, MU, MV, MX, MY, NL, NO, NZ, OM, PH, PL, PT, QA, RO, SA, SE, SG, SI, SK, SM, TR, TT, UM, US, VA, VN, ZA
169
- * [Stripe](https://stripe.com/) - US
169
+ * [Stripe](https://stripe.com/) - US, CA, GB
170
170
  * [TransFirst](http://www.transfirst.com/) - US
171
171
  * [Transnational](http://www.tnbci.com/) - US
172
172
  * [TrustCommerce](http://www.trustcommerce.com/) - US
@@ -69,7 +69,7 @@ module ActiveMerchant #:nodoc:
69
69
  self.display_name = 'Balanced'
70
70
  self.money_format = :cents
71
71
 
72
- class Error < StandardError
72
+ class Error < ActiveMerchant::ActiveMerchantError
73
73
  attr_reader :response
74
74
 
75
75
  def initialize(response, msg=nil)
@@ -210,7 +210,7 @@ module ActiveMerchant #:nodoc:
210
210
  #
211
211
  # * <tt>authorization</tt> -- The uri of the authorization returned from
212
212
  # an `authorize` request.
213
- def void(authorization)
213
+ def void(authorization, options = {})
214
214
  post = {}
215
215
  post[:is_void] = true
216
216
 
@@ -8,7 +8,7 @@ module ActiveMerchant #:nodoc:
8
8
  self.live_url = 'https://www.eway.com.au'
9
9
 
10
10
  self.money_format = :cents
11
- self.supported_countries = ['AU']
11
+ self.supported_countries = ['AU', 'NZ', 'GB']
12
12
  self.supported_cardtypes = [:visa, :master, :american_express, :diners_club]
13
13
  self.homepage_url = 'http://www.eway.com.au/'
14
14
  self.display_name = 'eWAY'
@@ -116,7 +116,7 @@ module ActiveMerchant #:nodoc:
116
116
  if credit_card_or_store_authorization.is_a? String
117
117
  add_credit_card_token(xml, credit_card_or_store_authorization)
118
118
  else
119
- add_credit_card(xml, credit_card_or_store_authorization)
119
+ add_credit_card(xml, credit_card_or_store_authorization, options)
120
120
  end
121
121
 
122
122
  add_customer_data(xml, options)
@@ -138,7 +138,7 @@ module ActiveMerchant #:nodoc:
138
138
  def build_store_request(credit_card, options)
139
139
  xml = Builder::XmlMarkup.new
140
140
 
141
- add_credit_card(xml, credit_card)
141
+ add_credit_card(xml, credit_card, options)
142
142
  add_customer_data(xml, options)
143
143
 
144
144
  xml.target!
@@ -164,12 +164,23 @@ module ActiveMerchant #:nodoc:
164
164
  xml.tag! "DollarAmount", amount(money)
165
165
  end
166
166
 
167
- def add_credit_card(xml, credit_card)
167
+ def add_credit_card(xml, credit_card, options)
168
168
  xml.tag! "Card_Number", credit_card.number
169
169
  xml.tag! "Expiry_Date", expdate(credit_card)
170
170
  xml.tag! "CardHoldersName", credit_card.name
171
171
  xml.tag! "CardType", credit_card.brand
172
172
 
173
+ add_credit_card_verification_strings(xml, credit_card, options)
174
+ end
175
+
176
+ def add_credit_card_verification_strings(xml, credit_card, options)
177
+ address = options[:billing_address] || options[:address]
178
+ if address
179
+ address_values = []
180
+ [:address1, :zip, :city, :state, :country].each { |part| address_values << address[part].to_s }
181
+ xml.tag! "VerificationStr1", address_values.join("|")
182
+ end
183
+
173
184
  if credit_card.verification_value?
174
185
  xml.tag! "CVD_Presence_Ind", "1"
175
186
  xml.tag! "VerificationStr2", credit_card.verification_value
@@ -112,11 +112,16 @@ module ActiveMerchant #:nodoc:
112
112
  end
113
113
  end
114
114
 
115
- def credit(money, identification_or_token, options = {})
116
- to_pass = build_credit_request(money, identification_or_token, options)
115
+ def refund(money, authorization, options = {})
116
+ to_pass = build_credit_request(money, authorization, options)
117
117
  build_response(:credit, @litle.credit(to_pass))
118
118
  end
119
119
 
120
+ def credit(money, authorization, options = {})
121
+ deprecated CREDIT_DEPRECATION_MESSAGE
122
+ refund(money, authorization, options)
123
+ end
124
+
120
125
  def store(creditcard_or_paypage_registration_id, options = {})
121
126
  to_pass = create_token_hash(creditcard_or_paypage_registration_id, options)
122
127
  build_response(:registerToken, @litle.register_token_request(to_pass), %w(000 801 802))
@@ -128,6 +128,7 @@ module ActiveMerchant #:nodoc:
128
128
  else
129
129
  post[:pan] = source.number
130
130
  post[:expdate] = expdate(source)
131
+ post[:cvd_value] = source.verification_value if source.verification_value?
131
132
  end
132
133
  end
133
134
 
@@ -155,6 +156,7 @@ module ActiveMerchant #:nodoc:
155
156
 
156
157
  Response.new(successful?(response), message_from(response[:message]), response,
157
158
  :test => test?,
159
+ :cvv_result => response[:cvd_result_code].try(:last),
158
160
  :authorization => authorization_from(response)
159
161
  )
160
162
  end
@@ -192,14 +194,35 @@ module ActiveMerchant #:nodoc:
192
194
  root = xml.add_element("request")
193
195
  root.add_element("store_id").text = options[:login]
194
196
  root.add_element("api_token").text = options[:password]
195
- transaction = root.add_element(action)
197
+ root.add_element(transaction_element(action, parameters))
198
+
199
+ xml.to_s
200
+ end
201
+
202
+ def transaction_element(action, parameters)
203
+ transaction = REXML::Element.new(action)
196
204
 
197
205
  # Must add the elements in the correct order
198
206
  actions[action].each do |key|
199
- transaction.add_element(key.to_s).text = parameters[key] unless parameters[key].blank?
207
+ if key == :cvd_info
208
+ transaction.add_element(cvd_element(parameters[:cvd_value]))
209
+ else
210
+ transaction.add_element(key.to_s).text = parameters[key] unless parameters[key].blank?
211
+ end
200
212
  end
201
213
 
202
- xml.to_s
214
+ transaction
215
+ end
216
+
217
+ def cvd_element(cvd_value)
218
+ element = REXML::Element.new('cvd_info')
219
+ if cvd_value
220
+ element.add_element('cvd_indicator').text = "1"
221
+ element.add_element('cvd_value').text = cvd_value
222
+ else
223
+ element.add_element('cvd_indicator').text = "0"
224
+ end
225
+ element
203
226
  end
204
227
 
205
228
  def message_from(message)
@@ -219,8 +242,8 @@ module ActiveMerchant #:nodoc:
219
242
 
220
243
  def actions
221
244
  {
222
- "purchase" => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type],
223
- "preauth" => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type],
245
+ "purchase" => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type, :cvd_info],
246
+ "preauth" => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type, :cvd_info],
224
247
  "command" => [:order_id],
225
248
  "refund" => [:order_id, :amount, :txn_number, :crypt_type],
226
249
  "indrefund" => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type],
@@ -182,8 +182,9 @@ module ActiveMerchant #:nodoc:
182
182
  end
183
183
 
184
184
  def add_invoice(xml, options)
185
- xml.tag! 'INVOICEDESC', options[:description]
186
- xml.tag! 'INVOICENUM', 'inv-8'
185
+ xml.tag! 'NOTE', options[:description] if options[:description]
186
+ xml.tag! 'INVOICEDESC', options[:invoice_description] if options[:invoice_description]
187
+ xml.tag! 'INVOICENUM', options[:invoice_number] if options[:invoice_number]
187
188
  end
188
189
 
189
190
  def add_merchant_key(xml, options)
@@ -21,7 +21,7 @@ module ActiveMerchant #:nodoc:
21
21
  'unchecked' => 'P'
22
22
  }
23
23
 
24
- self.supported_countries = ['US', 'CA']
24
+ self.supported_countries = ['US', 'CA', 'GB']
25
25
  self.default_currency = 'USD'
26
26
  self.money_format = :cents
27
27
  self.supported_cardtypes = [:visa, :master, :american_express, :discover, :jcb, :diners_club]
@@ -40,7 +40,7 @@ module ActiveMerchant #:nodoc:
40
40
  post = create_post_for_auth_or_purchase(money, creditcard, options)
41
41
  post[:capture] = "false"
42
42
 
43
- commit(:post, 'charges', post, generate_meta(options), creditcard)
43
+ commit(:post, 'charges', post, generate_meta(options))
44
44
  end
45
45
 
46
46
  # To create a charge on a card or a token, call
@@ -53,12 +53,12 @@ module ActiveMerchant #:nodoc:
53
53
  def purchase(money, creditcard, options = {})
54
54
  post = create_post_for_auth_or_purchase(money, creditcard, options)
55
55
 
56
- commit(:post, 'charges', post, generate_meta(options), creditcard)
56
+ commit(:post, 'charges', post, generate_meta(options))
57
57
  end
58
58
 
59
59
  def capture(money, authorization, options = {})
60
60
  post = {:amount => amount(money)}
61
- add_application_fee(post, nil, options)
61
+ add_application_fee(post, options)
62
62
 
63
63
  commit(:post, "charges/#{CGI.escape(authorization)}/capture", post)
64
64
  end
@@ -71,7 +71,7 @@ module ActiveMerchant #:nodoc:
71
71
  post = {:amount => amount(money)}
72
72
  commit_options = generate_meta(options)
73
73
 
74
- MultiResponse.run do |r|
74
+ MultiResponse.run(:first) do |r|
75
75
  r.process { commit(:post, "charges/#{CGI.escape(identification)}/refund", post, commit_options) }
76
76
 
77
77
  return r unless options[:refund_fee_amount]
@@ -131,7 +131,7 @@ module ActiveMerchant #:nodoc:
131
131
  add_customer_data(post,options)
132
132
  post[:description] = options[:description] || options[:email]
133
133
  add_flags(post, options)
134
- add_application_fee(post, creditcard, options)
134
+ add_application_fee(post, options)
135
135
  post
136
136
  end
137
137
 
@@ -140,25 +140,8 @@ module ActiveMerchant #:nodoc:
140
140
  post[:currency] = (options[:currency] || currency(money)).downcase
141
141
  end
142
142
 
143
- def add_application_fee(post, creditcard, options)
144
- return unless options[:application_fee]
145
- if use_card_not_present_fee?(creditcard, options)
146
- post[:application_fee] = options[:card_not_present_fee]
147
- else
148
- post[:application_fee] = options[:application_fee]
149
- end
150
- end
151
-
152
- def use_card_not_present_fee?(creditcard, options)
153
- options[:card_not_present_fee].present? && !includes_track_data?(creditcard, options)
154
- end
155
-
156
- def includes_track_data?(creditcard, options)
157
- if creditcard.respond_to?(:track_data)
158
- creditcard.track_data.present?
159
- else
160
- options[:track_data].present?
161
- end
143
+ def add_application_fee(post, options)
144
+ post[:application_fee] = options[:application_fee] if options[:application_fee]
162
145
  end
163
146
 
164
147
  def add_customer_data(post, options)
@@ -207,7 +190,7 @@ module ActiveMerchant #:nodoc:
207
190
  end
208
191
 
209
192
  def add_customer(post, options)
210
- post[:customer] = options[:customer] if options[:customer] && !post[:card]
193
+ post[:customer] = options[:customer] if options[:customer] && post[:card].blank?
211
194
  end
212
195
 
213
196
  def add_flags(post, options)
@@ -265,7 +248,7 @@ module ActiveMerchant #:nodoc:
265
248
  }
266
249
  end
267
250
 
268
- def commit(method, url, parameters=nil, options = {}, creditcard = nil)
251
+ def commit(method, url, parameters=nil, options = {})
269
252
  raw_response = response = nil
270
253
  success = false
271
254
  begin
@@ -279,8 +262,6 @@ module ActiveMerchant #:nodoc:
279
262
  response = json_error(raw_response)
280
263
  end
281
264
 
282
- response[:card_present] = includes_track_data?(creditcard, options)
283
-
284
265
  card = response["card"] || response["active_card"] || {}
285
266
  avs_code = AVS_CODE_TRANSLATOR["line1: #{card["address_line1_check"]}, zip: #{card["address_zip_check"]}"]
286
267
  cvc_code = CVC_CODE_TRANSLATOR[card["cvc_check"]]
@@ -21,10 +21,33 @@ module ActiveMerchant #:nodoc:
21
21
  raise NotImplementedError.new
22
22
  end
23
23
 
24
+ def refund(money, identification, options = {})
25
+ post = {:amount => localized_amount(money)}
26
+ commit_options = generate_meta(options)
27
+
28
+ MultiResponse.run do |r|
29
+ r.process { commit(:post, "charges/#{CGI.escape(identification)}/refund", post, commit_options) }
30
+
31
+ return r unless options[:refund_fee_amount]
32
+
33
+ r.process { fetch_application_fees(identification, commit_options) }
34
+ r.process { refund_application_fee(options[:refund_fee_amount], application_fee_from_response(r), commit_options) }
35
+ end
36
+ end
37
+
24
38
  def refund_fee(identification, options, meta)
25
39
  raise NotImplementedError.new
26
40
  end
27
41
 
42
+ def localized_amount(money, currency = self.default_currency)
43
+ non_fractional_currency?(currency) ? (amount(money).to_f / 100).floor : amount(money)
44
+ end
45
+
46
+ def add_amount(post, money, options)
47
+ post[:currency] = (options[:currency] || currency(money)).downcase
48
+ post[:amount] = localized_amount(money, post[:currency].upcase)
49
+ end
50
+
28
51
  def json_error(raw_response)
29
52
  msg = 'Invalid response received from the WebPay API. Please contact support@webpay.jp if you continue to receive this message.'
30
53
  msg += " (The raw response returned by the API was #{raw_response.inspect})"
@@ -7,10 +7,10 @@ module ActiveMerchant #:nodoc:
7
7
  CODES = { "00" => "Operation completed successfully",
8
8
  "-1" => "Unable to initialize winsock dll.",
9
9
  "-2" => "Can't create stream socket.",
10
- "-3" => "No Request Message.",
10
+ "-3" => "No Request Message.",
11
11
  "-4" => "Can't connect to server.",
12
12
  "-5" => "Send socket error.",
13
- "-6" => "Couldn't receive data.",
13
+ "-6" => "Couldn't receive data.",
14
14
  "-7" => "Receive Broken message.",
15
15
  "-8" => "Unable to initialize Envirnment.",
16
16
  "-9" => "Can't Read Server RSA File.",
@@ -52,15 +52,16 @@ module ActiveMerchant #:nodoc:
52
52
  "-308" => "Order Number already exists.",
53
53
  "positive" => "Response from Bank. Please contact with Acquirer Bank Service or HiTRUST Call Center."
54
54
  }
55
-
55
+
56
56
  def success?
57
57
  params['retcode'] == SUCCESS
58
58
  end
59
-
59
+
60
60
  def message
61
+ return CODES["positive"] if params['retcode'].to_i > 0
61
62
  CODES[ params['retcode'] ]
62
63
  end
63
- end
64
+ end
64
65
  end
65
66
  end
66
67
  end
@@ -39,14 +39,18 @@ module ActiveMerchant #:nodoc:
39
39
  end
40
40
 
41
41
  class MultiResponse < Response
42
- def self.run(&block)
43
- new.tap(&block)
42
+ def self.run(primary_response = :last, &block)
43
+ response = new.tap(&block)
44
+ response.primary_response = primary_response
45
+ response
44
46
  end
45
47
 
46
48
  attr_reader :responses
49
+ attr_writer :primary_response
47
50
 
48
51
  def initialize
49
52
  @responses = []
53
+ @primary_response = :last
50
54
  end
51
55
 
52
56
  def process
@@ -65,10 +69,14 @@ module ActiveMerchant #:nodoc:
65
69
  @responses.all?{|r| r.success?}
66
70
  end
67
71
 
72
+ def primary_response
73
+ success? && @primary_response == :first ? @responses.first : @responses.last
74
+ end
75
+
68
76
  %w(params message test authorization avs_result cvv_result test? fraud_review?).each do |m|
69
77
  class_eval %(
70
78
  def #{m}
71
- (@responses.empty? ? nil : @responses.last.#{m})
79
+ (@responses.empty? ? nil : primary_response.#{m})
72
80
  end
73
81
  )
74
82
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveMerchant
2
- VERSION = "1.37.0"
2
+ VERSION = "1.38.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activemerchant
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.37.0
4
+ version: 1.38.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -37,7 +37,7 @@ cert_chain:
37
37
  Z1BvU1BxN25rK3MyRlFVQko5VVpGSzFsZ016aG8vNGZaZ3pKd2J1K2NPOFNO
38
38
  dWFMUy9iagpoUGFTVHlWVTB5Q1Nudz09Ci0tLS0tRU5EIENFUlRJRklDQVRF
39
39
  LS0tLS0K
40
- date: 2013-08-20 00:00:00.000000000 Z
40
+ date: 2013-09-06 00:00:00.000000000 Z
41
41
  dependencies:
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: activesupport
@@ -47,6 +47,9 @@ dependencies:
47
47
  - - ! '>='
48
48
  - !ruby/object:Gem::Version
49
49
  version: 2.3.14
50
+ - - <
51
+ - !ruby/object:Gem::Version
52
+ version: 5.0.0
50
53
  type: :runtime
51
54
  prerelease: false
52
55
  version_requirements: !ruby/object:Gem::Requirement
@@ -55,38 +58,41 @@ dependencies:
55
58
  - - ! '>='
56
59
  - !ruby/object:Gem::Version
57
60
  version: 2.3.14
61
+ - - <
62
+ - !ruby/object:Gem::Version
63
+ version: 5.0.0
58
64
  - !ruby/object:Gem::Dependency
59
65
  name: i18n
60
66
  requirement: !ruby/object:Gem::Requirement
61
67
  none: false
62
68
  requirements:
63
- - - ! '>='
69
+ - - ~>
64
70
  - !ruby/object:Gem::Version
65
- version: '0'
71
+ version: '0.5'
66
72
  type: :runtime
67
73
  prerelease: false
68
74
  version_requirements: !ruby/object:Gem::Requirement
69
75
  none: false
70
76
  requirements:
71
- - - ! '>='
77
+ - - ~>
72
78
  - !ruby/object:Gem::Version
73
- version: '0'
79
+ version: '0.5'
74
80
  - !ruby/object:Gem::Dependency
75
81
  name: money
76
82
  requirement: !ruby/object:Gem::Requirement
77
83
  none: false
78
84
  requirements:
79
- - - ! '>='
85
+ - - <
80
86
  - !ruby/object:Gem::Version
81
- version: '0'
87
+ version: 6.0.0
82
88
  type: :runtime
83
89
  prerelease: false
84
90
  version_requirements: !ruby/object:Gem::Requirement
85
91
  none: false
86
92
  requirements:
87
- - - ! '>='
93
+ - - <
88
94
  - !ruby/object:Gem::Version
89
- version: '0'
95
+ version: 6.0.0
90
96
  - !ruby/object:Gem::Dependency
91
97
  name: builder
92
98
  requirement: !ruby/object:Gem::Requirement
@@ -94,7 +100,10 @@ dependencies:
94
100
  requirements:
95
101
  - - ! '>='
96
102
  - !ruby/object:Gem::Version
97
- version: 2.0.0
103
+ version: 2.1.2
104
+ - - <
105
+ - !ruby/object:Gem::Version
106
+ version: 4.0.0
98
107
  type: :runtime
99
108
  prerelease: false
100
109
  version_requirements: !ruby/object:Gem::Requirement
@@ -102,55 +111,58 @@ dependencies:
102
111
  requirements:
103
112
  - - ! '>='
104
113
  - !ruby/object:Gem::Version
105
- version: 2.0.0
114
+ version: 2.1.2
115
+ - - <
116
+ - !ruby/object:Gem::Version
117
+ version: 4.0.0
106
118
  - !ruby/object:Gem::Dependency
107
119
  name: json
108
120
  requirement: !ruby/object:Gem::Requirement
109
121
  none: false
110
122
  requirements:
111
- - - ! '>='
123
+ - - ~>
112
124
  - !ruby/object:Gem::Version
113
- version: 1.5.1
125
+ version: '1.7'
114
126
  type: :runtime
115
127
  prerelease: false
116
128
  version_requirements: !ruby/object:Gem::Requirement
117
129
  none: false
118
130
  requirements:
119
- - - ! '>='
131
+ - - ~>
120
132
  - !ruby/object:Gem::Version
121
- version: 1.5.1
133
+ version: '1.7'
122
134
  - !ruby/object:Gem::Dependency
123
135
  name: active_utils
124
136
  requirement: !ruby/object:Gem::Requirement
125
137
  none: false
126
138
  requirements:
127
- - - ! '>='
139
+ - - ~>
128
140
  - !ruby/object:Gem::Version
129
- version: 1.0.2
141
+ version: '2.0'
130
142
  type: :runtime
131
143
  prerelease: false
132
144
  version_requirements: !ruby/object:Gem::Requirement
133
145
  none: false
134
146
  requirements:
135
- - - ! '>='
147
+ - - ~>
136
148
  - !ruby/object:Gem::Version
137
- version: 1.0.2
149
+ version: '2.0'
138
150
  - !ruby/object:Gem::Dependency
139
151
  name: nokogiri
140
152
  requirement: !ruby/object:Gem::Requirement
141
153
  none: false
142
154
  requirements:
143
- - - <
155
+ - - ~>
144
156
  - !ruby/object:Gem::Version
145
- version: 1.6.0
157
+ version: '1.4'
146
158
  type: :runtime
147
159
  prerelease: false
148
160
  version_requirements: !ruby/object:Gem::Requirement
149
161
  none: false
150
162
  requirements:
151
- - - <
163
+ - - ~>
152
164
  - !ruby/object:Gem::Version
153
- version: 1.6.0
165
+ version: '1.4'
154
166
  - !ruby/object:Gem::Dependency
155
167
  name: rake
156
168
  requirement: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
Binary file