sequel_paperclip 0.0.1 → 0.0.2
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/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
@@ -6,6 +6,9 @@ module Sequel
|
|
6
6
|
attr_reader :options
|
7
7
|
attr_accessor :processors
|
8
8
|
|
9
|
+
STORAGE_UPDATE_SAVE = 1
|
10
|
+
STORAGE_UPDATE_DELETE = 2
|
11
|
+
|
9
12
|
def initialize(name, options = {})
|
10
13
|
unless options[:styles]
|
11
14
|
options[:styles] = {
|
@@ -25,22 +28,39 @@ module Sequel
|
|
25
28
|
@options = options
|
26
29
|
self.processors = []
|
27
30
|
options[:processors].each do |processor|
|
28
|
-
|
31
|
+
klass = "Sequel::Plugins::Paperclip::Processors::#{processor[:type].to_s.capitalize}"
|
32
|
+
self.processors << klass.constantize.new(self, processor)
|
29
33
|
end
|
34
|
+
@storage_updates = []
|
30
35
|
end
|
31
36
|
|
32
37
|
def process(model, src_path)
|
33
|
-
files_to_store = {}
|
34
38
|
processors.each do |processor|
|
35
39
|
processor.pre_runs(model, src_path)
|
36
40
|
options[:styles].each_pair do |style, style_options|
|
37
|
-
|
41
|
+
tmp_file = Tempfile.new("paperclip")
|
38
42
|
puts "processing #{name} for style #{style} with processor #{processor.name}"
|
39
|
-
processor.run(style, style_options,
|
43
|
+
processor.run(style, style_options, tmp_file)
|
44
|
+
@storage_updates << {
|
45
|
+
:type => STORAGE_UPDATE_SAVE,
|
46
|
+
:src_file => tmp_file,
|
47
|
+
:dst_path => path(model, style),
|
48
|
+
}
|
40
49
|
end
|
41
50
|
processor.post_runs
|
42
51
|
end
|
43
|
-
|
52
|
+
end
|
53
|
+
|
54
|
+
def destroy(model)
|
55
|
+
return unless exists?(model)
|
56
|
+
|
57
|
+
options[:styles].each_pair do |style, style_options|
|
58
|
+
@storage_updates << {
|
59
|
+
:type => STORAGE_UPDATE_DELETE,
|
60
|
+
:path => path(model, style),
|
61
|
+
}
|
62
|
+
end
|
63
|
+
model.send("#{name}_basename=", nil)
|
44
64
|
end
|
45
65
|
|
46
66
|
def exists?(model)
|
@@ -54,6 +74,26 @@ module Sequel
|
|
54
74
|
def url(model, style)
|
55
75
|
Interpolations.interpolate(options[:url], self, model, style)
|
56
76
|
end
|
77
|
+
|
78
|
+
def update_storage(model)
|
79
|
+
@storage_updates.each do |update|
|
80
|
+
case update[:type]
|
81
|
+
when STORAGE_UPDATE_SAVE
|
82
|
+
puts "saving #{update[:dst_path]} (#{update[:src_file].size} bytes)"
|
83
|
+
FileUtils.mkdir_p(File.dirname(update[:dst_path]))
|
84
|
+
FileUtils.cp(update[:src_file].path, update[:dst_path])
|
85
|
+
update[:src_file].close!
|
86
|
+
when STORAGE_UPDATE_DELETE
|
87
|
+
puts "deleting #{update[:path]}"
|
88
|
+
begin
|
89
|
+
FileUtils.rm(update[:path])
|
90
|
+
rescue Errno::ENOENT => error
|
91
|
+
end
|
92
|
+
else
|
93
|
+
raise ArgumentError, "invalid type '#{update[:type]}'"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
57
97
|
end
|
58
98
|
end
|
59
99
|
end
|
data/lib/sequel_paperclip.rb
CHANGED
@@ -39,10 +39,24 @@ module Sequel
|
|
39
39
|
end
|
40
40
|
|
41
41
|
define_method("#{name}_basename=") do |basename|
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
if basename
|
43
|
+
old_filename = send("#{name}_filename")
|
44
|
+
extname = old_filename ? File.extname(old_filename) : ""
|
45
|
+
send("#{name}_filename=", basename+extname)
|
46
|
+
else
|
47
|
+
send("#{name}_filename=", nil)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
define_method("#{name}=") do |value|
|
53
|
+
if !value && attachment.exists?(self)
|
54
|
+
attachment.destroy(self)
|
45
55
|
end
|
56
|
+
instance_variable_set("@#{name}", value);
|
57
|
+
|
58
|
+
# force sequel to call the hooks
|
59
|
+
modified!
|
46
60
|
end
|
47
61
|
|
48
62
|
define_method("#{name}?") do
|
@@ -59,67 +73,45 @@ module Sequel
|
|
59
73
|
end
|
60
74
|
end
|
61
75
|
|
62
|
-
module InstanceMethods
|
76
|
+
module InstanceMethods
|
63
77
|
def before_save
|
64
78
|
self.class.attachments.each_value do |attachment|
|
65
79
|
file = send(attachment.name)
|
66
|
-
|
80
|
+
if file
|
81
|
+
unless file.is_a?(File) || file.is_a?(Tempfile)
|
82
|
+
raise ArgumentError, "#{attachment.name} is not a File"
|
83
|
+
end
|
67
84
|
|
68
|
-
|
69
|
-
|
70
|
-
|
85
|
+
basename = send("#{attachment.name}_basename")
|
86
|
+
if basename.blank?
|
87
|
+
basename = ActiveSupport::SecureRandom.hex(4).to_s
|
88
|
+
send("#{attachment.name}_basename=", basename)
|
89
|
+
end
|
71
90
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
send("#{attachment.name}_basename=", basename)
|
76
|
-
end
|
91
|
+
if respond_to?("#{attachment.name}_filename")
|
92
|
+
send("#{attachment.name}_filename=", basename+File.extname(file.original_filename).downcase)
|
93
|
+
end
|
77
94
|
|
78
|
-
|
79
|
-
|
80
|
-
|
95
|
+
if respond_to?("#{attachment.name}_filesize")
|
96
|
+
send("#{attachment.name}_filesize=", file.size)
|
97
|
+
end
|
81
98
|
|
82
|
-
|
83
|
-
|
84
|
-
|
99
|
+
if respond_to?("#{attachment.name}_originalname")
|
100
|
+
send("#{attachment.name}_originalname=", file.original_filename)
|
101
|
+
end
|
85
102
|
|
86
|
-
|
87
|
-
send("#{attachment.name}_originalname=", file.original_filename)
|
103
|
+
attachment.process(self, file.path)
|
88
104
|
end
|
89
|
-
|
90
|
-
|
91
|
-
end
|
92
|
-
|
93
|
-
def after_save
|
94
|
-
self.class.attachments.each_value do |attachment|
|
95
|
-
file = send(attachment.name)
|
96
|
-
next unless file
|
97
|
-
|
98
|
-
files_to_store = attachment.process(self, file.path)
|
99
|
-
attachment.options[:styles].each_key do |style|
|
100
|
-
src_file = files_to_store[style]
|
101
|
-
dst_path = attachment.path(self, style)
|
102
|
-
puts "saving #{dst_path} (#{src_file.size} bytes)"
|
103
|
-
FileUtils.mkdir_p(File.dirname(dst_path))
|
104
|
-
FileUtils.cp(src_file.path, dst_path)
|
105
|
-
src_file.close!
|
106
|
-
end
|
105
|
+
|
106
|
+
attachment.update_storage(self)
|
107
107
|
end
|
108
108
|
super
|
109
109
|
end
|
110
110
|
|
111
111
|
def after_destroy
|
112
112
|
self.class.attachments.each_value do |attachment|
|
113
|
-
attachment.
|
114
|
-
|
115
|
-
dst_path = attachment.path(self, style)
|
116
|
-
|
117
|
-
puts "deleting #{dst_path}"
|
118
|
-
begin
|
119
|
-
FileUtils.rm(dst_path)
|
120
|
-
rescue Errno::ENOENT => error
|
121
|
-
end
|
122
|
-
end
|
113
|
+
send("#{attachment.name}=", nil)
|
114
|
+
attachment.update_storage(self)
|
123
115
|
end
|
124
116
|
super
|
125
117
|
end
|
data/sequel_paperclip.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sequel_paperclip}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Corin Langosch"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-09-09}
|
13
13
|
s.description = %q{Sequel plugin which provides Paperclip (attachments, thumbnail resizing, etc.) functionality for model.}
|
14
14
|
s.email = %q{info@netskin.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Corin Langosch
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-09-09 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|