Skip to content

Commit

Permalink
Merge pull request #3258 from Git-Jiro/improve_internal_stanza_command
Browse files Browse the repository at this point in the history
improve 'brew cask _stanza' by checking for known stanzas
  • Loading branch information
reitermarkus committed Nov 20, 2017
2 parents c458c90 + 17e001b commit 236b017
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 24 deletions.
37 changes: 13 additions & 24 deletions Library/Homebrew/cask/lib/hbc/cli/internal_stanza.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@ def initialize(*)
@stanza = args.shift.to_sym

@format = :to_yaml if yaml?

return if DSL::DSL_METHODS.include?(stanza)
raise ArgumentError,
<<~EOS
Unknown/unsupported stanza: '#{stanza}'
Check Cask reference for supported stanzas.
EOS
end

def run
Expand All @@ -54,12 +61,6 @@ def run
casks(alternative: -> { Hbc.all }).each do |cask|
print "#{cask}\t" if table?

unless cask.respond_to?(stanza)
opoo "no such stanza '#{stanza}' on Cask '#{cask}'" unless quiet?
puts ""
next
end

begin
value = cask.send(stanza)
rescue StandardError
Expand All @@ -68,26 +69,14 @@ def run
next
end

if artifact_name && !value.key?(artifact_name)
opoo "no such stanza '#{artifact_name}' on Cask '#{cask}'" unless quiet?
puts ""
next
end

if stanza == :artifacts
value = Hash[
value.map do |k, v|
v = v.map do |a|
next a.to_a if a.respond_to?(:to_a)
next a.to_h if a.respond_to?(:to_h)
a
end

[k, v]
end
]
value = Hash[value.map { |v| [v.class.dsl_key, v.to_s] }]
value = value[artifact_name] if artifact_name
end

value = value.fetch(artifact_name) if artifact_name
if value.nil? || (value.respond_to?(:to_a) && value.to_a.empty?)
stanza_name = artifact_name ? artifact_name : stanza
raise CaskError, "no such stanza '#{stanza_name}' on Cask '#{cask}'"
end

if format
Expand Down
42 changes: 42 additions & 0 deletions Library/Homebrew/test/cask/cli/internal_stanza_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
describe Hbc::CLI::InternalStanza, :cask do
it "shows stanza of the Specified Cask" do
command = described_class.new("gpg", "with-gpg")
expect {
command.run
}.to output("http://example.com/gpg-signature.asc\n").to_stdout
end

it "raises an exception when stanza is unknown/unsupported" do
expect {
described_class.new("this_stanza_does_not_exist", "with-gpg")
}.to raise_error(%r{Unknown/unsupported stanza})
end

it "raises an exception when normal stanza is not present on cask" do
command = described_class.new("caveats", "with-gpg")
expect {
command.run
}.to raise_error(/no such stanza/)
end

it "raises an exception when artifact stanza is not present on cask" do
command = described_class.new("zap", "with-gpg")
expect {
command.run
}.to raise_error(/no such stanza/)
end

it "raises an exception when 'depends_on' stanza is not present on cask" do
command = described_class.new("depends_on", "with-gpg")
expect {
command.run
}.to raise_error(/no such stanza/)
end

it "shows all artifact stanzas when using 'artifacts' keyword" do
command = described_class.new("artifacts", "with-gpg")
expect {
command.run
}.to output(/Caffeine\.app/).to_stdout
end
end

0 comments on commit 236b017

Please sign in to comment.