lib/sprinkle/verify.rb in mitchellh-sprinkle-0.1.5 vs lib/sprinkle/verify.rb in mitchellh-sprinkle-0.1.6

- old
+ new

@@ -1,18 +1,77 @@ module Sprinkle + # = Verification Methods + # + # As documented in Sprinkle::Package, you may define a block on a package + # which verifies that a package was installed correctly. If this verification + # block fails, Sprinkle will stop the script gracefully, raising the error. + # + # In addition to checking post install if it was successfully, verification + # blocks are also ran before an install to see if a package is <em>already</em> + # installed. If this is the case, the package is skipped and Sprinkle continues + # with the next package. This behavior can be overriden by setting the -f flag on + # the sprinkle script or setting Sprinkle::OPTIONS[:force] to true if you're + # using sprinkle programmatically. + # + # == An Example + # + # The following verifies that rails was installed correctly be checking to see + # if the 'rails' command is available on the command line: + # + # package :rails do + # gem 'rails' + # + # verify do + # has_executable 'rails' + # end + # end + # + # == Available Verifiers + # + # There are a variety of available methods for use in the verification block. + # The standard methods are defined in the Sprinkle::Verifiers module, so see + # their corresponding documentation. + # + # == Custom Verifiers + # + # If you feel that the built-in verifiers do not offer a certain aspect of + # verification which you need, you may create your own verifier! Simply wrap + # any method in a module which you want to use: + # + # module MagicBeansVerifier + # def has_magic_beans(sauce) + # @commands << '[ -z "`echo $' + sauce + '`"]' + # end + # end + # + # The method can append as many commands as it wishes to the @commands array. + # These commands will be run on the remote server and <b>MUST</b> give an + # exit status of 0 if successful or other if unsuccessful. + # + # To register your verifier, call the register method on Sprinkle::Verify: + # + # Sprinle::Verify.register(MagicBeansVerifier) + # + # And now you may use it like any other verifier: + # + # package :magic_beans do + # gem 'magic_beans' + # + # verify { has_magic_beans('ranch') } + # end class Verify include Sprinkle::Configurable - attr_accessor :package, :description, :commands + attr_accessor :package, :description, :commands #:nodoc: class <<self # Register a verification module def register(new_module) class_eval { include new_module } end end - def initialize(package, description = '', &block) + def initialize(package, description = '', &block) #:nodoc: raise 'Verify requires a block.' unless block @package = package @description = description @commands = [] @@ -20,11 +79,11 @@ @options[:padding] = 4 self.instance_eval(&block) end - def process(roles, pre = false) + def process(roles, pre = false) #:nodoc: assert_delivery description = @description.empty? ? @package.name : @description if logger.debug? @@ -40,10 +99,10 @@ end end end end - class VerificationFailed < Exception + class VerificationFailed < Exception #:nodoc: attr_accessor :package, :description def initialize(package, description) super("Verifying #{package.name}#{description} failed.") \ No newline at end of file