Merge pull request #2742 from rolandwalker/before_install

add `before_install` and `before_uninstall`
This commit is contained in:
Roland Walker
2014-02-13 11:19:33 -05:00
4 changed files with 64 additions and 1 deletions
+2
View File
@@ -7,6 +7,7 @@ require 'cask/artifact/hardlinked'
require 'cask/artifact/app'
require 'cask/artifact/binary'
require 'cask/artifact/after_block'
require 'cask/artifact/before_block'
require 'cask/artifact/colorpicker'
require 'cask/artifact/font'
require 'cask/artifact/nested_container'
@@ -27,6 +28,7 @@ module Cask::Artifact
#
def self.artifacts
[
Cask::Artifact::BeforeBlock,
Cask::Artifact::NestedContainer,
Cask::Artifact::App,
Cask::Artifact::Colorpicker,
+14
View File
@@ -0,0 +1,14 @@
class Cask::Artifact::BeforeBlock < Cask::Artifact::Base
def self.me?(cask)
cask.artifacts[:before_install].any? ||
cask.artifacts[:before_uninstall].any?
end
def install
@cask.artifacts[:before_install].each { |block| @cask.instance_eval &block }
end
def uninstall
@cask.artifacts[:before_uninstall].each { |block| @cask.instance_eval &block }
end
end
+3 -1
View File
@@ -98,7 +98,9 @@ module Cask::DSL
ARTIFACT_BLOCK_TYPES = [
:after_install,
:after_uninstall
:after_uninstall,
:before_install,
:before_uninstall,
]
ARTIFACT_BLOCK_TYPES.each do |type|
+45
View File
@@ -0,0 +1,45 @@
require 'test_helper'
describe Cask::Artifact::BeforeBlock do
describe 'install' do
it 'calls the specified block before installing' do
called = false
yielded_arg = nil
CaskWithBeforeInstall = Class.new(Cask)
CaskWithBeforeInstall.class_eval do
before_install do |c|
called = true
yielded_arg = c
end
end
cask = CaskWithBeforeInstall.new
Cask::Artifact::BeforeBlock.new(cask).install
called.must_equal true
yielded_arg.must_equal cask
end
end
describe 'uninstall' do
it 'calls the specified block before uninstalling, passing the cask' do
called = false
yielded_arg = nil
CaskWithBeforeUninstall = Class.new(Cask)
CaskWithBeforeUninstall.class_eval do
before_uninstall do |c|
called = true
yielded_arg = c
end
end
cask = CaskWithBeforeUninstall.new
Cask::Artifact::BeforeBlock.new(cask).uninstall
called.must_equal true
yielded_arg.must_equal cask
end
end
end