Module: Capistrano::Configuration::Variables

Included in:
Capistrano::Configuration
Defined in:
lib/capistrano/configuration/variables.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#variablesObject (readonly)

The hash of variables that have been defined in this configuration instance.



17
18
19
# File 'lib/capistrano/configuration/variables.rb', line 17

def variables
  @variables
end

Class Method Details

.included(base) ⇒ Object

:nodoc:



6
7
8
9
10
11
12
13
# File 'lib/capistrano/configuration/variables.rb', line 6

def self.included(base) #:nodoc:
  %w(initialize respond_to? method_missing).each do |m|
    base_name = m[/^\w+/]
    punct     = m[/\W+$/]
    base.send :alias_method, "#{base_name}_without_variables#{punct}", m
    base.send :alias_method, m, "#{base_name}_with_variables#{punct}"
  end
end

Instance Method Details

#[](variable) ⇒ Object



94
95
96
# File 'lib/capistrano/configuration/variables.rb', line 94

def [](variable)
  fetch(variable, nil)
end

#exists?(variable) ⇒ Boolean

Returns true if the variable has been defined, and false otherwise.

Returns:

  • (Boolean)


50
51
52
# File 'lib/capistrano/configuration/variables.rb', line 50

def exists?(variable)
  @variables.key?(variable.to_sym)
end

#fetch(variable, *args) ⇒ Object

Access a named variable. If the value of the variable responds_to? :call, #call will be invoked (without parameters) and the return value cached and returned.



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/capistrano/configuration/variables.rb', line 72

def fetch(variable, *args)
  if !args.empty? && block_given?
    raise ArgumentError, "you must specify either a default value or a block, but not both"
  end

  sym = variable.to_sym
  protect(sym) do
    if !@variables.key?(sym)
      return args.first unless args.empty?
      return yield(variable) if block_given?
      raise IndexError, "`#{variable}' not found"
    end

    if @variables[sym].respond_to?(:call)
      @original_procs[sym] = @variables[sym]
      @variables[sym] = @variables[sym].call
    end
  end

  @variables[sym]
end

#method_missing_with_variables(sym, *args, &block) ⇒ Object

:nodoc:



118
119
120
121
122
123
124
# File 'lib/capistrano/configuration/variables.rb', line 118

def method_missing_with_variables(sym, *args, &block) #:nodoc:
  if args.length == 0 && block.nil? && @variables.has_key?(sym)
    self[sym]
  else
    method_missing_without_variables(sym, *args, &block)
  end
end

#reset!(variable) ⇒ Object

If the variable was originally a proc value, it will be reset to it’s original proc value. Otherwise, this method does nothing. It returns true if the variable was actually reset.



57
58
59
60
61
62
63
64
65
66
67
# File 'lib/capistrano/configuration/variables.rb', line 57

def reset!(variable)
  sym = variable.to_sym
  protect(sym) do
    if @original_procs.key?(sym)
      @variables[sym] = @original_procs.delete(sym)
      true
    else
      false
    end
  end
end

#respond_to_with_variables?(sym, include_priv = false) ⇒ Boolean

:nodoc:

Returns:

  • (Boolean)


114
115
116
# File 'lib/capistrano/configuration/variables.rb', line 114

def respond_to_with_variables?(sym, include_priv=false) #:nodoc:
  @variables.has_key?(sym) || respond_to_without_variables?(sym, include_priv)
end

#set(variable, *args, &block) ⇒ Object Also known as: []=

Set a variable to the given value.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/capistrano/configuration/variables.rb', line 20

def set(variable, *args, &block)
  if variable.to_s !~ /^[_a-z]/
    raise ArgumentError, "invalid variable `#{variable}' (variables must begin with an underscore, or a lower-case letter)"
  end

  if !block_given? && args.empty? || block_given? && !args.empty?
    raise ArgumentError, "you must specify exactly one of either a value or a block"
  end

  if args.length > 1
    raise ArgumentError, "wrong number of arguments (#{args.length} for 1)"
  end

  value = args.empty? ? block : args.first
  sym = variable.to_sym
  protect(sym) { @variables[sym] = value }
end

#unset(variable) ⇒ Object

Removes any trace of the given variable.



41
42
43
44
45
46
47
# File 'lib/capistrano/configuration/variables.rb', line 41

def unset(variable)
  sym = variable.to_sym
  protect(sym) do
    @original_procs.delete(sym)
    @variables.delete(sym)
  end
end