paperdragon 0.0.6 → 0.0.7
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.
- checksums.yaml +4 -4
- data/README.md +27 -4
- data/lib/paperdragon/CHANGES.md +3 -0
- data/lib/paperdragon/attachment.rb +5 -5
- data/lib/paperdragon/file/operations.rb +18 -11
- data/lib/paperdragon/task.rb +10 -1
- data/lib/paperdragon/version.rb +1 -1
- data/test/file_test.rb +1 -1
- data/test/fixtures/trb.png +0 -0
- data/test/task_test.rb +26 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00a917cff82896af01efe02f6217157cea6eb144
|
4
|
+
data.tar.gz: cd5588ff1dcb1dc713086d57b37b2ce5a12ffe8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2944453772c81e767aa30ead6e175ca76beb8febf43c985d6446a1ab5ae4672d1647a0e1dde5c6c020fd7857b2dccbb0a1d2ceae9bef02177726937d7a30596
|
7
|
+
data.tar.gz: a5b2009a183835567b9d5e9217416287d9659ad86f02912a5592b0b073bd53c651ef09a993236fa5d6f85d9294d93152eaa7faa85046957bdfc749921d2d774f
|
data/README.md
CHANGED
@@ -77,7 +77,7 @@ For a better understanding and to see how simple it is, go and check out the `im
|
|
77
77
|
|
78
78
|
```ruby
|
79
79
|
user.image_meta_data #=> {original: {uid: "original-logo.jpg", width: 240, height: 800},
|
80
|
-
# thumb: {uid: "thumb-logo.jpg", width:
|
80
|
+
# thumb: {uid: "thumb-logo.jpg", width: 140, height: 140},
|
81
81
|
# ..and so on..
|
82
82
|
# }
|
83
83
|
```
|
@@ -91,7 +91,7 @@ After processing, you may want to render those image versions in your app.
|
|
91
91
|
user.image[:thumb].url
|
92
92
|
```
|
93
93
|
|
94
|
-
This is all you need to retrieve the URL/path for a stored image. Use this for your image tags
|
94
|
+
This is all you need to retrieve the URL/path for a stored image. Use this for your image tags.
|
95
95
|
|
96
96
|
```haml
|
97
97
|
= img_tag user.image[:thumb].url
|
@@ -174,6 +174,29 @@ end
|
|
174
174
|
This will also remove the associated metadata from the model.
|
175
175
|
|
176
176
|
|
177
|
+
## Replacing Images
|
178
|
+
|
179
|
+
It's ok to run `#process!` again on a model with an existing attachment.
|
180
|
+
|
181
|
+
```ruby
|
182
|
+
user.image_meta_data #=> {original: {uid: "original-logo-1234567890.jpg", ..},
|
183
|
+
```
|
184
|
+
|
185
|
+
Processing here will overwrite the existing attachment.
|
186
|
+
|
187
|
+
```ruby
|
188
|
+
user.image(new_file) do |v|
|
189
|
+
v.process!(:original) # overwrites the existing, deletes old.
|
190
|
+
end
|
191
|
+
```
|
192
|
+
|
193
|
+
```ruby
|
194
|
+
user.image_meta_data #=> {original: {uid: "original-new-file01.jpg", ..},
|
195
|
+
```
|
196
|
+
|
197
|
+
While replacing the old with the new upload, the old file also gets deleted.
|
198
|
+
|
199
|
+
|
177
200
|
## Fingerprints
|
178
201
|
|
179
202
|
Paperdragon comes with a very simple built-in file naming.
|
@@ -223,7 +246,7 @@ class Attachment < Paperdragon::Attachment
|
|
223
246
|
# def build_uid and the other code from above..
|
224
247
|
|
225
248
|
def rebuild_uid(file, fingerprint)
|
226
|
-
file.uid.sub("logo.png", "logo-#{fingerprint
|
249
|
+
file.uid.sub("logo.png", "logo-#{fingerprint}.png")
|
227
250
|
end
|
228
251
|
end
|
229
252
|
```
|
@@ -311,4 +334,4 @@ class User < ActiveRecord::Base
|
|
311
334
|
include Paperdragon::Paperclip::Model
|
312
335
|
```
|
313
336
|
|
314
|
-
This will allow both APIs for a smooth transition.
|
337
|
+
This will allow both APIs for a smooth transition.
|
@@ -36,6 +36,11 @@ module Paperdragon
|
|
36
36
|
task.metadata_hash
|
37
37
|
end
|
38
38
|
|
39
|
+
# Computes UID when File doesn't have one, yet. Called in #initialize.
|
40
|
+
def uid_from(*args)
|
41
|
+
build_uid(*args)
|
42
|
+
end
|
43
|
+
|
39
44
|
# Per default, paperdragon tries to increment the fingerprint in the file name, identified by
|
40
45
|
# the pattern <tt>/-\d{10}/</tt> just before the filename extension (.png).
|
41
46
|
def rebuild_uid(file, fingerprint=nil) # the signature of this method is to be considered semi-private.
|
@@ -57,11 +62,6 @@ module Paperdragon
|
|
57
62
|
private
|
58
63
|
attr_reader :options
|
59
64
|
|
60
|
-
# Computes UID when File doesn't have one, yet. Called in #initialize.
|
61
|
-
def uid_from(*args)
|
62
|
-
build_uid(*args)
|
63
|
-
end
|
64
|
-
|
65
65
|
def build_uid(style, file)
|
66
66
|
# can we use Dragonfly's API here?
|
67
67
|
"#{style}-#{Dragonfly::TempObject.new(file).original_filename}"
|
@@ -2,14 +2,28 @@ module Paperdragon
|
|
2
2
|
class File
|
3
3
|
# DISCUSS: allow the metadata passing here or not?
|
4
4
|
module Process
|
5
|
-
def process!(file, metadata={})
|
5
|
+
def process!(file, new_uid=nil, metadata={})
|
6
6
|
job = Dragonfly.app.new_job(file)
|
7
7
|
|
8
8
|
yield job if block_given?
|
9
9
|
|
10
|
+
old_uid = uid
|
11
|
+
uid!(new_uid) if new_uid # set new uid if this is a replace.
|
12
|
+
|
13
|
+
upload!(job, old_uid, new_uid, metadata)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
# Upload file, delete old file if there is one.
|
18
|
+
def upload!(job, old_uid, new_uid, metadata)
|
10
19
|
puts "........................STORE (process): #{uid}"
|
11
20
|
job.store(path: uid, :headers => {'x-amz-acl' => 'public-read', "Content-Type" => "image/jpeg"})
|
12
21
|
|
22
|
+
if new_uid # new uid means delete old one.
|
23
|
+
puts "........................DELETE (reprocess): #{old_uid}"
|
24
|
+
Dragonfly.app.destroy(old_uid)
|
25
|
+
end
|
26
|
+
|
13
27
|
@data = nil
|
14
28
|
metadata_for(job, metadata)
|
15
29
|
end
|
@@ -25,22 +39,15 @@ module Paperdragon
|
|
25
39
|
|
26
40
|
|
27
41
|
module Reprocess
|
28
|
-
def reprocess!(
|
42
|
+
def reprocess!(new_uid, original, metadata={})
|
29
43
|
job = Dragonfly.app.new_job(original.data) # inheritance here somehow?
|
30
44
|
|
31
45
|
yield job if block_given?
|
32
46
|
|
33
47
|
old_uid = uid
|
34
|
-
uid!(
|
48
|
+
uid!(new_uid) # new UID is already computed and set.
|
35
49
|
|
36
|
-
|
37
|
-
job.store(path: uid, headers: {'x-amz-acl' => 'public-read', "Content-Type" => "image/jpeg"}) # store with thumb url.
|
38
|
-
|
39
|
-
puts "........................DELETE (reprocess): #{old_uid}"
|
40
|
-
Dragonfly.app.destroy(old_uid)
|
41
|
-
|
42
|
-
@data = nil
|
43
|
-
metadata_for(job, metadata)
|
50
|
+
upload!(job, old_uid, new_uid, metadata)
|
44
51
|
end
|
45
52
|
end
|
46
53
|
|
data/lib/paperdragon/task.rb
CHANGED
@@ -19,7 +19,10 @@ module Paperdragon
|
|
19
19
|
# metadata = version.process!(upload, &block)
|
20
20
|
# merge! {style => metadata}
|
21
21
|
def process!(style, &block)
|
22
|
-
|
22
|
+
version = file(style, upload)
|
23
|
+
new_uid = new_uid_for(style, version) # new uid when overwriting existing attachment.
|
24
|
+
|
25
|
+
@metadata.merge!(style => version.process!(upload, new_uid, &block))
|
23
26
|
end
|
24
27
|
|
25
28
|
# fingerprint optional => filename is gonna remain the same
|
@@ -47,5 +50,11 @@ module Paperdragon
|
|
47
50
|
def upload
|
48
51
|
@upload or raise MissingUploadError.new("You called #process! but didn't pass an uploaded file to Attachment#task.")
|
49
52
|
end
|
53
|
+
|
54
|
+
# Returns new UID for new file when overriding an existing attachment with #process!.
|
55
|
+
def new_uid_for(style, version)
|
56
|
+
# check if UID is present in existing metadata.
|
57
|
+
@attachment.metadata[style][:uid] ? @attachment.uid_from(style, upload) : nil # DISCUSS: move to Attachment?
|
58
|
+
end
|
50
59
|
end
|
51
60
|
end
|
data/lib/paperdragon/version.rb
CHANGED
data/test/file_test.rb
CHANGED
@@ -56,7 +56,7 @@ class PaperdragonFileTest < MiniTest::Spec
|
|
56
56
|
|
57
57
|
# additional metadata
|
58
58
|
it do
|
59
|
-
file.process!(logo, :cropping => "16x16") do |job|
|
59
|
+
file.process!(logo, nil, :cropping => "16x16") do |job|
|
60
60
|
job.thumb!("16x16")
|
61
61
|
end.must_equal({:width=>16, :height=>5, :uid=>uid, :cropping=>"16x16"})
|
62
62
|
end
|
Binary file
|
data/test/task_test.rb
CHANGED
@@ -37,7 +37,24 @@ class TaskSpec < MiniTest::Spec
|
|
37
37
|
subject.process!(:original)
|
38
38
|
subject.process!(:thumb) { |j| j.thumb!("16x16") }
|
39
39
|
|
40
|
-
subject.metadata_hash
|
40
|
+
original_metadata = subject.metadata_hash
|
41
|
+
original_metadata.must_equal({:original=>{:width=>216, :height=>63, :uid=>"original-apotomo.png"}, :thumb=>{:width=>16, :height=>5, :uid=>"thumb-apotomo.png"}})
|
42
|
+
# processed files must exist.
|
43
|
+
exists?(original_metadata[:original][:uid]).must_equal true
|
44
|
+
exists?(original_metadata[:thumb][:uid]).must_equal true
|
45
|
+
|
46
|
+
# calling #process! again, with existing metadata, means OVERWRITING the existing image.
|
47
|
+
task = Attachment.new(subject.metadata_hash).task(Pathname("test/fixtures/trb.png"))
|
48
|
+
task.process!(:thumb) { |j| j.thumb!("48x48") }
|
49
|
+
|
50
|
+
overwritten_metadata = task.metadata_hash
|
51
|
+
overwritten_metadata.must_equal({:original=>{:width=>216, :height=>63, :uid=>"original-apotomo.png"}, :thumb=>{:width=>48, :height=>48, :uid=>"thumb-trb.png"}})
|
52
|
+
# original must still exist.
|
53
|
+
exists?(overwritten_metadata[:original][:uid]).must_equal true
|
54
|
+
# old thumb must be deleted.
|
55
|
+
exists?(original_metadata[:thumb][:uid]).must_equal false
|
56
|
+
# new thumb must be existing
|
57
|
+
exists?(overwritten_metadata[:thumb][:uid]).must_equal true
|
41
58
|
end
|
42
59
|
|
43
60
|
it do
|
@@ -45,6 +62,14 @@ class TaskSpec < MiniTest::Spec
|
|
45
62
|
Attachment.new(nil).task.process!(:original)
|
46
63
|
end
|
47
64
|
end
|
65
|
+
|
66
|
+
it do
|
67
|
+
# after uploading "new", only delete when uid was in metadata.
|
68
|
+
existing_metadata = {processing: true}
|
69
|
+
metadata = Attachment.new(existing_metadata).task(logo).process!(:thumb)
|
70
|
+
metadata.must_equal({:processing=>true, :thumb=>{:width=>216, :height=>63, :uid=>"thumb-apotomo.png"}})
|
71
|
+
exists?("thumb-apotomo.png").must_equal true
|
72
|
+
end
|
48
73
|
end
|
49
74
|
|
50
75
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperdragon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dragonfly
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- README.md
|
94
94
|
- Rakefile
|
95
95
|
- lib/paperdragon.rb
|
96
|
+
- lib/paperdragon/CHANGES.md
|
96
97
|
- lib/paperdragon/attachment.rb
|
97
98
|
- lib/paperdragon/file.rb
|
98
99
|
- lib/paperdragon/file/operations.rb
|
@@ -106,6 +107,7 @@ files:
|
|
106
107
|
- test/attachment_test.rb
|
107
108
|
- test/file_test.rb
|
108
109
|
- test/fixtures/apotomo.png
|
110
|
+
- test/fixtures/trb.png
|
109
111
|
- test/metadata_test.rb
|
110
112
|
- test/model_test.rb
|
111
113
|
- test/paperclip_uid_test.rb
|
@@ -131,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
133
|
version: '0'
|
132
134
|
requirements: []
|
133
135
|
rubyforge_project:
|
134
|
-
rubygems_version: 2.2.
|
136
|
+
rubygems_version: 2.2.2
|
135
137
|
signing_key:
|
136
138
|
specification_version: 4
|
137
139
|
summary: Explicit image processing based on Dragonfly with Paperclip compatibility.
|
@@ -139,9 +141,9 @@ test_files:
|
|
139
141
|
- test/attachment_test.rb
|
140
142
|
- test/file_test.rb
|
141
143
|
- test/fixtures/apotomo.png
|
144
|
+
- test/fixtures/trb.png
|
142
145
|
- test/metadata_test.rb
|
143
146
|
- test/model_test.rb
|
144
147
|
- test/paperclip_uid_test.rb
|
145
148
|
- test/task_test.rb
|
146
149
|
- test/test_helper.rb
|
147
|
-
has_rdoc:
|