Module: Fezzik

Defined in:
lib/fezzik/dsl.rb,
lib/fezzik/base.rb,
lib/fezzik/role.rb,
lib/fezzik/util.rb,
lib/fezzik/version.rb,
lib/fezzik/host_task.rb,
lib/fezzik/environment.rb

Defined Under Namespace

Modules: DSL, Util Classes: HostTask

Constant Summary collapse

VERSION =
"0.8.4"

Class Method Summary collapse

Class Method Details

.activated=(value) ⇒ Object



2
# File 'lib/fezzik/base.rb', line 2

def self.activated=(value) @activated = value end

.activated?Boolean

Returns:

  • (Boolean)


3
# File 'lib/fezzik/base.rb', line 3

def self.activated?() @activated || false end

.clear(name) ⇒ Object



31
# File 'lib/fezzik/base.rb', line 31

def self.clear(name) @@settings.delete(name) end

.default_weave_optionsObject



5
# File 'lib/fezzik/base.rb', line 5

def self.default_weave_options() @@default_weave_options ||= {} end

.default_weave_options=(options) ⇒ Object



6
# File 'lib/fezzik/base.rb', line 6

def self.default_weave_options=(options) @@default_weave_options = options end

.destination(*names, &block) ⇒ Object



66
67
68
69
70
# 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

.destinationsObject



76
77
78
# File 'lib/fezzik/base.rb', line 76

def self.destinations
  @destinations ||= Set.new
end

.env(key, value, options = {}) ⇒ Object



2
3
4
5
6
7
8
9
# 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

.environmentsObject



11
12
13
# File 'lib/fezzik/environment.rb', line 11

def self.environments
  @environments ||= Hash.new { |h, k| h[k] = {} }
end

.get(name) ⇒ Object



26
27
28
29
# 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) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 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 = {}) ⇒ Object



55
56
57
58
59
60
61
62
63
64
# 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) ⇒ Object



33
34
35
36
37
38
# 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) ⇒ Object



2
3
4
5
# File 'lib/fezzik/role.rb', line 2

def self.role(role_name, settings)
  @roles ||= {}
  @roles[role_name] = settings
end

.rolesObject



7
# File 'lib/fezzik/role.rb', line 7

def self.roles() @roles ||= {} end

.set(name, value) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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_destinationObject



72
73
74
# File 'lib/fezzik/base.rb', line 72

def self.target_destination
  @target_destination ||= nil
end

.with_role(role_name, &block) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 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