spreedly 1.4.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +8 -0
- data/Gemfile +4 -0
- data/HISTORY.md +5 -0
- data/README.md +362 -29
- data/Rakefile +32 -0
- data/lib/certs/cacert.pem +7815 -0
- data/lib/spreedly.rb +24 -282
- data/lib/spreedly/common/errors_parser.rb +15 -0
- data/lib/spreedly/common/fields.rb +90 -0
- data/lib/spreedly/connection.rb +40 -0
- data/lib/spreedly/environment.rb +176 -0
- data/lib/spreedly/error.rb +50 -0
- data/lib/spreedly/gateway.rb +10 -0
- data/lib/spreedly/model.rb +17 -0
- data/lib/spreedly/payment_methods/credit_card.rb +9 -0
- data/lib/spreedly/payment_methods/payment_method.rb +34 -0
- data/lib/spreedly/payment_methods/paypal.rb +7 -0
- data/lib/spreedly/payment_methods/sprel.rb +7 -0
- data/lib/spreedly/ssl_requester.rb +65 -0
- data/lib/spreedly/transactions/add_payment_method.rb +16 -0
- data/lib/spreedly/transactions/auth_purchase.rb +17 -0
- data/lib/spreedly/transactions/authorization.rb +7 -0
- data/lib/spreedly/transactions/capture.rb +14 -0
- data/lib/spreedly/transactions/gateway_transaction.rb +31 -0
- data/lib/spreedly/transactions/purchase.rb +7 -0
- data/lib/spreedly/transactions/redact_payment_method.rb +14 -0
- data/lib/spreedly/transactions/refund.rb +14 -0
- data/lib/spreedly/transactions/retain_payment_method.rb +14 -0
- data/lib/spreedly/transactions/transaction.rb +41 -0
- data/lib/spreedly/transactions/void.rb +9 -0
- data/lib/spreedly/urls.rb +64 -0
- data/lib/spreedly/version.rb +1 -1
- data/spreedly.gemspec +29 -0
- data/test/credentials/credentials.yml +9 -0
- data/test/credentials/test_credentials.rb +43 -0
- data/test/helpers/assertions.rb +29 -0
- data/test/helpers/communication_helper.rb +31 -0
- data/test/helpers/creation_helper.rb +26 -0
- data/test/helpers/stub_response.rb +18 -0
- data/test/remote/remote_add_credit_card_test.rb +62 -0
- data/test/remote/remote_add_gateway_test.rb +30 -0
- data/test/remote/remote_authorize_test.rb +48 -0
- data/test/remote/remote_capture_test.rb +71 -0
- data/test/remote/remote_find_gateway_test.rb +31 -0
- data/test/remote/remote_find_payment_method_test.rb +29 -0
- data/test/remote/remote_find_transaction_test.rb +33 -0
- data/test/remote/remote_list_transactions_test.rb +36 -0
- data/test/remote/remote_purchase_test.rb +69 -0
- data/test/remote/remote_redact_test.rb +38 -0
- data/test/remote/remote_refund_test.rb +65 -0
- data/test/remote/remote_retain_test.rb +39 -0
- data/test/remote/remote_void_test.rb +64 -0
- data/test/test_helper.rb +23 -0
- data/test/unit/add_credit_card_test.rb +74 -0
- data/test/unit/add_gateway_test.rb +26 -0
- data/test/unit/authorize_test.rb +87 -0
- data/test/unit/capture_test.rb +91 -0
- data/test/unit/environment_test.rb +18 -0
- data/test/unit/fields_test.rb +75 -0
- data/test/unit/find_gateway_test.rb +28 -0
- data/test/unit/find_payment_method_test.rb +90 -0
- data/test/unit/find_transaction_test.rb +31 -0
- data/test/unit/list_transactions_test.rb +46 -0
- data/test/unit/purchase_test.rb +95 -0
- data/test/unit/redact_payment_method_test.rb +51 -0
- data/test/unit/refund_test.rb +91 -0
- data/test/unit/response_stubs/add_credit_card_stubs.rb +43 -0
- data/test/unit/response_stubs/add_gateway_stubs.rb +39 -0
- data/test/unit/response_stubs/authorization_stubs.rb +139 -0
- data/test/unit/response_stubs/capture_stubs.rb +87 -0
- data/test/unit/response_stubs/find_gateway_stubs.rb +38 -0
- data/test/unit/response_stubs/find_payment_method_stubs.rb +108 -0
- data/test/unit/response_stubs/find_transaction_stubs.rb +43 -0
- data/test/unit/response_stubs/list_transactions_stubs.rb +110 -0
- data/test/unit/response_stubs/purchase_stubs.rb +139 -0
- data/test/unit/response_stubs/redact_payment_method_stubs.rb +54 -0
- data/test/unit/response_stubs/refund_stubs.rb +87 -0
- data/test/unit/response_stubs/retain_payment_method_stubs.rb +85 -0
- data/test/unit/response_stubs/void_stubs.rb +79 -0
- data/test/unit/retain_payment_method_test.rb +44 -0
- data/test/unit/timeout_test.rb +20 -0
- data/test/unit/void_test.rb +96 -0
- metadata +215 -29
- checksums.yaml +0 -15
- data/lib/spreedly/common.rb +0 -44
- data/lib/spreedly/mock.rb +0 -221
- data/lib/spreedly/test_hacks.rb +0 -27
data/lib/spreedly.rb
CHANGED
@@ -1,286 +1,28 @@
|
|
1
|
-
require 'spreedly/
|
2
|
-
require '
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
if ENV["SPREEDLY"] == "REAL"
|
26
|
-
require 'spreedly'
|
27
|
-
else
|
28
|
-
require 'spreedly/mock'
|
29
|
-
end
|
30
|
-
=end
|
1
|
+
require 'spreedly/ssl_requester'
|
2
|
+
require 'spreedly/urls'
|
3
|
+
require 'spreedly/environment'
|
4
|
+
require 'spreedly/connection'
|
5
|
+
require 'spreedly/common/fields'
|
6
|
+
require 'spreedly/common/errors_parser'
|
7
|
+
require 'spreedly/model'
|
8
|
+
require 'spreedly/payment_methods/payment_method'
|
9
|
+
require 'spreedly/payment_methods/credit_card'
|
10
|
+
require 'spreedly/payment_methods/paypal'
|
11
|
+
require 'spreedly/payment_methods/sprel'
|
12
|
+
require 'spreedly/transactions/transaction'
|
13
|
+
require 'spreedly/transactions/gateway_transaction'
|
14
|
+
require 'spreedly/transactions/add_payment_method'
|
15
|
+
require 'spreedly/transactions/auth_purchase'
|
16
|
+
require 'spreedly/transactions/purchase'
|
17
|
+
require 'spreedly/transactions/void'
|
18
|
+
require 'spreedly/transactions/authorization'
|
19
|
+
require 'spreedly/transactions/capture'
|
20
|
+
require 'spreedly/transactions/refund'
|
21
|
+
require 'spreedly/transactions/retain_payment_method'
|
22
|
+
require 'spreedly/transactions/redact_payment_method'
|
23
|
+
require 'spreedly/gateway'
|
24
|
+
require 'spreedly/error'
|
31
25
|
|
32
26
|
module Spreedly
|
33
|
-
REAL = "real" # :nodoc:
|
34
|
-
|
35
|
-
include HTTParty
|
36
|
-
headers 'Accept' => 'text/xml'
|
37
|
-
headers 'Content-Type' => 'text/xml'
|
38
|
-
format :xml
|
39
|
-
|
40
|
-
# Call this before you start using the API to set things up.
|
41
|
-
def self.configure(site_name, token)
|
42
|
-
base_uri "https://spreedly.com/api/v4/#{site_name}"
|
43
|
-
basic_auth token, 'X'
|
44
|
-
@site_name = site_name
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.site_name # :nodoc:
|
48
|
-
@site_name
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.to_xml_params(hash) # :nodoc:
|
52
|
-
hash.collect do |key, value|
|
53
|
-
tag = key.to_s.tr('_', '-')
|
54
|
-
result = "<#{tag}>"
|
55
|
-
if value.is_a?(Hash)
|
56
|
-
result << to_xml_params(value)
|
57
|
-
else
|
58
|
-
result << value.to_s
|
59
|
-
end
|
60
|
-
result << "</#{tag}>"
|
61
|
-
result
|
62
|
-
end.join('')
|
63
|
-
end
|
64
|
-
|
65
|
-
class Resource # :nodoc: all
|
66
|
-
def initialize(data)
|
67
|
-
@data = data
|
68
|
-
end
|
69
|
-
|
70
|
-
def id
|
71
|
-
@data["id"]
|
72
|
-
end
|
73
|
-
|
74
|
-
def method_missing(method, *args, &block)
|
75
|
-
if method.to_s =~ /\?$/
|
76
|
-
send(method.to_s[0..-2])
|
77
|
-
elsif @data.include?(method.to_s)
|
78
|
-
@data[method.to_s]
|
79
|
-
else
|
80
|
-
super
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
class Subscriber < Resource
|
86
|
-
# This will DELETE all the subscribers from the site.
|
87
|
-
#
|
88
|
-
# Only works for test sites (enforced on the Spreedly side).
|
89
|
-
def self.wipe!
|
90
|
-
Spreedly.delete('/subscribers.xml')
|
91
|
-
end
|
92
|
-
|
93
|
-
# This will DELETE individual subscribers from the site. Pass in the customer_id.
|
94
|
-
#
|
95
|
-
# Only works for test sites (enforced on the Spreedly side).
|
96
|
-
def self.delete!(id)
|
97
|
-
Spreedly.delete("/subscribers/#{id}.xml")
|
98
|
-
end
|
99
|
-
|
100
|
-
# Creates a new subscriber on Spreedly. The subscriber will NOT
|
101
|
-
# be active - they have to pay or you have to comp them for that
|
102
|
-
# to happen.
|
103
|
-
#
|
104
|
-
# Usage:
|
105
|
-
# Spreedly.Subscriber.create!(id, email)
|
106
|
-
# Spreedly.Subscriber.create!(id, email, screen_name)
|
107
|
-
# Spreedly.Subscriber.create!(id, :email => email, :screen_name => screen_name)
|
108
|
-
# Spreedly.Subscriber.create!(id, email, screen_name, :billing_first_name => first_name)
|
109
|
-
def self.create!(id, *args)
|
110
|
-
optional_attrs = args.last.is_a?(::Hash) ? args.pop : {}
|
111
|
-
email, screen_name = args
|
112
|
-
subscriber = {:customer_id => id, :email => email, :screen_name => screen_name}.merge(optional_attrs)
|
113
|
-
result = Spreedly.post('/subscribers.xml', :body => Spreedly.to_xml_params(:subscriber => subscriber))
|
114
|
-
case result.code.to_s
|
115
|
-
when /2../
|
116
|
-
new(result['subscriber'])
|
117
|
-
when '403'
|
118
|
-
raise "Could not create subscriber: already exists."
|
119
|
-
when '422'
|
120
|
-
errors = [*result['errors']].collect{|e| e.last}
|
121
|
-
raise "Could not create subscriber: #{errors.join(', ')}"
|
122
|
-
else
|
123
|
-
raise "Could not create subscriber: result code #{result.code}."
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# Looks a subscriber up by id.
|
128
|
-
def self.find(id)
|
129
|
-
xml = Spreedly.get("/subscribers/#{id}.xml")
|
130
|
-
if [200, 404].include?(xml.code)
|
131
|
-
(xml.nil? || xml.empty? ? nil : new(xml['subscriber']))
|
132
|
-
else
|
133
|
-
raise "Could not find subscriber: result code #{xml.code}, body '#{xml.body}'"
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
# Returns all the subscribers in your site.
|
138
|
-
def self.all
|
139
|
-
Spreedly.get('/subscribers.xml')['subscribers'].collect{|data| new(data)}
|
140
|
-
end
|
141
|
-
|
142
|
-
# Spreedly calls your id for the user the "customer id". This
|
143
|
-
# gives you a handy alias so you can just call it "id".
|
144
|
-
def id
|
145
|
-
customer_id
|
146
|
-
end
|
147
|
-
|
148
|
-
# Allows you to give a complimentary subscription (if the
|
149
|
-
# subscriber is inactive) or a complimentary time extension (if
|
150
|
-
# the subscriber is active). Automatically figures out which
|
151
|
-
# to do.
|
152
|
-
#
|
153
|
-
# Note: units must be one of "days" or "months" (Spreedly
|
154
|
-
# enforced).
|
155
|
-
def comp(quantity, units, feature_level=nil)
|
156
|
-
params = {:duration_quantity => quantity, :duration_units => units}
|
157
|
-
params[:feature_level] = feature_level if feature_level
|
158
|
-
raise "Feature level is required to comp an inactive subscriber" if !active? and !feature_level
|
159
|
-
endpoint = (active? ? "complimentary_time_extensions" : "complimentary_subscriptions")
|
160
|
-
result = Spreedly.post("/subscribers/#{id}/#{endpoint}.xml", :body => Spreedly.to_xml_params(endpoint[0..-2] => params))
|
161
|
-
case result.code.to_s
|
162
|
-
when /2../
|
163
|
-
when '404'
|
164
|
-
raise "Could not comp subscriber: no longer exists."
|
165
|
-
when '422'
|
166
|
-
raise "Could not comp subscriber: validation failed (#{result.body})."
|
167
|
-
when '403'
|
168
|
-
raise "Could not comp subscriber: invalid comp type (#{endpoint})."
|
169
|
-
else
|
170
|
-
raise "Could not comp subscriber: result code #{result.code}."
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
# Activates a free trial on the subscriber.
|
175
|
-
# Requires plan_id of the free trial plan
|
176
|
-
def activate_free_trial(plan_id)
|
177
|
-
result = Spreedly.post("/subscribers/#{id}/subscribe_to_free_trial.xml", :body =>
|
178
|
-
Spreedly.to_xml_params(:subscription_plan => {:id => plan_id}))
|
179
|
-
case result.code.to_s
|
180
|
-
when /2../
|
181
|
-
when '404'
|
182
|
-
raise "Could not active free trial for subscriber: subscriber or subscription plan no longer exists."
|
183
|
-
when '422'
|
184
|
-
raise "Could not activate free trial for subscriber: validation failed. missing subscription plan id"
|
185
|
-
when '403'
|
186
|
-
raise "Could not activate free trial for subscriber: subscription plan either 1) isn't a free trial, 2) the subscriber is not eligible for a free trial, or 3) the subscription plan is not enabled."
|
187
|
-
else
|
188
|
-
raise "Could not activate free trial for subscriber: result code #{result.code}."
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
# Stop the auto renew of the subscriber such that their recurring subscription will no longer be renewed.
|
193
|
-
# usage: @subscriber.stop_auto_renew
|
194
|
-
def stop_auto_renew
|
195
|
-
result = Spreedly.post("/subscribers/#{id}/stop_auto_renew.xml")
|
196
|
-
case result.code.to_s
|
197
|
-
when /2../
|
198
|
-
when '404'
|
199
|
-
raise "Could not stop auto renew for subscriber: subscriber does not exist."
|
200
|
-
else
|
201
|
-
raise "Could not stop auto renew for subscriber: result code #{result.code}."
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
# Update a Subscriber
|
206
|
-
# usage: @subscriber.update(:email => email, :screen_name => screen_name)
|
207
|
-
def update(args)
|
208
|
-
result = Spreedly.put("/subscribers/#{id}.xml", :body => Spreedly.to_xml_params(:subscriber => args))
|
209
|
-
|
210
|
-
case result.code.to_s
|
211
|
-
when /2../
|
212
|
-
when '403'
|
213
|
-
raise "Could not update subscriber: new-customer-id is already in use."
|
214
|
-
when '404'
|
215
|
-
raise "Could not update subscriber: subscriber not found"
|
216
|
-
else
|
217
|
-
raise "Could not update subscriber: result code #{result.code}."
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
# Allow Another Free Trial
|
222
|
-
# usage: @subscriber.allow_free_trial
|
223
|
-
def allow_free_trial
|
224
|
-
result = Spreedly.post("/subscribers/#{id}/allow_free_trial.xml")
|
225
|
-
|
226
|
-
case result.code.to_s
|
227
|
-
when /2../
|
228
|
-
else
|
229
|
-
raise "Could not allow subscriber to another trial: result code #{result.code}."
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
# Add a Fee to a Subscriber
|
234
|
-
# usage: @subscriber.add_fee(:amount => amount, :group => group_name, :description => description, :name => name)
|
235
|
-
def add_fee(args)
|
236
|
-
result = Spreedly.post("/subscribers/#{id}/fees.xml", :body => Spreedly.to_xml_params(:fee => args))
|
237
|
-
|
238
|
-
case result.code.to_s
|
239
|
-
when /2../
|
240
|
-
when '404'
|
241
|
-
raise "Not Found"
|
242
|
-
when '422'
|
243
|
-
raise "Unprocessable Entity - #{result.body}"
|
244
|
-
else
|
245
|
-
raise "Could not add fee to subscriber: result code #{result.code}."
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
# Get the invoices for the subscriber
|
250
|
-
def invoices
|
251
|
-
@invoices ||= @data["invoices"].collect{|i| Invoice.new(i)}
|
252
|
-
end
|
253
|
-
|
254
|
-
# Get the last successful invoice
|
255
|
-
def last_successful_invoice
|
256
|
-
invoices.detect do |invoice|
|
257
|
-
invoice.closed?
|
258
|
-
end
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
class Invoice < Resource
|
263
|
-
end
|
264
|
-
|
265
|
-
class SubscriptionPlan < Resource
|
266
|
-
# Returns all of the subscription plans defined in your site.
|
267
|
-
def self.all
|
268
|
-
xml = Spreedly.get('/subscription_plans.xml')
|
269
|
-
if xml.code == 200
|
270
|
-
xml['subscription_plans'].collect{|data| new(data)}
|
271
|
-
else
|
272
|
-
raise "Could not list subscription plans: result code #{xml.code}, body '#{xml.body}'"
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
# Returns the subscription plan with the given id.
|
277
|
-
def self.find(id)
|
278
|
-
all.detect{|e| e.id.to_s == id.to_s}
|
279
|
-
end
|
280
27
|
|
281
|
-
# Convenience method for determining if this plan is a free trial plan or not.
|
282
|
-
def trial?
|
283
|
-
(plan_type == 'free_trial')
|
284
|
-
end
|
285
|
-
end
|
286
28
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Spreedly
|
2
|
+
module ErrorsParser
|
3
|
+
|
4
|
+
def errors_from(xml_doc)
|
5
|
+
xml_doc.xpath(".//errors/error").map do |each|
|
6
|
+
{
|
7
|
+
attribute: each.attributes['attribute'].to_s,
|
8
|
+
key: each.attributes['key'].to_s,
|
9
|
+
message: each.text
|
10
|
+
}
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Spreedly
|
2
|
+
module Fields
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ClassMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize_fields(xml_doc)
|
9
|
+
self.class.fields.each do |field|
|
10
|
+
value = xml_doc.at_xpath(".//#{field}").inner_html.strip
|
11
|
+
instance_variable_set("@#{field}", value)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def field_hash
|
16
|
+
self.class.fields.inject({}) do |hash, each|
|
17
|
+
hash[each] = send(each)
|
18
|
+
hash
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module ClassMethods
|
23
|
+
def field(*fields_to_add)
|
24
|
+
options = fields_to_add.extract_options!
|
25
|
+
@fields ||= []
|
26
|
+
fields_to_add.each do |f|
|
27
|
+
@fields += [ f ]
|
28
|
+
add_accessor_for(f, options[:type])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def fields
|
33
|
+
@fields ||= []
|
34
|
+
end
|
35
|
+
|
36
|
+
def inherited(subclass)
|
37
|
+
subclass.instance_variable_set("@fields", instance_variable_get("@fields"))
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
def add_accessor_for(f, field_type)
|
42
|
+
case field_type
|
43
|
+
when :boolean
|
44
|
+
add_boolean_accessor(f)
|
45
|
+
when :date_time
|
46
|
+
add_date_time_accessor(f)
|
47
|
+
when :integer
|
48
|
+
add_integer_accessor(f)
|
49
|
+
when nil
|
50
|
+
attr_reader f
|
51
|
+
else
|
52
|
+
raise "Unknown field type '#{options[:type]}' for field '#{f}'"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def add_boolean_accessor(f)
|
57
|
+
define_method(f) do
|
58
|
+
return nil unless instance_variable_get("@#{f}")
|
59
|
+
"true" == instance_variable_get("@#{f}")
|
60
|
+
end
|
61
|
+
alias_method "#{f}?", f
|
62
|
+
end
|
63
|
+
|
64
|
+
def add_date_time_accessor(f)
|
65
|
+
define_method(f) do
|
66
|
+
Time.parse(instance_variable_get("@#{f}")) if instance_variable_get("@#{f}")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def add_integer_accessor(f)
|
71
|
+
define_method(f) do
|
72
|
+
return nil unless instance_variable_get("@#{f}")
|
73
|
+
instance_variable_get("@#{f}").to_i
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
class Array
|
82
|
+
def extract_options!
|
83
|
+
if last.is_a?(Hash)
|
84
|
+
pop
|
85
|
+
else
|
86
|
+
{}
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'net/https'
|
3
|
+
|
4
|
+
module Spreedly
|
5
|
+
class Connection
|
6
|
+
|
7
|
+
attr_accessor :endpoint
|
8
|
+
|
9
|
+
def initialize(endpoint)
|
10
|
+
@endpoint = URI.parse(endpoint)
|
11
|
+
end
|
12
|
+
|
13
|
+
def request(method, body, headers = {})
|
14
|
+
case method
|
15
|
+
when :get
|
16
|
+
http.get(endpoint.request_uri, headers)
|
17
|
+
when :post
|
18
|
+
http.post(endpoint.request_uri, body, headers)
|
19
|
+
when :put
|
20
|
+
http.put(endpoint.request_uri, body, headers)
|
21
|
+
when :delete
|
22
|
+
http.delete(endpoint.request_uri, headers)
|
23
|
+
else
|
24
|
+
raise ArgumentError, "Unsupported request method #{method.to_s.upcase}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def http
|
30
|
+
http = Net::HTTP.new(endpoint.host, endpoint.port)
|
31
|
+
http.open_timeout = 60
|
32
|
+
http.read_timeout = 60
|
33
|
+
http.use_ssl = true
|
34
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
35
|
+
http.ca_file = File.dirname(__FILE__) + '/../certs/cacert.pem'
|
36
|
+
http
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|