diff options
| author | Mike McQuaid | 2016-08-19 13:38:09 +0100 |
|---|---|---|
| committer | GitHub | 2016-08-19 13:38:09 +0100 |
| commit | bd1ded93ec46b2ae9c37dbf17dd6d74d3f727440 (patch) | |
| tree | cbe75815cbd4a20fd450429a0091b2997907a0fc /Library/Homebrew/cask/lib/hbc/source/path_base.rb | |
| parent | 9967bc99f030e83f0e16fe279b4ee1d90456da2a (diff) | |
| parent | 092e2797e156a36acd750d2783a18b47305a9747 (diff) | |
| download | brew-bd1ded93ec46b2ae9c37dbf17dd6d74d3f727440.tar.bz2 | |
Merge pull request #725 from AnastasiaSulyagina/move-cask
Move Cask core code to Homebrew
Diffstat (limited to 'Library/Homebrew/cask/lib/hbc/source/path_base.rb')
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/source/path_base.rb | 65 |
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 |
