kt-paperclip-meta 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ [![Gem Version](https://badge.fury.io/rb/paperclip-meta.svg)](http://rubygems.org/gems/paperclip-meta)
4
+ [![Build Status](https://travis-ci.org/teeparham/paperclip-meta.svg?branch=master)](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
@@ -0,0 +1,5 @@
1
+ module Paperclip
2
+ module Meta
3
+ VERSION = "4.0.0"
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ require "paperclip-meta/version"
2
+ require "paperclip-meta/railtie"
3
+ require "paperclip-meta/attachment"
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: []