class SousChef::Recipe
Attributes
node[RW]
shebang[RW]
shebang?[RW]
verbose[RW]
verbose?[RW]
Public Class Methods
load(file)
click to toggle source
# File lib/sous_chef/recipe.rb, line 13 def self.load(file) new { instance_eval(File.read(file), file, 1) } end
new(*flags, &block)
click to toggle source
# File lib/sous_chef/recipe.rb, line 7 def initialize(*flags, &block) flags.each {|flag| __send__("#{flag}=", true)} @resources = [] @block = block end
Public Instance Methods
add_resource(resource)
click to toggle source
# File lib/sous_chef/recipe.rb, line 78 def add_resource(resource) with_context(resource) do @resources << resource resource.setup end resource end
command(cmd)
click to toggle source
# File lib/sous_chef/recipe.rb, line 64 def command(cmd) if context context.command(cmd) else execute { command cmd } end end
context()
click to toggle source
# File lib/sous_chef/recipe.rb, line 86 def context @context end
directory(*args, &block)
click to toggle source
# File lib/sous_chef/recipe.rb, line 52 def directory(*args, &block) add_resource Resource::Directory.new(self, *args, &block) end
echo(string)
click to toggle source
# File lib/sous_chef/recipe.rb, line 40 def echo(string) command "echo '#{escape_string(string)}'" end
escape_path(path)
click to toggle source
# File lib/sous_chef/recipe.rb, line 96 def escape_path(path) path end
escape_string(string)
click to toggle source
# File lib/sous_chef/recipe.rb, line 100 def escape_string(string) # bash is completely insane # this stops the quote, immediately starts another one using # double quotes to insert the single quote, then resumes the # single quote again until the terminating single quote return if string.nil? string.gsub("'", %q{'"'"'}) end
execute(*args, &block)
click to toggle source
# File lib/sous_chef/recipe.rb, line 44 def execute(*args, &block) add_resource Resource::Execute.new(self, *args, &block) end
file(*args, &block)
click to toggle source
# File lib/sous_chef/recipe.rb, line 48 def file(*args, &block) add_resource Resource::File.new(self, *args, &block) end
gemfile(*args, &block)
click to toggle source
# File lib/sous_chef/recipe.rb, line 60 def gemfile(*args, &block) add_resource Resource::Gemfile.new(self, *args, &block) end
halt_on_failed_command()
click to toggle source
# File lib/sous_chef/recipe.rb, line 72 def halt_on_failed_command execute "halt on failed command" do command "set -e" end end
log(*args, &block)
click to toggle source
# File lib/sous_chef/recipe.rb, line 56 def log(*args, &block) add_resource Resource::Log.new(self, *args, &block) end
method_missing(meth, *args, &block)
click to toggle source
Calls superclass method
# File lib/sous_chef/recipe.rb, line 109 def method_missing(meth, *args, &block) if context && context.resource_respond_to?(meth) context.__send__(meth, *args, &block) else super end end
setup()
click to toggle source
# File lib/sous_chef/recipe.rb, line 17 def setup if @block instance_eval &@block @block = nil end end
to_script()
click to toggle source
# File lib/sous_chef/recipe.rb, line 24 def to_script @script ||= begin setup lines = [] lines << "#!/bin/bash" if shebang? lines += @resources.map do |resource| # @context = resource script = "" script << %{# #{resource.name}\n} if verbose? && resource.name script << resource.to_script end # add a trailing newline for consistency and vim-friendliness lines.join("\n\n") << "\n" end end
with_context(resource) { || ... }
click to toggle source
# File lib/sous_chef/recipe.rb, line 90 def with_context(resource) @context = resource yield @context = nil end