homebrew-cask/lib/cask.rb

124 lines
3.0 KiB
Ruby

require 'uri'
HOMEBREW_CACHE_CASKS = HOMEBREW_CACHE.join('Casks')
class Cask; end
require 'cask/artifact'
require 'cask/audit'
require 'cask/auditor'
require 'cask/checkable'
require 'cask/cli'
require 'cask/container'
require 'cask/download'
require 'cask/dsl'
require 'cask/exceptions'
require 'cask/fetcher'
require 'cask/installer'
require 'cask/link_checker'
require 'cask/locations'
require 'cask/pkg'
require 'cask/scopes'
require 'cask/system_command'
require 'cask/underscore_supporting_uri'
require 'plist/parser'
class Cask
include Cask::DSL
include Cask::Locations
include Cask::Scopes
def self._file_source?(requested_cask)
File.file?(requested_cask)
end
def self._uri_source?(requested_cask)
!!(requested_cask =~ URI.regexp)
end
def self.init
HOMEBREW_CACHE.mkpath unless HOMEBREW_CACHE.exist?
unless caskroom.exist?
ohai "We need to make Caskroom for the first time at #{caskroom}"
ohai "We'll set permissions properly so we won't need sudo in the future"
current_user = ENV['USER']
sudo = 'sudo' unless caskroom.parent.writable?
system "#{sudo} mkdir -p #{caskroom}"
system "#{sudo} chown -R #{current_user}:staff #{caskroom.parent}"
end
appdir.mkpath unless appdir.exist?
end
def self._load_from_tap(cask_title)
if cask_title.include?('/')
cask_with_tap = cask_title
else
cask_with_tap = all_titles.grep(/#{cask_title}$/).first
end
if cask_with_tap
tap, cask = cask_with_tap.split('/')
source = tapspath.join(tap, 'Casks', "#{cask}.rb")
else
source = tapspath.join(default_tap, 'Casks', "#{cask_title}.rb")
end
raise CaskUnavailableError, cask_title unless source.exist?
_load_from_file(source)
end
def self._load_from_path(cask_path)
_load_from_file(Pathname.new(File::expand_path(cask_path)))
end
def self._load_from_uri(url)
HOMEBREW_CACHE_CASKS.mkpath
path = HOMEBREW_CACHE_CASKS.join(File.basename(url))
curl(url, '-o', path.to_s)
_load_from_path(path.to_s)
rescue ErrorDuringExecution
raise CaskUnavailableError, url
end
def self._load_from_file(source)
raise CaskUnavailableError, source unless source.exist?
require source
const_get(cask_class_name(source)).new
end
def self.load(requested_cask)
if _uri_source?(requested_cask)
_load_from_uri(requested_cask)
elsif _file_source?(requested_cask)
_load_from_path(requested_cask)
else
_load_from_tap(requested_cask)
end
end
def self.cask_class_name(pathname)
pathname.basename.to_s.sub(/\.rb/, '').split('-').map(&:capitalize).join
end
def self.title
self.name.gsub(/([a-zA-Z\d])([A-Z])/,'\1-\2').gsub(/([a-zA-Z\d])([A-Z])/,'\1-\2').downcase
end
attr_reader :title
def initialize(title=self.class.title)
@title = title
end
def destination_path
self.class.caskroom.join(self.title).join(self.version)
end
def installed?
destination_path.exist?
end
def to_s
@title
end
end