module Fezzik

Constants

VERSION

Public Class Methods

activated=(value) click to toggle source
# File lib/fezzik/base.rb, line 2
def self.activated=(value) @activated = value end
activated?() click to toggle source
# File lib/fezzik/base.rb, line 3
def self.activated?() @activated || false end
clear(name) click to toggle source
# File lib/fezzik/base.rb, line 31
def self.clear(name) @@settings.delete(name) end
default_weave_options() click to toggle source
# File lib/fezzik/base.rb, line 5
def self.default_weave_options() @@default_weave_options ||= {} end
default_weave_options=(options) click to toggle source
# File lib/fezzik/base.rb, line 6
def self.default_weave_options=(options) @@default_weave_options = options end
destination(*names, &block) click to toggle source
# File lib/fezzik/base.rb, line 66
def self.destination(*names, &block)
  @destinations ||= Set.new
  @destinations.merge(names)
  block.call if names.include?(@target_destination)
end
destinations() click to toggle source
# File lib/fezzik/base.rb, line 76
def self.destinations
  @destinations ||= Set.new
end
env(key, value, options={}) click to toggle source
# File lib/fezzik/environment.rb, line 2
def self.env(key, value, options={})
  options = {
    :hosts => Fezzik.get(:domain)
  }.merge(options)
  options[:hosts] = Array(options[:hosts])
  @environments ||= Hash.new { |h, k| h[k] = {} }
  options[:hosts].each { |host| @environments[host][key] = value }
end
environments() click to toggle source
# File lib/fezzik/environment.rb, line 11
def self.environments
  @environments ||= Hash.new { |h, k| h[k] = {} }
end
get(name) click to toggle source
# File lib/fezzik/base.rb, line 26
def self.get(name)
  raise "Fezzik: No such setting: #{name}" unless @@settings.has_key?(name)
  @@settings[name]
end
host_task(name, options = {}, &block) click to toggle source
# File lib/fezzik/base.rb, line 40
def self.host_task(name, options = {}, &block)
  options = {
    :args => [],
    :deps => [],
    :roles => [],
    :weave_options => {}
  }.merge(options)
  weave_options = options[:weave_options]
  options.delete(:weave_options)
  options.each { |key, value| options[key] = Array(value) }
  t = HostTask.define_task(name, { options[:args] => options[:deps] }, &block)
  t.roles += options[:roles]
  t.weave_options = t.weave_options.merge(weave_options)
end
init(options={}) click to toggle source
# File lib/fezzik/base.rb, line 55
def self.init(options={})
  @options = options
  @target_destination = ENV["fezzik_destination"].to_sym rescue nil
  unless options[:tasks].nil?
    $stderr.puts "Loading Fezzik tasks from #{@options[:tasks]}"
    Dir[File.join(File.expand_path(@options[:tasks]), "**", "*.rake")].sort.each do |lib|
      Rake.application.add_import(lib)
    end
  end
end
remote_task(*args, &block) click to toggle source
# File lib/fezzik/base.rb, line 33
def self.remote_task(*args, &block)
  warn "WARN [Fezzik]: remote_task is deprecated as of 0.8.0, use host_task instead"
  roles = (Hash === args.last && args.last[:roles]) ? args.pop[:roles] : []
  name, args, deps = Rake.application.resolve_args(args)
  host_task(name, { :args => Array(args), :deps => Array(deps), :roles => Array(roles) }, &block)
end
role(role_name, settings) click to toggle source
# File lib/fezzik/role.rb, line 2
def self.role(role_name, settings)
  @roles ||= {}
  @roles[role_name] = settings
end
roles() click to toggle source
# File lib/fezzik/role.rb, line 7
def self.roles() @roles ||= {} end
set(name, value) click to toggle source
# File lib/fezzik/base.rb, line 8
def self.set(name, value)
  @@settings ||= {}

  value = Array(value) if name == :domain

  @@settings[name] = value

  if Object.public_instance_methods.include? name.to_sym
    Object.send :alias_method, :"old_#{name}", name
  end

  Object.send :define_method, name do
    warn "WARN [Fezzik]: accessing #{name} at the top-level is deprecated as of 0.8.0," +
         " use Fezzik.get(:#{name}) instead"
    Fezzik.get name
  end
end
target_destination() click to toggle source
# File lib/fezzik/base.rb, line 72
def self.target_destination
  @target_destination ||= nil
end
with_role(role_name, &block) click to toggle source
# File lib/fezzik/role.rb, line 9
def self.with_role(role_name, &block)
  return block.call if roles[role_name].nil?

  overridden_settings = {}
  new_settings = []
  roles[role_name].each_key do |name|
    if @@settings.has_key? name
      overridden_settings[name] = Fezzik.get(name)
    else
      new_settings << name
    end
  end
  override_settings(roles[role_name])
  begin
    block.call
  ensure
    override_settings(overridden_settings, new_settings)
  end
end

Private Class Methods

override_settings(to_set, to_clear = []) click to toggle source
# File lib/fezzik/role.rb, line 29
def self.override_settings(to_set, to_clear = [])
  to_clear.each { |setting| Fezzik.clear setting }
  to_set.each { |setting, value| Fezzik.set setting, value }
end