From 949efb017da8d79a731db077c5264ab7ab13f1a1 Mon Sep 17 00:00:00 2001 From: Olivier Bellone Date: Tue, 5 Dec 2017 16:42:42 -0800 Subject: [PATCH] Support Tempfiles in file_upload creation requests --- lib/stripe/file_upload.rb | 4 +++- test/stripe/file_upload_test.rb | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/stripe/file_upload.rb b/lib/stripe/file_upload.rb index 60b39941..f2bd43b4 100644 --- a/lib/stripe/file_upload.rb +++ b/lib/stripe/file_upload.rb @@ -1,3 +1,5 @@ +require "tempfile" + module Stripe class FileUpload < APIResource extend Stripe::APIOperations::Create @@ -20,7 +22,7 @@ module Stripe # rest-client would accept a vanilla `File` for upload, but Faraday does # not. Support the old API by wrapping a `File` with an `UploadIO` object # if we're given one. - if params[:file] && params[:file].is_a?(File) + if params[:file] && [File, Tempfile].any? { |klass| params[:file].is_a?(klass) } params[:file] = Faraday::UploadIO.new(params[:file], nil) end diff --git a/test/stripe/file_upload_test.rb b/test/stripe/file_upload_test.rb index c15ec6b5..8fc67a76 100644 --- a/test/stripe/file_upload_test.rb +++ b/test/stripe/file_upload_test.rb @@ -31,7 +31,7 @@ module Stripe assert file.is_a?(Stripe::FileUpload) end - should "be creatable" do + should "be creatable with a File" do stub_request(:post, "#{Stripe.uploads_base}/v1/files") .with(headers: { "Content-Type" => /\A#{Faraday::Request::Multipart.mime_type}/, @@ -46,6 +46,25 @@ module Stripe assert file.is_a?(Stripe::FileUpload) end + should "be creatable with a Tempfile" do + stub_request(:post, "#{Stripe.uploads_base}/v1/files") + .with(headers: { + "Content-Type" => /\A#{Faraday::Request::Multipart.mime_type}/, + }) do |request| + request.body =~ /Hello world/ + end.to_return(body: JSON.generate(FIXTURE)) + + tempfile = Tempfile.new("foo") + tempfile.write("Hello world") + tempfile.rewind + + file = Stripe::FileUpload.create( + purpose: "dispute_evidence", + file: tempfile + ) + assert file.is_a?(Stripe::FileUpload) + end + should "be creatable with Faraday::UploadIO" do stub_request(:post, "#{Stripe.uploads_base}/v1/files") .with(headers: {