2015-01-01 22:08:06 +08:00
|
|
|
module Hbc::Scopes
|
2012-10-14 05:17:52 +08:00
|
|
|
def self.included(base)
|
|
|
|
base.extend(ClassMethods)
|
|
|
|
end
|
|
|
|
|
|
|
|
module ClassMethods
|
|
|
|
def all
|
2016-01-08 12:45:40 +08:00
|
|
|
@all_casks ||= {}
|
|
|
|
all_tokens.map { |t| @all_casks[t] ||= self.load(t) }
|
2012-11-19 13:10:28 +08:00
|
|
|
end
|
|
|
|
|
2014-05-16 04:49:43 +08:00
|
|
|
def all_tapped_cask_dirs
|
|
|
|
return @all_tapped_cask_dirs unless @all_tapped_cask_dirs.nil?
|
2015-01-07 22:09:53 +08:00
|
|
|
fq_default_tap = Hbc.homebrew_tapspath.join(default_tap, 'Casks')
|
|
|
|
@all_tapped_cask_dirs = Dir.glob(Hbc.homebrew_tapspath.join('*', '*', 'Casks')).map { |d| Pathname.new(d) }
|
2014-05-16 04:49:43 +08:00
|
|
|
# optimization: place the default Tap first
|
|
|
|
if @all_tapped_cask_dirs.include? fq_default_tap
|
|
|
|
@all_tapped_cask_dirs = @all_tapped_cask_dirs - [ fq_default_tap ]
|
|
|
|
@all_tapped_cask_dirs.unshift fq_default_tap
|
|
|
|
end
|
|
|
|
@all_tapped_cask_dirs
|
|
|
|
end
|
|
|
|
|
|
|
|
def reset_all_tapped_cask_dirs
|
|
|
|
# The memoized value should be reset when a Tap is added/removed
|
|
|
|
# (which is a rare event in our codebase).
|
|
|
|
@all_tapped_cask_dirs = nil
|
|
|
|
end
|
|
|
|
|
2014-11-29 03:36:16 +08:00
|
|
|
def all_tokens
|
|
|
|
cask_tokens = all_tapped_cask_dirs.map { |d| Dir.glob d.join('*.rb') }.flatten
|
|
|
|
cask_tokens.map { |c|
|
2014-04-26 01:01:32 +08:00
|
|
|
# => "/usr/local/Library/Taps/caskroom/example-tap/Casks/example.rb"
|
2013-04-05 05:52:50 +08:00
|
|
|
c.sub!(/\.rb$/, '')
|
2012-10-14 05:17:52 +08:00
|
|
|
# => ".../example"
|
2014-04-26 01:01:32 +08:00
|
|
|
c = c.split('/').last 4
|
|
|
|
# => ["caskroom", "example-tap", "Casks", "example"]
|
|
|
|
c.delete_at(-2)
|
2016-01-08 12:44:45 +08:00
|
|
|
# => ["caskroom", "example-tap", "example"]
|
2014-04-26 01:01:32 +08:00
|
|
|
c = c.join '/'
|
2012-10-14 05:17:52 +08:00
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def installed
|
2016-01-06 17:52:48 +08:00
|
|
|
@installed ||= {}
|
2013-12-06 09:38:23 +08:00
|
|
|
installed_cask_dirs = Pathname.glob(caskroom.join("*"))
|
2015-01-01 22:08:06 +08:00
|
|
|
# Hbc.load has some DWIM which is slow. Optimize here
|
|
|
|
# by spoon-feeding Hbc.load fully-qualified paths.
|
|
|
|
# todo: speed up Hbc::Source::Tapped (main perf drag is calling Hbc.all_tokens repeatedly)
|
|
|
|
# todo: ability to specify expected source when calling Hbc.load (minor perf benefit)
|
2014-05-16 04:50:42 +08:00
|
|
|
installed_cask_dirs.map do |install_dir|
|
2014-11-29 03:36:16 +08:00
|
|
|
cask_token = install_dir.basename.to_s
|
2014-05-16 04:50:42 +08:00
|
|
|
path_to_cask = all_tapped_cask_dirs.find do |tap_dir|
|
2014-11-29 03:36:16 +08:00
|
|
|
tap_dir.join("#{cask_token}.rb").exist?
|
|
|
|
end
|
|
|
|
if path_to_cask
|
2016-01-06 17:52:48 +08:00
|
|
|
@installed[cask_token] ||= Hbc.load(path_to_cask.join("#{cask_token}.rb"))
|
2014-11-29 03:36:16 +08:00
|
|
|
else
|
2016-01-06 17:52:48 +08:00
|
|
|
@installed[cask_token] ||= Hbc.load(cask_token)
|
2014-05-16 04:50:42 +08:00
|
|
|
end
|
2013-12-06 09:38:23 +08:00
|
|
|
end
|
2012-10-14 05:17:52 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|