class Lolcommits::Configuration

Constants

LOLCOMMITS_BASE
LOLCOMMITS_ROOT

Attributes

loldir[W]
plugin_manager[RW]

Public Class Methods

loldir_for(basename) click to toggle source

class methods

# File lib/lolcommits/configuration.rb, line 124
def self.loldir_for(basename)
  loldir = File.join(LOLCOMMITS_BASE, basename)

  if File.directory? loldir
    begin
      # ensure 755 permissions for loldir
      File.chmod(0o755, loldir)
    rescue Errno::EPERM
      # abort if permissions cannot be met
      puts "FATAL: directory '#{loldir}' should be present and writeable by user '#{ENV['USER']}'"
      puts 'Try changing the directory permissions to 755'
      exit 1
    end
  else
    FileUtils.mkdir_p loldir
  end
  loldir
end
new(plugin_manager, test_mode: false) click to toggle source
# File lib/lolcommits/configuration.rb, line 11
def initialize(plugin_manager, test_mode: false)
  @plugin_manager = plugin_manager
  @loldir         = Configuration.loldir_for('test') if test_mode
end

Public Instance Methods

ask_for_plugin_name() click to toggle source
# File lib/lolcommits/configuration.rb, line 71
def ask_for_plugin_name
  list_plugins
  print 'Name of plugin to configure: '
  gets.strip
end
capture_path(ext = 'jpg') click to toggle source
# File lib/lolcommits/configuration.rb, line 47
def capture_path(ext = 'jpg')
  File.join loldir, "raw_capture.#{ext}"
end
configuration_file() click to toggle source
# File lib/lolcommits/configuration.rb, line 26
def configuration_file
  "#{loldir}/config.yml"
end
do_configure!(plugin_name) click to toggle source
# File lib/lolcommits/configuration.rb, line 77
def do_configure!(plugin_name)
  $stdout.sync = true
  plugin = find_plugin(plugin_name.to_s.strip)
  return unless plugin

  puts "Configuring plugin: #{plugin.name}\n"
  plugin_config = plugin.plugin_klass.new(config: yaml[plugin_name]).configure_options! || {}

  unless plugin_config[:enabled]
    puts "Disabling plugin: #{plugin.name} - answer with 'true' to enable & configure"
  end
rescue Interrupt
  # e.g. user Ctrl+c or aborted by plugin configure_options!
  puts "\n"
  if plugin
    puts "Configuration aborted: #{plugin.name} has been disabled"
    plugin_config ||= {}
    plugin_config[:enabled] = false
  end
ensure
  if plugin
    # clean away legacy enabled key, later we can remove this
    plugin_config.delete('enabled')
    # save plugin config (if we have anything in the hash)
    save(plugin.name, plugin_config) unless plugin_config.empty?

    # print config if plugin was enabled
    if plugin_config[:enabled]
      puts "\nSuccessfully configured plugin: #{plugin.name} - at path '#{configuration_file}'"
      puts plugin_config.to_yaml.to_s
    end
  end
end
find_plugin(name) click to toggle source
# File lib/lolcommits/configuration.rb, line 60
def find_plugin(name)
  plugin_name = name.empty? ? ask_for_plugin_name : name
  plugin = plugin_manager.find_by_name(plugin_name)

  return plugin if plugin

  puts "Unable to find plugin: '#{plugin_name}'"
  list_plugins unless name.empty?
  nil
end
list_plugins() click to toggle source
# File lib/lolcommits/configuration.rb, line 51
def list_plugins
  puts "Installed plugins: (* enabled)\n"

  plugin_manager.plugins.each do |gem_plugin|
    plugin = gem_plugin.plugin_klass.new(config: yaml[gem_plugin.name])
    puts " [#{plugin.enabled? ? '*' : '-'}] #{gem_plugin.name}"
  end
end
loldir() click to toggle source
# File lib/lolcommits/configuration.rb, line 30
def loldir
  return @loldir if @loldir

  basename ||= if VCSInfo.repo_root?
                 VCSInfo.local_name
               else
                 File.basename(Dir.getwd)
               end
  basename.sub!(/^\./, 'dot')
  basename.sub!(/ /, '-')
  @loldir = Configuration.loldir_for(basename)
end
save(plugin_name, plugin_config) click to toggle source
# File lib/lolcommits/configuration.rb, line 111
def save(plugin_name, plugin_config)
  config_file_contents = yaml.merge(plugin_name => plugin_config).to_yaml
  File.open(configuration_file, 'w') do |f|
    f.write(config_file_contents)
  end
end
sha_path(sha, ext) click to toggle source
# File lib/lolcommits/configuration.rb, line 43
def sha_path(sha, ext)
  File.join loldir, "#{sha}.#{ext}"
end
to_s() click to toggle source
# File lib/lolcommits/configuration.rb, line 118
def to_s
  yaml.to_yaml.to_s
end
yaml() click to toggle source
# File lib/lolcommits/configuration.rb, line 16
def yaml
  @yaml ||= begin
    if File.exist?(configuration_file)
      YAML.safe_load(File.open(configuration_file), [Symbol]) || Hash.new({})
    else
      Hash.new({})
    end
  end
end