Class: ParameterFiller

Inherits:
Object
  • Object
show all
Defined in:
lib/parameter_filler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(files_list, verbose, interactive) ⇒ ParameterFiller

Returns a new instance of ParameterFiller.



9
10
11
12
13
# File 'lib/parameter_filler.rb', line 9

def initialize(files_list, verbose, interactive)
  @config_files = files_list
  @verbose = verbose
  @interactive = interactive
end

Instance Attribute Details

#config_filesObject (readonly)

Returns the value of attribute config_files.



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

def config_files
  @config_files
end

#interactiveObject (readonly)

Returns the value of attribute interactive.



7
8
9
# File 'lib/parameter_filler.rb', line 7

def interactive
  @interactive
end

#verboseObject (readonly)

Returns the value of attribute verbose.



6
7
8
# File 'lib/parameter_filler.rb', line 6

def verbose
  @verbose
end

Instance Method Details

#ask_for_param(key, default) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/parameter_filler.rb', line 68

def ask_for_param(key, default)
  return default unless interactive
  print "Key \"#{key}\" (default: #{default}): "
  param = gets.chomp
  if param.empty? || !interactive
    param = default
  else
    param = YAML.load(param)
  end
  param
end

#fill_file(file_name) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/parameter_filler.rb', line 24

def fill_file(file_name)
  dist_file_name = file_name + '.dist'
  setup_files(file_name, dist_file_name)
  config_data = load_yaml_file file_name
  dist_data = load_yaml_file dist_file_name
  config_data = fill_parameters(config_data, dist_data)
  File.write(file_name, config_data.to_yaml)
end

#fill_file_listObject



15
16
17
18
19
20
21
22
# File 'lib/parameter_filler.rb', line 15

def fill_file_list
  @config_files.each do |file_name|
    if verbose
      puts 'Filling ' + file_name + '...'
    end
    fill_file file_name
  end
end

#fill_parameters(data, dist_data) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/parameter_filler.rb', line 53

def fill_parameters(data, dist_data)
  dist_data.each do |key, value|
    if !data.has_key?(key) && !dist_data[key].is_a?(Hash)
      data[key] = ask_for_param(key, value)
    end
    if dist_data[key].is_a?(Hash)
      unless data.has_key?(key)
        data[key] = {}
      end
      data[key] = fill_parameters(data[key], dist_data[key])
    end
  end
  data
end

#load_yaml_file(file_name) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/parameter_filler.rb', line 33

def load_yaml_file(file_name)
  begin
    data = YAML.load_file(file_name)
    unless data
      data = {}
    end
  rescue Exception => e
    raise ArgumentError, 'Invalid YAML in config file ' + file_name unless data
  end
  data
end

#setup_files(file_name, dist_file_name) ⇒ Object

Raises:

  • (ArgumentError)


45
46
47
48
49
50
51
# File 'lib/parameter_filler.rb', line 45

def setup_files(file_name, dist_file_name)
  raise ArgumentError, 'Dist file not found for ' + file_name unless File.file?(dist_file_name)
  unless File.file?(file_name)
    File.write(file_name, '')
  end
  return
end