mirror of
https://github.com/stripe/stripe-ruby.git
synced 2025-08-12 00:01:47 -04:00
Create the file upload api resource (+ bump version)
This commit is contained in:
parent
62e110a33e
commit
ef249b7ceb
@ -1,3 +1,9 @@
|
||||
=== 1.17.0 2014-12-15
|
||||
|
||||
* 1 major enhacement:
|
||||
* File uploads resource was added (for uploading pdf or image documents for
|
||||
disputes)
|
||||
|
||||
=== 1.16.1 2014-12-19
|
||||
|
||||
* 2 minor enhancements:
|
||||
|
@ -30,6 +30,7 @@ require 'stripe/invoice'
|
||||
require 'stripe/invoice_item'
|
||||
require 'stripe/charge'
|
||||
require 'stripe/plan'
|
||||
require 'stripe/file_upload'
|
||||
require 'stripe/coupon'
|
||||
require 'stripe/token'
|
||||
require 'stripe/event'
|
||||
@ -62,11 +63,13 @@ module Stripe
|
||||
attr_accessor :api_key, :api_base, :verify_ssl_certs, :api_version
|
||||
end
|
||||
|
||||
def self.api_url(url='')
|
||||
@api_base + url
|
||||
def self.api_url(url='', api_base_url=nil)
|
||||
(api_base_url || @api_base) + url
|
||||
end
|
||||
|
||||
def self.request(method, url, api_key, params={}, headers={})
|
||||
def self.request(method, url, api_key, params={}, headers={}, api_base_url=nil)
|
||||
api_base_url = api_base_url || @api_base
|
||||
|
||||
unless api_key ||= @api_key
|
||||
raise AuthenticationError.new('No API key provided. ' +
|
||||
'Set your API key using "Stripe.api_key = <API-KEY>". ' +
|
||||
@ -90,11 +93,11 @@ module Stripe
|
||||
end
|
||||
|
||||
if @verify_ssl_certs and !@CERTIFICATE_VERIFIED
|
||||
@CERTIFICATE_VERIFIED = CertificateBlacklist.check_ssl_cert(@api_base, @ssl_bundle_path)
|
||||
@CERTIFICATE_VERIFIED = CertificateBlacklist.check_ssl_cert(api_base_url, @ssl_bundle_path)
|
||||
end
|
||||
|
||||
params = Util.objects_to_ids(params)
|
||||
url = api_url(url)
|
||||
url = api_url(url, api_base_url)
|
||||
|
||||
case method.to_s.downcase.to_sym
|
||||
when :get, :head, :delete
|
||||
@ -102,7 +105,11 @@ module Stripe
|
||||
url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode(params)}" if params && params.any?
|
||||
payload = nil
|
||||
else
|
||||
payload = uri_encode(params)
|
||||
if headers[:content_type] && headers[:content_type] == "multipart/form-data"
|
||||
payload = params
|
||||
else
|
||||
payload = uri_encode(params)
|
||||
end
|
||||
end
|
||||
|
||||
request_opts.update(:headers => request_headers(api_key).update(headers),
|
||||
@ -112,12 +119,12 @@ module Stripe
|
||||
begin
|
||||
response = execute_request(request_opts)
|
||||
rescue SocketError => e
|
||||
handle_restclient_error(e)
|
||||
handle_restclient_error(e, api_base_url)
|
||||
rescue NoMethodError => e
|
||||
# Work around RestClient bug
|
||||
if e.message =~ /\WRequestFailed\W/
|
||||
e = APIConnectionError.new('Unexpected HTTP response code')
|
||||
handle_restclient_error(e)
|
||||
handle_restclient_error(e, api_base_url)
|
||||
else
|
||||
raise
|
||||
end
|
||||
@ -125,10 +132,10 @@ module Stripe
|
||||
if rcode = e.http_code and rbody = e.http_body
|
||||
handle_api_error(rcode, rbody)
|
||||
else
|
||||
handle_restclient_error(e)
|
||||
handle_restclient_error(e, api_base_url)
|
||||
end
|
||||
rescue RestClient::Exception, Errno::ECONNREFUSED => e
|
||||
handle_restclient_error(e)
|
||||
handle_restclient_error(e, api_base_url)
|
||||
end
|
||||
|
||||
[parse(response), api_key]
|
||||
@ -258,17 +265,18 @@ module Stripe
|
||||
APIError.new(error[:message], rcode, rbody, error_obj)
|
||||
end
|
||||
|
||||
def self.handle_restclient_error(e)
|
||||
def self.handle_restclient_error(e, api_base_url=nil)
|
||||
api_base_url = @api_base unless api_base_url
|
||||
connection_message = "Please check your internet connection and try again. " \
|
||||
"If this problem persists, you should check Stripe's service status at " \
|
||||
"https://twitter.com/stripestatus, or let us know at support@stripe.com."
|
||||
|
||||
case e
|
||||
when RestClient::RequestTimeout
|
||||
message = "Could not connect to Stripe (#{@api_base}). #{connection_message}"
|
||||
message = "Could not connect to Stripe (#{api_base_url}). #{connection_message}"
|
||||
|
||||
when RestClient::ServerBrokeConnection
|
||||
message = "The connection to the server (#{@api_base}) broke before the " \
|
||||
message = "The connection to the server (#{api_base_url}) broke before the " \
|
||||
"request completed. #{connection_message}"
|
||||
|
||||
when RestClient::SSLCertificateNotVerified
|
||||
|
27
lib/stripe/file_upload.rb
Normal file
27
lib/stripe/file_upload.rb
Normal file
@ -0,0 +1,27 @@
|
||||
module Stripe
|
||||
class FileUpload < APIResource
|
||||
UPLOADS_API_BASE = "https://uploads.stripe.com"
|
||||
|
||||
def self.url
|
||||
"/v1/files"
|
||||
end
|
||||
|
||||
def self.request_headers
|
||||
{
|
||||
:content_type => 'multipart/form-data',
|
||||
}
|
||||
end
|
||||
|
||||
def self.create(params={}, api_key=nil)
|
||||
response, api_key = Stripe.request(
|
||||
:post, self.url, api_key, params, self.request_headers, UPLOADS_API_BASE)
|
||||
Util.convert_to_stripe_object(response, api_key)
|
||||
end
|
||||
|
||||
def refresh
|
||||
response, api_key = Stripe.request(
|
||||
:get, url, @api_key, @retrieve_options, self.class.request_headers, UPLOADS_API_BASE)
|
||||
refresh_from(response, api_key)
|
||||
end
|
||||
end
|
||||
end
|
@ -1,3 +1,3 @@
|
||||
module Stripe
|
||||
VERSION = '1.16.1'
|
||||
VERSION = '1.17.0'
|
||||
end
|
||||
|
21
test/stripe/file_upload_test.rb
Normal file
21
test/stripe/file_upload_test.rb
Normal file
@ -0,0 +1,21 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
module Stripe
|
||||
class FileUploadTest < Test::Unit::TestCase
|
||||
should "create should return a new file" do
|
||||
@mock.expects(:post).once.returns(test_response(test_file))
|
||||
f = Stripe::FileUpload.create({
|
||||
:purpose => "dispute_evidence",
|
||||
:file => File.new(__FILE__),
|
||||
})
|
||||
assert_equal "fil_test_file", f.id
|
||||
end
|
||||
|
||||
should "files should be retrievable" do
|
||||
@mock.expects(:get).once.returns(test_response(test_file))
|
||||
c = Stripe::FileUpload.new("fil_test_file")
|
||||
c.refresh
|
||||
assert_equal 1403047735, c.created
|
||||
end
|
||||
end
|
||||
end
|
@ -183,6 +183,17 @@ module Stripe
|
||||
}.merge(params)
|
||||
end
|
||||
|
||||
def test_file(params={})
|
||||
{
|
||||
:id => "fil_test_file",
|
||||
:created => 1403047735,
|
||||
:size => 4908,
|
||||
:purpose => params[:purpose] || "dispute_evidence",
|
||||
:url => nil,
|
||||
:mimetype => nil,
|
||||
}
|
||||
end
|
||||
|
||||
#FIXME nested overrides would be better than hardcoding plan_id
|
||||
def test_subscription(params = {})
|
||||
plan = params.delete(:plan) || 'gold'
|
||||
|
Loading…
x
Reference in New Issue
Block a user