40 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| module Hbc
 | |
|   module QualifiedToken
 | |
|     REPO_PREFIX = "homebrew-".freeze
 | |
| 
 | |
|     # per https://github.com/Homebrew/homebrew/blob/4c7bc9ec3bca729c898ee347b6135ba692ee0274/Library/Homebrew/cmd/tap.rb#L121
 | |
|     USER_REGEX = %r{[a-z_\-]+}
 | |
| 
 | |
|     # per https://github.com/Homebrew/homebrew/blob/4c7bc9ec3bca729c898ee347b6135ba692ee0274/Library/Homebrew/cmd/tap.rb#L121
 | |
|     REPO_REGEX = %r{(?:#{REPO_PREFIX})?\w+}
 | |
| 
 | |
|     # per https://github.com/caskroom/homebrew-cask/blob/master/CONTRIBUTING.md#generating-a-token-for-the-cask
 | |
|     TOKEN_REGEX = %r{[a-z0-9\-]+}
 | |
| 
 | |
|     TAP_REGEX = %r{#{USER_REGEX}[/\-]#{REPO_REGEX}}
 | |
| 
 | |
|     QUALIFIED_TOKEN_REGEX = %r{#{TAP_REGEX}/#{TOKEN_REGEX}}
 | |
| 
 | |
|     def self.parse(arg)
 | |
|       return nil unless arg.is_a?(String) && arg.downcase =~ %r{^#{QUALIFIED_TOKEN_REGEX}$}
 | |
|       path_elements = arg.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.
 | |
|         token = path_elements[1]
 | |
|         dash_elements = path_elements[0].split("-")
 | |
|         repo = dash_elements.pop
 | |
|         dash_elements.pop if dash_elements.count > 1 && dash_elements[-1] + "-" == REPO_PREFIX
 | |
|         user = dash_elements.join("-")
 | |
|       else
 | |
|         # eg caskroom/cask/google-chrome
 | |
|         # per https://github.com/Homebrew/brew/blob/master/docs/brew-tap.md
 | |
|         user, repo, token = path_elements
 | |
|       end
 | |
|       repo.sub!(%r{^#{REPO_PREFIX}}, "")
 | |
|       odebug "[user, repo, token] might be [#{user}, #{repo}, #{token}]"
 | |
|       [user, repo, token]
 | |
|     end
 | |
|   end
 | |
| end
 | 
