diff options
| author | Jack Nagel | 2013-09-17 21:25:40 -0500 |
|---|---|---|
| committer | Jack Nagel | 2013-09-17 21:29:53 -0500 |
| commit | e068606c9849b4f8af8e9e194c8ea51c797d4180 (patch) | |
| tree | ebae058c62d0839e41d4b826cb1baebb39da806b | |
| parent | 599abc564f2706133eb2d12a85807742be4519a5 (diff) | |
| download | homebrew-e068606c9849b4f8af8e9e194c8ea51c797d4180.tar.bz2 | |
Make spec-scoped resources override top-level resources
| -rw-r--r-- | Library/Homebrew/formula.rb | 4 | ||||
| -rw-r--r-- | Library/Homebrew/software_spec.rb | 6 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_software_spec.rb | 29 |
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 |
