mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Make spec-scoped resources override top-level resources
This commit is contained in:
parent
b40b46e3f6
commit
9c7a18bdcb
@ -711,7 +711,9 @@ class Formula
|
|||||||
|
|
||||||
# Define a named resource using a SoftwareSpec style block
|
# Define a named resource using a SoftwareSpec style block
|
||||||
def resource name, &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
|
end
|
||||||
|
|
||||||
def dependencies
|
def dependencies
|
||||||
|
@ -23,9 +23,13 @@ class SoftwareSpec
|
|||||||
resources.each_value { |r| r.owner = owner }
|
resources.each_value { |r| r.owner = owner }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def resource? name
|
||||||
|
resources.has_key?(name)
|
||||||
|
end
|
||||||
|
|
||||||
def resource name, &block
|
def resource name, &block
|
||||||
if block_given?
|
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)
|
resources[name] = Resource.new(name, &block)
|
||||||
else
|
else
|
||||||
resources.fetch(name) { raise ResourceMissingError.new(owner, name) }
|
resources.fetch(name) { raise ResourceMissingError.new(owner, name) }
|
||||||
|
@ -2,6 +2,35 @@ require 'testing_env'
|
|||||||
require 'software_spec'
|
require 'software_spec'
|
||||||
require 'bottles'
|
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
|
class HeadSoftwareSpecTests < Test::Unit::TestCase
|
||||||
include VersionAssertions
|
include VersionAssertions
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user