lolcommits 0.3.4 → 0.4.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,12 @@
1
+ 0.4.0 (in development)
2
+ * Switch the main ImageMagick wrapper from RMagick to mini_magick
3
+ - fix for RMagick not working with ImageMagick 6.8+ and generally
4
+ being a buggy unmaintained piece of crap
5
+ - this should also result in less problems with IM version changes
6
+ - some preliminary test work on using image_sorcery instead too
7
+ - perhaps finally kill issue #9 from continually resurfacing
8
+ * make sure quotes are properly handled in commit messages
9
+
1
10
  0.3.4 (27 December 2012)
2
11
  * Add uploldz plugin for posting to a remote server (thx @cnvandev)
3
12
 
@@ -140,3 +140,8 @@ Feature: Basic UI functionality
140
140
  Then the output should contain "Can't do that since we're not in a valid git repository!"
141
141
  And the exit status should be 1
142
142
 
143
+ Scenario: handle commit messages with quotation marks
144
+ Given I am in a git repository named "shellz" with lolcommits enabled
145
+ When I successfully run `git commit --allow-empty -m 'i hate \"air quotes\" dont you'`
146
+ Then the exit status should be 0
147
+ And there should be exactly 1 jpg in "../.lolcommits/shellz"
data/lib/lolcommits.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  $:.unshift File.expand_path('.')
2
2
 
3
3
  require 'core_ext/class'
4
- require 'RMagick'
4
+ require 'mini_magick'
5
5
  require 'fileutils'
6
6
  require 'git'
7
7
  require 'open3'
@@ -1,6 +1,5 @@
1
1
  module Lolcommits
2
2
  class Loltext < Plugin
3
- include Magick
4
3
 
5
4
  def initialize(runner)
6
5
  super
@@ -10,31 +9,77 @@ module Lolcommits
10
9
  end
11
10
 
12
11
  def run
13
- canvas = ImageList.new(self.runner.main_image)
14
- draw = Magick::Draw.new
15
- draw.font = File.join(Configuration::LOLCOMMITS_ROOT, "vendor", "fonts", "Impact.ttf")
12
+ mm_run
13
+ end
16
14
 
17
- draw.fill = 'white'
18
- draw.stroke = 'black'
15
+ # use minimagick wrapper
16
+ def mm_run
17
+ font_location = File.join(Configuration::LOLCOMMITS_ROOT, "vendor", "fonts", "Impact.ttf")
19
18
 
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
19
+ image = MiniMagick::Image.open(self.runner.main_image)
20
+ image.combine_options do |c|
21
+ c.gravity 'SouthWest'
22
+ c.fill 'white'
23
+ c.stroke 'black'
24
+ c.strokewidth '2'
25
+ c.pointsize '48'
26
+ c.interline_spacing '-9'
27
+ c.font font_location
28
+ c.annotate '0', clean_msg(self.runner.message)
24
29
  end
25
30
 
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
+ image.combine_options do |c|
32
+ c.gravity 'NorthEast'
33
+ c.fill 'white'
34
+ c.stroke 'black'
35
+ c.strokewidth '2'
36
+ c.pointsize '32'
37
+ c.font font_location
38
+ c.annotate '0', self.runner.sha
31
39
  end
32
40
 
33
- canvas.write(runner.main_image)
41
+ image.write self.runner.main_image
34
42
  end
35
43
 
44
+ # use Rmagick wrapper (deprecated, no longer works in IM6.10+)
45
+ # def rm_run
46
+ # canvas = ImageList.new(self.runner.main_image)
47
+ # draw = Magick::Draw.new
48
+ # draw.font = File.join(Configuration::LOLCOMMITS_ROOT, "vendor", "fonts", "Impact.ttf")
49
+
50
+ # draw.fill = 'white'
51
+ # draw.stroke = 'black'
52
+
53
+ # draw.annotate(canvas, 0, 0, 0, 0, self.runner.sha) do
54
+ # self.gravity = NorthEastGravity
55
+ # self.pointsize = 32
56
+ # self.stroke_width = 2
57
+ # end
58
+
59
+ # draw.annotate(canvas, 0, 0, 0, 0, word_wrap(self.runner.message)) do
60
+ # self.gravity = SouthWestGravity
61
+ # self.pointsize = 48
62
+ # self.interline_spacing = -(48 / 5) if self.respond_to?(:interline_spacing)
63
+ # self.stroke_width = 2
64
+ # end
65
+
66
+ # canvas.write(runner.main_image)
67
+ # end
68
+
36
69
  private
