Merge pull request #806 from reitermarkus/refactor-cask-scopes
Add `cask_files` method to `Tap` class.
This commit is contained in:
		
						commit
						42e45a3d5f
					
				@ -33,18 +33,14 @@ class Hbc::CLI::Doctor < Hbc::CLI::Base
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def self.alt_taps
 | 
			
		||||
    Tap.select { |t| t.cask_dir.directory? && t != Hbc.default_tap }
 | 
			
		||||
    Tap.select { |t| t.cask_dir && t != Hbc.default_tap }
 | 
			
		||||
       .map(&:path)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def self.default_cask_count
 | 
			
		||||
    default_cask_count = notfound_string
 | 
			
		||||
    begin
 | 
			
		||||
      default_cask_count = Hbc.default_tap.cask_dir.children.count(&:file?)
 | 
			
		||||
    rescue StandardError
 | 
			
		||||
      default_cask_count = "0 #{error_string "Error reading #{Hbc.default_tap.path}"}"
 | 
			
		||||
    end
 | 
			
		||||
    default_cask_count
 | 
			
		||||
    Hbc.default_tap.cask_files.count
 | 
			
		||||
  rescue StandardError
 | 
			
		||||
    "0 #{error_string "Error reading #{Hbc.default_tap.path}"}"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def self.homebrew_origin
 | 
			
		||||
 | 
			
		||||
@ -16,12 +16,11 @@ class Hbc::CLI::Search < Hbc::CLI::Base
 | 
			
		||||
    partial_matches = []
 | 
			
		||||
    search_term = arguments.join(" ")
 | 
			
		||||
    search_regexp = extract_regexp arguments.first
 | 
			
		||||
    all_tokens = Hbc::CLI.nice_listing(Hbc.all_tokens)
 | 
			
		||||
    if search_regexp
 | 
			
		||||
      search_term = arguments.first
 | 
			
		||||
      partial_matches = Hbc::CLI.nice_listing(Hbc.all_tokens).grep(%r{#{search_regexp}}i)
 | 
			
		||||
      partial_matches = all_tokens.grep(%r{#{search_regexp}}i)
 | 
			
		||||
    else
 | 
			
		||||
      # suppressing search of the font Tap is a quick hack until behavior can be made configurable
 | 
			
		||||
      all_tokens = Hbc::CLI.nice_listing Hbc.all_tokens.reject { |t| %r{^caskroom/homebrew-fonts/}.match(t) }
 | 
			
		||||
      simplified_tokens = all_tokens.map { |t| t.sub(%r{^.*\/}, "").gsub(%r{[^a-z0-9]+}i, "") }
 | 
			
		||||
      simplified_search_term = search_term.sub(%r{\.rb$}i, "").gsub(%r{[^a-z0-9]+}i, "")
 | 
			
		||||
      exact_match = simplified_tokens.grep(%r{^#{simplified_search_term}$}i) { |t| all_tokens[simplified_tokens.index(t)] }.first
 | 
			
		||||
 | 
			
		||||
@ -10,29 +10,15 @@ module Hbc::Scopes
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def all_tapped_cask_dirs
 | 
			
		||||
      @all_tapped_cask_dirs ||= Tap.names.map(&Tap.method(:fetch)).map(&:cask_dir)
 | 
			
		||||
                                   .unshift(default_tap.cask_dir) # optimization: place the default Tap first
 | 
			
		||||
                                   .uniq
 | 
			
		||||
    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
 | 
			
		||||
      Tap.map(&:cask_dir).compact
 | 
			
		||||
    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!(%r{\.rb$}, "")
 | 
			
		||||
        # => ".../example"
 | 
			
		||||
        c = c.split("/").last 4
 | 
			
		||||
        # => ["caskroom", "example-tap", "Casks", "example"]
 | 
			
		||||
        c.delete_at(-2)
 | 
			
		||||
        # => ["caskroom", "example-tap", "example"]
 | 
			
		||||
        c.join "/"
 | 
			
		||||
      }
 | 
			
		||||
      Tap.map { |t|
 | 
			
		||||
        t.cask_files.map { |p|
 | 
			
		||||
          "#{t.name}/#{File.basename(p, ".rb")}"
 | 
			
		||||
        }
 | 
			
		||||
      }.flatten
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def installed
 | 
			
		||||
 | 
			
		||||
@ -290,13 +290,22 @@ class Tap
 | 
			
		||||
 | 
			
		||||
  # path to the directory of all {Cask} files for this {Tap}.
 | 
			
		||||
  def cask_dir
 | 
			
		||||
    @cask_dir ||= path/"Casks"
 | 
			
		||||
    @cask_dir ||= [path/"Casks"].detect(&:directory?)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # an array of all {Formula} files of this {Tap}.
 | 
			
		||||
  def formula_files
 | 
			
		||||
    @formula_files ||= if formula_dir
 | 
			
		||||
      formula_dir.children.select { |p| p.extname == ".rb" }
 | 
			
		||||
      formula_dir.children.select(&method(:formula_file?))
 | 
			
		||||
    else
 | 
			
		||||
      []
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # an array of all {Cask} files of this {Tap}.
 | 
			
		||||
  def cask_files
 | 
			
		||||
    @cask_files ||= if cask_dir
 | 
			
		||||
      cask_dir.children.select(&method(:cask_file?))
 | 
			
		||||
    else
 | 
			
		||||
      []
 | 
			
		||||
    end
 | 
			
		||||
@ -311,7 +320,7 @@ class Tap
 | 
			
		||||
    file.extname == ".rb" && file.parent == formula_dir
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # return true if given path would present a cask file in this {Tap}.
 | 
			
		||||
  # return true if given path would present a {Cask} file in this {Tap}.
 | 
			
		||||
  # accepts both absolute path and relative path (relative to this {Tap}'s path)
 | 
			
		||||
  # @private
 | 
			
		||||
  def cask_file?(file)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user