Add Formatter::pluralize.

This commit is contained in:
Markus Reiter 2017-03-11 11:33:12 +01:00
parent 666ab1438c
commit c594ffefbc
11 changed files with 34 additions and 20 deletions

View File

@ -83,7 +83,7 @@ module Hbc
@modified_casks = modified_cask_files.map { |f| Hbc.load(f) } @modified_casks = modified_cask_files.map { |f| Hbc.load(f) }
if @modified_casks.any? if @modified_casks.any?
num_modified = @modified_casks.size num_modified = @modified_casks.size
ohai "#{num_modified} modified cask#{plural(num_modified)}: " \ ohai "#{Formatter.pluralize(num_modified, "modified cask")}: " \
"#{@modified_casks.join(" ")}" "#{@modified_casks.join(" ")}"
end end
@modified_casks @modified_casks
@ -120,7 +120,7 @@ module Hbc
def report_failures def report_failures
return if failed_casks.empty? return if failed_casks.empty?
num_failed = failed_casks.size num_failed = failed_casks.size
odie "audit failed for #{num_failed} cask#{plural(num_failed)}: " \ odie "audit failed for #{Formatter.pluralize(num_failed, "cask")}: " \
"#{failed_casks.join(" ")}" "#{failed_casks.join(" ")}"
end end

View File

@ -43,7 +43,7 @@ module Homebrew
if ARGV.named.empty? if ARGV.named.empty?
if HOMEBREW_CELLAR.exist? if HOMEBREW_CELLAR.exist?
count = Formula.racks.length count = Formula.racks.length
puts "#{count} keg#{plural(count)}, #{HOMEBREW_CELLAR.abv}" puts "#{Formatter.pluralize(count, "keg")}, #{HOMEBREW_CELLAR.abv}"
end end
else else
ARGV.named.each_with_index do |f, i| ARGV.named.each_with_index do |f, i|

View File

@ -67,7 +67,7 @@ module Homebrew
if link_count.zero? if link_count.zero?
puts "No apps linked to #{target_dir}" if ARGV.verbose? puts "No apps linked to #{target_dir}" if ARGV.verbose?
else else
puts "Linked #{link_count} app#{plural(link_count)} to #{target_dir}" puts "Linked #{Formatter.pluralize(link_count, "app")} to #{target_dir}"
end end
end end

View File

@ -50,11 +50,11 @@ module Homebrew
pinned_count += 1 if tap.pinned? pinned_count += 1 if tap.pinned?
private_count += 1 if tap.private? private_count += 1 if tap.private?
end end
info = "#{tap_count} tap#{plural(tap_count)}" info = Formatter.pluralize(tap_count, "tap").to_s
info += ", #{pinned_count} pinned" info += ", #{pinned_count} pinned"
info += ", #{private_count} private" info += ", #{private_count} private"
info += ", #{formula_count} formula#{plural(formula_count, "e")}" info += ", #{Formatter.pluralize(formula_count, "formula")}"
info += ", #{command_count} command#{plural(command_count)}" info += ", #{Formatter.pluralize(command_count, "command")}"
info += ", #{Tap::TAP_DIRECTORY.abv}" if Tap::TAP_DIRECTORY.directory? info += ", #{Tap::TAP_DIRECTORY.abv}" if Tap::TAP_DIRECTORY.directory?
puts info puts info
else else
@ -65,10 +65,10 @@ module Homebrew
info += tap.pinned? ? "pinned" : "unpinned" info += tap.pinned? ? "pinned" : "unpinned"
info += ", private" if tap.private? info += ", private" if tap.private?
if (formula_count = tap.formula_files.size) > 0 if (formula_count = tap.formula_files.size) > 0
info += ", #{formula_count} formula#{plural(formula_count, "e")}" info += ", #{Formatter.pluralize(formula_count, "formula")}"
end end
if (command_count = tap.command_files.size) > 0 if (command_count = tap.command_files.size) > 0
info += ", #{command_count} command#{plural(command_count)}" info += ", #{Formatter.pluralize(command_count, "command")}"
end end
info += ", no formulae/commands" if (formula_count + command_count).zero? info += ", no formulae/commands" if (formula_count + command_count).zero?
info += "\n#{tap.path} (#{tap.path.abv})" info += "\n#{tap.path} (#{tap.path.abv})"

View File

