class Lolcommits::Configuration

Constants

LOLBASEDIR
LOLCOMMITS_ROOT

Attributes

loldir[W]

Public Class Methods

command_which(cmd) click to toggle source

Cross-platform way of finding an executable in the $PATH. idea taken from bit.ly/qDaTbY

which('ruby') #=> /usr/bin/ruby
# File lib/lolcommits/configuration.rb, line 148
def self.command_which(cmd)
  exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
  ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
    exts.each { |ext|
      exe = "#{path}/#{cmd}#{ext}"
      return exe if File.executable? exe
    }
  end
  return nil
end
git_config_color_always?() click to toggle source
# File lib/lolcommits/configuration.rb, line 140
def self.git_config_color_always?
  `git config color.ui`.chomp =~ /always/
end
is_fakecapture?() click to toggle source
# File lib/lolcommits/configuration.rb, line 128
def self.is_fakecapture?
  (ENV['LOLCOMMITS_FAKECAPTURE'] == '1' || false)
end
is_linux?() click to toggle source
# File lib/lolcommits/configuration.rb, line 120
def self.is_linux?
  RUBY_PLATFORM.to_s.downcase.include?("linux")
end
is_mac?() click to toggle source
# File lib/lolcommits/configuration.rb, line 116
def self.is_mac?
  RUBY_PLATFORM.to_s.downcase.include?("darwin")
end
is_windows?() click to toggle source
# File lib/lolcommits/configuration.rb, line 124
def self.is_windows?
  !! RUBY_PLATFORM.match(/(win|w)32/)
end
loldir_for(basename) click to toggle source
# File lib/lolcommits/configuration.rb, line 48
def self.loldir_for(basename)
  loldir = File.join(LOLBASEDIR, basename)

  if not File.directory? loldir
    FileUtils.mkdir_p loldir
  end
  loldir
end
new(attributes={}) click to toggle source
# File lib/lolcommits/configuration.rb, line 7
def initialize(attributes={})
  attributes.each do |attr, val|
    self.send("#{attr}=", val)
  end
end
platform() click to toggle source
# File lib/lolcommits/configuration.rb, line 13
def self.platform
  if is_fakecapture?
    'Fake'
  elsif is_mac?
    'Mac'
  elsif is_linux?
    'Linux'
  elsif is_windows?
    'Windows'
  else
    raise "Unknown / Unsupported Platform."
  end
end
valid_imagemagick_installed?() click to toggle source
# File lib/lolcommits/configuration.rb, line 132
def self.valid_imagemagick_installed?
  return false unless self.command_which('identify')
  return false unless self.command_which('mogrify')
  # you'd expect the below to work on its own, but it only handles old versions
  # and will throw an exception if IM is not installed in PATH
  MiniMagick::valid_version_installed?
end

Public Instance Methods

do_configure!(plugin, forced_options=nil) click to toggle source
# File lib/lolcommits/configuration.rb, line 74
def do_configure!(plugin, forced_options=nil)
  if plugin.nil? || plugin.strip == ''
    puts_plugins
    print "Name of plugin to configure: "
    plugin = STDIN.gets.strip
  end

  plugins = Lolcommits::PLUGINS.inject(Hash.new) do |acc, val|
    p = val.new(nil)
    acc.merge(p.name => p)
  end

  plugin_object = plugins[plugin]

  if plugin_object.nil?
    puts "Unable to find plugin: #{plugin}"
    return
  end

  if forced_options.nil?
    options = plugin_object.options.inject(Hash.new) do |acc, option|
      print "#{option}: "
      val = STDIN.gets.strip
      val = true  if val == 'true'
      val = false if val == 'false'

      acc.merge(option => val)
    end
  else
    options = forced_options
  end

  config = self.user_configuration || Hash.new
  config[plugin] = options
  File.open(self.user_configuration_file, 'w') do |f| 
    f.write(config.to_yaml)
  end 

  puts "#{config.to_yaml}\n"
  puts "Successfully Configured"
end
loldir() click to toggle source
# File lib/lolcommits/configuration.rb, line 39
def loldir
  return @loldir if @loldir

  basename ||= File.basename(Git.open('.').dir.to_s).sub(/^\./, 'dot')
  basename.sub!(/ /, '-')

  @loldir = Configuration.loldir_for(basename)
end
main_image(commit_sha) click to toggle source
# File lib/lolcommits/configuration.rb, line 65
def main_image(commit_sha)
  File.join self.loldir, "#{commit_sha}.jpg"
end
most_recent() click to toggle source
# File lib/lolcommits/configuration.rb, line 57
def most_recent
  Dir.glob(File.join self.loldir, "*").max_by {|f| File.mtime(f)}
end
puts_plugins() click to toggle source
# File lib/lolcommits/configuration.rb, line 69
def puts_plugins
  names = Lolcommits::PLUGINS.collect {|p| p.new(nil).name }
  puts "Available plugins: #{names.join(', ')}"
end
raw_image() click to toggle source
# File lib/lolcommits/configuration.rb, line 61
def raw_image
  File.join self.loldir, "tmp_snapshot.jpg"
end
user_configuration() click to toggle source
# File lib/lolcommits/configuration.rb, line 27
def user_configuration
  if File.exists?(user_configuration_file)
    YAML.load(File.open(user_configuration_file))
  else
    nil
  end
end
user_configuration_file() click to toggle source
# File lib/lolcommits/configuration.rb, line 35
def user_configuration_file
  "#{self.loldir}/config.yml"
end