diff options
| -rw-r--r-- | Library/Homebrew/formula.rb | 21 | ||||
| -rw-r--r-- | Library/Homebrew/resource.rb | 3 | ||||
| -rw-r--r-- | Library/Homebrew/software_spec.rb | 18 | 
3 files changed, 23 insertions, 19 deletions
| diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index db0e9e02b..075cd087f 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1,4 +1,3 @@ -require 'resource'  require 'dependency_collector'  require 'formula_support'  require 'formula_lock' @@ -57,9 +56,6 @@ class Formula      end      @pin = FormulaPin.new(self) - -    @resources = self.class.resources -    @resources.each_value { |r| r.owner = self }    end    def set_spec(name) @@ -97,13 +93,11 @@ class Formula    def mirrors;  active_spec.mirrors; end    def resource(name) -    res = @resources[name] -    raise ResourceMissingError.new(@name, name) if res.nil? -    res +    active_spec.resource(name)    end    def resources -    @resources.values +    active_spec.resources.values    end    # if the dir is there, but it's empty we consider it not installed @@ -705,17 +699,10 @@ class Formula        @stable.mirror(val)      end -    # Hold any resources defined by this formula -    def resources -      @resources ||= Hash.new -    end -      # Define a named resource using a SoftwareSpec style block      def resource name, &block -      raise DuplicateResourceError.new(name) if resources.has_key?(name) -      resource = Resource.new(name) -      resource.instance_eval(&block) -      resources[name] = resource +      @stable ||= SoftwareSpec.new +      @stable.resource(name, &block)      end      def dependencies diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index ee04014a8..c089c4ee5 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -18,7 +18,7 @@ class Resource    # XXX: for bottles, address this later    attr_writer :url, :checksum -  def initialize name, url=nil, version=nil +  def initialize name, url=nil, version=nil, &block      @name = name      @url = url      @version = version @@ -26,6 +26,7 @@ class Resource      @specs = {}      @checksum = nil      @using = nil +    instance_eval(&block) if block_given?    end    def downloader diff --git a/Library/Homebrew/software_spec.rb b/Library/Homebrew/software_spec.rb index 6f8191f78..eedbf47b4 100644 --- a/Library/Homebrew/software_spec.rb +++ b/Library/Homebrew/software_spec.rb @@ -6,7 +6,8 @@ require 'version'  class SoftwareSpec    extend Forwardable -  def_delegators :@resource, :owner= +  attr_reader :resources, :owner +    def_delegators :@resource, :stage, :fetch    def_delegators :@resource, :download_strategy, :verify_download_integrity    def_delegators :@resource, :checksum, :mirrors, :specs, :using, :downloader @@ -14,6 +15,21 @@ class SoftwareSpec    def initialize url=nil, version=nil      @resource = Resource.new(:default, url, version) +    @resources = {} +  end + +  def owner= owner +    @resource.owner = owner +    resources.each_value { |r| r.owner = owner } +  end + +  def resource name, &block +    if block_given? +      raise DuplicateResourceError.new(name) if resources.has_key?(name) +      resources[name] = Resource.new(name, &block) +    else +      resources.fetch(name) { raise ResourceMissingError.new(owner, name) } +    end    end  end | 
