aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Nagel2013-09-17 21:25:40 -0500
committerJack Nagel2013-09-17 21:29:53 -0500
commite068606c9849b4f8af8e9e194c8ea51c797d4180 (patch)
treeebae058c62d0839e41d4b826cb1baebb39da806b
parent599abc564f2706133eb2d12a85807742be4519a5 (diff)
downloadhomebrew-e068606c9849b4f8af8e9e194c8ea51c797d4180.tar.bz2
Make spec-scoped resources override top-level resources
-rw-r--r--Library/Homebrew/formula.rb4
-rw-r--r--Library/Homebrew/software_spec.rb6
-rw-r--r--Library/Homebrew/test/test_software_spec.rb29
3 files changed, 37 insertions, 2 deletions
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index d0d233880..6b14aba25 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -711,7 +711,9 @@ class Formula
# Define a named resource using a SoftwareSpec style block
def resource name, &block
- specs.each { |spec| spec.resource(name, &block) }
+ specs.each do |spec|
+ spec.resource(name, &block) unless spec.resource?(name)
+ end
end
def dependencies
diff --git a/Library/Homebrew/software_spec.rb b/Library/Homebrew/software_spec.rb
index eedbf47b4..7b4004ecb 100644
--- a/Library/Homebrew/software_spec.rb
+++ b/Library/Homebrew/software_spec.rb
@@ -23,9 +23,13 @@ class SoftwareSpec
resources.each_value { |r| r.owner = owner }
end
+ def resource? name
+ resources.has_key?(name)
+ end
+
def resource name, &block
if block_given?
- raise DuplicateResourceError.new(name) if resources.has_key?(name)
+ raise DuplicateResourceError.new(name) if resource?(name)
resources[name] = Resource.new(name, &block)
else
resources.fetch(name) { raise ResourceMissingError.new(owner, name) }
diff --git a/Library/Homebrew/test/test_software_spec.rb b/Library/Homebrew/test/test_software_spec.rb
index 7d67d90d3..febd33b39 100644
--- a/Library/Homebrew/test/test_software_spec.rb
+++ b/Library/Homebrew/test/test_software_spec.rb
@@ -2,6 +2,35 @@ require 'testing_env'
require 'software_spec'
require 'bottles'
+class SoftwareSpecTests < Test::Unit::TestCase
+ def setup
+ @spec = SoftwareSpec.new
+ end
+
+ def test_resource
+ @spec.resource('foo') { url 'foo-1.0' }
+ assert @spec.resource?('foo')
+ end
+
+ def test_raises_when_duplicate_resources_are_defined
+ @spec.resource('foo') { url 'foo-1.0' }
+ assert_raises(DuplicateResourceError) do
+ @spec.resource('foo') { url 'foo-1.0' }
+ end
+ end
+
+ def test_raises_when_accessing_missing_resources
+ assert_raises(ResourceMissingError) { @spec.resource('foo') }
+ end
+
+ def test_resource_owner
+ owner = Object.new
+ @spec.resource('foo') { url 'foo-1.0' }
+ @spec.owner = owner
+ @spec.resources.each_value { |r| assert_equal owner, r.owner }
+ end
+end
+
class HeadSoftwareSpecTests < Test::Unit::TestCase
include VersionAssertions