paperclip-meta 1.0.1 → 1.1.0
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/.ruby-version +1 -1
- data/.travis.yml +7 -4
- data/Gemfile +0 -5
- data/lib/paperclip-meta/attachment.rb +34 -18
- data/lib/paperclip-meta/version.rb +1 -1
- data/spec/attachment_spec.rb +53 -1
- data/spec/spec_helper.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87d602bc919395b882cfca317ccfb2ab02b69e98
|
4
|
+
data.tar.gz: c47a819d68995c5a2023bf4c6c68ad2a821a9713
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 003cca26c110f4b95373db5500d0257523d0006d1508b880ec063d1590f69bead4b3ad326805a1e5bb0507101db9ad63b891f1458a182c234ee626e1988becdb
|
7
|
+
data.tar.gz: c4a1a5c6778cbf778614542641c5382473f17a861eb719d0bf3c580e4e08c57fe09daf3c9c990b8437966b67dd4f8b585a69da718d70825ce68828318ebd0383
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.1.
|
1
|
+
ruby-2.1.1
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -16,36 +16,27 @@ module Paperclip
|
|
16
16
|
save_without_meta_data
|
17
17
|
end
|
18
18
|
|
19
|
-
def post_process_styles_with_meta_data(*
|
20
|
-
post_process_styles_without_meta_data(*
|
19
|
+
def post_process_styles_with_meta_data(*styles)
|
20
|
+
post_process_styles_without_meta_data(*styles)
|
21
21
|
return unless instance.respond_to?(:"#{name}_meta=")
|
22
22
|
|
23
|
-
meta =
|
24
|
-
@queued_for_write.each do |style, file|
|
25
|
-
begin
|
26
|
-
geo = Geometry.from_file file
|
27
|
-
meta[style] = { width: geo.width.to_i, height: geo.height.to_i, size: file.size }
|
28
|
-
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
|
29
|
-
meta[style] = {}
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
23
|
+
meta = populate_meta(@queued_for_write)
|
33
24
|
return if meta == {}
|
34
25
|
|
35
|
-
|
26
|
+
write_meta(meta)
|
36
27
|
end
|
37
28
|
|
38
29
|
# Use meta info for style if required
|
39
30
|
def size_with_meta_data(style = nil)
|
40
|
-
style ?
|
31
|
+
style ? read_meta(style, :size) : size_without_meta_data
|
41
32
|
end
|
42
33
|
|
43
34
|
def height(style = default_style)
|
44
|
-
|
35
|
+
read_meta style, :height
|
45
36
|
end
|
46
37
|
|
47
38
|
def width(style = default_style)
|
48
|
-
|
39
|
+
read_meta style, :width
|
49
40
|
end
|
50
41
|
|
51
42
|
# Return image dimesions ("WxH") for given style name. If style name not given,
|
@@ -56,11 +47,29 @@ module Paperclip
|
|
56
47
|
|
57
48
|
private
|
58
49
|
|
50
|
+
def populate_meta(queue)
|
51
|
+
meta = {}
|
52
|
+
queue.each do |style, file|
|
53
|
+
begin
|
54
|
+
geo = Geometry.from_file file
|
55
|
+
meta[style] = { width: geo.width.to_i, height: geo.height.to_i, size: file.size }
|
56
|
+
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
|
57
|
+
meta[style] = {}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
meta
|
61
|
+
end
|
62
|
+
|
63
|
+
def write_meta(meta)
|
64
|
+
merge_existing_meta_hash meta
|
65
|
+
instance.send("#{name}_meta=", meta_encode(meta))
|
66
|
+
end
|
67
|
+
|
59
68
|
# Return meta data for given style
|
60
|
-
def
|
69
|
+
def read_meta(style, item)
|
61
70
|
if instance.respond_to?(:"#{name}_meta") && instance_read(:meta)
|
62
71
|
if (meta = meta_decode(instance_read(:meta)))
|
63
|
-
meta
|
72
|
+
meta[style] && meta[style][item]
|
64
73
|
end
|
65
74
|
end
|
66
75
|
end
|
@@ -74,6 +83,13 @@ module Paperclip
|
|
74
83
|
def meta_decode(meta)
|
75
84
|
Marshal.load(Base64.decode64(meta))
|
76
85
|
end
|
86
|
+
|
87
|
+
# Retain existing meta values that will not be recalculated when
|
88
|
+
# reprocessing a subset of styles
|
89
|
+
def merge_existing_meta_hash(meta)
|
90
|
+
return unless (original_meta = instance.send("#{name}_meta"))
|
91
|
+
meta.reverse_merge! meta_decode(original_meta)
|
92
|
+
end
|
77
93
|
end
|
78
94
|
end
|
79
95
|
end
|
data/spec/attachment_spec.rb
CHANGED
@@ -7,6 +7,7 @@ describe "Attachment" do
|
|
7
7
|
geometry = geometry_for(small_path)
|
8
8
|
assert_equal geometry.width, img.small_image.width
|
9
9
|
assert_equal geometry.height, img.small_image.height
|
10
|
+
assert_equal "50x64", img.small_image.image_size
|
10
11
|
end
|
11
12
|
|
12
13
|
it "saves geometry for styles" do
|
@@ -15,6 +16,12 @@ describe "Attachment" do
|
|
15
16
|
assert_equal 100, img.big_image.height(:thumb)
|
16
17
|
end
|
17
18
|
|
19
|
+
it "saves original style geometry" do
|
20
|
+
img = Image.create(small_image: small_image)
|
21
|
+
assert_equal 50, img.small_image.width(:original)
|
22
|
+
assert_equal 64, img.small_image.height(:original)
|
23
|
+
end
|
24
|
+
|
18
25
|
it "sets geometry on update" do
|
19
26
|
img = Image.create!
|
20
27
|
img.small_image = small_image
|
@@ -24,7 +31,7 @@ describe "Attachment" do
|
|
24
31
|
assert_equal geometry.height, img.small_image.height
|
25
32
|
end
|
26
33
|
|
27
|
-
describe '
|
34
|
+
describe '#size' do
|
28
35
|
before do
|
29
36
|
@image = Image.create(big_image: big_image)
|
30
37
|
end
|
@@ -68,12 +75,56 @@ describe "Attachment" do
|
|
68
75
|
assert_nil img.small_image.height
|
69
76
|
end
|
70
77
|
|
78
|
+
it "preserves metadata when reprocessing a specific style" do
|
79
|
+
img = Image.new
|
80
|
+
img.big_image = big_image
|
81
|
+
img.save!
|
82
|
+
assert_equal 500, img.big_image.width(:large)
|
83
|
+
img.big_image.reprocess!(:thumb)
|
84
|
+
assert_equal 500, img.big_image.width(:large)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "preserves metadata for unprocessed styles" do
|
88
|
+
img = Image.new
|
89
|
+
img.big_image = big_image
|
90
|
+
img.save!
|
91
|
+
|
92
|
+
# set big image meta to fake values for :large & missing :thumb
|
93
|
+
hash = { large: { height: 1, width: 2, size: 3 } }
|
94
|
+
img.update_column(:big_image_meta, img.big_image.send(:meta_encode, hash))
|
95
|
+
|
96
|
+
assert_equal 1, img.big_image.height(:large)
|
97
|
+
assert_equal 2, img.big_image.width(:large)
|
98
|
+
assert_equal 3, img.big_image.size(:large)
|
99
|
+
assert_nil img.big_image.height(:thumb)
|
100
|
+
assert_nil img.big_image.height(:original)
|
101
|
+
img.big_image.reprocess!(:thumb)
|
102
|
+
assert_equal 1, img.big_image.height(:large)
|
103
|
+
assert_equal 2, img.big_image.width(:large)
|
104
|
+
assert_equal 3, img.big_image.size(:large)
|
105
|
+
assert_equal 100, img.big_image.height(:thumb)
|
106
|
+
assert_equal 100, img.big_image.width(:thumb)
|
107
|
+
assert_equal 277, img.big_image.height(:original) # original is always reprocessed
|
108
|
+
end
|
109
|
+
|
110
|
+
it "replaces metadata when attachment changes" do
|
111
|
+
img = Image.new
|
112
|
+
img.big_image = big_image
|
113
|
+
img.save!
|
114
|
+
img.big_image = small_image
|
115
|
+
img.save!
|
116
|
+
assert_equal "50x64", img.big_image.image_size
|
117
|
+
assert_equal "100x100", img.big_image.image_size(:thumb)
|
118
|
+
assert_equal "500x500", img.big_image.image_size(:large)
|
119
|
+
end
|
120
|
+
|
71
121
|
private
|
72
122
|
|
73
123
|
def small_path
|
74
124
|
File.join(File.dirname(__FILE__), 'fixtures', 'small.png')
|
75
125
|
end
|
76
126
|
|
127
|
+
# 50x64
|
77
128
|
def small_image
|
78
129
|
File.open(small_path)
|
79
130
|
end
|
@@ -82,6 +133,7 @@ describe "Attachment" do
|
|
82
133
|
Paperclip::Geometry.from_file(path)
|
83
134
|
end
|
84
135
|
|
136
|
+
# 600x277
|
85
137
|
def big_image
|
86
138
|
File.open(File.join(File.dirname(__FILE__), 'fixtures', 'big.jpg'))
|
87
139
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -32,7 +32,7 @@ class Image < ActiveRecord::Base
|
|
32
32
|
storage: :filesystem,
|
33
33
|
path: "./spec/tmp/fixtures/tmp/:style/:id.:extension",
|
34
34
|
url: "./spec/tmp/fixtures/tmp/:style/:id.extension",
|
35
|
-
styles: { thumb: "100x100#" }
|
35
|
+
styles: { thumb: "100x100#", large: "500x500#" }
|
36
36
|
|
37
37
|
# paperclip 4.0 requires a validator
|
38
38
|
validates_attachment_content_type :small_image, content_type: /\Aimage/
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-meta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Bondar
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: paperclip
|
@@ -163,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
163
|
version: '0'
|
164
164
|
requirements: []
|
165
165
|
rubyforge_project:
|
166
|
-
rubygems_version: 2.2.
|
166
|
+
rubygems_version: 2.2.2
|
167
167
|
signing_key:
|
168
168
|
specification_version: 4
|
169
169
|
summary: Add width, height, and size to paperclip images
|