acmcommits 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,97 @@
1
+ module Lolcommits
2
+ PLUGINS = Lolcommits::Plugin.subclasses
3
+
4
+ class Runner
5
+ attr_accessor :capture_delay, :capture_device, :message, :sha,
6
+ :snapshot_loc, :main_image, :repo, :config, :repo_internal_path,
7
+ :font
8
+
9
+ include Methadone::CLILogging
10
+ include ActiveSupport::Callbacks
11
+ define_callbacks :run
12
+ set_callback :run, :before, :execute_lolcommits_tranzlate
13
+
14
+ # Executed Last
15
+ set_callback :run, :after, :cleanup!
16
+ set_callback :run, :after, :execute_lolcommits_lolsrv
17
+ set_callback :run, :after, :execute_lolcommits_stats_d
18
+ set_callback :run, :after, :execute_lolcommits_loltext
19
+ # Executed First
20
+
21
+ def initialize(attributes={})
22
+ attributes.each do |attr, val|
23
+ self.send("#{attr}=", val)
24
+ end
25
+
26
+ if self.sha.nil? || self.message.nil?
27
+ git_info = GitInfo.new
28
+ self.sha = git_info.sha if self.sha.nil?
29
+ self.message = git_info.message if self.message.nil?
30
+ self.repo_internal_path = git_info.repo_internal_path
31
+ self.repo = git_info.repo
32
+ end
33
+ end
34
+
35
+ def run
36
+ die_if_rebasing!
37
+
38
+ run_callbacks :run do
39
+ puts "*** Preserving this moment in history."
40
+ self.snapshot_loc = self.config.raw_image
41
+ self.main_image = self.config.main_image(self.sha)
42
+ capturer = "Lolcommits::Capture#{Configuration.platform}".constantize.new(
43
+ :capture_device => self.capture_device,
44
+ :capture_delay => self.capture_delay,
45
+ :snapshot_location => self.snapshot_loc,
46
+ :font => self.font
47
+ )
48
+ capturer.capture
49
+ resize_snapshot!
50
+ end
51
+ end
52
+ end
53
+
54
+ protected
55
+ def die_if_rebasing!
56
+ debug "Runner: Making sure user isn't rebasing"
57
+ if not self.repo_internal_path.nil?
58
+ mergeclue = File.join self.repo_internal_path, "rebase-merge"
59
+ if File.directory? mergeclue
60
+ debug "Runner: Rebase detected, silently exiting!"
61
+ exit 0
62
+ end
63
+ end
64
+ end
65
+
66
+ def resize_snapshot!
67
+ debug "Runner: resizing snapshot"
68
+ image = MiniMagick::Image.open(self.snapshot_loc)
69
+ if (image[:width] > 640 || image[:height] > 480)
70
+ #this is ghetto resize-to-fill
71
+ image.combine_options do |c|
72
+ c.resize '640x480^'
73
+ c.gravity 'center'
74
+ c.extent '640x480'
75
+ end
76
+ debug "Runner: writing resized image to #{self.snapshot_loc}"
77
+ image.write self.snapshot_loc
78
+ end
79
+ debug "Runner: copying resized image to #{self.main_image}"
80
+ FileUtils.cp(self.snapshot_loc, self.main_image)
81
+ end
82
+
83
+ def cleanup!
84
+ debug "Runner: running cleanup"
85
+ #clean up the captured image
86
+ FileUtils.rm(self.snapshot_loc)
87
+ end
88
+
89
+ # register a method called "execute_lolcommits_#{plugin_name}"
90
+ # for each subclass of plugin. these methods should be used as
91
+ # callbacks to the run method.
92
+ Lolcommits::PLUGINS.each do |plugin|
93
+ define_method "execute_#{plugin.to_s.underscore.gsub('/', '_')}" do
94
+ plugin.new(self).execute
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,3 @@
1
+ module Lolcommits
2
+ VERSION = "0.0.1"
3
+ end
data/lib/lolcommits.rb ADDED
@@ -0,0 +1,27 @@
1
+ $:.unshift File.expand_path('.')
2
+
3
+ require 'core_ext/class'
4
+ require 'mini_magick'
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
+ require 'methadone'
12
+
13
+ require 'lolcommits/version'
14
+ require 'lolcommits/configuration'
15
+ require 'lolcommits/capturer'
16
+ require 'lolcommits/capture_mac'
17
+ require 'lolcommits/capture_linux'
18
+ require 'lolcommits/capture_windows'
19
+ require 'lolcommits/capture_fake'
20
+ require 'lolcommits/git_info'
21
+ require 'lolcommits/plugin'
22
+ require 'lolcommits/plugins/loltext'
23
+ require 'lolcommits/plugins/statsd'
24
+ require 'lolcommits/plugins/lolsrv'
25
+
26
+ # require runner after all the plugins have been required
27
+ require 'lolcommits/runner'
Binary file
@@ -0,0 +1,49 @@
1
+ require 'test/unit'
2
+ # Loads lolcommits directly from the lib folder so don't have to create
3
+ # a gem before testing
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ require 'lolcommits'
7
+
8
+ include Lolcommits
9
+
10
+ class LolTest < Test::Unit::TestCase
11
+ def test_can_parse_git
12
+ assert_nothing_raised do
13
+ gi = GitInfo.new
14
+ assert_not_nil gi.message
15
+ assert_not_nil gi.sha
16
+ end
17
+ end
18
+
19
+ #
20
+ # issue #57, https://github.com/mroth/lolcommits/issues/57
21
+ #
22
+ # def test_tranzlate
23
+ # [["what the hell","(WH|W)UT TEH HELL"],["seriously wtf", "SRSLEH WTF"]].each do |normal, lol|
24
+ # tranzlated = normal.tranzlate
25
+ # assert_match /^#{lol}/, tranzlated
26
+ # end
27
+ # end
28
+
29
+ #
30
+ # issue #53, https://github.com/mroth/lolcommits/issues/53
31
+ # this will test the permissions but only locally, important before building a gem package!
32
+ #
33
+ def test_permissions
34
+ impact_perms = File.lstat(File.join(Configuration::LOLCOMMITS_ROOT, "vendor", "fonts", "Impact.ttf")).mode & 0777
35
+ imagesnap_perms = File.lstat(File.join(Configuration::LOLCOMMITS_ROOT, "vendor", "ext", "imagesnap", "imagesnap")).mode & 0777
36
+ assert impact_perms == 0644 || impact_perms == 0664,
37
+ "expected perms of 644/664 but instead got #{sprintf '%o', impact_perms}"
38
+ assert imagesnap_perms == 0755 || imagesnap_perms == 0775,
39
+ "expected perms of 755/775 but instead got #{sprintf '%o', imagesnap_perms}"
40
+ end
41
+
42
+ # Hmm.. webcam capture breaks travis-ci tests
43
+ #def test_can_capture
44
+ # assert_nothing_raised do
45
+ # Lolcommits.capture(0,true,'test commit message','test-sha-001')
46
+ # end
47
+ #end
48
+
49
+ end