class TransmissionRSS::Config

Class handles configuration parameters.

Public Class Methods

new(file = nil) click to toggle source
# File lib/transmission-rss/config.rb, line 19
def initialize(file = nil)
  self.merge_defaults!
  self.load(file) unless file.nil?

  @log = Log.instance
end

Public Instance Methods

load(config) click to toggle source

Merges a Hash or YAML file (containing a Hash) with itself.

# File lib/transmission-rss/config.rb, line 27
def load(config)
  case config.class.to_s
  when 'Hash'
    self.merge!(config)
  when 'String'
    self.merge_yaml!(config)
  else
    raise ArgumentError.new('Could not load config.')
  end
end
merge_defaults!() click to toggle source
# File lib/transmission-rss/config.rb, line 38
def merge_defaults!
  self.merge!({
    'feeds' => [],
    'update_interval' => 600,
    'add_paused' => false,
    'server' => {
      'host' => 'localhost',
      'port' => 9091,
      'rpc_path' => '/transmission/rpc'
    },
    'login' => nil,
    'log_target' => $stderr,
    'fork' => false,
    'pid_file' => false,
    'privileges' => {},
    'seen_file' => nil
  })
end
merge_yaml!(path, watch = true) click to toggle source

Merge Config Hash with Hash from YAML file.

# File lib/transmission-rss/config.rb, line 58
def merge_yaml!(path, watch = true)
  self.merge!(YAML.load_file(path))
rescue TypeError
  # If YAML loading fails, .load_file returns `false`.
else
  watch_file(path) if watch && linux?
end
reset!() click to toggle source
# File lib/transmission-rss/config.rb, line 66
def reset!
  self.clear
  self.merge_defaults!
end
watch_file(path) click to toggle source
# File lib/transmission-rss/config.rb, line 71
def watch_file(path)
  path = Pathname.new(path).realpath.to_s
  @log.debug('watch_file ' + path)

  @notifier ||= INotify::Notifier.new
  @notifier.watch(path, :close_write) do |e|
    self.reset!
    self.merge_yaml!(path, false)

    @log.debug('reloaded config file ' + path)
    @log.debug(self)

    on_change
  end

  @notifier_thread ||= Thread.start do
    @notifier.run
  end
end