Class: Babushka::Vars

Inherits:
Object show all
Includes:
LogHelpers
Defined in:
lib/babushka/vars.rb

Defined Under Namespace

Modules: Helpers

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Methods included from LogHelpers

#debug, #log, #log_block, #log_error, #log_ok, #log_verbose, #log_warn

Constructor Details

- (Vars) initialize

A new instance of Vars



14
15
16
17
# File 'lib/babushka/vars.rb', line 14

def initialize
  @vars = Hashish.hash
  @saved_vars = Hashish.hash
end

Instance Attribute Details

- (Object) saved_vars (readonly)

Returns the value of attribute saved_vars



5
6
7
# File 'lib/babushka/vars.rb', line 5

def saved_vars
  @saved_vars
end

- (Object) vars (readonly)

Returns the value of attribute vars



5
6
7
# File 'lib/babushka/vars.rb', line 5

def vars
  @vars
end

Instance Method Details

- (Object) default_for(key)



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/babushka/vars.rb', line 58

def default_for key
  if vars[key.to_s][:default].respond_to? :call
    # If the default is a proc, re-evaluate it every time.
    instance_eval { vars[key.to_s][:default].call }

  elsif saved_vars[key.to_s].has_key? :value
    # Otherwise, if there's a saved value, use that.
    saved_vars[key.to_s][:value]

  # Symbol defaults are references to other vars.
  elsif vars[key.to_s][:default].is_a? Symbol
    # Look up the current value of the referenced var.
    referenced_val = var vars[key.to_s][:default], :ask => false
    # Use the corresponding saved value if there is one, otherwise use the reference.
    (saved_vars[key.to_s][:values] ||= {})[referenced_val] || referenced_val

  else
    # Otherwise, use the default.
    vars[key.to_s][:default]
  end
end

- (Object) define_var(name, opts = {})



41
42
43
44
45
# File 'lib/babushka/vars.rb', line 41

def define_var name, opts = {}
  vars[name.to_s].update opts.slice(:default, :type, :message, :choices, :choice_descriptions)
  vars[name.to_s][:choices] ||= vars[name.to_s][:choice_descriptions].keys unless vars[name.to_s][:choice_descriptions].nil?
  vars[name.to_s]
end

- (Object) for_save



47
48
49
50
51
52
53
54
55
56
# File 'lib/babushka/vars.rb', line 47

def for_save
  vars.dup.inject(saved_vars.dup) {|vars_to_save,(var,_)|
    vars_to_save[var].update vars[var]
    save_referenced_default_for(var, vars_to_save) if vars[var][:default].is_a?(Symbol)
    vars_to_save
  }.reject_r {|var,data|
    ![String, Symbol, Hash, Numeric, TrueClass, FalseClass].include?(data.class) ||
    var.to_s['password']
  }
end

- (Object) merge(key, value)



22
23
24
# File 'lib/babushka/vars.rb', line 22

def merge key, value
  set key, ((vars[key.to_s] || {})[:value] || {}).merge(value)
end

- (Object) set(key, value)



19
20
21
# File 'lib/babushka/vars.rb', line 19

def set key, value
  vars[key.to_s][:value] = value
end

- (Object) var(name, opts = {})



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/babushka/vars.rb', line 26

def var name, opts = {}
  define_var name, opts
  if vars[name.to_s].has_key? :value
    if vars[name.to_s][:value].respond_to? :call
      vars[name.to_s][:value].call
    else
      vars[name.to_s][:value]
    end
  elsif opts[:ask] != false
    ask_for_var name.to_s, opts
  else
    default_for name
  end
end