lolcommits 0.2.0 → 0.3.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.travis.yml +7 -2
- data/CHANGELOG +4 -0
- data/NOTES +17 -0
- data/README.md +6 -3
- data/Rakefile +4 -1
- data/bin/lolcommits +91 -22
- data/features/bugs.feature +30 -0
- data/features/lolcommits.feature +126 -12
- data/features/plugins.feature +33 -0
- data/features/step_definitions/lolcommits_steps.rb +37 -0
- data/features/support/env.rb +27 -7
- data/lib/core_ext/class.rb +7 -0
- data/lib/lolcommits.rb +24 -178
- data/lib/lolcommits/capture_fake.rb +10 -0
- data/lib/lolcommits/capture_linux.rb +20 -0
- data/lib/lolcommits/capture_mac.rb +17 -0
- data/lib/lolcommits/capture_windows.rb +18 -0
- data/lib/lolcommits/capturer.rb +10 -0
- data/lib/lolcommits/configuration.rb +128 -0
- data/lib/lolcommits/git_info.rb +12 -0
- data/lib/lolcommits/plugin.rb +29 -0
- data/lib/lolcommits/plugins/dot_com.rb +32 -0
- data/lib/lolcommits/plugins/loltext.rb +45 -0
- data/lib/lolcommits/plugins/tranzlate.rb +16 -0
- data/lib/lolcommits/runner.rb +71 -0
- data/lib/lolcommits/version.rb +1 -1
- data/lolcommits.gemspec +4 -1
- data/test/test_lolcommits.rb +9 -3
- metadata +59 -9
@@ -0,0 +1,33 @@
|
|
1
|
+
Feature: Plugins Work
|
2
|
+
|
3
|
+
Scenario: Lolcommits.com integration works
|
4
|
+
Given a git repository named "dot_com"
|
5
|
+
And an empty file named "dot_com/FOOBAR"
|
6
|
+
When I cd to "dot_com"
|
7
|
+
And I successfully run `lolcommits --enable`
|
8
|
+
And I run `lolcommits --config` and wait for output
|
9
|
+
And I enter "dot_com" for "Plugin Name"
|
10
|
+
And I enter "true" for "enabled"
|
11
|
+
And I enter "b2a70ac0b64e012fa61522000a8c42dc" for "api_key"
|
12
|
+
And I enter "b2a720b0b64e012fa61522000a8c42dc" for "api_secret"
|
13
|
+
And I enter "c4aed530b64e012fa61522000a8c42dc" for "repo_id"
|
14
|
+
Then I should be presented "Successfully Configured"
|
15
|
+
When I successfully run `git add .`
|
16
|
+
And I successfully run `git commit -m 'can haz commit'`
|
17
|
+
Then the output should contain "*** Preserving this moment in history."
|
18
|
+
And there should be 1 jpg in "../.lolcommits/dot_com"
|
19
|
+
|
20
|
+
Scenario: Disable loltext
|
21
|
+
Given a git repository named "loltext"
|
22
|
+
And an empty file named "loltext/FOOBAR"
|
23
|
+
When I cd to "loltext"
|
24
|
+
And I successfully run `lolcommits --enable`
|
25
|
+
And I run `lolcommits --config` and wait for output
|
26
|
+
And I enter "loltext" for "Plugin Name"
|
27
|
+
And I enter "false" for "enabled"
|
28
|
+
Then I should be presented "Successfully Configured"
|
29
|
+
When I successfully run `git add .`
|
30
|
+
And I successfully run `git commit -m 'can haz commit'`
|
31
|
+
Then the output should contain "*** Preserving this moment in history."
|
32
|
+
And there should be 1 jpg in "../.lolcommits/loltext"
|
33
|
+
|
@@ -18,3 +18,40 @@ Given /^the git repository named "(.*?)" has a "(.*?)" hook$/ do |repo_name, hoo
|
|
18
18
|
hook_file = File.join current_dir, repo_name, ".git", "hooks", hook_name
|
19
19
|
touch(hook_file) if not File.exists? hook_file
|
20
20
|
end
|
21
|
+
|
22
|
+
Given /^a git repository named "(.*?)" with (a|no) "(.*?)" hook$/ do |repo_name, yesno_modifier, hook_name|
|
23
|
+
step %{a git repository named "#{repo_name}"}
|
24
|
+
step %{the git repository named "#{repo_name}" has #{yesno_modifier} "#{hook_name}" hook}
|
25
|
+
end
|
26
|
+
|
27
|
+
When /^I run `(.*?)` and wait for output$/ do |command|
|
28
|
+
command = "cd #{current_dir} && #{command}"
|
29
|
+
@stdin, @stdout, @stderr = Open3.popen3(command)
|
30
|
+
@fields = Hash.new
|
31
|
+
end
|
32
|
+
|
33
|
+
Given /^a loldir named "(.*?)" with (\d+) lolimages$/ do |repo_name, num_images|
|
34
|
+
loldir = "tmp/aruba/.lolcommits/#{repo_name}"
|
35
|
+
mkdir_p loldir
|
36
|
+
num_images.to_i.times do
|
37
|
+
random_hex = "%011x" % (rand * 0xfffffffffff)
|
38
|
+
cp "test/images/test_image.jpg", File.join( loldir, "#{random_hex}.jpg")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Then /^I should be (prompted for|presented) "(.*?)"$/ do |_, prompt|
|
43
|
+
assert @stdout.read.to_s.include?(prompt)
|
44
|
+
end
|
45
|
+
|
46
|
+
When /^I enter "(.*?)" for "(.*?)"$/ do |input, field|
|
47
|
+
@fields[field] = input
|
48
|
+
@stdin.puts input
|
49
|
+
end
|
50
|
+
|
51
|
+
Then /^there should be (.*?) jpg(|s) in "(.*?)"$/ do |n, _, folder|
|
52
|
+
assert_equal n.to_i, Dir["#{current_dir}/#{folder}/*.jpg"].count
|
53
|
+
end
|
54
|
+
|
55
|
+
Then /^the output should contain a list of plugins$/ do
|
56
|
+
step %{the output should contain "Available plugins: "}
|
57
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
require 'aruba/cucumber'
|
2
2
|
require 'methadone/cucumber'
|
3
|
+
require 'open3'
|
4
|
+
require 'test/unit/assertions'
|
5
|
+
include Test::Unit::Assertions
|
3
6
|
|
4
7
|
ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
|
5
8
|
LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
|
@@ -8,18 +11,35 @@ Before do
|
|
8
11
|
# Using "announce" causes massive warnings on 1.9.2
|
9
12
|
@puts = true
|
10
13
|
@original_rubylib = ENV['RUBYLIB']
|
14
|
+
@aruba_timeout_seconds = 20
|
11
15
|
ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
|
12
|
-
end
|
13
|
-
|
14
|
-
After do
|
15
|
-
ENV['RUBYLIB'] = @original_rubylib
|
16
|
-
end
|
17
16
|
|
18
|
-
Before('@simulate-capture') do
|
19
17
|
@original_fakecapture = ENV['LOLCOMMITS_FAKECAPTURE']
|
20
18
|
ENV['LOLCOMMITS_FAKECAPTURE'] = "1"
|
19
|
+
|
20
|
+
@original_loldir = ENV['LOLCOMMITS_DIR']
|
21
|
+
ENV['LOLCOMMITS_DIR'] = File.expand_path( File.join(current_dir, ".lolcommits") )
|
22
|
+
|
23
|
+
ENV['LAUNCHY_DRY_RUN'] = 'true'
|
21
24
|
end
|
22
25
|
|
23
|
-
After
|
26
|
+
After do
|
27
|
+
ENV['RUBYLIB'] = @original_rubylib
|
24
28
|
ENV['LOLCOMMITS_FAKECAPTURE'] = @original_fakecapture
|
29
|
+
ENV['LOLCOMMITS_DIR'] = @original_loldir
|
30
|
+
ENV['LAUNCHY_DRY_RUN'] = nil
|
25
31
|
end
|
32
|
+
|
33
|
+
# ###moved the below into env for everything
|
34
|
+
# Before('@simulate-env') do
|
35
|
+
# @original_fakecapture = ENV['LOLCOMMITS_FAKECAPTURE']
|
36
|
+
# ENV['LOLCOMMITS_FAKECAPTURE'] = "1"
|
37
|
+
|
38
|
+
# @original_loldir = ENV['LOLCOMMITS_DIR']
|
39
|
+
# ENV['LOLCOMMITS_DIR'] = File.join(current_dir, ".lolcommits")
|
40
|
+
# end
|
41
|
+
|
42
|
+
# After('@simulate-env') do
|
43
|
+
# ENV['LOLCOMMITS_FAKECAPTURE'] = @original_fakecapture
|
44
|
+
# ENV['LOLCOMMITS_DIR'] = @original_loldir
|
45
|
+
# end
|
data/lib/lolcommits.rb
CHANGED
@@ -1,180 +1,26 @@
|
|
1
1
|
$:.unshift File.expand_path('.')
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
if RUBY_PLATFORM =~ /(win|w)32$/
|
28
|
-
true
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def is_fakecapture?
|
33
|
-
(ENV['LOLCOMMITS_FAKECAPTURE'] == '1' || false)
|
34
|
-
end
|
35
|
-
|
36
|
-
def most_recent(dir='.')
|
37
|
-
loldir, commit_sha, commit_msg = parse_git
|
38
|
-
Dir.glob(File.join loldir, "*").max_by {|f| File.mtime(f)}
|
39
|
-
end
|
40
|
-
|
41
|
-
def loldir(dir='.')
|
42
|
-
loldir, commit_sha, commit_msg = parse_git
|
43
|
-
return loldir
|
44
|
-
end
|
45
|
-
|
46
|
-
def parse_git(dir='.')
|
47
|
-
g = Git.open('.')
|
48
|
-
commit = g.log.first
|
49
|
-
commit_msg = commit.message.split("\n").first
|
50
|
-
commit_sha = commit.sha[0..10]
|
51
|
-
basename = File.basename(g.dir.to_s)
|
52
|
-
basename.sub!(/^\./, 'dot') #no invisible directories in output, thanks!
|
53
|
-
loldir = File.join LOLBASEDIR, basename
|
54
|
-
return loldir, commit_sha, commit_msg
|
55
|
-
end
|
56
|
-
|
57
|
-
def capture(capture_delay=0, capture_device=nil, is_test=false, test_msg=nil, test_sha=nil)
|
58
|
-
#
|
59
|
-
# Read the git repo information from the current working directory
|
60
|
-
#
|
61
|
-
if not is_test
|
62
|
-
loldir, commit_sha, commit_msg = parse_git
|
63
|
-
else
|
64
|
-
commit_msg = test_msg
|
65
|
-
commit_sha = test_sha
|
66
|
-
loldir = File.join LOLBASEDIR, "test"
|
67
|
-
end
|
68
|
-
|
69
|
-
#
|
70
|
-
# lolspeak translate the message
|
71
|
-
#
|
72
|
-
if (ENV['LOLCOMMITS_TRANZLATE'] == '1' || false)
|
73
|
-
commit_msg = commit_msg.tranzlate
|
74
|
-
end
|
75
|
-
|
76
|
-
#
|
77
|
-
# Create a directory to hold the lolimages
|
78
|
-
#
|
79
|
-
if not File.directory? loldir
|
80
|
-
FileUtils.mkdir_p loldir
|
81
|
-
end
|
82
|
-
|
83
|
-
#
|
84
|
-
# SMILE FOR THE CAMERA! 3...2...1...
|
85
|
-
# We're just assuming the captured image is 640x480 for now, we may
|
86
|
-
# need updates to the imagesnap program to manually set this (or resize)
|
87
|
-
# if this changes on future mac isights.
|
88
|
-
#
|
89
|
-
puts "*** Preserving this moment in history."
|
90
|
-
snapshot_loc = File.join loldir, "tmp_snapshot.jpg"
|
91
|
-
# if (ENV['LOLCOMMITS_FAKECAPTURE'] == '1' || false)
|
92
|
-
if is_fakecapture?
|
93
|
-
test_image = File.join LOLCOMMITS_ROOT, "test", "images", "test_image.jpg"
|
94
|
-
FileUtils.cp test_image, snapshot_loc
|
95
|
-
elsif is_mac?
|
96
|
-
imagesnap_bin = File.join LOLCOMMITS_ROOT, "ext", "imagesnap", "imagesnap"
|
97
|
-
capture_device = "-d '#{capture_device}'" if capture_device
|
98
|
-
system("#{imagesnap_bin} -q #{snapshot_loc} -w #{capture_delay} #{capture_device}")
|
99
|
-
elsif is_linux?
|
100
|
-
tmpdir = File.expand_path "#{loldir}/tmpdir#{rand(1000)}/"
|
101
|
-
FileUtils.mkdir_p( tmpdir )
|
102
|
-
# There's no way to give a capture delay in mplayer, but a number of frame
|
103
|
-
# I've found that 6 is a good value for me.
|
104
|
-
frames = if capture_delay != 0 then capture_delay else 6 end
|
105
|
-
|
106
|
-
# mplayer's output is ugly and useless, let's throw it away
|
107
|
-
_, r, _ = Open3.popen3("mplayer -vo jpeg:outdir=#{tmpdir} -frames #{frames} tv://")
|
108
|
-
# looks like we still need to read the output for something to happen
|
109
|
-
r.read
|
110
|
-
FileUtils.mv(tmpdir + "/%08d.jpg" % frames, snapshot_loc)
|
111
|
-
FileUtils.rm_rf( tmpdir )
|
112
|
-
elsif is_windows?
|
113
|
-
commandcam_exe = File.join LOLCOMMITS_ROOT, "ext", "CommandCam", "CommandCam.exe"
|
114
|
-
# DirectShow takes a while to show... at least for me anyway
|
115
|
-
delaycmd = " /delay 3000"
|
116
|
-
if capture_delay > 0
|
117
|
-
# CommandCam delay is in milliseconds
|
118
|
-
delaycmd = " /delay #{capture_delay * 1000}"
|
119
|
-
end
|
120
|
-
_, r, _ = Open3.popen3("#{commandcam_exe} /filename #{snapshot_loc}#{delaycmd}")
|
121
|
-
# looks like we still need to read the output for something to happen
|
122
|
-
r.read
|
123
|
-
end
|
124
|
-
|
125
|
-
|
126
|
-
#
|
127
|
-
# Process the image with ImageMagick to add loltext
|
128
|
-
#
|
129
|
-
|
130
|
-
# read in the image, and resize it via the canvas
|
131
|
-
canvas = ImageList.new("#{snapshot_loc}")
|
132
|
-
if (canvas.columns > 640 || canvas.rows > 480)
|
133
|
-
canvas.resize_to_fill!(640,480)
|
134
|
-
end
|
135
|
-
|
136
|
-
# create a draw object for annotation
|
137
|
-
draw = Magick::Draw.new
|
138
|
-
#if is_mac?
|
139
|
-
# draw.font = "/Library/Fonts/Impact.ttf"
|
140
|
-
#else
|
141
|
-
# draw.font = "/usr/share/fonts/TTF/impact.ttf"
|
142
|
-
#end
|
143
|
-
draw.font = File.join(LOLCOMMITS_ROOT, "fonts", "Impact.ttf")
|
144
|
-
|
145
|
-
draw.fill = 'white'
|
146
|
-
draw.stroke = 'black'
|
147
|
-
|
148
|
-
# convenience method for word wrapping
|
149
|
-
# based on https://github.com/cmdrkeene/memegen/blob/master/lib/meme_generator.rb
|
150
|
-
def word_wrap(text, col = 27)
|
151
|
-
wrapped = text.gsub(/(.{1,#{col + 4}})(\s+|\Z)/, "\\1\n")
|
152
|
-
wrapped.chomp!
|
153
|
-
end
|
154
|
-
|
155
|
-
draw.annotate(canvas, 0, 0, 0, 0, commit_sha) do
|
156
|
-
self.gravity = NorthEastGravity
|
157
|
-
self.pointsize = 32
|
158
|
-
self.stroke_width = 2
|
159
|
-
end
|
160
|
-
|
161
|
-
draw.annotate(canvas, 0, 0, 0, 0, word_wrap(commit_msg)) do
|
162
|
-
self.gravity = SouthWestGravity
|
163
|
-
self.pointsize = 48
|
164
|
-
self.interline_spacing = -(48 / 5) if self.respond_to?(:interline_spacing)
|
165
|
-
self.stroke_width = 2
|
166
|
-
end
|
167
|
-
|
168
|
-
#
|
169
|
-
# Squash the images and write the files
|
170
|
-
#
|
171
|
-
#canvas.flatten_images.write("#{loldir}/#{commit_sha}.jpg")
|
172
|
-
canvas.write(File.join loldir, "#{commit_sha}.jpg")
|
173
|
-
FileUtils.rm(snapshot_loc)
|
174
|
-
|
175
|
-
#if in test mode, open image for inspection
|
176
|
-
if is_test
|
177
|
-
Launchy.open(File.join loldir, "#{commit_sha}.jpg")
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
3
|
+
require 'core_ext/class'
|
4
|
+
require 'RMagick'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'git'
|
7
|
+
require 'open3'
|
8
|
+
require 'active_support/inflector'
|
9
|
+
require 'active_support/concern'
|
10
|
+
require 'active_support/callbacks'
|
11
|
+
|
12
|
+
require 'lolcommits/version'
|
13
|
+
require 'lolcommits/configuration'
|
14
|
+
require 'lolcommits/capturer'
|
15
|
+
require 'lolcommits/capture_mac'
|
16
|
+
require 'lolcommits/capture_linux'
|
17
|
+
require 'lolcommits/capture_windows'
|
18
|
+
require 'lolcommits/capture_fake'
|
19
|
+
require 'lolcommits/git_info'
|
20
|
+
require 'lolcommits/plugin'
|
21
|
+
require 'lolcommits/plugins/loltext'
|
22
|
+
require 'lolcommits/plugins/dot_com'
|
23
|
+
require 'lolcommits/plugins/tranzlate'
|
24
|
+
|
25
|
+
# require runner after all the plugins have been required
|
26
|
+
require 'lolcommits/runner'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Lolcommits
|
2
|
+
class CaptureLinux < Capturer
|
3
|
+
def capture
|
4
|
+
tmpdir = File.expand_path "#{Configuration.loldir}/tmpdir#{rand(1000)}/"
|
5
|
+
FileUtils.mkdir_p( tmpdir )
|
6
|
+
# There's no way to give a capture delay in mplayer, but a number of frame
|
7
|
+
# I've found that 6 is a good value for me.
|
8
|
+
frames = if capture_delay != 0 then capture_delay else 6 end
|
9
|
+
|
10
|
+
# mplayer's output is ugly and useless, let's throw it away
|
11
|
+
_, r, _ = Open3.popen3("mplayer -vo jpeg:outdir=#{tmpdir} -frames #{frames} tv://")
|
12
|
+
# looks like we still need to read the output for something to happen
|
13
|
+
r.read
|
14
|
+
FileUtils.mv(tmpdir + "/%08d.jpg" % frames, snapshot_location)
|
15
|
+
FileUtils.rm_rf( tmpdir )
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Lolcommits
|
2
|
+
class CaptureMac < Capturer
|
3
|
+
def capture_device_string
|
4
|
+
@capture_device.nil? ? nil : "-d #{@capture_device}"
|
5
|
+
end
|
6
|
+
|
7
|
+
def capture
|
8
|
+
system("#{imagesnap_bin} -q \"#{snapshot_location}\" -w #{capture_delay} #{capture_device_string}")
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def imagesnap_bin
|
14
|
+
File.join(Configuration::LOLCOMMITS_ROOT, "ext", "imagesnap", "imagesnap")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Lolcommits
|
2
|
+
class CaptureWindows < Capturer
|
3
|
+
def capture
|
4
|
+
commandcam_exe = File.join Configuration::LOLCOMMITS_ROOT, "ext", "CommandCam", "CommandCam.exe"
|
5
|
+
# DirectShow takes a while to show... at least for me anyway
|
6
|
+
delaycmd = " /delay 3000"
|
7
|
+
if capture_delay > 0
|
8
|
+
# CommandCam delay is in milliseconds
|
9
|
+
delaycmd = " /delay #{capture_delay * 1000}"
|
10
|
+
end
|
11
|
+
_, r, _ = Open3.popen3("#{commandcam_exe} /filename #{snapshot_location}#{delaycmd}")
|
12
|
+
# looks like we still need to read the output for something to happen
|
13
|
+
r.read
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
module Lolcommits
|
2
|
+
class Configuration
|
3
|
+
LOLBASEDIR = ENV['LOLCOMMITS_DIR'] || File.join(ENV['HOME'], '.lolcommits')
|
4
|
+
LOLCOMMITS_ROOT = File.join(File.dirname(__FILE__), '../..')
|
5
|
+
attr_writer :loldir
|
6
|
+
|
7
|
+
def initialize(attributes={})
|
8
|
+
attributes.each do |attr, val|
|
9
|
+
self.send("#{attr}=", val)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.platform
|
14
|
+
if is_fakecapture?
|
15
|
+
'Fake'
|
16
|
+
elsif is_mac?
|
17
|
+
'Mac'
|
18
|
+
elsif is_linux?
|
19
|
+
'Linux'
|
20
|
+
elsif is_windows?
|
21
|
+
'Windows'
|
22
|
+
else
|
23
|
+
raise "Unknown / Unsupported Platform."
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def user_configuration
|
28
|
+
if File.exists?(user_configuration_file)
|
29
|
+
YAML.load(File.open(user_configuration_file))
|
30
|
+
else
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def user_configuration_file
|
36
|
+
"#{self.loldir}/config.yml"
|
37
|
+
end
|
38
|
+
|
39
|
+
def loldir
|
40
|
+
return @loldir if @loldir
|
41
|
+
|
42
|
+
basename ||= File.basename(Git.open('.').dir.to_s).sub(/^\./, 'dot')
|
43
|
+
basename.sub!(/ /, '-')
|
44
|
+
|
45
|
+
@loldir = Configuration.loldir_for(basename)
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.loldir_for(basename)
|
49
|
+
loldir = File.join(LOLBASEDIR, basename)
|
50
|
+
|
51
|
+
if not File.directory? loldir
|
52
|
+
FileUtils.mkdir_p loldir
|
53
|
+
end
|
54
|
+
loldir
|
55
|
+
end
|
56
|
+
|
57
|
+
def most_recent
|
58
|
+
Dir.glob(File.join self.loldir, "*").max_by {|f| File.mtime(f)}
|
59
|
+
end
|
60
|
+
|
61
|
+
def raw_image
|
62
|
+
File.join self.loldir, "tmp_snapshot.jpg"
|
63
|
+
end
|
64
|
+
|
65
|
+
def main_image(commit_sha)
|
66
|
+
File.join self.loldir, "#{commit_sha}.jpg"
|
67
|
+
end
|
68
|
+
|
69
|
+
def puts_plugins
|
70
|
+
names = Lolcommits::PLUGINS.collect {|p| p.new(nil).name }
|
71
|
+
puts "Available plugins: #{names.join(', ')}"
|
72
|
+
end
|
73
|
+
|
74
|
+
def do_configure!(plugin)
|
75
|
+
if plugin.nil? || plugin.strip == ''
|
76
|
+
puts_plugins
|
77
|
+
print "Name of plugin to configure: "
|
78
|
+
plugin = STDIN.gets.strip
|
79
|
+
end
|
80
|
+
|
81
|
+
plugins = Lolcommits::PLUGINS.inject(Hash.new) do |acc, val|
|
82
|
+
p = val.new(nil)
|
83
|
+
acc.merge(p.name => p)
|
84
|
+
end
|
85
|
+
|
86
|
+
plugin_object = plugins[plugin]
|
87
|
+
|
88
|
+
if plugin_object.nil?
|
89
|
+
puts "Unable to find plugin: #{plugin}"
|
90
|
+
return
|
91
|
+
end
|
92
|
+
|
93
|
+
options = plugin_object.options.inject(Hash.new) do |acc, option|
|
94
|
+
print "#{option}: "
|
95
|
+
val = STDIN.gets.strip
|
96
|
+
val = true if val == 'true'
|
97
|
+
val = false if val == 'false'
|
98
|
+
|
99
|
+
acc.merge(option => val)
|
100
|
+
end
|
101
|
+
config = self.user_configuration || Hash.new
|
102
|
+
config[plugin] = options
|
103
|
+
File.open(self.user_configuration_file, 'w') do |f|
|
104
|
+
f.write(config.to_yaml)
|
105
|
+
end
|
106
|
+
|
107
|
+
puts "#{config.to_yaml}\n"
|
108
|
+
puts "Successfully Configured"
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.is_mac?
|
112
|
+
RUBY_PLATFORM.downcase.include?("darwin")
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.is_linux?
|
116
|
+
RUBY_PLATFORM.downcase.include?("linux")
|
117
|
+
end
|
118
|
+
|
119
|
+
def self.is_windows?
|
120
|
+
!! RUBY_PLATFORM.match(/(win|w)32/)
|
121
|
+
end
|
122
|
+
|
123
|
+
def self.is_fakecapture?
|
124
|
+
(ENV['LOLCOMMITS_FAKECAPTURE'] == '1' || false)
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
end
|