Merge pull request #17287 from alebcay/messages-strict-typing

messages: enable strict typing
This commit is contained in:
Mike McQuaid 2024-05-14 15:52:50 +09:00 committed by GitHub
commit a18e43c67c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 15 deletions

View File

@ -1,32 +1,43 @@
# typed: true # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
# A {Messages} object collects messages that may need to be displayed together # A {Messages} object collects messages that may need to be displayed together
# at the end of a multi-step `brew` command run. # at the end of a multi-step `brew` command run.
class Messages class Messages
attr_reader :caveats, :package_count, :install_times sig { returns(T::Array[T::Hash[Symbol, Symbol]]) }
attr_reader :caveats
sig { returns(Integer) }
attr_reader :package_count
sig { returns(T::Array[T::Hash[String, Float]]) }
attr_reader :install_times
sig { void } sig { void }
def initialize def initialize
@caveats = [] @caveats = T.let([], T::Array[T::Hash[Symbol, Symbol]])
@package_count = 0 @package_count = T.let(0, Integer)
@install_times = [] @install_times = T.let([], T::Array[T::Hash[String, Float]])
end end
sig { params(package: String, caveats: T.any(String, Caveats)).void }
def record_caveats(package, caveats) def record_caveats(package, caveats)
@caveats.push(package:, caveats:) @caveats.push(package:, caveats:)
end end
sig { params(package: String, elapsed_time: Float).void }
def package_installed(package, elapsed_time) def package_installed(package, elapsed_time)
@package_count += 1 @package_count += 1
@install_times.push(package:, time: elapsed_time) @install_times.push(package:, time: elapsed_time)
end end
sig { params(force_caveats: T::Boolean, display_times: T::Boolean).void }
def display_messages(force_caveats: false, display_times: false) def display_messages(force_caveats: false, display_times: false)
display_caveats(force: force_caveats) display_caveats(force: force_caveats)
display_install_times if display_times display_install_times if display_times
end end
sig { params(force: T::Boolean).void }
def display_caveats(force: false) def display_caveats(force: false)
return if @package_count.zero? return if @package_count.zero?
return if @package_count == 1 && !force return if @package_count == 1 && !force
@ -38,6 +49,7 @@ class Messages
end end
end end
sig { void }
def display_install_times def display_install_times
return if install_times.empty? return if install_times.empty?

View File

@ -11,7 +11,7 @@ RSpec.describe Messages do
describe "#record_caveats" do describe "#record_caveats" do
it "adds a caveat" do it "adds a caveat" do
expect do expect do
messages.record_caveats(test_formula, "Zsh completions were installed") messages.record_caveats(test_formula.name, "Zsh completions were installed")
end.to change(messages.caveats, :count).by(1) end.to change(messages.caveats, :count).by(1)
end end
end end
@ -19,13 +19,13 @@ RSpec.describe Messages do
describe "#package_installed" do describe "#package_installed" do
it "increases the package count" do it "increases the package count" do
expect do expect do
messages.package_installed(test_formula, elapsed_time) messages.package_installed(test_formula.name, elapsed_time)
end.to change(messages, :package_count).by(1) end.to change(messages, :package_count).by(1)
end end
it "adds to install_times" do it "adds to install_times" do
expect do expect do
messages.package_installed(test_formula, elapsed_time) messages.package_installed(test_formula.name, elapsed_time)
end.to change(messages.install_times, :count).by(1) end.to change(messages.install_times, :count).by(1)
end end
end end
@ -33,8 +33,8 @@ RSpec.describe Messages do
describe "#display_messages" do describe "#display_messages" do
context "when package_count is less than two" do context "when package_count is less than two" do
before do before do
messages.record_caveats(test_formula, "Zsh completions were installed") messages.record_caveats(test_formula.name, "Zsh completions were installed")
messages.package_installed(test_formula, elapsed_time) messages.package_installed(test_formula.name, elapsed_time)
end end
it "doesn't print caveat details" do it "doesn't print caveat details" do
@ -44,7 +44,7 @@ RSpec.describe Messages do
context "when caveats is empty" do context "when caveats is empty" do
before do before do
messages.package_installed(test_formula, elapsed_time) messages.package_installed(test_formula.name, elapsed_time)
end end
it "doesn't print caveat details" do it "doesn't print caveat details" do
@ -56,9 +56,9 @@ RSpec.describe Messages do
let(:test_formula2) { formula("bar") { url("https://brew.sh/bar-0.1.tgz") } } let(:test_formula2) { formula("bar") { url("https://brew.sh/bar-0.1.tgz") } }
before do before do
messages.record_caveats(test_formula, "Zsh completions were installed") messages.record_caveats(test_formula.name, "Zsh completions were installed")
messages.package_installed(test_formula, elapsed_time) messages.package_installed(test_formula.name, elapsed_time)
messages.package_installed(test_formula2, elapsed_time) messages.package_installed(test_formula2.name, elapsed_time)
end end
it "prints caveat details" do it "prints caveat details" do
@ -81,7 +81,7 @@ RSpec.describe Messages do
context "when `install_times` is present" do context "when `install_times` is present" do
before do before do
messages.package_installed(test_formula, elapsed_time) messages.package_installed(test_formula.name, elapsed_time)
end end
it "prints installation times" do it "prints installation times" do