Class: ProxyTester::Config

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

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file = available_config_file, config_engine = Psych) ⇒ Config

Returns a new instance of Config.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/proxy_tester/config.rb', line 45

def initialize(file = available_config_file, config_engine = Psych)
  config_mutex = Mutex.new
  config_mutex.synchronize do
    yaml = Psych.load_file(file)

    if yaml.respond_to? :[]
      @config = yaml.symbolize_keys
    else
      @config = {}
    end
  end
rescue StandardError => e
  fail Exceptions::ConfigFileNotReadable, JSON.dump(message: e.message, file: file)
end

Class Attribute Details

.optionsObject (readonly)

Returns the value of attribute options.



15
16
17
# File 'lib/proxy_tester/config.rb', line 15

def options
  @options
end

Class Method Details

.option(option, default_value) ⇒ Object



37
38
39
40
# File 'lib/proxy_tester/config.rb', line 37

def option(option, default_value)
  option_reader(option, default_value)
  option_writer(option)
end

.option_reader(option, default_value) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/proxy_tester/config.rb', line 17

def option_reader(option, default_value)
  define_method option.to_sym do
    config.fetch(option.to_sym, default_value)
  end

  @options << option
end

.option_writer(option) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/proxy_tester/config.rb', line 25

def option_writer(option)
  define_method "#{option}=".to_sym do |value|
    begin
      config[option.to_sym] = value
    rescue RuntimeError
      raise Exceptions::ConfigLocked, JSON.dump(option: option)
    end
  end

  @options << option
end

Instance Method Details

#allowed_config_file_pathsObject



76
77
78
79
80
81
82
83
# File 'lib/proxy_tester/config.rb', line 76

def allowed_config_file_paths
  [
    ::File.expand_path(::File.join(ENV['HOME'], '.config', 'proxy_tester', 'config.yaml')),
    ::File.expand_path(::File.join(ENV['HOME'], '.proxy_tester', 'config.yaml')),
    ::File.expand_path(::File.join('/etc', 'proxy_tester', 'config.yaml')),
    ::File.expand_path('../../../files/config.yaml', __FILE__),
  ]
end

#lockObject



60
61
62
# File 'lib/proxy_tester/config.rb', line 60

def lock
  config.freeze
end

#to_sObject



64
65
66
67
68
69
70
71
72
73
74
# File 'lib/proxy_tester/config.rb', line 64

def to_s
  result = []
  result << sprintf("%20s | %s", 'option', 'value')
  result << sprintf("%s + %s", '-' * 20, '-' * 80)

  Config.options.each do |o|
    result << sprintf("%20s | %s", o, Array(public_send(o)).join(', '))
  end

  result.join("\n")
end