diff options
| author | Jack Nagel | 2013-09-17 21:25:38 -0500 |
|---|---|---|
| committer | Jack Nagel | 2013-09-17 21:29:52 -0500 |
| commit | cc51ab41dbcf80f2bb37584d45eaaa99ac9580b8 (patch) | |
| tree | a48233a8e136aea0fe501ab3f85368650ee64bc2 /Library/Homebrew/software_spec.rb | |
| parent | 73ddbb6df53a5657e61e7074c62b5bae77c5de78 (diff) | |
| download | homebrew-cc51ab41dbcf80f2bb37584d45eaaa99ac9580b8.tar.bz2 | |
Reimplement SoftwareSpec on top of Resource
Diffstat (limited to 'Library/Homebrew/software_spec.rb')
| -rw-r--r-- | Library/Homebrew/software_spec.rb | 75 |
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 |
