jnicklas-carrierwave 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ require 'spec/rake/spectask'
9
9
  require 'cucumber/rake/task'
10
10
 
11
11
  NAME = "carrierwave"
12
- GEM_VERSION = "0.2.3"
12
+ GEM_VERSION = "0.2.4"
13
13
  AUTHOR = "Jonas Nicklas"
14
14
  EMAIL = "jonas.nicklas@gmail.com"
15
15
  HOMEPAGE = "http://www.example.com"
@@ -25,6 +25,10 @@ module CarrierWave
25
25
  before_update do |record|
26
26
  record.send("store_#{column}!")
27
27
  end
28
+
29
+ after_destroy do |record|
30
+ record.send("remove_#{column}!")
31
+ end
28
32
  end
29
33
 
30
34
  ##
@@ -88,6 +88,33 @@ module CarrierWave
88
88
  end
89
89
  end
90
90
 
91
+ ##
92
+ # Resize the image to fit within the specified dimensions while retaining
93
+ # the original aspect ratio. Will only resize the image if it is larger than the
94
+ # specified dimensions. The resulting image may be shorter or narrower than specified
95
+ # in the smaller dimension but will not be larger than the specified values.
96
+ #
97
+ # === Parameters
98
+ #
99
+ # [width (Integer)] the width to scale the image to
100
+ # [height (Integer)] the height to scale the image to
101
+ #
102
+ # === Yields
103
+ #
104
+ # [Magick::Image] additional manipulations to perform
105
+ #
106
+ def resize_to_limit(width, height)
107
+ manipulate! do |img|
108
+ geometry = Magick::Geometry.new(width, height, 0, 0, Magick::GreaterGeometry)
109
+ new_img = img.change_geometry(geometry) do |new_width, new_height|
110
+ img.resize(new_width, new_height)
111
+ end
112
+ destroy_image(img)
113
+ new_img = yield(new_img) if block_given?
114
+ new_img
115
+ end
116
+ end
117
+
91
118
  ##
92
119
  # From the RMagick documentation: "Resize the image to fit within the
93
120
  # specified dimensions while retaining the original aspect ratio. The
@@ -167,9 +194,9 @@ module CarrierWave
167
194
  else
168
195
  filled = new_img.color_floodfill(1, 1, ::Magick::Pixel.from_color(background))
169
196
  end
170
- new_img.destroy!
197
+ destroy_image(new_img)
171
198
  filled.composite!(img, gravity, ::Magick::OverCompositeOp)
172
- img.destroy!
199
+ destroy_image(img)
173
200
  filled = yield(filled) if block_given?
174
201
  filled
175
202
  end
@@ -204,15 +231,21 @@ module CarrierWave
204
231
  list << yield( frame )
205
232
  end
206
233
  list.write(current_path)
207
- list.destroy!
234
+ destroy_image(list)
208
235
  else
209
236
  frame = image.first
210
237
  yield( frame ).write(current_path)
211
- frame.destroy!
238
+ destroy_image(frame)
212
239
  end
213
240
  rescue ::Magick::ImageMagickError => e
214
241
  raise CarrierWave::ProcessingError.new("Failed to manipulate with rmagick, maybe it is not an image? Original Error: #{e}")
215
242
  end
216
243
 
244
+ private
245
+
246
+ def destroy_image(image)
247
+ image.destroy! if image.respond_to?(:destroy!)
248
+ end
249
+
217
250
  end # RMagick
218
251
  end # CarrierWave
@@ -7,29 +7,10 @@ module CarrierWave
7
7
  # pretty much it.
8
8
  #
9
9
  class File < Abstract
10
-
10
+
11
11
  def initialize(uploader)
12
12
  @uploader = uploader
13
13
  end
14
-
15
- ##
16
- # Delete the file to the uploader's store path.
17
- #
18
- # === Parameters
19
- #
20
- # [uploader (CarrierWave::Uploader)] an uploader object
21
- # [file (CarrierWave::SanitizedFile)] the file to store
22
- #
23
- # === Returns
24
- #
25
- # [bool] True if file was removed or false
26
- #
27
- def self.destroy!(uploader, file)
28
- unless file.blank?
29
- CarrierWave.logger.info "CarrierWave::Storage::File: removing file #{file.path}"
30
- file.delete
31
- end
32
- end
33
14
 
34
15
  ##
35
16
  # Move the file to the uploader's store path.
@@ -49,7 +30,7 @@ module CarrierWave
49
30
  file.move_to(path, CarrierWave.config[:permissions])
50
31
  file
51
32
  end
52
-
33
+
53
34
  ##
54
35
  # Retrieve the file from its store path
55
36
  #
@@ -67,7 +48,7 @@ module CarrierWave
67
48
  path = ::File.expand_path(path, uploader.public)
68
49
  CarrierWave::SanitizedFile.new(path)
69
50
  end
70
-
51
+
71
52
  end # File
72
53
  end # Storage
73
54
  end # CarrierWave
@@ -29,8 +29,8 @@ module CarrierWave
29
29
  #
30
30
  class S3 < Abstract
31
31
 
32
- def initialize(store_path, identifier)
33
- @store_path = store_path
32
+ def initialize(path, identifier)
33
+ @path = path
34
34
  @identifier = identifier
35
35
  end
36
36
 
@@ -95,7 +95,18 @@ module CarrierWave
95
95
  def self.retrieve!(uploader, identifier)
96
96
  self.new(uploader.store_path(identifier), identifier)
97
97
  end
