mirror of
https://github.com/donl/homebrew-cask-versions.git
synced 2026-07-17 06:16:47 -06:00
* "Canonical App Name" becomes "Simplified App Name"
* devscript `cask_namer` renamed to `generate_cask_token`
* doc file `CASK_NAMING_REFERENCE.md` renamed to `cask_token_reference.md`
* DSL uses `"#{token}"` for interpolation instead of `"#{title}"`
* documentation text
* backend code (variables, method, class names)
* error message text
* tests
* code comments
* Cask comments
* emphasize `tags :name`
* doc: use "vendor" consistently instead of "developer"
* doc: many man page argument descriptions were incorrect
* incidental clarifications
Many backend variables similar to `cask_name` or `cask` have
been standardized to `cask_token`, `token`, etc, resolving a long-
standing ambiguity in which variables named `cask` might contain
a Cask instance or a string token.
In many places the docs could be shortened from "Cask name" to
simply "token", which is desirable because we use the term "Cask"
in too many contexts.
62 lines
2.1 KiB
Ruby
62 lines
2.1 KiB
Ruby
module Cask::Scopes
|
|
def self.included(base)
|
|
base.extend(ClassMethods)
|
|
end
|
|
|
|
module ClassMethods
|
|
def all
|
|
all_tokens.map { |c| self.load c }
|
|
end
|
|
|
|
def all_tapped_cask_dirs
|
|
return @all_tapped_cask_dirs unless @all_tapped_cask_dirs.nil?
|
|
fq_default_tap = tapspath.join(default_tap, 'Casks')
|
|
@all_tapped_cask_dirs = Dir.glob(tapspath.join('*', '*', 'Casks')).map { |d| Pathname.new(d) }
|
|
# 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
|
|
|
|
def all_tokens
|
|
cask_tokens = all_tapped_cask_dirs.map { |d| Dir.glob d.join('*.rb') }.flatten
|
|
cask_tokens.map { |c|
|
|
# => "/usr/local/Library/Taps/caskroom/example-tap/Casks/example.rb"
|
|
c.sub!(/\.rb$/, '')
|
|
# => ".../example"
|
|
c = c.split('/').last 4
|
|
# => ["caskroom", "example-tap", "Casks", "example"]
|
|
c.delete_at(-2)
|
|
# => ["example-tap", "example"]
|
|
c = c.join '/'
|
|
}
|
|
end
|
|
|
|
def installed
|
|
installed_cask_dirs = Pathname.glob(caskroom.join("*"))
|
|
# Cask.load has some DWIM which is slow. Optimize here
|
|
# by spoon-feeding Cask.load fully-qualified paths.
|
|
# todo: speed up Cask::Source::Tapped (main perf drag is calling Cask.all_tokens repeatedly)
|
|
# todo: ability to specify expected source when calling Cask.load (minor perf benefit)
|
|
installed_cask_dirs.map do |install_dir|
|
|
cask_token = install_dir.basename.to_s
|
|
path_to_cask = all_tapped_cask_dirs.find do |tap_dir|
|
|
tap_dir.join("#{cask_token}.rb").exist?
|
|
end
|
|
if path_to_cask
|
|
Cask.load(path_to_cask.join("#{cask_token}.rb"))
|
|
else
|
|
Cask.load(cask_token)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|