Browse Source
the create command opens up an editor with template to get started remove --create override flag from `brew cask edit` hopefully this will be more straightforward for contributors refs #306
5 changed files with 111 additions and 9 deletions
@ -0,0 +1,34 @@ |
|||||
|
module Cask::CLI::Create |
||||
|
def self.run(*arguments) |
||||
|
cask_name, *_ = *arguments |
||||
|
cask_path = Cask.path(cask_name) |
||||
|
|
||||
|
if cask_path.exist? |
||||
|
raise CaskAlreadyCreatedError.new cask_name |
||||
|
end |
||||
|
|
||||
|
File.open(cask_path, 'w') do |f| |
||||
|
f.write template(cask_name) |
||||
|
end |
||||
|
|
||||
|
exec_editor cask_path |
||||
|
end |
||||
|
|
||||
|
def self.template(cask_name); |
||||
|
cask_class = cask_name.split('-').map(&:capitalize).join |
||||
|
<<-EOS.undent |
||||
|
class #{cask_class} < Cask |
||||
|
url '' |
||||
|
homepage '' |
||||
|
version '' |
||||
|
sha1 '' |
||||
|
link :app, '' |
||||
|
end |
||||
|
EOS |
||||
|
end |
||||
|
|
||||
|
def self.help |
||||
|
"creates a cask of the given name and opens it in an editor" |
||||
|
end |
||||
|
end |
||||
|
|
@ -0,0 +1,64 @@ |
|||||
|
require 'test_helper' |
||||
|
|
||||
|
module RecordCreateorCalls |
||||
|
def exec_editor(*command) |
||||
|
editor_commands << command |
||||
|
end |
||||
|
|
||||
|
def reset! |
||||
|
@editor_commands = [] |
||||
|
end |
||||
|
|
||||
|
def editor_commands |
||||
|
@editor_commands ||= [] |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
module Cask::CLI::Create |
||||
|
extend RecordCreateorCalls |
||||
|
end |
||||
|
|
||||
|
describe Cask::CLI::Create do |
||||
|
before { Cask::CLI::Create.reset! } |
||||
|
|
||||
|
after { |
||||
|
%w[ new-cask additional-cask another-cask ].each do |cask| |
||||
|
path = Cask.path(cask) |
||||
|
path.delete if path.exist? |
||||
|
end |
||||
|
} |
||||
|
|
||||
|
it 'opens the editor for the specified cask' do |
||||
|
Cask::CLI::Create.run('new-cask') |
||||
|
Cask::CLI::Create.editor_commands.must_equal [ |
||||
|
[Cask.path('new-cask')] |
||||
|
] |
||||
|
end |
||||
|
|
||||
|
it 'drops a template down for the specified cask' do |
||||
|
Cask::CLI::Create.run('new-cask') |
||||
|
template = File.read(Cask.path('new-cask')) |
||||
|
template.must_equal <<-TEMPLATE.undent |
||||
|
class NewCask < Cask |
||||
|
url '' |
||||
|
homepage '' |
||||
|
version '' |
||||
|
sha1 '' |
||||
|
link :app, '' |
||||
|
end |
||||
|
TEMPLATE |
||||
|
end |
||||
|
|
||||
|
it 'throws away additional arguments and uses the first' do |
||||
|
Cask::CLI::Create.run('additional-cask', 'another-cask') |
||||
|
Cask::CLI::Create.editor_commands.must_equal [ |
||||
|
[Cask.path('additional-cask')] |
||||
|
] |
||||
|
end |
||||
|
|
||||
|
it 'raises an exception when the cask already exists' do |
||||
|
lambda { |
||||
|
Cask::CLI::Create.run('caffeine') |
||||
|
}.must_raise CaskAlreadyCreatedError |
||||
|
end |
||||
|
end |
Loading…
Reference in new issue