98
-
98
+
99
+ ##
100
+ # Returns the current path of the file on S3
101
+ #
102
+ # === Returns
103
+ #
104
+ # [String] A path
105
+ #
106
+ def path
107
+ @path
108
+ end
109
+
99
110
  ##
100
111
  # Returns the filename on S3
101
112
  #
@@ -115,7 +126,14 @@ module CarrierWave
115
126
  # [String] contents of the file
116
127
  #
117
128
  def read
118
- S3Object.value @store_path, self.class.bucket
129
+ AWS::S3::S3Object.value @path, self.class.bucket
130
+ end
131
+
132
+ ##
133
+ # Remove the file from Amazon S3
134
+ #
135
+ def delete
136
+ AWS::S3::S3Object.delete @path, self.class.bucket
119
137
  end
120
138
 
121
139
  ##
@@ -126,7 +144,7 @@ module CarrierWave
126
144
  # [String] file's url
127
145
  #
128
146
  def url
129
- ["http://s3.amazonaws.com", self.class.bucket, @store_path].compact.join('/')
147
+ ["http://s3.amazonaws.com", self.class.bucket, @path].compact.join('/')
130
148
  end
131
149
 
132
150
  end # S3
@@ -10,7 +10,7 @@ module CarrierWave
10
10
  def remove!
11
11
  with_callbacks(:remove) do
12
12
  CarrierWave.logger.info 'CarrierWave: removing file'
13
- storage.destroy!(self, file)
13
+ @file.delete if @file
14
14
  @file = nil
15
15
  @cache_id = nil
16
16
  end
@@ -167,7 +167,25 @@ describe CarrierWave::ActiveRecord do
167
167
  end
168
168
 
169
169
  end
170
-
170
+
171
+ describe '#destroy' do
172
+
173
+ it "should do nothing when no file has been assigned" do
174
+ @event.save.should be_true
175
+ @event.destroy
176
+ end
177
+
178
+ it "should remove the file from the filesystem" do
179
+ @event.image = stub_file('test.jpeg')
180
+ @event.save.should be_true
181
+ @event.image.should be_an_instance_of(@uploader)
182
+ @event.image.current_path.should == public_path('uploads/test.jpeg')
183
+ @event.destroy
184
+ File.exist?(public_path('uploads/test.jpeg')).should be_false
185
+ end
186
+
187
+ end
188
+
171
189
  describe 'with overriddent filename' do
172
190
 
173
191
  describe '#save' do
data/spec/spec_helper.rb CHANGED
@@ -19,7 +19,7 @@ require 'spec/autorun'
19
19
  require 'carrierwave'
20
20
 
21
21
  require 'logger'
22
- CarrierWave.logger = Logger.new(File.join(File.dirname(__FILE__), 'test.log'))
22
+ CarrierWave.logger = Logger.new(nil)
23
23
 
24
24
  alias :running :lambda
25
25
 
@@ -19,9 +19,9 @@ describe CarrierWave::Uploader do
19
19
  @stored_file.stub!(:path).and_return('/path/to/somewhere')
20
20
  @stored_file.stub!(:url).and_return('http://www.example.com')
21
21
  @stored_file.stub!(:identifier).and_return('this-is-me')
22
+ @stored_file.stub!(:delete)
22
23
 
23
24
  @uploader_class.storage.stub!(:store!).and_return(@stored_file)
24
- @uploader_class.storage.stub!(:destroy!)
25
25
  @uploader.store!(@file)
26
26
  end
27
27
 
@@ -46,8 +46,8 @@ describe CarrierWave::Uploader do
46
46
  @uploader.identifier.should be_nil
47
47
  end
48
48
 
49
- it "should instruct the storage engine to remove the file" do
50
- @uploader_class.storage.should_receive(:destroy!).with(@uploader, @uploader.file)
49
+ it "should delete the file" do
50
+ @stored_file.should_receive(:delete)
51
51
  @uploader.remove!
52
52
  end
53
53
 
@@ -206,11 +206,8 @@ describe CarrierWave::Uploader do
206
206
  @uploader_class.storage.stub!(:store!).and_return(@base_stored_file)
207
207
  @uploader_class.version(:thumb).storage.stub!(:store!).and_return(@thumb_stored_file)
208
208
 
209
- @uploader_class.storage.stub!(:store!).and_return(@base_stored_file)
210
- @uploader_class.version(:thumb).storage.stub!(:store!).and_return(@thumb_stored_file)
211
-
212
- @uploader_class.storage.stub!(:destroy!)
213
- @uploader_class.version(:thumb).storage.stub!(:destroy!)
209
+ @base_stored_file.stub!(:delete)
210
+ @thumb_stored_file.stub!(:delete)
214
211
 
215
212
  @uploader.store!(@file)
216
213
  end
@@ -231,9 +228,9 @@ describe CarrierWave::Uploader do
231
228
  @uploader.thumb.url.should be_nil
232
229
  end
233
230
 
234
- it "should instruct the storage engine to remove the file and its versions" do
235
- @uploader_class.storage.should_receive(:destroy!).with(@uploader, @uploader.file)
236
- @uploader_class.version(:thumb).storage.should_receive(:destroy!).with(@uploader.thumb, @uploader.thumb.file)
231
+ it "should delete all the files" do
232
+ @base_stored_file.should_receive(:delete)
233
+ @thumb_stored_file.should_receive(:delete)
237
234
  @uploader.remove!
238
235
  end
239
236
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jnicklas-carrierwave
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Nicklas
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-17 00:00:00 -07:00
12
+ date: 2009-06-11 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15