manipulator 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,7 +9,7 @@ S3 is great for storing image files, but manipulating images after they've been
9
9
 
10
10
  After re-implementing this pattern a few times over (and filling up /tmp by forgetting the last step), we decided to roll this into a gem that makes S3 image manipulation as easy as:
11
11
 
12
- m = Manipulator.new
12
+ m = Manipulator.new(:processor => :gm) # use GraphicsMagick; defaults to ImageMagick
13
13
  m.manipulate({:bucket => 'my-bucket', :key => 'some/file.jpg'}) do |img|
14
14
  img.rotate(90)
15
15
  img.resize_to_fit(75,75)
@@ -19,6 +19,11 @@ The idea is to instantiate a Manipulator and then pass it a bucket name and key
19
19
 
20
20
  We're using MiniMagick now instead of RMagick to save memory - we found that RMagick was a hog. MiniMagick is a lot more straightforward and has a nice interface for both GraphicsMagick (recommended) and ImageMagick.
21
21
 
22
+ Want to do something that MiniMagick doesn't directly support, like removing all profiles from an image with GraphicsMagick (aka ImageMagick's strip method)?
23
+ m.manipulate('my-bucket', 'my-key' do |img|
24
+ `gm mogrify +profile '*' #{manipulator.temp_file_path}`
25
+ end
26
+
22
27
  == Install
23
28
 
24
29
  $ gem install manipulator
@@ -5,6 +5,9 @@ require 'mini_magick'
5
5
  # The connection to S3 is opened using credentials read from AWSCredentials.
6
6
  class Manipulator
7
7
  attr_accessor :temp_file_path
8
+ def initialize(options = {})
9
+ MiniMagick.processor = options[:processor]
10
+ end
8
11
 
9
12
  # Establishes a connection to S3 if not already connected
10
13
  def connect_to_s3
@@ -39,9 +42,12 @@ class Manipulator
39
42
  # img.rotate(90)
40
43
  # img.resize(100x100)
41
44
  # end
45
+ # Want to do something that MiniMagick doesn't directly support, like
46
+ # removing all profiles from an image with GraphicsMagick (aka ImageMagick's strip method)
47
+ # m.manipulate('my-bucket', 'my-key' do |img|
48
+ # `gm mogrify +profile '*' #{manipulator.temp_file_path}`
49
+ # end
42
50
  def manipulate(options, &block)
43
- # TODO: make this configurable - use graphics magick
44
- MiniMagick.processor = :gm
45
51
 
46
52
  download(options[:bucket], options[:key])
47
53
  begin
@@ -50,7 +56,11 @@ class Manipulator
50
56
  yield(i)
51
57
  end
52
58
  image.write(temp_file_path)
53
- upload(options[:bucket], options[:key]) unless options[:keep_local]
59
+
60
+ unless options[:keep_local]
61
+ target_key = options[:target_key] || options[:key]
62
+ upload(options[:bucket], target_key)
63
+ end
54
64
  rescue Exception => e
55
65
  puts e.message
56
66
  puts e.backtrace
@@ -16,7 +16,7 @@ class TestManipulator < Test::Unit::TestCase
16
16
 
17
17
  context "#connect_to_s3" do
18
18
  setup do
19
- @manipulator = Manipulator.new
19
+ @manipulator = Manipulator.new(:processor => :gm)
20
20
  end
21
21
  should "use existing connection" do
22
22
  AWS::S3::Base.stubs(:connected?).returns(true)
@@ -31,7 +31,7 @@ class TestManipulator < Test::Unit::TestCase
31
31
  end
32
32
  context "#download" do
33
33
  setup do
34
- @manipulator = Manipulator.new
34
+ @manipulator = Manipulator.new(:processor => :gm)
35
35
  @manipulator.stubs(:connect_to_s3)
36
36
  AWS::S3::S3Object.stubs(:value).returns('123')
37
37
  end
@@ -53,16 +53,15 @@ class TestManipulator < Test::Unit::TestCase
53
53
 
54
54
  context "#manipulate" do
55
55
  setup do
56
- @manipulator = Manipulator.new
56
+ @manipulator = Manipulator.new(:processor => :gm)
57
57
  @manipulator.stubs(:connect_to_s3)
58
58
  @file = stub_everything('fake file')
59
59
  @manipulator.stubs(:download).returns(@key)
60
- @manipulator.stubs(:upload)
61
60
  @manipulator.stubs(:cleanup)
62
61
  @manipulator.stubs(:temp_file_path).returns(@temp_file_path)
63
- @mocked = mock('fake mini_magick instance')
64
- MiniMagick::Image.stubs(:read).returns(@mocked)
65
- @mocked.stubs(:write)
62
+ @manipulator.stubs(:upload)
63
+ @mocked = stub_everything('fake mini_magick instance')
64
+ MiniMagick::Image.stubs(:open).with(@temp_file_path).returns(@mocked)
66
65
  end
67
66
 
68
67
  should "download the file" do
@@ -70,7 +69,8 @@ class TestManipulator < Test::Unit::TestCase
70
69
  @manipulator.manipulate({:bucket => @bucket, :key => @key}) { |img| img }
71
70
  end
72
71
  should "create an MiniMagick Image instance and yield it to the block" do
73
- MiniMagick::Image.expects(:read).with(@temp_file_path).returns(@mocked)
72
+ @manipulator.stubs(:upload)
73
+ MiniMagick::Image.expects(:open).with(@temp_file_path).returns(@mocked)
74
74
  @manipulator.manipulate({:bucket => @bucket, :key => @key}) do |img|
75
75
  assert_equal @mocked, img
76
76
  img
@@ -78,7 +78,7 @@ class TestManipulator < Test::Unit::TestCase
78
78
  end
79
79
  should "write the returned manipulated image to the temp file" do
80
80
  @mocked.expects(:write).with(@temp_file_path)
81
- MiniMagick::Image.stubs(:read).with(@temp_file_path).returns(@mocked)
81
+ @manipulator.stubs(:upload)
82
82
  @manipulator.manipulate({:bucket => @bucket, :key => @key}) { |img| img }
83
83
  end
84
84
  should "upload the file back to s3" do
@@ -103,7 +103,9 @@ class TestManipulator < Test::Unit::TestCase
103
103
  @manipulator.manipulate({:bucket => @bucket, :key => @key}) do |img|
104
104
  raise "an error"
105
105
  end
106
- rescue
106
+ rescue Exception => e
107
+ puts e.message
108
+ puts e.backtrace
107
109
  end
108
110
  end
109
111
  end
@@ -111,7 +113,7 @@ class TestManipulator < Test::Unit::TestCase
111
113
  context "#upload" do
112
114
  setup do
113
115
  AWS::S3::S3Object.stubs(:url_for)
114
- @manipulator = Manipulator.new
116
+ @manipulator = Manipulator.new(:processor => :gm)
115
117
  @manipulator.stubs(:temp_file_path).returns(@temp_file_path)
116
118
  @manipulator.stubs(:connect_to_s3)
117
119
  end
@@ -124,7 +126,7 @@ class TestManipulator < Test::Unit::TestCase
124
126
 
125
127
  context "#cleanup" do
126
128
  setup do
127
- @manipulator = Manipulator.new
129
+ @manipulator = Manipulator.new(:processor => :gm)
128
130
  @key = File.join(File.dirname(__FILE__), 'data', 'ham.jpg')
129
131
  @manipulator.stubs(:temp_file_path).returns(@temp_file_path)
130
132
  Manipulator.any_instance.stubs(:download)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manipulator
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 0
10
- version: 1.0.0
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jacqui Maher
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-12-01 00:00:00 -05:00
19
+ date: 2010-12-02 00:00:00 -05:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency