ack-paperclip-meta 1.2.2

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
+ SHA1:
3
+ metadata.gz: 7fe8ad4e4db2f3ec4b0e6b348a1d4fb748618cfe
4
+ data.tar.gz: 478098e9bbc9c0ddca769fff31bac6b682cf8ee4
5
+ SHA512:
6
+ metadata.gz: f3b6e9693b9ed8862c042ad4e163af51d40ffb8b37babfb35f53848cf081485dfa7eeb3fa5d5f242ce2bcaf7eb5029ed945fc9190fe62cd5267eaddd27255c9f
7
+ data.tar.gz: 25e0ce466a9340b6da949114817bbf2303af89c3e44b8742b3d6fd19120b39c761c628c3501dd1ebfcccfb94700598fa705307ebf6fcea575b5722b8a1f54e4a
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .idea
2
+ .idea/*
3
+
4
+ .bundle/
5
+ Gemfile.lock
6
+ pkg/*
7
+ spec/gemfiles/*.lock
8
+ spec/tmp/*/**
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ ack_paperclip-meta
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.2
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ rvm:
2
+ - 2.1.4
3
+ - 2.0.0
4
+ - 1.9.3
5
+ - rbx-2
6
+ gemfile:
7
+ - spec/gemfiles/Gemfile.paperclip-4
8
+ - spec/gemfiles/Gemfile.paperclip-3
9
+ install:
10
+ - bundle install --retry=3
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ platforms :jruby do
4
+ gem 'activerecord-jdbcsqlite3-adapter'
5
+ end
6
+
7
+ # See paperclip-meta.gemspec
8
+ gemspec
9
+
10
+ gem 'paperclip'
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 ack
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,92 @@
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 versions 3.x and 4.x.
11
+
12
+ ### Setup
13
+
14
+ Add paperclip-meta to Gemfile:
15
+
16
+ ```ruby
17
+ gem 'ack-paperclip-meta'
18
+ ```
19
+
20
+ Create migration to add a *_meta column:
21
+
22
+ ```ruby
23
+ class AddAvatarMetaToUsers < ActiveRecord::Migration
24
+ def change
25
+ add_column :users, :avatar_meta, :text
26
+ end
27
+ end
28
+ ```
29
+
30
+ Rebuild all thumbnails to populate the meta column if you already have some attachments.
31
+
32
+ Now you can grab the size from the paperclip attachment:
33
+
34
+ ```ruby
35
+ image_tag user.avatar.url, size: user.avatar.image_size
36
+ image_tag user.avatar.url(:medium), size: user.avatar.image_size(:medium)
37
+ image_tag user.avatar.url(:thumb), size: user.avatar.image_size(:thumb)
38
+ ```
39
+
40
+ ### Internals
41
+
42
+ The meta column is simple hash:
43
+
44
+ ```ruby
45
+ style: {
46
+ width: 100,
47
+ height: 100,
48
+ size: 42000
49
+ }
50
+ ```
51
+
52
+ This hash will be marshaled and base64 encoded before writing to model attribute.
53
+
54
+ `height`, `width`, and `image_size` methods are provided:
55
+
56
+ ```ruby
57
+ user.avatar.width(:thumb)
58
+ => 100
59
+ user.avatar.height(:medium)
60
+ => 200
61
+ user.avatar.image_size
62
+ => '60x70'
63
+ ```
64
+
65
+ You can pass the image style to these methods. If a style is not passed, the default style will be used.
66
+
67
+ ### Alternatives
68
+
69
+ https://github.com/thoughtbot/paperclip/wiki/Extracting-image-dimensions
70
+
71
+ ### Development
72
+
73
+ Test:
74
+
75
+ ```sh
76
+ bundle
77
+ rake
78
+ ```
79
+
80
+ Test paperclip 3.x:
81
+
82
+ ```sh
83
+ BUNDLE_GEMFILE=./spec/gemfiles/Gemfile.paperclip-3 bundle
84
+ BUNDLE_GEMFILE=./spec/gemfiles/Gemfile.paperclip-3 rake
85
+ ```
86
+
87
+ Test paperclip 4.x:
88
+
89
+ ```sh
90
+ BUNDLE_GEMFILE=./spec/gemfiles/Gemfile.paperclip-4 bundle
91
+ BUNDLE_GEMFILE=./spec/gemfiles/Gemfile.paperclip-4 rake
92
+ ```
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:spec) do |t|
5
+ t.libs << 'spec'
6
+ t.test_files = %w(spec/**/*_spec.rb)
7
+ t.verbose = false
8
+ end
9
+
10
+ task default: :spec
@@ -0,0 +1 @@
1
+ require 'paperclip-meta'
@@ -0,0 +1 @@
1
+ require 'paperclip/meta'
@@ -0,0 +1,3 @@
1
+ require 'paperclip/meta/version'
2
+ require 'paperclip/meta/railtie'
3
+ require 'paperclip/meta/attachment'
@@ -0,0 +1,111 @@
1
+ module Paperclip
2
+ module Meta
3
+ module Attachment
4
+ def self.included(base)
5
+ base.send :include, InstanceMethods
6
+ base.alias_method_chain :save, :meta_data
7
+ base.alias_method_chain :post_process_styles, :meta_data
8
+ base.alias_method_chain :size, :meta_data
9
+ end
10
+
11
+ module InstanceMethods
12
+ def save_with_meta_data
13
+ if @queued_for_delete and @queued_for_delete.any? and (@queued_for_write.nil? or @queued_for_write.empty?)
14
+ instance_write(:meta, meta_encode({}))
15
+ elsif !@queued_for_write.nil? and !@queued_for_write.empty?
16
+ post_process_styles_with_meta_data(@queued_for_write.keys.flatten)
17
+ end
18
+ save_without_meta_data
19
+ end
20
+
21
+ def post_process_styles_with_meta_data(*styles)
22
+ post_process_styles_without_meta_data(*styles)
23
+ return unless instance.respond_to?(:"#{name}_meta=")
24
+
25
+ process_meta_for_styles(@queued_for_write)
26
+ end
27
+
28
+ def process_meta_for_styles(queue)
29
+ meta = populate_meta(queue)
30
+ return if meta == {}
31
+
32
+ write_meta(meta)
33
+ end
34
+
35
+ # Use meta info for style if required
36
+ def size_with_meta_data(style = nil)
37
+ style ? read_meta(style, :size) : size_without_meta_data
38
+ end
39
+
40
+ def height(style = default_style)
41
+ read_meta style, :height
42
+ end
43
+
44
+ def width(style = default_style)
45
+ read_meta style, :width
46
+ end
47
+
48
+ # Return image dimesions ("WxH") for given style name. If style name not given,
49
+ # return dimesions for default_style.
50
+ def image_size(style = default_style)
51
+ w = width(style)
52
+ h = height(style)
53
+ "#{w}#{h && "x#{h}"}" if w || h
54
+ end
55
+
56
+ def meta_data
57
+ if instance.respond_to?(:"#{name}_meta") && instance_read(:meta)
58
+ meta_decode(instance_read(:meta)).freeze
59
+ end
60
+ end
61
+
62
+ private
63
+
64
+ def populate_meta(queue)
65
+ meta = {}
66
+ queue.each do |style, file|
67
+ begin
68
+ geo = Geometry.from_file file
69
+ geo.auto_orient
70
+ meta[style] = { width: geo.width.to_i, height: geo.height.to_i, size: file.size }
71
+ rescue Paperclip::Errors::NotIdentifiedByImageMagickError
72
+ meta[style] = {}
73
+ end
74
+ end
75
+ meta
76
+ end
77
+
78
+ def write_meta(meta)
79
+ merge_existing_meta_hash meta
80
+ instance.send("#{name}_meta=", meta_encode(meta))
81
+ end
82
+
83
+ # Return meta data for given style
84
+ def read_meta(style, item)
85
+ if instance.respond_to?(:"#{name}_meta") && instance_read(:meta)
86
+ if (meta = meta_decode(instance_read(:meta)))
87
+ meta[style] && meta[style][item]
88
+ end
89
+ end
90
+ end
91
+
92
+ # Return encoded metadata as String
93
+ def meta_encode(meta)
94
+ Base64.encode64(Marshal.dump(meta))
95
+ end
96
+
97
+ # Return decoded metadata as Object
98
+ def meta_decode(meta)
99
+ Marshal.load(Base64.decode64(meta))
100
+ end
101
+
102
+ # Retain existing meta values that will not be recalculated when
103
+ # reprocessing a subset of styles
104
+ def merge_existing_meta_hash(meta)
105
+ return unless (original_meta = instance.send("#{name}_meta"))
106
+ meta.reverse_merge! meta_decode(original_meta)
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,72 @@
1
+ module Paperclip
2
+ module Meta
3
+
4
+ class ProcessMetaService
5
+
6
+ def self.process!(logger = nil)
7
+ class_names = ENV['CLASSES'] || ENV['classes'] || ""
8
+ classes = class_names.split(',').map { |class_name| Paperclip.class_for(class_name) }
9
+ self.new(logger).process!(*classes)
10
+ end
11
+
12
+ attr_accessor :logger
13
+
14
+ def initialize(logger = nil)
15
+ @logger = logger
16
+ end
17
+
18
+ def process!(*classes)
19
+ classes.each do |klass|
20
+ process_class(klass)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def process_class(klass)
27
+ attachments = Paperclip::AttachmentRegistry.names_for(klass)
28
+ raise "Class #{klass.name} has no attachments specified" if attachments.empty?
29
+
30
+ klass.unscoped.each do |instance|
31
+ log("Processing image meta data for #{instance.class}.#{instance.id}")
32
+ attachments.each do |attachment_name|
33
+ next if instance.send(attachment_name).blank?
34
+ process_attachment(instance, attachment_name)
35
+ end
36
+ end
37
+ end
38
+
39
+ def process_attachment(instance, attachment_name)
40
+ meta_attribute_name = "#{attachment_name}_meta"
41
+ return unless instance.respond_to?(meta_attribute_name)
42
+
43
+ attachment = instance.send(attachment_name)
44
+ io_hash = attachment_styles_to_io_adapters(attachment)
45
+ attachment.process_meta_for_styles(io_hash)
46
+ if instance.respond_to?(:update_column)
47
+ instance.update_column(meta_attribute_name, instance.send(meta_attribute_name))
48
+ elsif instance.respond_to?(:update_attribute)
49
+ instance.update_attribute(meta_attribute_name, instance.send(meta_attribute_name))
50
+ end
51
+ end
52
+
53
+ def attachment_styles_to_io_adapters(attachment)
54
+ io_hash = attachment.styles.reduce({}) do |hash, (style_name, style)|
55
+ hash[style_name] = Paperclip.io_adapters.for(style)
56
+ hash
57
+ end
58
+
59
+ unless io_hash.has_key?(:original)
60
+ io_hash[:original] = Paperclip.io_adapters.for(attachment)
61
+ end
62
+
63
+ io_hash
64
+ end
65
+
66
+ def log(*args)
67
+ logger.info(*args) if logger
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,31 @@
1
+ require 'paperclip/meta'
2
+
3
+ module Paperclip
4
+ module Meta
5
+
6
+ if defined? ::Rails::Railtie
7
+ class Railtie < ::Rails::Railtie
8
+ initializer :paperclip_meta do
9
+ ActiveSupport.on_load :active_record do
10
+ Paperclip::Meta::Railtie.insert
11
+ end
12
+ ActiveSupport.on_load :mongoid do
13
+ Paperclip::Meta::Railtie.insert
14
+ end
15
+ end
16
+
17
+ rake_tasks do
18
+ dir = File.join(File.dirname(__FILE__),'../../../tasks/*.rake')
19
+ Dir[dir].each { |f| load f }
20
+ end
21
+ end
22
+ end
23
+
24
+ class Railtie
25
+ def self.insert
26
+ Paperclip::Attachment.send(:include, Paperclip::Meta::Attachment)
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,5 @@
1
+ module Paperclip
2
+ module Meta
3
+ VERSION = "1.2.2"
4
+ end
5
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "paperclip/meta/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ack-paperclip-meta"
7
+ s.version = Paperclip::Meta::VERSION
8
+ s.authors = ["ack", "Alexey Bondar", "Tee Parham"]
9
+ s.email = ["i43ack@gmail.com", "y8@ya.ru", "tee@neighborland.com"]
10
+ s.homepage = "http://github.com/ack43/paperclip-meta"
11
+ s.summary = %q{Add width, height, and size to paperclip images}
12
+ s.description = %q{Add width, height and size methods to paperclip images}
13
+ s.license = "MIT"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec}/*`.split("\n")
17
+ s.executables = []
18
+ s.require_paths = ["lib"]
19
+
20
+ s.required_ruby_version = ">= 1.9.3"
21
+
22
+ s.add_dependency "paperclip", ">= 3.0.2", "< 5.0"
23
+
24
+ s.add_development_dependency "bundler", "~> 1.5"
25
+ s.add_development_dependency "rake", "~> 10.1"
26
+ s.add_development_dependency "mocha", "~> 1.0"
27
+ # s.add_development_dependency "activerecord", ">= 4.0"
28
+
29
+ # sqlite3 1.3.9 does not work with rubinius 2.2.5:
30
+ # https://github.com/sparklemotion/sqlite3-ruby/issues/122
31
+ # s.add_development_dependency "sqlite3", "1.3.8"
32
+ end
data/release.sh ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/bash
2
+ bundle update
3
+ git add --all .
4
+ git commit -am "${*:1}"
5
+ git push
6
+ git push gh master
7
+ rake release
@@ -0,0 +1,144 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Attachment" do
4
+ it "saves image geometry for original image" do
5
+ img = Image.create(small_image: small_image)
6
+ img.reload
7
+ geometry = geometry_for(small_path)
8
+ assert_equal geometry.width, img.small_image.width
9
+ assert_equal geometry.height, img.small_image.height
10
+ assert_equal "50x64", img.small_image.image_size
11
+ end
12
+
13
+ it "saves geometry for styles" do
14
+ img = Image.create(small_image: small_image, big_image: big_image)
15
+ assert_equal 100, img.big_image.width(:thumb)
16
+ assert_equal 100, img.big_image.height(:thumb)
17
+ end
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
+
25
+ it "sets geometry on update" do
26
+ img = Image.create!
27
+ img.small_image = small_image
28
+ img.save
29
+ geometry = geometry_for(small_path)
30
+ assert_equal geometry.width, img.small_image.width
31
+ assert_equal geometry.height, img.small_image.height
32
+ end
33
+
34
+ describe '#size' do
35
+ before do
36
+ @image = Image.create(big_image: big_image)
37
+ end
38
+
39
+ it 'should save file size with meta data ' do
40
+ path = File.join(File.dirname(__FILE__), "tmp/fixtures/tmp/thumb/#{@image.id}.jpg")
41
+ size = File.stat(path).size
42
+ assert_equal size, @image.big_image.size(:thumb)
43
+ end
44
+
45
+ it 'should access normal paperclip method when no style passed' do
46
+ @image.big_image.expects size_without_meta_data: 1234
47
+ assert_equal 1234, @image.big_image.size
48
+ end
49
+
50
+ it 'should have access to original file size' do
51
+ assert_equal 37042, @image.big_image.size
52
+ end
53
+ end
54
+
55
+ it "clears geometry fields when image is destroyed" do
56
+ img = Image.create(small_image: small_image, big_image: big_image)
57
+ assert_equal 100, img.big_image.width(:thumb)
58
+ img.big_image = nil
59
+ img.save!
60
+ assert_nil img.big_image.width(:thumb)
61
+ end
62
+
63
+ it "does not save when file is not an image" do
64
+ img = Image.new
65
+ img.small_image = not_image
66
+ refute img.save
67
+ assert_nil img.small_image.width
68
+ end
69
+
70
+ it "returns nil attributes when file is not an image" do
71
+ img = ImageWithNoValidation.new
72
+ img.small_image = not_image
73
+ img.save!
74
+ assert_nil img.small_image.width
75
+ assert_nil img.small_image.height
76
+ end
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
+
121
+ private
122
+
123
+ def small_path
124
+ File.join(File.dirname(__FILE__), 'fixtures', 'small.png')
125
+ end
126
+
127
+ # 50x64
128
+ def small_image
129
+ File.open(small_path)
130
+ end
131
+
132
+ def geometry_for(path)
133
+ Paperclip::Geometry.from_file(path)
134
+ end
135
+
136
+ # 600x277
137
+ def big_image
138
+ File.open(File.join(File.dirname(__FILE__), 'fixtures', 'big.jpg'))
139
+ end
140
+
141
+ def not_image
142
+ File.open(File.join(File.dirname(__FILE__), 'fixtures', 'big.zip'))
143
+ end
144
+ end
Binary file
Binary file
Binary file
@@ -0,0 +1,17 @@
1
+ source 'https://rubygems.org'
2
+
3
+ platforms :jruby do
4
+ gem 'activerecord-jdbcsqlite3-adapter'
5
+ end
6
+
7
+ platforms :rbx do
8
+ gem 'json'
9
+ gem 'rubysl', '~> 2.0'
10
+ end
11
+
12
+ # See paperclip-meta.gemspec
13
+ gemspec path: '../..'
14
+
15
+ gem 'activerecord', '~> 4.0.0'
16
+ gem 'minitest', '~> 4.7'
17
+ gem 'paperclip', '~> 3.5'
@@ -0,0 +1,17 @@
1
+ source 'https://rubygems.org'
2
+
3
+ platforms :jruby do
4
+ gem 'activerecord-jdbcsqlite3-adapter'
5
+ end
6
+
7
+ platforms :rbx do
8
+ gem 'json'
9
+ gem 'rubysl', '~> 2.0'
10
+ end
11
+
12
+ # See paperclip-meta.gemspec
13
+ gemspec path: '../..'
14
+
15
+ gem 'activerecord', '~> 4.1'
16
+ gem 'minitest', '~> 5.3'
17
+ gem 'paperclip', '~> 4.0'
data/spec/schema.rb ADDED
@@ -0,0 +1,15 @@
1
+ ActiveRecord::Schema.define do
2
+ create_table :images do |t|
3
+ t.string :small_image_file_name
4
+ t.string :small_image_content_type
5
+ t.integer :small_image_updated_at
6
+ t.integer :small_image_file_size
7
+ t.string :small_image_meta
8
+
9
+ t.string :big_image_file_name
10
+ t.string :big_image_content_type
11
+ t.integer :big_image_updated_at
12
+ t.integer :big_image_file_size
13
+ t.string :big_image_meta
14
+ end
15
+ end
@@ -0,0 +1,53 @@
1
+ require 'bundler/setup'
2
+ Bundler.require(:default)
3
+ require 'active_record'
4
+ require 'minitest/autorun'
5
+ require 'mocha/setup'
6
+
7
+ ActiveRecord::Base.establish_connection(
8
+ adapter: "sqlite3",
9
+ database: ":memory:"
10
+ )
11
+
12
+ if ENV["VERBOSE"]
13
+ ActiveRecord::Base.logger = Logger.new(STDERR)
14
+ else
15
+ Paperclip.options[:log] = false
16
+ end
17
+
18
+ load(File.join(File.dirname(__FILE__), 'schema.rb'))
19
+
20
+ ActiveRecord::Base.send(:include, Paperclip::Glue)
21
+ Paperclip::Meta::Railtie.insert
22
+
23
+ I18n.enforce_available_locales = true
24
+
25
+ class Image < ActiveRecord::Base
26
+ has_attached_file :small_image,
27
+ storage: :filesystem,
28
+ path: "./spec/tmp/:style/:id.:extension",
29
+ url: "./spec/tmp/:style/:id.extension"
30
+
31
+ has_attached_file :big_image,
32
+ storage: :filesystem,
33
+ path: "./spec/tmp/fixtures/tmp/:style/:id.:extension",
34
+ url: "./spec/tmp/fixtures/tmp/:style/:id.extension",
35
+ styles: { thumb: "100x100#", large: "500x500#" }
36
+
37
+ # paperclip 4.0 requires a validator
38
+ validates_attachment_content_type :small_image, content_type: /\Aimage/
39
+ validates_attachment_content_type :big_image, content_type: /\Aimage/
40
+ end
41
+
42
+ class ImageWithNoValidation < ActiveRecord::Base
43
+ self.table_name = :images
44
+
45
+ has_attached_file :small_image,
46
+ storage: :filesystem,
47
+ path: "./spec/tmp/:style/:id.:extension",
48
+ url: "./spec/tmp/:style/:id.extension"
49
+
50
+ if Paperclip::VERSION >= "4.0"
51
+ do_not_validate_attachment_file_type :small_image
52
+ end
53
+ end
@@ -0,0 +1,9 @@
1
+ require 'paperclip/meta/process_meta_service'
2
+
3
+ namespace :paperclip_meta do
4
+
5
+ desc 'Regenerate only the paperclip-meta without reprocessing the images themselves'
6
+ task :reprocess => :environment do
7
+ Paperclip::Meta::ProcessMetaService.process!(Rails.logger)
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ack-paperclip-meta
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.2
5
+ platform: ruby
6
+ authors:
7
+ - ack
8
+ - Alexey Bondar
9
+ - Tee Parham
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-04-25 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: paperclip
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.2
22
+ - - "<"
23
+ - !ruby/object:Gem::Version
24
+ version: '5.0'
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 3.0.2
32
+ - - "<"
33
+ - !ruby/object:Gem::Version
34
+ version: '5.0'
35
+ - !ruby/object:Gem::Dependency
36
+ name: bundler
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.5'
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.5'
49
+ - !ruby/object:Gem::Dependency
50
+ name: rake
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '10.1'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '10.1'
63
+ - !ruby/object:Gem::Dependency
64
+ name: mocha
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.0'
77
+ description: Add width, height and size methods to paperclip images
78
+ email:
79
+ - i43ack@gmail.com
80
+ - y8@ya.ru
81
+ - tee@neighborland.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - ".gitignore"
87
+ - ".ruby-gemset"
88
+ - ".ruby-version"
89
+ - ".travis.yml"
90
+ - Gemfile
91
+ - LICENSE.txt
92
+ - README.md
93
+ - Rakefile
94
+ - lib/ack-paperclip-meta.rb
95
+ - lib/paperclip-meta.rb
96
+ - lib/paperclip/meta.rb
97
+ - lib/paperclip/meta/attachment.rb
98
+ - lib/paperclip/meta/process_meta_service.rb
99
+ - lib/paperclip/meta/railtie.rb
100
+ - lib/paperclip/meta/version.rb
101
+ - paperclip-meta.gemspec
102
+ - release.sh
103
+ - spec/attachment_spec.rb
104
+ - spec/fixtures/big.jpg
105
+ - spec/fixtures/big.zip
106
+ - spec/fixtures/small.png
107
+ - spec/gemfiles/Gemfile.paperclip-3
108
+ - spec/gemfiles/Gemfile.paperclip-4
109
+ - spec/schema.rb
110
+ - spec/spec_helper.rb
111
+ - tasks/reprocess_meta.rake
112
+ homepage: http://github.com/ack43/paperclip-meta
113
+ licenses:
114
+ - MIT
115
+ metadata: {}
116
+ post_install_message:
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 1.9.3
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ requirements: []
131
+ rubyforge_project:
132
+ rubygems_version: 2.4.6
133
+ signing_key:
134
+ specification_version: 4
135
+ summary: Add width, height, and size to paperclip images
136
+ test_files: []