Move formula resources to SoftwareSpec

This commit is contained in:
Jack Nagel 2013-09-17 21:25:39 -05:00
parent df537528c7
commit 6116450328
3 changed files with 23 additions and 19 deletions

View File

@ -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

View File

@ -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

View File

@ -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