paperclip-meta 0.2 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/README.rdoc +6 -6
- data/Rakefile +4 -30
- data/init.rb +1 -0
- data/lib/paperclip-meta.rb +45 -10
- data/lib/paperclip-meta/version.rb +5 -0
- data/paperclip-meta.gemspec +30 -0
- data/spec/fixtures/big.jpg +0 -0
- data/spec/fixtures/big.zip +0 -0
- data/spec/fixtures/small.png +0 -0
- data/spec/spec_helper.rb +9 -15
- metadata +99 -53
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/README.rdoc
CHANGED
@@ -9,7 +9,7 @@ Paperclip Meta will get image dimensions right after post_process_styles using p
|
|
9
9
|
Add paperclip-meta to Gemfile:
|
10
10
|
|
11
11
|
gem 'paperclip-meta'
|
12
|
-
|
12
|
+
|
13
13
|
Create migration:
|
14
14
|
|
15
15
|
class AddMetaToAvatar < ActiveRecord::Migration
|
@@ -23,7 +23,7 @@ Create migration:
|
|
23
23
|
end
|
24
24
|
|
25
25
|
Rebuild all thumbnails to fill meta column if you already have some attachments.
|
26
|
-
|
26
|
+
|
27
27
|
Now you can use meta-magic:
|
28
28
|
|
29
29
|
<%= image_tag @user.avatar.url, :size => @user.avatar.image_size %>
|
@@ -43,11 +43,11 @@ Meta column is simple hash:
|
|
43
43
|
This hash will be marshaled and base64 encoded before writing to model attribute.
|
44
44
|
|
45
45
|
Meta methods provided:
|
46
|
-
- width
|
47
|
-
- height
|
48
|
-
- size
|
46
|
+
- width `@user.avatar.width(:thumb)`
|
47
|
+
- height `@user.avatar.height(:medium)`
|
48
|
+
- size `@user.avatar.size`
|
49
49
|
|
50
|
-
You can pass thumbnail style to all
|
50
|
+
You can pass thumbnail style to all these methods. If style not passed, default_style will be used.
|
51
51
|
|
52
52
|
==TODO
|
53
53
|
|
data/Rakefile
CHANGED
@@ -1,34 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require 'rspec/core'
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rspec/core"
|
4
3
|
require 'rspec/core/rake_task'
|
5
4
|
|
6
5
|
RSpec::Core::RakeTask.new(:spec)
|
7
|
-
task :default => :spec
|
8
6
|
|
9
|
-
|
10
|
-
|
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"
|
34
|
-
end
|
7
|
+
# spec is default task
|
8
|
+
task :default => :spec
|
data/init.rb
CHANGED
data/lib/paperclip-meta.rb
CHANGED
@@ -1,20 +1,30 @@
|
|
1
|
+
require "paperclip"
|
2
|
+
require "paperclip-meta/version"
|
3
|
+
|
1
4
|
module Paperclip
|
5
|
+
module Meta
|
6
|
+
# TODO: Move most of paperclip-meta crap here.
|
7
|
+
end
|
8
|
+
|
9
|
+
# TODO: Make paperclip-meta less monkey-style.
|
2
10
|
class Attachment
|
3
11
|
alias :original_post_process_styles :post_process_styles
|
4
12
|
alias :original_save :save
|
5
13
|
|
6
14
|
# If attachment deleted - destroy meta data
|
7
15
|
def save
|
8
|
-
|
9
|
-
instance_write(:meta,
|
16
|
+
if (not @queued_for_delete.empty?) and @queued_for_write.empty?
|
17
|
+
instance_write(:meta, meta_encode({})) if instance.respond_to?(:"#{name}_meta=")
|
10
18
|
end
|
11
19
|
original_save
|
12
20
|
end
|
13
|
-
|
21
|
+
|
14
22
|
# If model has #{name}_meta column we getting sizes of processed
|
15
23
|
# thumbnails and saving it to #{name}_meta column.
|
16
|
-
def post_process_styles
|
17
|
-
original_post_process_styles
|
24
|
+
def post_process_styles(*style_args)
|
25
|
+
# Check arity of :original_post_process_styles to maintain compatibility with
|
26
|
+
# Paperclip 2.3.9 and older.
|
27
|
+
method(:original_post_process_styles).arity == 0 ? original_post_process_styles : original_post_process_styles(*style_args)
|
18
28
|
|
19
29
|
if instance.respond_to?(:"#{name}_meta=")
|
20
30
|
meta = {}
|
@@ -28,11 +38,11 @@ module Paperclip
|
|
28
38
|
end
|
29
39
|
end
|
30
40
|
|
31
|
-
instance_write(:meta,
|
41
|
+
instance_write(:meta, meta_encode(meta))
|
32
42
|
end
|
33
43
|
end
|
34
44
|
|
35
|
-
#
|
45
|
+
# Define meta accessors methods
|
36
46
|
[:width, :height, :size].each do |meth|
|
37
47
|
define_method(meth) do |*args|
|
38
48
|
style = args.first || default_style
|
@@ -40,17 +50,42 @@ module Paperclip
|
|
40
50
|
end
|
41
51
|
end
|
42
52
|
|
53
|
+
# Returns image dimesions ("WxH") for given style name. If style name not given,
|
54
|
+
# returns dimesions for default_style.
|
43
55
|
def image_size(style = default_style)
|
44
56
|
"#{width(style)}x#{height(style)}"
|
45
57
|
end
|
46
58
|
|
47
59
|
private
|
60
|
+
# Returns meta data for given style
|
48
61
|
def meta_read(style, item)
|
49
62
|
if instance.respond_to?(:"#{name}_meta") && instance_read(:meta)
|
50
|
-
if meta =
|
63
|
+
if meta = meta_decode(instance_read(:meta))
|
51
64
|
meta.key?(style) ? meta[style][item] : nil
|
52
65
|
end
|
53
66
|
end
|
54
|
-
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Return encoded metadata as String
|
70
|
+
def meta_encode(meta)
|
71
|
+
# Use Base64 class if aviliable, to prevent
|
72
|
+
# ActiveSupport deprecation warnings.
|
73
|
+
if Module.const_defined? "Base64"
|
74
|
+
::Base64.encode64(Marshal.dump(meta))
|
75
|
+
else
|
76
|
+
ActiveSupport::Base64.encode64(Marshal.dump(meta))
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Return decoded metadata as Object
|
81
|
+
def meta_decode(meta)
|
82
|
+
# Use Base64 class if aviliable, to prevent
|
83
|
+
# ActiveSupport deprecation warnings.
|
84
|
+
if Module.const_defined? "Base64"
|
85
|
+
Marshal.load(::Base64.decode64(meta))
|
86
|
+
else
|
87
|
+
Marshal.load(ActiveSupport::Base64.decode64(meta))
|
88
|
+
end
|
89
|
+
end
|
55
90
|
end
|
56
|
-
end
|
91
|
+
end
|
@@ -0,0 +1,30 @@
|
|
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 = "paperclip-meta"
|
7
|
+
s.version = Paperclip::Meta::VERSION
|
8
|
+
s.authors = ["Alexey Bondar"]
|
9
|
+
s.email = ["y8@ya.ru"]
|
10
|
+
s.homepage = "http://github.com/y8/paperclip-meta"
|
11
|
+
s.summary = %q{Thumbnail dimensions for paperclip}
|
12
|
+
s.description = %q{Add width, height and size methods to paperclip thumbnails}
|
13
|
+
|
14
|
+
s.rubyforge_project = "paperclip-meta"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# Development depensencies
|
22
|
+
s.add_development_dependency "bundler", ">= 1.0.0"
|
23
|
+
s.add_development_dependency "paperclip"
|
24
|
+
s.add_development_dependency "rspec"
|
25
|
+
s.add_development_dependency "activerecord"
|
26
|
+
s.add_development_dependency "sqlite3-ruby"
|
27
|
+
|
28
|
+
# Runtime dependencies
|
29
|
+
s.add_runtime_dependency "paperclip"
|
30
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
data/spec/spec_helper.rb
CHANGED
@@ -1,26 +1,20 @@
|
|
1
|
-
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
Bundler.require(:default, :development)
|
2
4
|
|
3
|
-
|
4
|
-
|
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
|
5
|
+
# Prepare activerecord
|
6
|
+
require "active_record"
|
14
7
|
|
8
|
+
# Connect to sqlite
|
15
9
|
ActiveRecord::Base.establish_connection(
|
16
|
-
"adapter" => "sqlite3",
|
10
|
+
"adapter" => "sqlite3",
|
17
11
|
"database" => ":memory:"
|
18
12
|
)
|
19
13
|
|
20
14
|
ActiveRecord::Base.logger = Logger.new(nil)
|
15
|
+
load(File.join(File.dirname(__FILE__), 'schema.rb'))
|
21
16
|
|
22
|
-
|
23
|
-
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
17
|
+
Paperclip::Railtie.insert
|
24
18
|
|
25
19
|
class Image < ActiveRecord::Base
|
26
20
|
has_attached_file :small_image,
|
metadata
CHANGED
@@ -1,87 +1,133 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-meta
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
version: "0.2"
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.1
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Alexey Bondar
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
12
|
+
date: 2012-01-25 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: &70281062647600 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.0
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70281062647600
|
25
|
+
- !ruby/object:Gem::Dependency
|
21
26
|
name: paperclip
|
27
|
+
requirement: &70281062647060 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
22
34
|
prerelease: false
|
23
|
-
|
35
|
+
version_requirements: *70281062647060
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &70281062646360 !ruby/object:Gem::Requirement
|
24
39
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70281062646360
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activerecord
|
49
|
+
requirement: &70281062645580 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70281062645580
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: sqlite3-ruby
|
60
|
+
requirement: &70281062644620 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70281062644620
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: paperclip
|
71
|
+
requirement: &70281062643560 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
32
77
|
type: :runtime
|
33
|
-
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70281062643560
|
34
80
|
description: Add width, height and size methods to paperclip thumbnails
|
35
|
-
email:
|
81
|
+
email:
|
82
|
+
- y8@ya.ru
|
36
83
|
executables: []
|
37
|
-
|
38
84
|
extensions: []
|
39
|
-
|
40
|
-
|
41
|
-
-
|
42
|
-
|
85
|
+
extra_rdoc_files: []
|
86
|
+
files:
|
87
|
+
- .gitignore
|
88
|
+
- .rspec
|
89
|
+
- Gemfile
|
90
|
+
- Gemfile.lock
|
43
91
|
- README.rdoc
|
44
92
|
- Rakefile
|
45
93
|
- init.rb
|
46
94
|
- lib/paperclip-meta.rb
|
95
|
+
- lib/paperclip-meta/version.rb
|
96
|
+
- paperclip-meta.gemspec
|
97
|
+
- spec/fixtures/big.jpg
|
98
|
+
- spec/fixtures/big.zip
|
99
|
+
- spec/fixtures/small.png
|
47
100
|
- spec/paperclip-meta/paperclip-meta_spec.rb
|
48
101
|
- spec/schema.rb
|
49
102
|
- spec/spec_helper.rb
|
50
|
-
has_rdoc: true
|
51
103
|
homepage: http://github.com/y8/paperclip-meta
|
52
104
|
licenses: []
|
53
|
-
|
54
105
|
post_install_message:
|
55
|
-
rdoc_options:
|
56
|
-
|
57
|
-
require_paths:
|
106
|
+
rdoc_options: []
|
107
|
+
require_paths:
|
58
108
|
- lib
|
59
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
110
|
none: false
|
61
|
-
requirements:
|
62
|
-
- -
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
|
65
|
-
|
66
|
-
- 0
|
67
|
-
version: "0"
|
68
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
116
|
none: false
|
70
|
-
requirements:
|
71
|
-
- -
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
|
74
|
-
segments:
|
75
|
-
- 0
|
76
|
-
version: "0"
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
77
121
|
requirements: []
|
78
|
-
|
79
122
|
rubyforge_project: paperclip-meta
|
80
|
-
rubygems_version: 1.
|
123
|
+
rubygems_version: 1.8.10
|
81
124
|
signing_key:
|
82
125
|
specification_version: 3
|
83
126
|
summary: Thumbnail dimensions for paperclip
|
84
|
-
test_files:
|
127
|
+
test_files:
|
128
|
+
- spec/fixtures/big.jpg
|
129
|
+
- spec/fixtures/big.zip
|
130
|
+
- spec/fixtures/small.png
|
85
131
|
- spec/paperclip-meta/paperclip-meta_spec.rb
|
86
132
|
- spec/schema.rb
|
87
133
|
- spec/spec_helper.rb
|