lolcommits 0.3.4 → 0.4.0.pre1

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.
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