From 583559d84e9f09c5fd7b2d62ba24bb0796fd493e Mon Sep 17 00:00:00 2001 From: Shane Delmore Date: Fri, 26 Jul 2013 11:54:40 -0700 Subject: [PATCH 1/5] Issue #6. Adding load from url feature. --- lib/cask.rb | 31 +++++++++++++++++++++++++------ test/cask_test.rb | 14 ++++++++++++++ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/lib/cask.rb b/lib/cask.rb index 0f5906e9a0c..7bb81ab4dae 100644 --- a/lib/cask.rb +++ b/lib/cask.rb @@ -1,5 +1,7 @@ require 'uri' +HOMEBREW_CACHE_CASKS = HOMEBREW_CACHE.join('Casks') + class Cask; end class Cask::CLI; end @@ -45,6 +47,12 @@ class Cask File.file?(cask_title) end + def self._uri_source?(cask_title) + !!URI.parse(cask_title).scheme + rescue URI::InvalidURIError + false + end + def self.init HOMEBREW_CACHE.mkpath unless HOMEBREW_CACHE.exist? unless caskroom.exist? @@ -90,8 +98,17 @@ class Cask _load_from_file(source) end - def self._load_from_path(cask_title) - _load_from_file(Pathname.new(File::expand_path(cask_title))) + def self._load_from_path(cask_path) + _load_from_file(Pathname.new(File::expand_path(cask_path))) + end + + def self._load_from_uri(url) + HOMEBREW_CACHE_CASKS.mkpath + path = HOMEBREW_CACHE_CASKS.join(File.basename(url)) + curl(url, '-o', path.to_s) + _load_from_path(path.to_s) + rescue ErrorDuringExecution + raise CaskUnavailableError, url end def self._load_from_file(source) @@ -100,11 +117,13 @@ class Cask const_get(cask_class_name(source)).new end - def self.load(cask_title) - if _file_source?(cask_title) - _load_from_path(cask_title) + def self.load(requested_cask) + if _uri_source?(requested_cask) + _load_from_uri(requested_cask) + elsif _file_source?(requested_cask) + _load_from_path(requested_cask) else - _load_from_tap(cask_title) + _load_from_tap(requested_cask) end end diff --git a/test/cask_test.rb b/test/cask_test.rb index 07b9c874564..4469d2df483 100644 --- a/test/cask_test.rb +++ b/test/cask_test.rb @@ -15,6 +15,20 @@ describe "Cask" do c.must_be_instance_of(Dia) end + it "returns an instance of the cask from a url" do + url = "file:" + File.expand_path('./Casks/dia.rb') + c = Cask.load(url) + c.must_be_kind_of(Cask) + c.must_be_instance_of(Dia) + end + + it "raises an error when failing to download a cask from a url" do + lambda { + url = "file:" + File.expand_path('./Casks/notacask.rb') + Cask.load(url) + }.must_raise(CaskUnavailableError) + end + it "returns an instance of the cask from a relative file location" do c = Cask.load("./Casks/dia.rb") c.must_be_kind_of(Cask) From 413aa0a0aa156c5a6b53039d6a42010402461da0 Mon Sep 17 00:00:00 2001 From: Shane Delmore Date: Fri, 26 Jul 2013 12:00:27 -0700 Subject: [PATCH 2/5] Renaming cask_title to requested_cask for clarity. --- lib/cask.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/cask.rb b/lib/cask.rb index 7bb81ab4dae..cb115282ca6 100644 --- a/lib/cask.rb +++ b/lib/cask.rb @@ -43,12 +43,12 @@ class Cask @default_tap = _tap end - def self._file_source?(cask_title) - File.file?(cask_title) + def self._file_source?(requested_cask) + File.file?(requested_cask) end - def self._uri_source?(cask_title) - !!URI.parse(cask_title).scheme + def self._uri_source?(requested_cask) + !!URI.parse(requested_cask).scheme rescue URI::InvalidURIError false end From c28a444bc4c0aa4c4df013c40bfc66c6a4420d3f Mon Sep 17 00:00:00 2001 From: Shane Delmore Date: Sat, 27 Jul 2013 15:08:51 -0700 Subject: [PATCH 3/5] Fixing test file url --- test/cask_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cask_test.rb b/test/cask_test.rb index 4469d2df483..af329638185 100644 --- a/test/cask_test.rb +++ b/test/cask_test.rb @@ -16,7 +16,7 @@ describe "Cask" do end it "returns an instance of the cask from a url" do - url = "file:" + File.expand_path('./Casks/dia.rb') + url = "file://" + File.expand_path('./Casks/dia.rb') c = Cask.load(url) c.must_be_kind_of(Cask) c.must_be_instance_of(Dia) From cb3d16ef4813a14a4512a60b7bb3dfafa3951c58 Mon Sep 17 00:00:00 2001 From: Shane Delmore Date: Sat, 27 Jul 2013 15:44:03 -0700 Subject: [PATCH 4/5] Simplifying uri source validation. --- lib/cask.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/cask.rb b/lib/cask.rb index 9def01c8339..f62fc5a7a08 100644 --- a/lib/cask.rb +++ b/lib/cask.rb @@ -48,9 +48,7 @@ class Cask end def self._uri_source?(requested_cask) - !!URI.parse(requested_cask).scheme - rescue URI::InvalidURIError - false + !!(requested_cask =~ URI.regexp) end def self.init From f5d1ccb76ba55a05cc65367feba921a38c2f79ef Mon Sep 17 00:00:00 2001 From: Shane Delmore Date: Tue, 30 Jul 2013 14:07:11 -0700 Subject: [PATCH 5/5] Fixed uri in test case --- test/cask_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cask_test.rb b/test/cask_test.rb index af329638185..7979a8c1661 100644 --- a/test/cask_test.rb +++ b/test/cask_test.rb @@ -24,7 +24,7 @@ describe "Cask" do it "raises an error when failing to download a cask from a url" do lambda { - url = "file:" + File.expand_path('./Casks/notacask.rb') + url = "file://" + File.expand_path('./Casks/notacask.rb') Cask.load(url) }.must_raise(CaskUnavailableError) end