paperclip-meta 0.1 → 0.2
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.
- data/{README → README.rdoc} +5 -1
- data/Rakefile +30 -4
- data/init.rb +1 -1
- data/lib/paperclip-meta.rb +17 -4
- data/spec/paperclip-meta/paperclip-meta_spec.rb +56 -0
- data/spec/schema.rb +15 -0
- data/spec/spec_helper.rb +36 -0
- metadata +16 -11
data/{README → README.rdoc}
RENAMED
@@ -6,6 +6,10 @@ Paperclip Meta will get image dimensions right after post_process_styles using p
|
|
6
6
|
|
7
7
|
==Quick Start
|
8
8
|
|
9
|
+
Add paperclip-meta to Gemfile:
|
10
|
+
|
11
|
+
gem 'paperclip-meta'
|
12
|
+
|
9
13
|
Create migration:
|
10
14
|
|
11
15
|
class AddMetaToAvatar < ActiveRecord::Migration
|
@@ -38,7 +42,7 @@ Meta column is simple hash:
|
|
38
42
|
|
39
43
|
This hash will be marshaled and base64 encoded before writing to model attribute.
|
40
44
|
|
41
|
-
|
45
|
+
Meta methods provided:
|
42
46
|
- width
|
43
47
|
- height
|
44
48
|
- size
|
data/Rakefile
CHANGED
@@ -1,8 +1,34 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/testtask'
|
3
|
-
require '
|
3
|
+
require 'rspec/core'
|
4
|
+
require 'rspec/core/rake_task'
|
4
5
|
|
5
|
-
|
6
|
-
task :
|
7
|
-
|
6
|
+
RSpec::Core::RakeTask.new(:spec)
|
7
|
+
task :default => :spec
|
8
|
+
|
9
|
+
begin
|
10
|
+
include_files = ["README*", "LICENSE", "Rakefile", "init.rb", "{lib,test}/**/*"].map do |glob|
|
11
|
+
Dir[glob]
|
12
|
+
end.flatten
|
13
|
+
|
14
|
+
require "jeweler"
|
15
|
+
Jeweler::Tasks.new do |s|
|
16
|
+
s.name = "paperclip-meta"
|
17
|
+
s.version = "0.1"
|
18
|
+
s.author = "Alexey Bondar"
|
19
|
+
s.email = "y8@ya.ru"
|
20
|
+
s.homepage = "http://github.com/y8/paperclip-meta"
|
21
|
+
s.description = "Add width, height and size methods to paperclip thumbnails"
|
22
|
+
s.summary = "Thumbnail dimensions for paperclip"
|
23
|
+
s.platform = Gem::Platform::RUBY
|
24
|
+
s.files = include_files
|
25
|
+
s.require_path = "lib"
|
26
|
+
s.rubyforge_project = "paperclip-meta"
|
27
|
+
s.has_rdoc = false
|
28
|
+
s.add_dependency 'paperclip'
|
29
|
+
end
|
30
|
+
|
31
|
+
Jeweler::GemcutterTasks.new
|
32
|
+
rescue LoadError
|
33
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
8
34
|
end
|
data/init.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "lib", "
|
1
|
+
require File.join(File.dirname(__FILE__), "lib", "paperclip-meta")
|
data/lib/paperclip-meta.rb
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
module Paperclip
|
2
2
|
class Attachment
|
3
|
-
alias original_post_process_styles post_process_styles
|
3
|
+
alias :original_post_process_styles :post_process_styles
|
4
|
+
alias :original_save :save
|
4
5
|
|
6
|
+
# If attachment deleted - destroy meta data
|
7
|
+
def save
|
8
|
+
unless @queued_for_delete.empty?
|
9
|
+
instance_write(:meta, ActiveSupport::Base64.encode64(Marshal.dump({}))) if instance.respond_to?(:"#{name}_meta=")
|
10
|
+
end
|
11
|
+
original_save
|
12
|
+
end
|
13
|
+
|
5
14
|
# If model has #{name}_meta column we getting sizes of processed
|
6
15
|
# thumbnails and saving it to #{name}_meta column.
|
7
16
|
def post_process_styles
|
@@ -11,8 +20,12 @@ module Paperclip
|
|
11
20
|
meta = {}
|
12
21
|
|
13
22
|
@queued_for_write.each do |style, file|
|
14
|
-
|
15
|
-
|
23
|
+
begin
|
24
|
+
geo = Geometry.from_file file
|
25
|
+
meta[style] = {:width => geo.width.to_i, :height => geo.height.to_i, :size => File.size(file) }
|
26
|
+
rescue NotIdentifiedByImageMagickError => e
|
27
|
+
meta[style] = {}
|
28
|
+
end
|
16
29
|
end
|
17
30
|
|
18
31
|
instance_write(:meta, ActiveSupport::Base64.encode64(Marshal.dump(meta)))
|
@@ -38,6 +51,6 @@ module Paperclip
|
|
38
51
|
meta.key?(style) ? meta[style][item] : nil
|
39
52
|
end
|
40
53
|
end
|
41
|
-
end
|
54
|
+
end
|
42
55
|
end
|
43
56
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Geometry saver plugin" do
|
4
|
+
before(:each) do
|
5
|
+
small_path = File.join(File.dirname(__FILE__), '..', 'fixtures', 'small.png')
|
6
|
+
big_path = File.join(File.dirname(__FILE__), '..', 'fixtures', 'big.jpg')
|
7
|
+
not_path = File.join(File.dirname(__FILE__), '..', 'fixtures', 'big.zip')
|
8
|
+
@big_image = File.open(big_path)
|
9
|
+
@small_image = File.open(small_path)
|
10
|
+
@big_size = Paperclip::Geometry.from_file(big_path)
|
11
|
+
@small_size = Paperclip::Geometry.from_file(small_path)
|
12
|
+
@not_image = File.open(not_path)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "saves image geometry for original image" do
|
16
|
+
img = Image.new
|
17
|
+
img.small_image = @small_image
|
18
|
+
img.save!
|
19
|
+
|
20
|
+
img.reload # Ensure that updates really saved to db
|
21
|
+
|
22
|
+
img.small_image.width eq(@small_size.width)
|
23
|
+
img.small_image.height eq(@small_size.height)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "saves geometry for styles" do
|
27
|
+
img = Image.new
|
28
|
+
img.small_image = @small_image
|
29
|
+
img.big_image = @big_image
|
30
|
+
img.save!
|
31
|
+
|
32
|
+
img.big_image.width(:small).should == 100
|
33
|
+
img.big_image.height(:small).should == 100
|
34
|
+
end
|
35
|
+
|
36
|
+
it "clears geometry fields when image is destroyed" do
|
37
|
+
img = Image.new
|
38
|
+
img.small_image = @small_image
|
39
|
+
img.big_image = @big_image
|
40
|
+
img.save!
|
41
|
+
|
42
|
+
img.big_image.width(:small).should == 100
|
43
|
+
|
44
|
+
img.big_image = nil
|
45
|
+
img.save!
|
46
|
+
|
47
|
+
img.big_image.width(:small).should be_nil
|
48
|
+
end
|
49
|
+
|
50
|
+
it "does not fails when file is not an image" do
|
51
|
+
img = Image.new
|
52
|
+
img.small_image = @not_image
|
53
|
+
lambda { img.save! }.should_not raise_error
|
54
|
+
img.small_image.width(:small).should be_nil
|
55
|
+
end
|
56
|
+
end
|
data/spec/schema.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
ActiveRecord::Schema.define :version => 0 do
|
2
|
+
create_table "images", :force => true 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
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
$LOAD_PATH << "." unless $LOAD_PATH.include?(".")
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "bundler"
|
5
|
+
Bundler.setup
|
6
|
+
rescue Bundler::GemNotFound
|
7
|
+
raise RuntimeError, "Bundler couldn't find some gems." +
|
8
|
+
"Did you run `bundle install`?"
|
9
|
+
end
|
10
|
+
|
11
|
+
Bundler.require
|
12
|
+
require 'logger'
|
13
|
+
Paperclip::Railtie.insert
|
14
|
+
|
15
|
+
ActiveRecord::Base.establish_connection(
|
16
|
+
"adapter" => "sqlite3",
|
17
|
+
"database" => ":memory:"
|
18
|
+
)
|
19
|
+
|
20
|
+
ActiveRecord::Base.logger = Logger.new(nil)
|
21
|
+
|
22
|
+
load(File.dirname(__FILE__) + '/schema.rb')
|
23
|
+
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
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 => { :small => "100x100#" }
|
36
|
+
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-meta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: "0.
|
8
|
+
- 2
|
9
|
+
version: "0.2"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Alexey Bondar
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-11-30 00:00:00 +03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -37,20 +37,23 @@ executables: []
|
|
37
37
|
|
38
38
|
extensions: []
|
39
39
|
|
40
|
-
extra_rdoc_files:
|
41
|
-
|
40
|
+
extra_rdoc_files:
|
41
|
+
- README.rdoc
|
42
42
|
files:
|
43
|
-
- README
|
43
|
+
- README.rdoc
|
44
44
|
- Rakefile
|
45
45
|
- init.rb
|
46
46
|
- lib/paperclip-meta.rb
|
47
|
+
- spec/paperclip-meta/paperclip-meta_spec.rb
|
48
|
+
- spec/schema.rb
|
49
|
+
- spec/spec_helper.rb
|
47
50
|
has_rdoc: true
|
48
51
|
homepage: http://github.com/y8/paperclip-meta
|
49
52
|
licenses: []
|
50
53
|
|
51
54
|
post_install_message:
|
52
|
-
rdoc_options:
|
53
|
-
|
55
|
+
rdoc_options:
|
56
|
+
- --charset=UTF-8
|
54
57
|
require_paths:
|
55
58
|
- lib
|
56
59
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -78,5 +81,7 @@ rubygems_version: 1.3.7
|
|
78
81
|
signing_key:
|
79
82
|
specification_version: 3
|
80
83
|
summary: Thumbnail dimensions for paperclip
|
81
|
-
test_files:
|
82
|
-
|
84
|
+
test_files:
|
85
|
+
- spec/paperclip-meta/paperclip-meta_spec.rb
|
86
|
+
- spec/schema.rb
|
87
|
+
- spec/spec_helper.rb
|