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.
@@ -0,0 +1,12 @@
1
+ module Lolcommits
2
+ class GitInfo
3
+ attr_accessor :sha, :message
4
+ def initialize
5
+ git = Git.open('.')
6
+ commit = git.log.first
7
+
8
+ self.message = commit.message.split("\n").first
9
+ self.sha = commit.sha[0..10]
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,29 @@
1
+ module Lolcommits
2
+ class Plugin
3
+ attr_accessor :default, :name, :runner, :options
4
+
5
+ def configuration
6
+ config = runner.config.user_configuration
7
+ return Hash.new if config.nil?
8
+ config[self.name] || Hash.new
9
+ end
10
+
11
+ def initialize(runner)
12
+ self.runner = runner
13
+ self.options = ['enabled']
14
+ end
15
+
16
+ def is_enabled?
17
+ enabled_config = configuration['enabled']
18
+ return self.default if enabled_config.nil? || enabled_config == ''
19
+ return enabled_config
20
+ end
21
+
22
+
23
+ def execute
24
+ if is_enabled?
25
+ run
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,32 @@
1
+ require 'httmultiparty'
2
+
3
+ module Lolcommits
4
+ class DotCom < Plugin
5
+ def initialize(runner)
6
+ super
7
+
8
+ self.name = 'dot_com'
9
+ self.default = false
10
+ self.options.concat(['api_key', 'api_secret', 'repo_id'])
11
+ end
12
+
13
+ def run
14
+ t = Time.now.to_i.to_s
15
+ resp = HTTMultiParty.post('http://www.lolcommits.com/git_commits.json',
16
+ :body => {
17
+ :git_commit => {
18
+ :sha => self.runner.sha,
19
+ :repo_external_id => configuration['repo_id'],
20
+ :image => File.open(self.runner.main_image),
21
+ :raw => File.open(self.runner.snapshot_loc)
22
+ },
23
+
24
+ :key => configuration['api_key'],
25
+ :t => t,
26
+ :token => Digest::SHA1.hexdigest(configuration['api_secret'] + t)
27
+ }
28
+ )
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,45 @@
1
+ module Lolcommits
2
+ class Loltext < Plugin
3
+ include Magick
4
+
5
+ def initialize(runner)
6
+ super
7
+
8
+ self.name = 'loltext'
9
+ self.default = true
10
+ end
11
+
12
+ def run
13
+ canvas = ImageList.new(self.runner.main_image)
14
+ draw = Magick::Draw.new
15
+ draw.font = File.join(Configuration::LOLCOMMITS_ROOT, "fonts", "Impact.ttf")
16
+
17
+ draw.fill = 'white'
18
+ draw.stroke = 'black'
19
+
20
+ draw.annotate(canvas, 0, 0, 0, 0, self.runner.sha) do
21
+ self.gravity = NorthEastGravity
22
+ self.pointsize = 32
23
+ self.stroke_width = 2
24
+ end
25
+
26
+ draw.annotate(canvas, 0, 0, 0, 0, word_wrap(self.runner.message)) do
27
+ self.gravity = SouthWestGravity
28
+ self.pointsize = 48
29
+ self.interline_spacing = -(48 / 5) if self.respond_to?(:interline_spacing)
30
+ self.stroke_width = 2
31
+ end
32
+
33
+ canvas.write(runner.main_image)
34
+ end
35
+
36
+ private
37
+
38
+ # convenience method for word wrapping
39
+ # based on https://github.com/cmdrkeene/memegen/blob/master/lib/meme_generator.rb
40
+ def word_wrap(text, col = 27)
41
+ wrapped = text.gsub(/(.{1,#{col + 4}})(\s+|\Z)/, "\\1\n")
42
+ wrapped.chomp!
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,16 @@
1
+ require "tranzlate/lolspeak"
2
+
3
+ module Lolcommits
4
+ class Tranzlate < Plugin
5
+ def initialize(runner)
6
+ super
7
+
8
+ self.name = 'tranzlate'
9
+ self.default = false
10
+ end
11
+
12
+ def run
13
+ self.runner.message = self.runner.message.tranzlate
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,71 @@
1
+ module Lolcommits
2
+ PLUGINS = Lolcommits::Plugin.subclasses
3
+ include Magick
4
+
5
+ class Runner
6
+ attr_accessor :capture_delay, :capture_device, :message, :sha,
7
+ :snapshot_loc, :main_image, :repo, :config
8
+
9
+ include ActiveSupport::Callbacks
10
+ define_callbacks :run
11
+ set_callback :run, :before, :execute_lolcommits_tranzlate
12
+
13
+ # Executed Last
14
+ set_callback :run, :after, :cleanup!
15
+ set_callback :run, :after, :execute_lolcommits_dot_com
16
+ set_callback :run, :after, :execute_lolcommits_loltext
17
+ # Executed First
18
+
19
+ def initialize(attributes={})
20
+ attributes.each do |attr, val|
21
+ self.send("#{attr}=", val)
22
+ end
23
+
24
+ if self.sha.nil? || self.message.nil?
25
+ git_info = GitInfo.new
26
+ self.sha = git_info.sha if self.sha.nil?
27
+ self.message = git_info.message if self.message.nil?
28
+ end
29
+ end
30
+
31
+ def run
32
+ run_callbacks :run do
33
+ puts "*** Preserving this moment in history."
34
+ self.snapshot_loc = self.config.raw_image
35
+ self.main_image = self.config.main_image(self.sha)
36
+ capturer = "Lolcommits::Capture#{Configuration.platform}".constantize.new(
37
+ :capture_device => self.capture_device,
38
+ :capture_delay => self.capture_delay,
39
+ :snapshot_location => self.snapshot_loc
40
+ )
41
+ capturer.capture
42
+ resize_snapshot!
43
+ end
44
+ end
45
+ end
46
+
47
+ protected
48
+
49
+ def resize_snapshot!
50
+ canvas = ImageList.new(self.snapshot_loc)
51
+ if (canvas.columns > 640 || canvas.rows > 480)
52
+ canvas.resize_to_fill!(640,480)
53
+ end
54
+ canvas.write(self.snapshot_loc)
55
+ FileUtils.cp(self.snapshot_loc, self.main_image)
56
+ end
57
+
58
+ def cleanup!
59
+ #clean up the captured image
60
+ FileUtils.rm(self.snapshot_loc)
61
+ end
62
+
63
+ # register a method called "execute_lolcommits_#{plugin_name}"
64
+ # for each subclass of plugin. these methods should be used as
65
+ # callbacks to the run method.
66
+ Lolcommits::PLUGINS.each do |plugin|
67
+ define_method "execute_#{plugin.to_s.underscore.gsub('/', '_')}" do
68
+ plugin.new(self).execute
69
+ end
70
+ end
71
+ end
@@ -1,3 +1,3 @@
1
1
  module Lolcommits
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0.pre1"
3
3
  end
@@ -21,10 +21,13 @@ Gem::Specification.new do |s|
21
21
  s.add_runtime_dependency('rmagick', '~> 2.13.1')
22
22
  s.add_runtime_dependency('git', '~> 1.2.5')
23
23
  s.add_runtime_dependency('choice', '~> 0.1.6')
24
- s.add_runtime_dependency('launchy')
24
+ s.add_runtime_dependency('launchy', '~> 2.1.1')
25
25
 
26
26
  s.add_development_dependency('rdoc')
27
27
  s.add_development_dependency('aruba')
28
28
  s.add_development_dependency('rake','~> 0.9.2')
29
+
29
30
  s.add_dependency('methadone', '~>1.2.1')
31
+ s.add_runtime_dependency('httmultiparty')
32
+ s.add_runtime_dependency('active_support')
30
33
  end
@@ -10,7 +10,9 @@ include Lolcommits
10
10
  class LolTest < Test::Unit::TestCase
11
11
  def test_can_parse_git
12
12
  assert_nothing_raised do
13
- Lolcommits.parse_git()
13
+ gi = GitInfo.new
14
+ assert_not_nil gi.message
15
+ assert_not_nil gi.sha
14
16
  end
15
17
  end
16
18
 
@@ -29,8 +31,12 @@ class LolTest < Test::Unit::TestCase
29
31
  # this will test the permissions but only locally, important before building a gem package!
30
32
  #
31
33
  def test_permissions
32
- assert File.readable? File.join(LOLCOMMITS_ROOT, "fonts", "Impact.ttf")
33
- assert File.executable? File.join(LOLCOMMITS_ROOT, "ext", "imagesnap", "imagesnap")
34
+ impact_perms = File.lstat(File.join(Configuration::LOLCOMMITS_ROOT, "fonts", "Impact.ttf")).mode & 0777
35
+ imagesnap_perms = File.lstat(File.join(Configuration::LOLCOMMITS_ROOT, "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}"
34
40
  end
35
41
 
36
42
  # Hmm.. webcam capture breaks travis-ci tests
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lolcommits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ version: 0.3.0.pre1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Matthew Rothenberg
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-06 00:00:00.000000000 Z
12
+ date: 2012-07-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rmagick
@@ -64,17 +64,17 @@ dependencies:
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
- - - ! '>='
67
+ - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: '0'
69
+ version: 2.1.1
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - ! '>='
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: '0'
77
+ version: 2.1.1
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: rdoc
80
80
  requirement: !ruby/object:Gem::Requirement
@@ -139,6 +139,38 @@ dependencies:
139
139
  - - ~>
140
140
  - !ruby/object:Gem::Version
141
141
  version: 1.2.1
142
+ - !ruby/object:Gem::Dependency
143
+ name: httmultiparty
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: active_support
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
142
174
  description: Takes a snapshot with your Mac's built-in iSight/FaceTime webcam (or
143
175
  any working webcam on Linux or Windows) every time you git commit code, and archives
144
176
  a lolcat style image with it.
@@ -154,6 +186,7 @@ files:
154
186
  - CHANGELOG
155
187
  - Gemfile
156
188
  - LICENSE
189
+ - NOTES
157
190
  - README.md
158
191
  - Rakefile
159
192
  - bin/lolcommits
@@ -162,11 +195,26 @@ files:
162
195
  - ext/CommandCam/LICENSE
163
196
  - ext/imagesnap/ReadMeOrDont.rtf
164
197
  - ext/imagesnap/imagesnap
198
+ - features/bugs.feature
165
199
  - features/lolcommits.feature
200
+ - features/plugins.feature
166
201
  - features/step_definitions/lolcommits_steps.rb
167
202
  - features/support/env.rb
168
203
  - fonts/Impact.ttf
204
+ - lib/core_ext/class.rb
169
205
  - lib/lolcommits.rb
206
+ - lib/lolcommits/capture_fake.rb
207
+ - lib/lolcommits/capture_linux.rb
208
+ - lib/lolcommits/capture_mac.rb
209
+ - lib/lolcommits/capture_windows.rb
210
+ - lib/lolcommits/capturer.rb
211
+ - lib/lolcommits/configuration.rb
212
+ - lib/lolcommits/git_info.rb
213
+ - lib/lolcommits/plugin.rb
214
+ - lib/lolcommits/plugins/dot_com.rb
215
+ - lib/lolcommits/plugins/loltext.rb
216
+ - lib/lolcommits/plugins/tranzlate.rb
217
+ - lib/lolcommits/runner.rb
170
218
  - lib/lolcommits/version.rb
171
219
  - lib/tranzlate/lolspeak.rb
172
220
  - lolcommits.gemspec
@@ -188,9 +236,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
236
  required_rubygems_version: !ruby/object:Gem::Requirement
189
237
  none: false
190
238
  requirements:
191
- - - ! '>='
239
+ - - ! '>'
192
240
  - !ruby/object:Gem::Version
193
- version: '0'
241
+ version: 1.3.1
194
242
  requirements: []
195
243
  rubyforge_project: lolcommits
196
244
  rubygems_version: 1.8.23
@@ -198,7 +246,9 @@ signing_key:
198
246
  specification_version: 3
199
247
  summary: Capture webcam image on git commit for lulz.
200
248
  test_files:
249
+ - features/bugs.feature
201
250
  - features/lolcommits.feature
251
+ - features/plugins.feature
202
252
  - features/step_definitions/lolcommits_steps.rb
203
253
  - features/support/env.rb
204
254
  - test/images/test_image.jpg