aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/resource.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/resource.rb')
-rw-r--r--Library/Homebrew/resource.rb31
1 files changed, 28 insertions, 3 deletions
diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb
index 5077ac149..3fcdf46bd 100644
--- a/Library/Homebrew/resource.rb
+++ b/Library/Homebrew/resource.rb
@@ -1,6 +1,7 @@
require "download_strategy"
require "checksum"
require "version"
+require "forwardable"
# Resource is the fundamental representation of an external resource. The
# primary formula download, along with other declared resources, are instances
@@ -86,15 +87,15 @@ class Resource
end
# If a target is given, unpack there; else unpack to a temp folder.
- # If block is given, yield to that block with |self, staging|, where staging
- # is a staging context that responds to retain!().
+ # If block is given, yield to that block with |stage|, where stage
+ # is a ResourceStagingContext.
# A target or a block must be given, but not both.
def unpack(target = nil)
mktemp(download_name) do |staging|
downloader.stage
@source_modified_time = downloader.source_modified_time
if block_given?
- yield self, staging
+ yield ResourceStageContext.new(self, staging)
elsif target
target = Pathname.new(target) unless target.is_a? Pathname
target.install Dir["*"]
@@ -186,3 +187,27 @@ class Resource
end
end
end
+
+# The context in which a Resource.stage() occurs. Supports access to both
+# the Resource and associated Mktemp in a single block argument. The interface
+# is back-compatible with Resource itself as used in that context.
+class ResourceStageContext
+ extend Forwardable
+
+ # The Resource that is being staged
+ attr_reader :resource
+ # The Mktemp in which @resource is staged
+ attr_reader :staging
+
+ def_delegators :@resource, :version, :url, :mirrors, :specs, :using, :source_modified_time
+ def_delegators :@staging, :retain!
+
+ def initialize(resource, staging)
+ @resource = resource
+ @staging = staging
+ end
+
+ def to_s
+ "<#{self.class}: resource=#{resource} staging=#{staging}>"
+ end
+end