Class: Lolcommits::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/lolcommits/configuration.rb

Constant Summary collapse

LOLBASEDIR =
ENV['LOLCOMMITS_DIR'] || File.join(ENV['HOME'], '.lolcommits')
LOLCOMMITS_ROOT =
File.join(File.dirname(__FILE__), '../..')

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = {}) ⇒ Configuration

Returns a new instance of Configuration.



7
8
9
10
11
# File 'lib/lolcommits/configuration.rb', line 7

def initialize(attributes={})
  attributes.each do |attr, val|
    self.send("#{attr}=", val)
  end
end

Instance Attribute Details

#loldirObject



39
40
41
42
43
44
45
46
# 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

Class Method Details

.command_which(cmd) ⇒ Object

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

which('ruby') #=> /usr/bin/ruby


148
149
150
151
152
153
154
155
156
157
# 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?Boolean

Returns:

  • (Boolean)


140
141
142
# File 'lib/lolcommits/configuration.rb', line 140

def self.git_config_color_always?
  `git config color.ui`.chomp =~ /always/
end

.is_fakecapture?Boolean

Returns:

  • (Boolean)


128
129
130
# File 'lib/lolcommits/configuration.rb', line 128

def self.is_fakecapture?
  (ENV['LOLCOMMITS_FAKECAPTURE'] == '1' || false)
end

.is_linux?Boolean

Returns:

  • (Boolean)


120
121
122
# File 'lib/lolcommits/configuration.rb', line 120

def self.is_linux?
  RUBY_PLATFORM.to_s.downcase.include?("linux")
end

.is_mac?Boolean

Returns:

  • (Boolean)


116
117
118
# File 'lib/lolcommits/configuration.rb', line 116

def self.is_mac?
  RUBY_PLATFORM.to_s.downcase.include?("darwin")
end

.is_windows?Boolean

Returns:

  • (Boolean)


124
125
126
# File 'lib/lolcommits/configuration.rb', line 124

def self.is_windows?
  !! RUBY_PLATFORM.match(/(win|w)32/)
end

.loldir_for(basename) ⇒ Object



48
49
50
51
52
53
54
55
# 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

.platformObject



13
14
15
16
17
18
19
20
21
22
23
24
25
# 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?Boolean

Returns:

  • (Boolean)


132
133
134
135
136
137
138
# 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

Instance Method Details

#do_configure!(plugin, forced_options = nil) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# 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

#main_image(commit_sha) ⇒ Object



65
66
67
# File 'lib/lolcommits/configuration.rb', line 65

def main_image(commit_sha)
  File.join self.loldir, "#{commit_sha}.jpg"
end

#most_recentObject



57
58
59
# File 'lib/lolcommits/configuration.rb', line 57

def most_recent
  Dir.glob(File.join self.loldir, "*").max_by {|f| File.mtime(f)}
end

#puts_pluginsObject



69
70
71
72
# 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_imageObject



61
62
63
# File 'lib/lolcommits/configuration.rb', line 61

def raw_image
  File.join self.loldir, "tmp_snapshot.jpg"
end

#user_configurationObject



27
28
29
30
31
32
33
# 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_fileObject



35
36
37
# File 'lib/lolcommits/configuration.rb', line 35

def user_configuration_file
  "#{self.loldir}/config.yml"
end