aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/software_spec.rb
diff options
context:
space:
mode:
authorJack Nagel2013-09-17 21:25:38 -0500
committerJack Nagel2013-09-17 21:29:52 -0500
commitcc51ab41dbcf80f2bb37584d45eaaa99ac9580b8 (patch)
treea48233a8e136aea0fe501ab3f85368650ee64bc2 /Library/Homebrew/software_spec.rb
parent73ddbb6df53a5657e61e7074c62b5bae77c5de78 (diff)
downloadhomebrew-cc51ab41dbcf80f2bb37584d45eaaa99ac9580b8.tar.bz2
Reimplement SoftwareSpec on top of Resource
Diffstat (limited to 'Library/Homebrew/software_spec.rb')
-rw-r--r--Library/Homebrew/software_spec.rb75
1 files changed, 13 insertions, 62 deletions
diff --git a/Library/Homebrew/software_spec.rb b/Library/Homebrew/software_spec.rb
index 856fe4071..6f8191f78 100644
--- a/Library/Homebrew/software_spec.rb
+++ b/Library/Homebrew/software_spec.rb
@@ -1,69 +1,19 @@
-require 'download_strategy'
+require 'forwardable'
+require 'resource'
require 'checksum'
require 'version'
class SoftwareSpec
- attr_reader :checksum, :mirrors, :specs, :using
+ extend Forwardable
- def initialize url=nil, version=nil
- @url = url
- @version = version
- @mirrors = []
- @specs = {}
- @checksum = nil
- @using = nil
- end
-
- def download_strategy
- @download_strategy ||= DownloadStrategyDetector.detect(url, using)
- end
-
- def verify_download_integrity fn
- fn.verify_checksum(checksum)
- rescue ChecksumMissingError
- opoo "Cannot verify package integrity"
- puts "The formula did not provide a download checksum"
- puts "For your reference the SHA1 is: #{fn.sha1}"
- rescue ChecksumMismatchError => e
- e.advice = <<-EOS.undent
- Archive: #{fn}
- (To retry an incomplete download, remove the file above.)
- EOS
- raise e
- end
-
- def detect_version(val)
- case val
- when nil then Version.detect(url, specs)
- when String then Version.new(val)
- when Hash then Version.new_with_scheme(*val.shift)
- else
- raise TypeError, "version '#{val.inspect}' should be a string"
- end
- end
-
- # The methods that follow are used in the block-form DSL spec methods
- Checksum::TYPES.each do |cksum|
- class_eval <<-EOS, __FILE__, __LINE__ + 1
- def #{cksum}(val)
- @checksum = Checksum.new(:#{cksum}, val)
- end
- EOS
- end
+ def_delegators :@resource, :owner=
+ def_delegators :@resource, :stage, :fetch
+ def_delegators :@resource, :download_strategy, :verify_download_integrity
+ def_delegators :@resource, :checksum, :mirrors, :specs, :using, :downloader
+ def_delegators :@resource, :url, :version, :mirror, *Checksum::TYPES
- def url val=nil, specs={}
- return @url if val.nil?
- @url = val
- @using = specs.delete(:using)
- @specs.merge!(specs)
- end
-
- def version val=nil
- @version ||= detect_version(val)
- end
-
- def mirror val
- mirrors << val
+ def initialize url=nil, version=nil
+ @resource = Resource.new(:default, url, version)
end
end
@@ -78,9 +28,10 @@ class HeadSoftwareSpec < SoftwareSpec
end
class Bottle < SoftwareSpec
- attr_writer :url
attr_rw :root_url, :prefix, :cellar, :revision
+ def_delegators :@resource, :url=
+
def initialize
super
@revision = 0
@@ -102,7 +53,7 @@ class Bottle < SoftwareSpec
end
if @#{cksum}.has_key? bottle_tag
- @checksum = @#{cksum}[bottle_tag]
+ @resource.checksum = @#{cksum}[bottle_tag]
end
end
EOS