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 'dependency_collector'
require 'formula_support' require 'formula_support'
require 'formula_lock' require 'formula_lock'
@ -57,9 +56,6 @@ class Formula
end end
@pin = FormulaPin.new(self) @pin = FormulaPin.new(self)
@resources = self.class.resources
@resources.each_value { |r| r.owner = self }
end end
def set_spec(name) def set_spec(name)
@ -97,13 +93,11 @@ class Formula
def mirrors; active_spec.mirrors; end def mirrors; active_spec.mirrors; end
def resource(name) def resource(name)
res = @resources[name] active_spec.resource(name)
raise ResourceMissingError.new(@name, name) if res.nil?
res
end end
def resources def resources
@resources.values active_spec.resources.values
end end
# if the dir is there, but it's empty we consider it not installed # if the dir is there, but it's empty we consider it not installed
@ -705,17 +699,10 @@ class Formula
@stable.mirror(val) @stable.mirror(val)
end end
# Hold any resources defined by this formula
def resources
@resources ||= Hash.new
end
# 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
raise DuplicateResourceError.new(name) if resources.has_key?(name) @stable ||= SoftwareSpec.new
resource = Resource.new(name) @stable.resource(name, &block)
resource.instance_eval(&block)
resources[name] = resource
end end
def dependencies def dependencies

View File

@ -18,7 +18,7 @@ class Resource
# XXX: for bottles, address this later # XXX: for bottles, address this later
attr_writer :url, :checksum attr_writer :url, :checksum
def initialize name, url=nil, version=nil def initialize name, url=nil, version=nil, &block
@name = name @name = name
@url = url @url = url
@version = version @version = version
@ -26,6 +26,7 @@ class Resource
@specs = {} @specs = {}
@checksum = nil @checksum = nil
@using = nil @using = nil
instance_eval(&block) if block_given?
end end
def downloader def downloader

View File

@ -6,7 +6,8 @@ require 'version'
class SoftwareSpec class SoftwareSpec
extend Forwardable extend Forwardable
def_delegators :@resource, :owner= attr_reader :resources, :owner
def_delegators :@resource, :stage, :fetch def_delegators :@resource, :stage, :fetch
def_delegators :@resource, :download_strategy, :verify_download_integrity def_delegators :@resource, :download_strategy, :verify_download_integrity
def_delegators :@resource, :checksum, :mirrors, :specs, :using, :downloader def_delegators :@resource, :checksum, :mirrors, :specs, :using, :downloader
@ -14,6 +15,21 @@ class SoftwareSpec
def initialize url=nil, version=nil def initialize url=nil, version=nil
@resource = Resource.new(:default, url, version) @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
end end