attached 0.1.7 → 0.1.8
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/Gemfile +1 -5
- data/lib/attached/attachment.rb +5 -4
- data/lib/attached/image.rb +46 -32
- data/lib/attached/storage.rb +4 -2
- data/lib/attached/storage/aws.rb +4 -4
- data/lib/attached/version.rb +3 -0
- metadata +6 -5
data/Gemfile
CHANGED
data/lib/attached/attachment.rb
CHANGED
@@ -36,6 +36,7 @@ module Attached
|
|
36
36
|
@options ||= {
|
37
37
|
:path => "/:name/:style/:identifier:extension",
|
38
38
|
:default => :original,
|
39
|
+
:medium => :aws,
|
39
40
|
:credentials => {},
|
40
41
|
:styles => {},
|
41
42
|
:processors => [],
|
@@ -110,14 +111,12 @@ module Attached
|
|
110
111
|
@file = file.respond_to?(:tempfile) ? file.tempfile : file
|
111
112
|
|
112
113
|
extension ||= File.extname(file.original_filename) if file.respond_to?(:original_filename)
|
113
|
-
extension ||= File.extname(file.path)
|
114
|
+
extension ||= File.extname(file.path) if file.respond_to?(:path)
|
114
115
|
|
115
116
|
instance_set :size, file.size
|
116
117
|
instance_set :extension, extension
|
117
118
|
instance_set :identifier, identifier
|
118
119
|
|
119
|
-
self.queue[self.default] = self.file
|
120
|
-
|
121
120
|
process
|
122
121
|
end
|
123
122
|
|
@@ -260,13 +259,15 @@ module Attached
|
|
260
259
|
|
261
260
|
private
|
262
261
|
|
263
|
-
# Helper function for calling processors.
|
262
|
+
# Helper function for calling processors (will queue default).
|
264
263
|
#
|
265
264
|
# Usage:
|
266
265
|
#
|
267
266
|
# self.process
|
268
267
|
|
269
268
|
def process
|
269
|
+
self.queue[self.default] = self.file
|
270
|
+
|
270
271
|
self.processors.each do |processor|
|
271
272
|
self.styles.each do |style, options|
|
272
273
|
case processor
|
data/lib/attached/image.rb
CHANGED
@@ -1,20 +1,16 @@
|
|
1
1
|
require 'attached/processor'
|
2
2
|
|
3
|
-
begin
|
4
|
-
require 'rmagick'
|
5
|
-
rescue LoadError
|
6
|
-
require 'RMagick'
|
7
|
-
rescue LoadError
|
8
|
-
raise "Installation of 'rmagick' is required before using the 'image' processor"
|
9
|
-
end
|
10
|
-
|
11
3
|
module Attached
|
12
4
|
|
13
5
|
class Image < Processor
|
14
6
|
|
15
7
|
|
16
8
|
attr_reader :path
|
17
|
-
attr_reader :
|
9
|
+
attr_reader :extension
|
10
|
+
|
11
|
+
attr_reader :width
|
12
|
+
attr_reader :height
|
13
|
+
attr_reader :operation
|
18
14
|
|
19
15
|
# Create a processor.
|
20
16
|
#
|
@@ -27,8 +23,24 @@ module Attached
|
|
27
23
|
def initialize(file, options = {}, attachment = nil)
|
28
24
|
super
|
29
25
|
|
30
|
-
@path
|
31
|
-
|
26
|
+
@path = self.file.path
|
27
|
+
|
28
|
+
@size = options[:size]
|
29
|
+
@extension = options[:extension]
|
30
|
+
|
31
|
+
@width, @height, @operation = @size.match(/(\d*)x?(\d*)(.*)/)[1..3] if @size
|
32
|
+
|
33
|
+
@width ||= options[:width]
|
34
|
+
@height ||= options[:height]
|
35
|
+
@operation ||= options[:operation]
|
36
|
+
|
37
|
+
@extension ||= File.extname(self.file.path)
|
38
|
+
|
39
|
+
@width = Integer(self.width)
|
40
|
+
@height = Integer(self.height)
|
41
|
+
|
42
|
+
raise "Image processor requires specification of 'width' or 'size'" unless self.width
|
43
|
+
raise "Image processor requires specification of 'height' or 'size'" unless self.height
|
32
44
|
end
|
33
45
|
|
34
46
|
|
@@ -39,32 +51,34 @@ module Attached
|
|
39
51
|
# self.process
|
40
52
|
|
41
53
|
def process
|
42
|
-
result = Tempfile.new(["",
|
54
|
+
result = Tempfile.new(["", self.extension])
|
43
55
|
result.binmode
|
44
|
-
|
45
|
-
image = ::Magick::Image.read(self.path)
|
46
|
-
image_list = ::Magick::ImageList.new
|
47
|
-
|
48
|
-
width, height, operation = self.options[:size].match(/\b(\d*)x?(\d*)\b([\#\<\>])?/)[1..3] if self.options[:size]
|
49
|
-
|
50
|
-
width ||= self.options[:width]
|
51
|
-
height ||= self.options[:height]
|
52
|
-
operation ||= self.options[:operation]
|
53
56
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
57
|
+
begin
|
58
|
+
parameters = []
|
59
|
+
|
60
|
+
parameters << self.path
|
61
|
+
|
58
62
|
case operation
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
else image_list << frame.resize(width, height)
|
63
|
+
when '#' then parameters << "-resize #{width}x#{height}^ -gravity center -extent #{width}x#{height}"
|
64
|
+
when '<' then parameters << "-resize #{width}x#{height}\\<"
|
65
|
+
when '>' then parameters << "-resize #{width}x#{height}\\>"
|
66
|
+
else parameters << "-resize #{width}x#{height}"
|
64
67
|
end
|
65
|
-
|
68
|
+
|
69
|
+
parameters << result.path
|
70
|
+
|
71
|
+
parameters = parameters.join(" ").squeeze(" ")
|
72
|
+
|
73
|
+
`convert #{parameters}`
|
74
|
+
|
75
|
+
raise "Command 'convert' failed. Ensure upload file is an image and options are correct." unless $?.exitstatus == 0
|
76
|
+
|
77
|
+
rescue Errno::ENOENT
|
78
|
+
|
79
|
+
raise "Command 'convert' not found. Ensure 'Image Magick' is installed."
|
66
80
|
|
67
|
-
|
81
|
+
end
|
68
82
|
|
69
83
|
return result
|
70
84
|
end
|
data/lib/attached/storage.rb
CHANGED
@@ -7,12 +7,14 @@ module Attached
|
|
7
7
|
#
|
8
8
|
# Usage:
|
9
9
|
#
|
10
|
-
# Attached::Storage.medium(
|
10
|
+
# Attached::Storage.medium()
|
11
|
+
# Attached::Storage.medium(:aws)
|
11
12
|
|
12
13
|
def self.storage(medium = :aws, credentials = nil)
|
13
14
|
|
14
15
|
case medium
|
15
|
-
when :aws then return Attached::Storage::AWS.new
|
16
|
+
when :aws then return Attached::Storage::AWS.new credentials
|
17
|
+
else raise "Undefined storage medium '#{medium}'."
|
16
18
|
end
|
17
19
|
|
18
20
|
end
|
data/lib/attached/storage/aws.rb
CHANGED
@@ -12,6 +12,7 @@ module Attached
|
|
12
12
|
class AWS < Base
|
13
13
|
|
14
14
|
|
15
|
+
attr_reader :access
|
15
16
|
attr_reader :bucket
|
16
17
|
attr_reader :access_key_id
|
17
18
|
attr_reader :secret_access_key
|
@@ -27,6 +28,7 @@ module Attached
|
|
27
28
|
def initialize(credentials)
|
28
29
|
credentials = parse(credentials)
|
29
30
|
|
31
|
+
@access = :public_read
|
30
32
|
@bucket = credentials[:bucket] || credentials['bucket']
|
31
33
|
@access_key_id = credentials[:access_key_id] || credentials['access_key_id']
|
32
34
|
@secret_access_key = credentials[:secret_access_key] || credentials['secret_access_key']
|
@@ -54,7 +56,7 @@ module Attached
|
|
54
56
|
def save(file, path)
|
55
57
|
connect()
|
56
58
|
begin
|
57
|
-
::AWS::S3::S3Object.store(path, file, bucket, :access =>
|
59
|
+
::AWS::S3::S3Object.store(path, file, bucket, :access => access)
|
58
60
|
rescue AWS::S3::NoSuchBucket => e
|
59
61
|
::AWS::S3::Bucket.create(bucket)
|
60
62
|
retry
|
@@ -71,10 +73,8 @@ module Attached
|
|
71
73
|
def destroy(path)
|
72
74
|
connect()
|
73
75
|
begin
|
74
|
-
::AWS::S3::S3Object.delete(path, bucket
|
76
|
+
::AWS::S3::S3Object.delete(path, bucket)
|
75
77
|
rescue AWS::S3::NoSuchBucket => e
|
76
|
-
::AWS::S3::Bucket.create(bucket)
|
77
|
-
retry
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 8
|
9
|
+
version: 0.1.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kevin Sylvestre
|
@@ -14,11 +14,11 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-22 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: aws-s3
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
none: false
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
type: :runtime
|
32
32
|
version_requirements: *id001
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: guid
|
35
35
|
prerelease: false
|
36
36
|
requirement: &id002 !ruby/object:Gem::Requirement
|
37
37
|
none: false
|
@@ -60,6 +60,7 @@ files:
|
|
60
60
|
- lib/attached/storage/aws.rb
|
61
61
|
- lib/attached/storage/base.rb
|
62
62
|
- lib/attached/storage.rb
|
63
|
+
- lib/attached/version.rb
|
63
64
|
- lib/attached.rb
|
64
65
|
- lib/tasks/attached.rake
|
65
66
|
- README.rdoc
|