Module: Capistrano::Configuration::Variables
- Included in:
- Capistrano::Configuration
- Defined in:
- lib/capistrano/configuration/variables.rb
Instance Attribute Summary collapse
-
#variables ⇒ Object
readonly
The hash of variables that have been defined in this configuration instance.
Class Method Summary collapse
-
.included(base) ⇒ Object
:nodoc:.
Instance Method Summary collapse
- #[](variable) ⇒ Object
-
#exists?(variable) ⇒ Boolean
Returns true if the variable has been defined, and false otherwise.
-
#fetch(variable, *args) ⇒ Object
Access a named variable.
-
#method_missing_with_variables(sym, *args, &block) ⇒ Object
:nodoc:.
-
#reset!(variable) ⇒ Object
If the variable was originally a proc value, it will be reset to it’s original proc value.
-
#respond_to_with_variables?(sym, include_priv = false) ⇒ Boolean
:nodoc:.
- #scope(scope_name, &block) ⇒ Object
-
#set(variable, *args, &block) ⇒ Object
(also: #[]=)
Set a variable to the given value.
-
#unset(variable) ⇒ Object
Removes any trace of the given variable.
- #variables_has_key?(key) ⇒ Boolean
Instance Attribute Details
#variables ⇒ Object (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
146 147 148 |
# File 'lib/capistrano/configuration/variables.rb', line 146 def [](variable) fetch(variable, nil) end |
#exists?(variable) ⇒ Boolean
Returns true if the variable has been defined, and false otherwise.
80 81 82 |
# File 'lib/capistrano/configuration/variables.rb', line 80 def exists?(variable) (@scope && @variables[@scope] && @variables[@scope].key?(variable.to_sym)) || @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.
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/capistrano/configuration/variables.rb', line 106 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 @scope if !exists?(variable) return args.first unless args.empty? return yield(variable) if block_given? raise IndexError, "`#{variable}' not found" end if @variables[@scope] && @variables[@scope].respond_to?(:call) @original_procs[@scope] ||= {} @variables[@scope] ||= {} @original_procs[@scope][sym] = @variables[@scope][sym] @variables[@scope][sym] = @variables[@scope][sym].call elsif @variables[sym].respond_to?(:call) @original_procs[sym] = @variables[sym] @variables[sym] = @variables[sym].call end else 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 end (@scope && @variables[@scope] && @variables[@scope][sym]) || @variables[sym] end |
#method_missing_with_variables(sym, *args, &block) ⇒ Object
:nodoc:
181 182 183 184 185 186 187 |
# File 'lib/capistrano/configuration/variables.rb', line 181 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.
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/capistrano/configuration/variables.rb', line 87 def reset!(variable) sym = variable.to_sym protect(sym) do if @scope && @original_procs[@scope] && @original_procs[@scope].key?(sym) @variables[@scope] ||= {} @variables[@scope][sym] = @original_procs[@scope].delete(sym) true elsif @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:
177 178 179 |
# File 'lib/capistrano/configuration/variables.rb', line 177 def respond_to_with_variables?(sym, include_priv=false) #:nodoc: variables_has_key?(sym) || respond_to_without_variables?(sym, include_priv) end |
#scope(scope_name, &block) ⇒ Object
19 20 21 22 23 24 25 |
# File 'lib/capistrano/configuration/variables.rb', line 19 def scope(scope_name, &block) old_scope = @scope @scope = scope_name result = yield @scope = old_scope result end |
#set(variable, *args, &block) ⇒ Object Also known as: []=
Set a variable to the given value.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/capistrano/configuration/variables.rb', line 28 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) { if @scope @variables[@scope] ||= {} @variables[@scope][sym] = value else @variables[sym] = value end } end |
#unset(variable) ⇒ Object
Removes any trace of the given variable.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/capistrano/configuration/variables.rb', line 56 def unset(variable) sym = variable.to_sym protect(sym) do if @scope if @original_procs[@scope] && @original_procs[@scope][sym] @original_procs[@scope].delete(sym) @original_procs.delete(@scope) if @original_procs[@scope].empty? else @original_procs.delete(sym) end if @variables[@scope] && @variables[@scope][sym] @variables[@scope].delete(sym) @variables.delete(@scope) if @variables[@scope].empty? else @variables.delete(sym) end else @original_procs.delete(sym) @variables.delete(sym) end end end |
#variables_has_key?(key) ⇒ Boolean
150 151 152 |
# File 'lib/capistrano/configuration/variables.rb', line 150 def variables_has_key?(key) (@scope && @variables[@scope] && @variables[@scope].has_key?(key)) || @variables.has_key?(key) end |