Add remote search to brew cask search.
				
					
				
			This commit is contained in:
		
							parent
							
								
									2bda194bd9
								
							
						
					
					
						commit
						238cd5430f
					
				@ -13,6 +13,15 @@ module Hbc
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.search_remote(query)
 | 
			
		||||
        matches = GitHub.search_code("user:caskroom", "path:Casks", "filename:#{query}", "extension:rb")
 | 
			
		||||
        [*matches].map do |match|
 | 
			
		||||
          tap = Tap.fetch(match["repository"]["full_name"])
 | 
			
		||||
          next if tap.installed?
 | 
			
		||||
          "#{tap.name}/#{File.basename(match["path"], ".rb")}"
 | 
			
		||||
        end.compact
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.search(*arguments)
 | 
			
		||||
        exact_match = nil
 | 
			
		||||
        partial_matches = []
 | 
			
		||||
@ -29,29 +38,36 @@ module Hbc
 | 
			
		||||
          partial_matches = simplified_tokens.grep(/#{simplified_search_term}/i) { |t| all_tokens[simplified_tokens.index(t)] }
 | 
			
		||||
          partial_matches.delete(exact_match)
 | 
			
		||||
        end
 | 
			
		||||
        [exact_match, partial_matches, search_term]
 | 
			
		||||
 | 
			
		||||
        remote_matches = search_remote(search_term)
 | 
			
		||||
 | 
			
		||||
        [exact_match, partial_matches, remote_matches, search_term]
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.render_results(exact_match, partial_matches, search_term)
 | 
			
		||||
      def self.render_results(exact_match, partial_matches, remote_matches, search_term)
 | 
			
		||||
        if !exact_match && partial_matches.empty?
 | 
			
		||||
          puts "No Cask found for \"#{search_term}\"."
 | 
			
		||||
          return
 | 
			
		||||
        end
 | 
			
		||||
        if exact_match
 | 
			
		||||
          ohai "Exact match"
 | 
			
		||||
          ohai "Exact Match"
 | 
			
		||||
          puts highlight_installed exact_match
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        return if partial_matches.empty?
 | 
			
		||||
 | 
			
		||||
        unless partial_matches.empty?
 | 
			
		||||
          if extract_regexp search_term
 | 
			
		||||
          ohai "Regexp matches"
 | 
			
		||||
            ohai "Regexp Matches"
 | 
			
		||||
          else
 | 
			
		||||
          ohai "Partial matches"
 | 
			
		||||
            ohai "Partial Matches"
 | 
			
		||||
          end
 | 
			
		||||
          puts Formatter.columns(partial_matches.map(&method(:highlight_installed)))
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        return if remote_matches.empty?
 | 
			
		||||
        ohai "Remote Matches"
 | 
			
		||||
        puts Formatter.columns(remote_matches.map(&method(:highlight_installed)))
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.highlight_installed(token)
 | 
			
		||||
        return token unless Cask.new(token).installed?
 | 
			
		||||
        pretty_installed token
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@ describe Hbc::CLI::Search, :cask do
 | 
			
		||||
    expect {
 | 
			
		||||
      Hbc::CLI::Search.run("local")
 | 
			
		||||
    }.to output(<<-EOS.undent).to_stdout
 | 
			
		||||
      ==> Partial matches
 | 
			
		||||
      ==> Partial Matches
 | 
			
		||||
      local-caffeine
 | 
			
		||||
      local-transmission
 | 
			
		||||
    EOS
 | 
			
		||||
@ -42,13 +42,13 @@ describe Hbc::CLI::Search, :cask do
 | 
			
		||||
  it "accepts a regexp argument" do
 | 
			
		||||
    expect {
 | 
			
		||||
      Hbc::CLI::Search.run("/^local-c[a-z]ffeine$/")
 | 
			
		||||
    }.to output("==> Regexp matches\nlocal-caffeine\n").to_stdout
 | 
			
		||||
    }.to output("==> Regexp Matches\nlocal-caffeine\n").to_stdout
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  it "Returns both exact and partial matches" do
 | 
			
		||||
    expect {
 | 
			
		||||
      Hbc::CLI::Search.run("test-opera")
 | 
			
		||||
    }.to output(/^==> Exact match\ntest-opera\n==> Partial matches\ntest-opera-mail/).to_stdout
 | 
			
		||||
    }.to output(/^==> Exact Match\ntest-opera\n==> Partial Matches\ntest-opera-mail/).to_stdout
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  it "does not search the Tap name" do
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user