class TransmissionRSS::Config

Class handles configuration parameters.

Public Class Methods

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

  @log = Log.instance
end

Public Instance Methods

load(config, watch: true) click to toggle source

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

# File lib/transmission-rss/config.rb, line 31
def load(config, watch: true)
  case config.class.to_s
  when 'Hash'
    self.merge!(config)
  when 'String'
    self.merge_yaml!(config, watch)
  else
    raise ArgumentError.new('Could not load config.')
  end

  check_deprecated
  check_warnings

  self
end
merge_defaults!() click to toggle source
# File lib/transmission-rss/config.rb, line 47
def merge_defaults!
  self.merge!({
    'feeds' => [],
    'update_interval' => 600,
    'add_paused' => false,
    'server' => {
      'host' => 'localhost',
      'port' => 9091,
      'tls'  => false,
      'rpc_path' => '/transmission/rpc'
    },
    'login' => nil,
    'log' => {
      'target' => $stderr,
      'level' => :debug
    },
    'fork' => false,
    'single' => 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 72
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 80
def reset!
  self.clear
  self.merge_defaults!
end
watch_file(path) click to toggle source
# File lib/transmission-rss/config.rb, line 85
def watch_file(path)
  path = Pathname.new(path).realpath.to_s

  @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

Private Instance Methods

check_deprecated() click to toggle source
# File lib/transmission-rss/config.rb, line 106
def check_deprecated
  warnings = false

  DEPRECATED.each do |key, value|
    if self[key.to_s]
      @log.warn('[DEPRECATED] option %s, use %s' % [key, value])
      warnings = true
    end
  end

  warnings
end
check_warnings() click to toggle source
# File lib/transmission-rss/config.rb, line 119
def check_warnings
  return false unless self['feeds']

  warnings = false

  urls = self['feeds'].map { |feed| feed['url'] }
  urls.duplicates.each do |duplicate|
    @log.warn('Duplicate URL definition: %s' % duplicate)
    warnings = true
  end

  warnings
end