Hook class
This commit is contained in:
parent
8f24d2d98c
commit
80a7c8a0cb
|
@ -0,0 +1,53 @@
|
||||||
|
module Vagrant
|
||||||
|
module Action
|
||||||
|
# This class manages hooks into existing {Builder} stacks, and lets you
|
||||||
|
# add and remove middleware classes. This is the primary method by which
|
||||||
|
# plugins can hook into built-in middleware stacks.
|
||||||
|
class Hook
|
||||||
|
# This is a hash of the middleware to prepend to a certain
|
||||||
|
# other middleware.
|
||||||
|
#
|
||||||
|
# @return [Hash<Class, Array<Class>>]
|
||||||
|
attr_reader :before_hooks
|
||||||
|
|
||||||
|
# This is a hash of the middleware to append to a certain other
|
||||||
|
# middleware.
|
||||||
|
#
|
||||||
|
# @return [Hash<Class, Array<Class>>]
|
||||||
|
attr_reader :after_hooks
|
||||||
|
|
||||||
|
# This is a list of the hooks to just prepend to the beginning
|
||||||
|
#
|
||||||
|
# @return [Array<Class>]
|
||||||
|
attr_reader :prepend_hooks
|
||||||
|
|
||||||
|
# This is a list of the hooks to just append to the end
|
||||||
|
#
|
||||||
|
# @return [Array<Class>]
|
||||||
|
attr_reader :append_hooks
|
||||||
|
|
||||||
|
def initialize
|
||||||
|
@before_hooks = Hash.new { |h, k| h[k] = [] }
|
||||||
|
@after_hooks = Hash.new { |h, k| h[k] = [] }
|
||||||
|
@prepend_hooks = []
|
||||||
|
@append_hooks = []
|
||||||
|
end
|
||||||
|
|
||||||
|
def before(existing, new)
|
||||||
|
@before_hooks[existing] << new
|
||||||
|
end
|
||||||
|
|
||||||
|
def after(existing, new)
|
||||||
|
@after_hooks[existing] << new
|
||||||
|
end
|
||||||
|
|
||||||
|
def append(new)
|
||||||
|
@append_hooks << new
|
||||||
|
end
|
||||||
|
|
||||||
|
def prepend(new)
|
||||||
|
@prepend_hooks << new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,52 @@
|
||||||
|
require File.expand_path("../../../base", __FILE__)
|
||||||
|
|
||||||
|
require "vagrant/action/hook"
|
||||||
|
|
||||||
|
describe Vagrant::Action::Hook do
|
||||||
|
describe "defaults" do
|
||||||
|
its("after_hooks") { should be_empty }
|
||||||
|
its("before_hooks") { should be_empty }
|
||||||
|
its("append_hooks") { should be_empty }
|
||||||
|
its("prepend_hooks") { should be_empty }
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "before hooks" do
|
||||||
|
let(:existing) { "foo" }
|
||||||
|
|
||||||
|
it "should append them" do
|
||||||
|
subject.before(existing, 1)
|
||||||
|
subject.before(existing, 2)
|
||||||
|
|
||||||
|
subject.before_hooks[existing].should == [1, 2]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "after hooks" do
|
||||||
|
let(:existing) { "foo" }
|
||||||
|
|
||||||
|
it "should append them" do
|
||||||
|
subject.after(existing, 1)
|
||||||
|
subject.after(existing, 2)
|
||||||
|
|
||||||
|
subject.after_hooks[existing].should == [1, 2]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "append" do
|
||||||
|
it "should make a list" do
|
||||||
|
subject.append(1)
|
||||||
|
subject.append(2)
|
||||||
|
|
||||||
|
subject.append_hooks.should == [1, 2]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "prepend" do
|
||||||
|
it "should make a list" do
|
||||||
|
subject.prepend(1)
|
||||||
|
subject.prepend(2)
|
||||||
|
|
||||||
|
subject.prepend_hooks.should == [1, 2]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue