Merge pull request #2314 from reitermarkus/formatter-pluralize

Replace `#plural` by `Formatter::pluralize`.
This commit is contained in:
Markus Reiter 2017-03-11 23:35:33 +01:00 committed by GitHub
commit 7a8d782365
14 changed files with 60 additions and 31 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -80,7 +80,7 @@ module Homebrew
unless updated_taps.empty?
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 = true
end

View File

@ -66,12 +66,12 @@ module Homebrew
if formulae_to_install.empty?
oh1 "No packages to upgrade"
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}" } * ", "
end
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}" } * ", "
end

View File

@ -21,3 +21,8 @@ def puts_columns(items)
odeprecated "puts_columns", "puts Formatter.columns"
puts Formatter.columns(items)
end
def plural(n, s = "s")
odeprecated "#plural", "Formatter.pluralize"
n == 1 ? "" : s
end

View File

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

View File

@ -239,7 +239,7 @@ class Tap
link_completions_and_manpages
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)
return if options[:clone_target]
@ -273,7 +273,7 @@ class Tap
Utils::Link.unlink_completions(path)
path.rmtree
path.parent.rmdir_if_possible
puts "Untapped #{formula_count} formula#{plural(formula_count, "e")}"
puts "Untapped #{Formatter.pluralize(formula_count, "formula")}"
clear_cache
end

View File

@ -52,4 +52,27 @@ describe Formatter do
it { is_expected.to eq("\n") }
end
end
describe "::pluralize" do
it "pluralizes words" do
expect(described_class.pluralize(0, "cask")).to eq("0 casks")
expect(described_class.pluralize(1, "cask")).to eq("1 cask")
expect(described_class.pluralize(2, "cask")).to eq("2 casks")
end
it "allows specifying custom plural forms" do
expect(described_class.pluralize(1, "child", "children")).to eq("1 child")
expect(described_class.pluralize(2, "child", "children")).to eq("2 children")
end
it "has plural forms of Homebrew jargon" do
expect(described_class.pluralize(1, "formula")).to eq("1 formula")
expect(described_class.pluralize(2, "formula")).to eq("2 formulae")
end
it "pluralizes the last word of a string" do
expect(described_class.pluralize(1, "new formula")).to eq("1 new formula")
expect(described_class.pluralize(2, "new formula")).to eq("2 new formulae")
end
end
end

View File

@ -219,13 +219,6 @@ describe "globally-scoped helper methods" do
end
end
specify "#plural" do
expect(plural(1)).to eq("")
expect(plural(0)).to eq("s")
expect(plural(42)).to eq("s")
expect(plural(42, "")).to eq("")
end
specify "#disk_usage_readable" do
expect(disk_usage_readable(1)).to eq("1B")
expect(disk_usage_readable(1000)).to eq("1000B")

View File

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

View File

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