aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Library/Homebrew/formula.rb21
-rw-r--r--Library/Homebrew/resource.rb3
-rw-r--r--Library/Homebrew/software_spec.rb18
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