Handle ugly url targets

This commit is contained in:
Scott Carleton 2013-11-14 12:58:06 -05:00
parent 07cbf8f4e3
commit 32e414690a
2 changed files with 24 additions and 3 deletions

View File

@ -6,14 +6,14 @@ class UriAdapter
def initialize(target)
raise Discourse::InvalidParameters unless target =~ /^https?:\/\//
@target = URI(target)
@target = Addressable::URI.parse(target)
@original_filename = ::File.basename(@target.path)
@content = download_content
@tempfile = TempfileFactory.new.generate(@original_filename)
end
def download_content
open(target)
open(target.normalize)
end
def copy_to_tempfile(src)

View File

@ -14,7 +14,7 @@ describe UriAdapter do
describe "#initialize" do
it "has a target" do
subject.target.should be_instance_of(URI::HTTP)
subject.target.should be_instance_of(Addressable::URI)
end
it "has content" do
@ -29,6 +29,27 @@ describe UriAdapter do
subject.tempfile.should be_instance_of Tempfile
end
describe "it handles ugly targets" do
let(:ugly_target) { "http://cdn.discourse.org/assets/logo with spaces.png" }
subject { UriAdapter.new(ugly_target) }
it "handles targets" do
subject.target.should be_instance_of(Addressable::URI)
end
it "has content" do
subject.content.should == response
end
it "has an original_filename" do
subject.original_filename.should == "logo with spaces.png"
end
it "has a tempfile" do
subject.tempfile.should be_instance_of Tempfile
end
end
end
describe "#copy_to_tempfile" do