Use extend/os pattern.

This commit is contained in:
Markus Reiter 2018-06-13 07:49:01 +02:00
parent 18e46b3ec2
commit b21430b13c
4 changed files with 46 additions and 40 deletions

View File

@ -18,7 +18,6 @@ require "missing_formula"
require "descriptions" require "descriptions"
require "cli_parser" require "cli_parser"
require "search" require "search"
require "hbc/cask_loader"
module Homebrew module Homebrew
module_function module_function
@ -63,38 +62,13 @@ module Homebrew
query = args.remaining.join(" ") query = args.remaining.join(" ")
string_or_regex = query_regexp(query) string_or_regex = query_regexp(query)
remote_results = if query.match?(HOMEBREW_TAP_FORMULA_REGEX) || query.match?(HOMEBREW_TAP_CASK_REGEX) remote_results = search_taps(query, silent: true)
_, _, name = query.split("/", 3)
search_taps(name, silent: true)
else
search_taps(query, silent: true)
end
local_formulae = if query.match?(HOMEBREW_TAP_FORMULA_REGEX)
begin
[Formulary.factory(query).name]
rescue FormulaUnavailableError
[]
end
else
search_formulae(string_or_regex)
end
local_formulae = search_formulae(string_or_regex)
remote_formulae = remote_results[:formulae] remote_formulae = remote_results[:formulae]
all_formulae = local_formulae + remote_formulae all_formulae = local_formulae + remote_formulae
local_casks = if !OS.mac? local_casks = search_casks(string_or_regex)
[]
elsif query.match?(HOMEBREW_TAP_CASK_REGEX)
begin
[Hbc::CaskLoader.load(query).token]
rescue Hbc::CaskUnavailableError
[]
end
else
search_casks(string_or_regex)
end
remote_casks = remote_results[:casks] remote_casks = remote_results[:casks]
all_casks = local_casks + remote_casks all_casks = local_casks + remote_casks

View File

@ -0,0 +1,26 @@
require "hbc/cask"
require "hbc/cask_loader"
module Homebrew
module Search
def search_casks(string_or_regex)
if string_or_regex.is_a?(String) && string_or_regex.match?(HOMEBREW_TAP_CASK_REGEX)
return begin
[Hbc::CaskLoader.load(string_or_regex).token]
rescue Hbc::CaskUnavailableError
[]
end
end
results = Hbc::Cask.search(string_or_regex, &:token).sort_by(&:token)
results.map do |cask|
if cask.installed?
pretty_installed(cask.token)
else
cask.token
end
end
end
end
end

View File

@ -0,0 +1 @@
require "extend/os/mac/search" if OS.mac?

View File

@ -1,5 +1,4 @@
require "searchable" require "searchable"
require "hbc/cask"
module Homebrew module Homebrew
module Search module Search
@ -14,6 +13,10 @@ module Homebrew
end end
def search_taps(query, silent: false) def search_taps(query, silent: false)
if query.match?(Regexp.union(HOMEBREW_TAP_FORMULA_REGEX, HOMEBREW_TAP_CASK_REGEX))
_, _, query = query.split("/", 3)
end
results = { formulae: [], casks: [] } results = { formulae: [], casks: [] }
return results if ENV["HOMEBREW_NO_GITHUB_API"] return results if ENV["HOMEBREW_NO_GITHUB_API"]
@ -53,6 +56,14 @@ module Homebrew
end end
def search_formulae(string_or_regex) def search_formulae(string_or_regex)
if string_or_regex.is_a?(String) && string_or_regex.match?(HOMEBREW_TAP_FORMULA_REGEX)
return begin
[Formulary.factory(string_or_regex).name]
rescue FormulaUnavailableError
[]
end
end
aliases = Formula.alias_full_names aliases = Formula.alias_full_names
results = (Formula.full_names + aliases) results = (Formula.full_names + aliases)
.extend(Searchable) .extend(Searchable)
@ -78,16 +89,10 @@ module Homebrew
end.compact end.compact
end end
def search_casks(string_or_regex) def search_casks(_string_or_regex)
results = Hbc::Cask.search(string_or_regex, &:token).sort_by(&:token) []
results.map do |cask|
if cask.installed?
pretty_installed(cask.token)
else
cask.token
end
end
end end
end end
end end
require "extend/os/search"