kt-paperclip-meta 4.0.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 +7 -0
- data/LICENSE.txt +24 -0
- data/README.md +82 -0
- data/lib/kt-paperclip-meta.rb +1 -0
- data/lib/paperclip-meta/attachment.rb +99 -0
- data/lib/paperclip-meta/railtie.rb +19 -0
- data/lib/paperclip-meta/version.rb +5 -0
- data/lib/paperclip-meta.rb +3 -0
- metadata +194 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 0bed9b326c596d715bf8cafddbdddd7a470573f1756eac2792d08797af3a8400
|
|
4
|
+
data.tar.gz: e95ee154e940a9c93e7119fa250fb779e9d28c60238e366f7bdca042bf2ebdfd
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: a55114fd5c54d518abbf5479b61aab93bfa2405db457f4172525e9f0a8ac73bb64aceb635bfee80b2c9520a8796b56f27a0eaa82899d0b87aa50d83f8956e3a7
|
|
7
|
+
data.tar.gz: 8f4b4ff01c4ceba470f38811980921af9dbd224cc7dc5760a09cae8535085b879d4a5316e5e20a202ade1cf9e2c981101074cce2d3fdff97895d533bef55b756
|
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Copyright (c) 2014 Tee Parham, Alexey Bondar
|
|
2
|
+
Modifications Copyright (c) 2024 Paul Nicholson
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
MIT License
|
|
6
|
+
|
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
8
|
+
a copy of this software and associated documentation files (the
|
|
9
|
+
"Software"), to deal in the Software without restriction, including
|
|
10
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
11
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
12
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
13
|
+
the following conditions:
|
|
14
|
+
|
|
15
|
+
The above copyright notice and this permission notice shall be
|
|
16
|
+
included in all copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
19
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
20
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
21
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
22
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
23
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
24
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Paperclip Meta
|
|
2
|
+
|
|
3
|
+
[](http://rubygems.org/gems/paperclip-meta)
|
|
4
|
+
[](https://travis-ci.org/teeparham/paperclip-meta)
|
|
5
|
+
|
|
6
|
+
Add width, height, and size to paperclip images.
|
|
7
|
+
|
|
8
|
+
Paperclip Meta gets image dimensions after `post_process_styles` using paperclip's `Geometry.from_file`.
|
|
9
|
+
|
|
10
|
+
Paperclip Meta works with paperclip version 5.x and 6.x.
|
|
11
|
+
|
|
12
|
+
Version 2.x works with paperclip version 4.x.
|
|
13
|
+
|
|
14
|
+
### Setup
|
|
15
|
+
|
|
16
|
+
Add paperclip-meta to Gemfile:
|
|
17
|
+
|
|
18
|
+
```ruby
|
|
19
|
+
gem 'paperclip-meta'
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Create migration to add a *_meta column:
|
|
23
|
+
|
|
24
|
+
```ruby
|
|
25
|
+
class AddAvatarMetaToUsers < ActiveRecord::Migration
|
|
26
|
+
def change
|
|
27
|
+
add_column :users, :avatar_meta, :text
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Rebuild all thumbnails to populate the meta column if you already have some attachments.
|
|
33
|
+
|
|
34
|
+
Now you can grab the size from the paperclip attachment:
|
|
35
|
+
|
|
36
|
+
```ruby
|
|
37
|
+
image_tag user.avatar.url, size: user.avatar.image_size
|
|
38
|
+
image_tag user.avatar.url(:medium), size: user.avatar.image_size(:medium)
|
|
39
|
+
image_tag user.avatar.url(:thumb), size: user.avatar.image_size(:thumb)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Internals
|
|
43
|
+
|
|
44
|
+
The meta column is simple hash:
|
|
45
|
+
|
|
46
|
+
```ruby
|
|
47
|
+
style: {
|
|
48
|
+
width: 100,
|
|
49
|
+
height: 100,
|
|
50
|
+
size: 42000
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
This hash will be marshaled and base64 encoded before writing to model attribute.
|
|
55
|
+
|
|
56
|
+
`height`, `width`, `image_size` and `aspect_ratio` methods are provided:
|
|
57
|
+
|
|
58
|
+
```ruby
|
|
59
|
+
user.avatar.width(:thumb)
|
|
60
|
+
=> 100
|
|
61
|
+
user.avatar.height(:medium)
|
|
62
|
+
=> 200
|
|
63
|
+
user.avatar.image_size
|
|
64
|
+
=> '60x70'
|
|
65
|
+
user.avatar.aspect_ratio
|
|
66
|
+
=> 1.5
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
You can pass the image style to these methods. If a style is not passed, the default style will be used.
|
|
70
|
+
|
|
71
|
+
### Alternatives
|
|
72
|
+
|
|
73
|
+
https://github.com/thoughtbot/paperclip/wiki/Extracting-image-dimensions
|
|
74
|
+
|
|
75
|
+
### Development
|
|
76
|
+
|
|
77
|
+
Test:
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
bundle
|
|
81
|
+
bundle exec rake
|
|
82
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'paperclip-meta'
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
module Paperclip
|
|
2
|
+
module Meta
|
|
3
|
+
module Attachment
|
|
4
|
+
def assign_attributes
|
|
5
|
+
super
|
|
6
|
+
assign_meta
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def save
|
|
10
|
+
if @queued_for_delete.any? && @queued_for_write.empty?
|
|
11
|
+
instance_write(:meta, meta_encode({}))
|
|
12
|
+
end
|
|
13
|
+
super
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def post_process_styles(*styles)
|
|
17
|
+
super(*styles)
|
|
18
|
+
assign_meta
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Use meta info for style if required
|
|
22
|
+
def size(style = nil)
|
|
23
|
+
style ? read_meta(style, :size) : super()
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def height(style = default_style)
|
|
27
|
+
read_meta style, :height
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def width(style = default_style)
|
|
31
|
+
read_meta style, :width
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def aspect_ratio(style = default_style)
|
|
35
|
+
width(style).to_f / height(style).to_f
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Return image dimesions ("WxH") for given style name. If style name not given,
|
|
39
|
+
# return dimesions for default_style.
|
|
40
|
+
def image_size(style = default_style)
|
|
41
|
+
"#{width(style)}x#{height(style)}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def assign_meta
|
|
47
|
+
return unless instance.respond_to?(:"#{name}_meta=")
|
|
48
|
+
meta = populate_meta(@queued_for_write)
|
|
49
|
+
return if meta == {}
|
|
50
|
+
|
|
51
|
+
write_meta(meta)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def populate_meta(queue)
|
|
55
|
+
meta = {}
|
|
56
|
+
queue.each do |style, file|
|
|
57
|
+
begin
|
|
58
|
+
geo = Geometry.from_file file
|
|
59
|
+
meta[style] = { width: geo.width.to_i, height: geo.height.to_i, size: file.size }
|
|
60
|
+
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
|
|
61
|
+
meta[style] = {}
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
meta
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def write_meta(meta)
|
|
68
|
+
merge_existing_meta_hash meta
|
|
69
|
+
instance.send("#{name}_meta=", meta_encode(meta))
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Return meta data for given style
|
|
73
|
+
def read_meta(style, item)
|
|
74
|
+
if instance.respond_to?(:"#{name}_meta") && instance_read(:meta)
|
|
75
|
+
if (meta = meta_decode(instance_read(:meta)))
|
|
76
|
+
meta[style] && meta[style][item]
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Return encoded metadata as String
|
|
82
|
+
def meta_encode(meta)
|
|
83
|
+
Base64.encode64(Marshal.dump(meta))
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Return decoded metadata as Object
|
|
87
|
+
def meta_decode(meta)
|
|
88
|
+
Marshal.load(Base64.decode64(meta))
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Retain existing meta values that will not be recalculated when
|
|
92
|
+
# reprocessing a subset of styles
|
|
93
|
+
def merge_existing_meta_hash(meta)
|
|
94
|
+
return unless (original_meta = instance.send("#{name}_meta"))
|
|
95
|
+
meta.reverse_merge! meta_decode(original_meta)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Paperclip
|
|
2
|
+
module Meta
|
|
3
|
+
if defined? ::Rails::Railtie
|
|
4
|
+
class Railtie < ::Rails::Railtie
|
|
5
|
+
initializer :paperclip_meta do
|
|
6
|
+
ActiveSupport.on_load :active_record do
|
|
7
|
+
Paperclip::Meta::Railtie.insert
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class Railtie
|
|
14
|
+
def self.insert
|
|
15
|
+
Paperclip::Attachment.prepend Paperclip::Meta::Attachment
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: kt-paperclip-meta
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 4.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Alexey Bondar
|
|
8
|
+
- Tee Parham
|
|
9
|
+
- Paul Nicholson
|
|
10
|
+
autorequire:
|
|
11
|
+
bindir: bin
|
|
12
|
+
cert_chain: []
|
|
13
|
+
date: 2024-06-10 00:00:00.000000000 Z
|
|
14
|
+
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: kt-paperclip
|
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
|
+
requirements:
|
|
19
|
+
- - ">="
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '5.0'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '5.0'
|
|
29
|
+
- !ruby/object:Gem::Dependency
|
|
30
|
+
name: bundler
|
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
|
32
|
+
requirements:
|
|
33
|
+
- - ">="
|
|
34
|
+
- !ruby/object:Gem::Version
|
|
35
|
+
version: '0'
|
|
36
|
+
type: :development
|
|
37
|
+
prerelease: false
|
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
39
|
+
requirements:
|
|
40
|
+
- - ">="
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: '0'
|
|
43
|
+
- !ruby/object:Gem::Dependency
|
|
44
|
+
name: rake
|
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
|
46
|
+
requirements:
|
|
47
|
+
- - "~>"
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: '13.0'
|
|
50
|
+
type: :development
|
|
51
|
+
prerelease: false
|
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
53
|
+
requirements:
|
|
54
|
+
- - "~>"
|
|
55
|
+
- !ruby/object:Gem::Version
|
|
56
|
+
version: '13.0'
|
|
57
|
+
- !ruby/object:Gem::Dependency
|
|
58
|
+
name: mocha
|
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
|
60
|
+
requirements:
|
|
61
|
+
- - "~>"
|
|
62
|
+
- !ruby/object:Gem::Version
|
|
63
|
+
version: '1.2'
|
|
64
|
+
type: :development
|
|
65
|
+
prerelease: false
|
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
67
|
+
requirements:
|
|
68
|
+
- - "~>"
|
|
69
|
+
- !ruby/object:Gem::Version
|
|
70
|
+
version: '1.2'
|
|
71
|
+
- !ruby/object:Gem::Dependency
|
|
72
|
+
name: activerecord
|
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
|
74
|
+
requirements:
|
|
75
|
+
- - "~>"
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '5.0'
|
|
78
|
+
type: :development
|
|
79
|
+
prerelease: false
|
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
81
|
+
requirements:
|
|
82
|
+
- - "~>"
|
|
83
|
+
- !ruby/object:Gem::Version
|
|
84
|
+
version: '5.0'
|
|
85
|
+
- !ruby/object:Gem::Dependency
|
|
86
|
+
name: sqlite3
|
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
|
88
|
+
requirements:
|
|
89
|
+
- - ">="
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: 1.3.10
|
|
92
|
+
type: :development
|
|
93
|
+
prerelease: false
|
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
95
|
+
requirements:
|
|
96
|
+
- - ">="
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: 1.3.10
|
|
99
|
+
- !ruby/object:Gem::Dependency
|
|
100
|
+
name: kt-delayed_paperclip
|
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
|
102
|
+
requirements:
|
|
103
|
+
- - "~>"
|
|
104
|
+
- !ruby/object:Gem::Version
|
|
105
|
+
version: '3.1'
|
|
106
|
+
type: :development
|
|
107
|
+
prerelease: false
|
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
109
|
+
requirements:
|
|
110
|
+
- - "~>"
|
|
111
|
+
- !ruby/object:Gem::Version
|
|
112
|
+
version: '3.1'
|
|
113
|
+
- !ruby/object:Gem::Dependency
|
|
114
|
+
name: activesupport
|
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
|
116
|
+
requirements:
|
|
117
|
+
- - "~>"
|
|
118
|
+
- !ruby/object:Gem::Version
|
|
119
|
+
version: '5.0'
|
|
120
|
+
type: :development
|
|
121
|
+
prerelease: false
|
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
123
|
+
requirements:
|
|
124
|
+
- - "~>"
|
|
125
|
+
- !ruby/object:Gem::Version
|
|
126
|
+
version: '5.0'
|
|
127
|
+
- !ruby/object:Gem::Dependency
|
|
128
|
+
name: activejob
|
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
|
130
|
+
requirements:
|
|
131
|
+
- - "~>"
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: '5.0'
|
|
134
|
+
type: :development
|
|
135
|
+
prerelease: false
|
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
+
requirements:
|
|
138
|
+
- - "~>"
|
|
139
|
+
- !ruby/object:Gem::Version
|
|
140
|
+
version: '5.0'
|
|
141
|
+
- !ruby/object:Gem::Dependency
|
|
142
|
+
name: railties
|
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
|
144
|
+
requirements:
|
|
145
|
+
- - "~>"
|
|
146
|
+
- !ruby/object:Gem::Version
|
|
147
|
+
version: '5.0'
|
|
148
|
+
type: :development
|
|
149
|
+
prerelease: false
|
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
151
|
+
requirements:
|
|
152
|
+
- - "~>"
|
|
153
|
+
- !ruby/object:Gem::Version
|
|
154
|
+
version: '5.0'
|
|
155
|
+
description: Add width, height and size methods to paperclip images
|
|
156
|
+
email:
|
|
157
|
+
- y8@ya.ru
|
|
158
|
+
- tee@neighborland.com
|
|
159
|
+
- paul-rubygems@refactoredtech.com
|
|
160
|
+
executables: []
|
|
161
|
+
extensions: []
|
|
162
|
+
extra_rdoc_files: []
|
|
163
|
+
files:
|
|
164
|
+
- LICENSE.txt
|
|
165
|
+
- README.md
|
|
166
|
+
- lib/kt-paperclip-meta.rb
|
|
167
|
+
- lib/paperclip-meta.rb
|
|
168
|
+
- lib/paperclip-meta/attachment.rb
|
|
169
|
+
- lib/paperclip-meta/railtie.rb
|
|
170
|
+
- lib/paperclip-meta/version.rb
|
|
171
|
+
homepage: http://github.com/teeparham/paperclip-meta
|
|
172
|
+
licenses:
|
|
173
|
+
- MIT
|
|
174
|
+
metadata: {}
|
|
175
|
+
post_install_message:
|
|
176
|
+
rdoc_options: []
|
|
177
|
+
require_paths:
|
|
178
|
+
- lib
|
|
179
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
180
|
+
requirements:
|
|
181
|
+
- - ">="
|
|
182
|
+
- !ruby/object:Gem::Version
|
|
183
|
+
version: 2.2.2
|
|
184
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
185
|
+
requirements:
|
|
186
|
+
- - ">="
|
|
187
|
+
- !ruby/object:Gem::Version
|
|
188
|
+
version: '0'
|
|
189
|
+
requirements: []
|
|
190
|
+
rubygems_version: 3.1.6
|
|
191
|
+
signing_key:
|
|
192
|
+
specification_version: 4
|
|
193
|
+
summary: Add width, height, and size to paperclip images
|
|
194
|
+
test_files: []
|