37
70
 
71
+ # do whatever is required to commit message to get it clean and ready for imagemagick
72
+ def clean_msg(text)
73
+ wrapped_text = word_wrap text
74
+ escape_quotes wrapped_text
75
+ end
76
+
77
+ # conversion for quotation marks to avoid shell interpretation
78
+ # does not seem to be a safe way to escape cross-platform?
79
+ def escape_quotes(text)
80
+ text.gsub(/"/, "''")
81
+ end
82
+
38
83
  # convenience method for word wrapping
39
84
  # based on https://github.com/cmdrkeene/memegen/blob/master/lib/meme_generator.rb
40
85
  def word_wrap(text, col = 27)
@@ -1,6 +1,5 @@
1
1
  module Lolcommits
2
2
  PLUGINS = Lolcommits::Plugin.subclasses
3
- include Magick
4
3
 
5
4
  class Runner
6
5
  attr_accessor :capture_delay, :capture_device, :message, :sha,
@@ -61,11 +60,16 @@ module Lolcommits
61
60
  end
62
61
 
63
62
  def resize_snapshot!
64
- canvas = ImageList.new(self.snapshot_loc)
65
- if (canvas.columns > 640 || canvas.rows > 480)
66
- canvas.resize_to_fill!(640,480)
63
+ image = MiniMagick::Image.open(self.snapshot_loc)
64
+ if (image[:width] > 640 || image[:height] > 480)
65
+ #this is ghetto resize-to-fill
66
+ image.combine_options do |c|
67
+ c.resize '640x480^'
68
+ c.gravity 'center'
69
+ c.extent '640x480'
70
+ end
71
+ image.write self.snapshot_loc
67
72
  end
68
- canvas.write(self.snapshot_loc)
69
73
  FileUtils.cp(self.snapshot_loc, self.main_image)
70
74
  end
71
75
 
@@ -1,3 +1,3 @@
1
1
  module Lolcommits
2
- VERSION = "0.3.4"
2
+ VERSION = "0.4.0.pre1"
3
3
  end
data/lolcommits.gemspec CHANGED
@@ -18,22 +18,26 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_runtime_dependency('rmagick', '~> 2.13.1')
21
+ # core gem dependencies
22
+ s.add_runtime_dependency('mini_magick', '~> 3.4')
22
23
  s.add_runtime_dependency('git', '~> 1.2.5')
23
24
  s.add_runtime_dependency('choice', '~> 0.1.6')
24
25
  s.add_runtime_dependency('launchy', '~> 2.1.1')
25
- s.add_runtime_dependency("twitter")
26
- s.add_runtime_dependency("oauth")
26
+ s.add_runtime_dependency('methadone', '~> 1.2.4')
27
+ s.add_runtime_dependency('active_support', '~> 3.0.0')
27
28
 
29
+ # development dependencies
28
30
  s.add_development_dependency('rdoc')
29
- s.add_development_dependency('aruba')
30
- s.add_development_dependency('rake','~> 10.0.2')
31
+ s.add_development_dependency('aruba', '~> 0.5.1')
32
+ s.add_development_dependency('rake',' ~> 10.0.2')
31
33
  s.add_development_dependency('fivemat')
32
34
  s.add_development_dependency('faker')
33
35
 
34
- s.add_dependency("rest-client")
35
- s.add_dependency('methadone', '~>1.2.1')
36
- s.add_runtime_dependency('httmultiparty')
37
- s.add_runtime_dependency('active_support')
38
- s.add_runtime_dependency('statsd-ruby')
36
+ # plugin dependencies
37
+ s.add_runtime_dependency("twitter") #twitter
38
+ s.add_runtime_dependency("oauth") #twitter
39
+ s.add_runtime_dependency("rest-client") #uploldz
40
+ s.add_runtime_dependency('httmultiparty') #dot_com
41
+ s.add_runtime_dependency('statsd-ruby', '~> 1.1.0') #statsd
42
+
39
43
  end
metadata CHANGED
@@ -1,24 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lolcommits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
5
- prerelease:
4
+ version: 0.4.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-12-27 00:00:00.000000000 Z
12
+ date: 2013-01-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rmagick
15
+ name: mini_magick
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 2.13.1
21
+ version: '3.4'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 2.13.1
29
+ version: '3.4'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: git
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -76,37 +76,37 @@ dependencies:
76
76
  - !ruby/object:Gem::Version
77
77
  version: 2.1.1
78
78
  - !ruby/object:Gem::Dependency
79
- name: twitter
79
+ name: methadone
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
- - - ! '>='
83
+ - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: '0'
85
+ version: 1.2.4
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
89
89
  none: false
90
90
  requirements:
91
- - - ! '>='
91
+ - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: '0'
93
+ version: 1.2.4
94
94
  - !ruby/object:Gem::Dependency
95
- name: oauth
95
+ name: active_support
96
96
  requirement: !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
- - - ! '>='
99
+ - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: '0'
101
+ version: 3.0.0
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
- - - ! '>='
107
+ - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: '0'
109
+ version: 3.0.0
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: rdoc
112
112
  requirement: !ruby/object:Gem::Requirement
@@ -128,17 +128,17 @@ dependencies:
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  none: false
130
130
  requirements:
131
- - - ! '>='
131
+ - - ~>
132
132
  - !ruby/object:Gem::Version
133
- version: '0'
133
+ version: 0.5.1
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  none: false
138
138
  requirements:
139
- - - ! '>='
139
+ - - ~>
140
140
  - !ruby/object:Gem::Version
141
- version: '0'
141
+ version: 0.5.1
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: rake
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -188,7 +188,7 @@ dependencies:
188
188
  - !ruby/object:Gem::Version
189
189
  version: '0'
190
190
  - !ruby/object:Gem::Dependency
191
- name: rest-client
191
+ name: twitter
192
192
  requirement: !ruby/object:Gem::Requirement
193
193
  none: false
194
194
  requirements:
@@ -204,23 +204,23 @@ dependencies:
204
204
  - !ruby/object:Gem::Version
205
205
  version: '0'
206
206
  - !ruby/object:Gem::Dependency
207
- name: methadone
207
+ name: oauth
208
208
  requirement: !ruby/object:Gem::Requirement
209
209
  none: false
210
210
  requirements:
211
- - - ~>
211
+ - - ! '>='
212
212
  - !ruby/object:Gem::Version
213
- version: 1.2.1
213
+ version: '0'
214
214
  type: :runtime
215
215
  prerelease: false
216
216
  version_requirements: !ruby/object:Gem::Requirement
217
217
  none: false
218
218
  requirements:
219
- - - ~>
219
+ - - ! '>='
220
220
  - !ruby/object:Gem::Version
221
- version: 1.2.1
221
+ version: '0'
222
222
  - !ruby/object:Gem::Dependency
223
- name: httmultiparty
223
+ name: rest-client
224
224
  requirement: !ruby/object:Gem::Requirement
225
225
  none: false
226
226
  requirements:
@@ -236,7 +236,7 @@ dependencies:
236
236
  - !ruby/object:Gem::Version
237
237
  version: '0'
238
238
  - !ruby/object:Gem::Dependency
239
- name: active_support
239
+ name: httmultiparty
240
240
  requirement: !ruby/object:Gem::Requirement
241
241
  none: false
242
242
  requirements:
@@ -256,17 +256,17 @@ dependencies:
256
256
  requirement: !ruby/object:Gem::Requirement
257
257
  none: false
258
258
  requirements:
259
- - - ! '>='
259
+ - - ~>
260
260
  - !ruby/object:Gem::Version
261
- version: '0'
261
+ version: 1.1.0
262
262
  type: :runtime
263
263
  prerelease: false
264
264
  version_requirements: !ruby/object:Gem::Requirement
265
265
  none: false
266
266
  requirements:
267
- - - ! '>='
267
+ - - ~>
268
268
  - !ruby/object:Gem::Version
269
- version: '0'
269
+ version: 1.1.0
270
270
  description: Takes a snapshot with your Mac's built-in iSight/FaceTime webcam (or
271
271
  any working webcam on Linux or Windows) every time you git commit code, and archives
272
272
  a lolcat style image with it.
@@ -335,16 +335,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
335
335
  version: '0'
336
336
  segments:
337
337
  - 0
338
- hash: -2853708059940813353
338
+ hash: 3995732561961219726
339
339
  required_rubygems_version: !ruby/object:Gem::Requirement
340
340
  none: false
341
341
  requirements:
342
- - - ! '>='
342
+ - - ! '>'
343
343
  - !ruby/object:Gem::Version
344
- version: '0'
345
- segments:
346
- - 0
347
- hash: -2853708059940813353
344
+ version: 1.3.1
348
345
  requirements: []
349
346
  rubyforge_project: lolcommits
350
347
  rubygems_version: 1.8.24