homebrew-cask/lib/cask/qualified_cask_name.rb

51 lines
1.6 KiB
Ruby

module Cask::QualifiedCaskName
def self.repo_prefix
'homebrew-'
end
def self.user_regexp
# per https://github.com/Homebrew/homebrew/blob/4c7bc9ec3bca729c898ee347b6135ba692ee0274/Library/Homebrew/cmd/tap.rb#L121
%r{[a-z_\-]+}
end
def self.repo_regexp
# per https://github.com/Homebrew/homebrew/blob/4c7bc9ec3bca729c898ee347b6135ba692ee0274/Library/Homebrew/cmd/tap.rb#L121
%r{(?:#{repo_prefix})?\w+}
end
def self.cask_regexp
# per https://github.com/caskroom/homebrew-cask/blob/04a8fa88c7b1d05adcd8307b9297e36f83ddbf5d/CONTRIBUTING.md#cask-name
%r{[a-z0-9\-]+}
end
def self.tap_regexp
%r{#{user_regexp}[/\-]#{repo_regexp}}
end
def self.qualified_cask_regexp
@qualified_cask_regexp ||= %r{#{tap_regexp}/#{cask_regexp}}
end
def self.parse(name)
return nil if ! name.kind_of?(String)
return nil if ! name.downcase.match(%r{^#{qualified_cask_regexp}$})
path_elements = name.downcase.split('/')
if path_elements.count == 2
# eg phinze-cask/google-chrome.
# Not certain this form is needed, but it was supported in the past.
cask = path_elements[1]
dash_elements = path_elements[0].split('-')
repo = dash_elements.pop
dash_elements.pop if dash_elements.count > 1 and dash_elements[-1] + '-' == repo_prefix
user = dash_elements.join('-')
else
# eg caskroom/cask/google-chrome
# per https://github.com/Homebrew/homebrew/wiki/brew-tap
user, repo, cask = path_elements
end
repo.sub!(%r{^#{repo_prefix}}, '')
odebug "[user, repo, cask] might be [#{user}, #{repo}, #{cask}]"
[user, repo, cask]
end
end