@ -65,7 +65,7 @@ module Homebrew
puts "No apps unlinked from #{target_dir}" if ARGV.verbose? puts "No apps unlinked from #{target_dir}" if ARGV.verbose?
else else
n = ObserverPathnameExtension.total n = ObserverPathnameExtension.total
puts "Unlinked #{n} app#{plural(n)} from #{target_dir}" puts "Unlinked #{Formatter.pluralize(n, "app")} from #{target_dir}"
end end
end end

View File

@ -80,7 +80,7 @@ module Homebrew
unless updated_taps.empty? unless updated_taps.empty?
update_preinstall_header update_preinstall_header
puts "Updated #{updated_taps.size} tap#{plural(updated_taps.size)} " \ puts "Updated #{Formatter.pluralize(updated_taps.size, "tap")} " \
"(#{updated_taps.join(", ")})." "(#{updated_taps.join(", ")})."
updated = true updated = true
end end

View File

@ -66,12 +66,12 @@ module Homebrew
if formulae_to_install.empty? if formulae_to_install.empty?
oh1 "No packages to upgrade" oh1 "No packages to upgrade"
else else
oh1 "Upgrading #{formulae_to_install.length} outdated package#{plural(formulae_to_install.length)}, with result:" oh1 "Upgrading #{Formatter.pluralize(formulae_to_install.length, "outdated package")}, with result:"
puts formulae_to_install.map { |f| "#{f.full_specified_name} #{f.pkg_version}" } * ", " puts formulae_to_install.map { |f| "#{f.full_specified_name} #{f.pkg_version}" } * ", "
end end
unless upgrade_pinned? || pinned.empty? unless upgrade_pinned? || pinned.empty?
oh1 "Not upgrading #{pinned.length} pinned package#{plural(pinned.length)}:" oh1 "Not upgrading #{Formatter.pluralize(pinned.length, "pinned package")}:"
puts pinned.map { |f| "#{f.full_specified_name} #{f.pkg_version}" } * ", " puts pinned.map { |f| "#{f.full_specified_name} #{f.pkg_version}" } * ", "
end end

View File

@ -91,9 +91,7 @@ module Homebrew
return if problem_count.zero? return if problem_count.zero?
problems = "problem" + plural(problem_count) ofail "#{Formatter.pluralize(problem_count, "problem")} in #{Formatter.pluralize(formula_count, "formula")}"
formulae = "formula" + plural(formula_count, "e")
ofail "#{problem_count} #{problems} in #{formula_count} #{formulae}"
end end
end end

View File

@ -239,7 +239,7 @@ class Tap
link_completions_and_manpages link_completions_and_manpages
formula_count = formula_files.size formula_count = formula_files.size
puts "Tapped #{formula_count} formula#{plural(formula_count, "e")} (#{path.abv})" unless quiet puts "Tapped #{Formatter.pluralize(formula_count, "formula")} (#{path.abv})" unless quiet
Descriptions.cache_formulae(formula_names) Descriptions.cache_formulae(formula_names)
return if options[:clone_target] return if options[:clone_target]
@ -273,7 +273,7 @@ class Tap
Utils::Link.unlink_completions(path) Utils::Link.unlink_completions(path)
path.rmtree path.rmtree
path.parent.rmdir_if_possible path.parent.rmdir_if_possible
puts "Untapped #{formula_count} formula#{plural(formula_count, "e")}" puts "Untapped #{Formatter.pluralize(formula_count, "formula")}"
clear_cache clear_cache
end end

View File

@ -131,12 +131,12 @@ def pretty_duration(s)
if s > 59 if s > 59
m = s / 60 m = s / 60
s %= 60 s %= 60
res = "#{m} minute#{plural m}" res = Formatter.pluralize(m, "minute")
return res if s.zero? return res if s.zero?
res << " " res << " "
end end
res + "#{s} second#{plural s}" res << Formatter.pluralize(s, "second")
end end
def plural(n, s = "s") def plural(n, s = "s")

View File

@ -90,4 +90,20 @@ module Formatter
output output
end end
def pluralize(count, singular, plural = nil)
return "#{count} #{singular}" if count == 1
*adjectives, noun = singular.split(" ")
if plural.nil?
plural = {
"formula" => "formulae",
}.fetch(noun, "#{noun}s")
end
words = adjectives << plural
"#{count} #{words.join(" ")}"
end
end end