aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cask/lib/hbc/source/path_base.rb
diff options
context:
space:
mode:
authorAnastasiaSulyagina2016-08-18 22:11:42 +0300
committerAnastasiaSulyagina2016-08-19 14:50:14 +0300
commite81f4ab7deeb40308f240be5ea00091fc8786d7a (patch)
treeb5418f9149de71c0f05f90cb2b39ab47f46e27b4 /Library/Homebrew/cask/lib/hbc/source/path_base.rb
parent5c7c9de669025bbe4cad9829be39c5cf3b31ad25 (diff)
downloadbrew-e81f4ab7deeb40308f240be5ea00091fc8786d7a.tar.bz2
init
Diffstat (limited to 'Library/Homebrew/cask/lib/hbc/source/path_base.rb')
-rw-r--r--Library/Homebrew/cask/lib/hbc/source/path_base.rb65
1 files changed, 65 insertions, 0 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/source/path_base.rb b/Library/Homebrew/cask/lib/hbc/source/path_base.rb
new file mode 100644
index 000000000..bbb413fd3
--- /dev/null
+++ b/Library/Homebrew/cask/lib/hbc/source/path_base.rb
@@ -0,0 +1,65 @@
+require "rubygems"
+
+class Hbc::Source::PathBase
+ # derived classes must define method self.me?
+
+ def self.path_for_query(query)
+ query_string = query.to_s
+ Pathname.new(query_string.end_with?(".rb") ? query_string : query_string + ".rb")
+ end
+
+ attr_reader :path
+
+ def initialize(path)
+ @path = Pathname(path).expand_path
+ end
+
+ def load
+ raise Hbc::CaskError, "File '#{path}' does not exist" unless path.exist?
+ raise Hbc::CaskError, "File '#{path}' is not readable" unless path.readable?
+ raise Hbc::CaskError, "File '#{path}' is not a plain file" unless path.file?
+ load_cask
+ end
+
+ def to_s
+ # stringify to fully-resolved location
+ path.to_s
+ end
+
+ private
+
+ def load_cask
+ instance_eval(cask_contents, __FILE__, __LINE__)
+ rescue Hbc::CaskError, StandardError, ScriptError => e
+ # bug: e.message.concat doesn't work with Hbc::CaskError exceptions
+ raise e, e.message.concat(" while loading '#{path}'")
+ end
+
+ def cask_contents
+ File.open(path, "rb") do |handle|
+ contents = handle.read
+ if defined?(Encoding)
+ contents.force_encoding("UTF-8")
+ else
+ contents
+ end
+ end
+ end
+
+ def cask(header_token, &block)
+ build_cask(Hbc::Cask, header_token, &block)
+ end
+
+ def test_cask(header_token, &block)
+ build_cask(Hbc::TestCask, header_token, &block)
+ end
+
+ def build_cask(cask_class, header_token, &block)
+ raise Hbc::CaskTokenDoesNotMatchError.new(cask_token, header_token) unless cask_token == header_token
+ cask_class.new(cask_token, sourcefile_path: path, &block)
+ end
+
+ def cask_token
+ path.basename.to_s.sub(%r{\.rb}, "")
+ end
+end