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



61
62
63
64
65
66
67
68
69
70
71
# File 'lib/parameter_filler.rb', line 61

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



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

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
# File 'lib/parameter_filler.rb', line 15

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

#fill_parameters(data, dist_data) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/parameter_filler.rb', line 47

def fill_parameters(data, dist_data)
  data ||= {}
  dist_data.each do |key, value|
    unless 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)
      data[key] = {} unless data.has_key?(key)
      data[key] = fill_parameters(data[key], dist_data[key])
    end
  end
  data
end

#load_yaml_file(file_name) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/parameter_filler.rb', line 31

def load_yaml_file(file_name)
  begin
    data = YAML.load_file(file_name)
    data = {} unless data
  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)


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

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