paperclip-meta 0.3.1 → 0.4.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.
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  *.gem
2
2
  .bundle
3
+ .rvmrc
3
4
  Gemfile.lock
4
5
  pkg/*
5
6
  spec/tmp/*/**
@@ -0,0 +1,7 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - jruby
6
+ - rbx-18mode
7
+ - rbx-19mode
@@ -1,4 +1,5 @@
1
- =Paperclip Meta
1
+ =Paperclip Meta {<img src="https://secure.travis-ci.org/y8/paperclip-meta.png" />}[http://travis-ci.org/y8/paperclip-meta]
2
+
2
3
 
3
4
  Simple gem to let paperclip play nice with thumbnails width, height and size.
4
5
 
data/init.rb CHANGED
@@ -1,2 +1,4 @@
1
- # FIXME: What this file for?
2
- require File.join(File.dirname(__FILE__), "lib", "paperclip-meta")
1
+ require File.join(File.dirname(__FILE__), "lib", "paperclip-meta")
2
+ require 'paperclip-meta/railtie'
3
+
4
+ Paperclip::Meta::Railtie.insert
@@ -1,91 +1,4 @@
1
1
  require "paperclip"
2
2
  require "paperclip-meta/version"
3
-
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.
10
- class Attachment
11
- alias :original_post_process_styles :post_process_styles
12
- alias :original_save :save
13
-
14
- # If attachment deleted - destroy meta data
15
- def save
16
- if (not @queued_for_delete.empty?) and @queued_for_write.empty?
17
- instance_write(:meta, meta_encode({})) if instance.respond_to?(:"#{name}_meta=")
18
- end
19
- original_save
20
- end
21
-
22
- # If model has #{name}_meta column we getting sizes of processed
23
- # thumbnails and saving it to #{name}_meta column.
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)
28
-
29
- if instance.respond_to?(:"#{name}_meta=")
30
- meta = {}
31
-
32
- @queued_for_write.each do |style, file|
33
- begin
34
- geo = Geometry.from_file file
35
- meta[style] = {:width => geo.width.to_i, :height => geo.height.to_i, :size => File.size(file) }
36
- rescue NotIdentifiedByImageMagickError => e
37
- meta[style] = {}
38
- end
39
- end
40
-
41
- instance_write(:meta, meta_encode(meta))
42
- end
43
- end
44
-
45
- # Define meta accessors methods
46
- [:width, :height, :size].each do |meth|
47
- define_method(meth) do |*args|
48
- style = args.first || default_style
49
- meta_read(style, meth)
50
- end
51
- end
52
-
53
- # Returns image dimesions ("WxH") for given style name. If style name not given,
54
- # returns dimesions for default_style.
55
- def image_size(style = default_style)
56
- "#{width(style)}x#{height(style)}"
57
- end
58
-
59
- private
60
- # Returns meta data for given style
61
- def meta_read(style, item)
62
- if instance.respond_to?(:"#{name}_meta") && instance_read(:meta)
63
- if meta = meta_decode(instance_read(:meta))
64
- meta.key?(style) ? meta[style][item] : nil
65
- end
66
- 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
90
- end
91
- end
3
+ require 'paperclip-meta/railtie'
4
+ require 'paperclip-meta/attachment'
@@ -0,0 +1,99 @@
1
+ module Paperclip
2
+ module Meta
3
+ module Attachment
4
+
5
+ def self.included(base)
6
+ base.send :include, InstanceMethods
7
+ base.alias_method_chain :save, :meta_data
8
+ base.alias_method_chain :post_process_styles, :meta_data
9
+ base.alias_method_chain :size, :meta_data
10
+ end
11
+
12
+ module InstanceMethods
13
+
14
+ def save_with_meta_data
15
+ if (not @queued_for_delete.empty?) and @queued_for_write.empty?
16
+ instance_write(:meta, meta_encode({})) if instance.respond_to?(:"#{name}_meta=")
17
+ end
18
+ save_without_meta_data
19
+ end
20
+
21
+ def post_process_styles_with_meta_data(*style_args)
22
+ post_process_styles_without_meta_data(*style_args)
23
+
24
+ if instance.respond_to?(:"#{name}_meta=")
25
+ meta = {}
26
+ @queued_for_write.each do |style, file|
27
+ begin
28
+ geo = Geometry.from_file file
29
+ meta[style] = {:width => geo.width.to_i, :height => geo.height.to_i, :size => File.size(file) }
30
+ rescue NotIdentifiedByImageMagickError => e
31
+ meta[style] = {}
32
+ end
33
+ end
34
+
35
+ unless meta == {}
36
+ instance.send("#{name}_meta=", meta_encode(meta))
37
+ instance.class.update_all({ "#{name}_meta" => meta_encode(meta) }, instance.class.primary_key => instance.id)
38
+ end
39
+ end
40
+ end
41
+
42
+ #Use meta info for style if required
43
+ def size_with_meta_data(passed_style = nil)
44
+ passed_style ? meta_read(passed_style, :size) : size_without_meta_data
45
+ end
46
+
47
+ # Define meta accessors methods
48
+ [:width, :height ].each do |meth|
49
+ define_method(meth) do |*args|
50
+ style = args.first || default_style
51
+ meta_read(style, meth)
52
+ end
53
+ end
54
+
55
+ # Returns image dimesions ("WxH") for given style name. If style name not given,
56
+ # returns dimesions for default_style.
57
+ def image_size(style = default_style)
58
+ "#{width(style)}x#{height(style)}"
59
+ end
60
+
61
+ private
62
+
63
+ # Returns meta data for given style
64
+ def meta_read(style, item)
65
+ if instance.respond_to?(:"#{name}_meta") && instance_read(:meta)
66
+ if meta = meta_decode(instance_read(:meta))
67
+ meta.key?(style) ? meta[style][item] : nil
68
+ end
69
+ end
70
+ end
71
+
72
+ # Return encoded metadata as String
73
+ def meta_encode(meta)
74
+ # Use Base64 class if aviliable, to prevent
75
+ # ActiveSupport deprecation warnings.
76
+ if Module.const_defined? "Base64"
77
+ ::Base64.encode64(Marshal.dump(meta))
78
+ else
79
+ ActiveSupport::Base64.encode64(Marshal.dump(meta))
80
+ end
81
+ end
82
+
83
+ # Return decoded metadata as Object
84
+ def meta_decode(meta)
85
+ # Use Base64 class if aviliable, to prevent
86
+ # ActiveSupport deprecation warnings.
87
+ if Module.const_defined? "Base64"
88
+ Marshal.load(::Base64.decode64(meta))
89
+ else
90
+ Marshal.load(ActiveSupport::Base64.decode64(meta))
91
+ end
92
+ end
93
+
94
+ end
95
+
96
+ end
97
+
98
+ end
99
+ end
@@ -0,0 +1,24 @@
1
+ require 'paperclip-meta'
2
+
3
+ module Paperclip
4
+ module Meta
5
+
6
+ if defined? Rails::Railtie
7
+ require 'rails'
8
+ class Railtie < Rails::Railtie
9
+ initializer 'paperclip_meta.insert_into_active_record' do
10
+ ActiveSupport.on_load :active_record do
11
+ Paperclip::Meta::Railtie.insert
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ class Railtie
18
+ def self.insert
19
+ Paperclip::Attachment.send(:include, Paperclip::Meta::Attachment)
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  module Paperclip
2
2
  module Meta
3
- VERSION = "0.3.1"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
 
21
21
  # Development depensencies
22
22
  s.add_development_dependency "bundler", ">= 1.0.0"
23
+ s.add_development_dependency "rake"
23
24
  s.add_development_dependency "paperclip"
24
25
  s.add_development_dependency "rspec"
25
26
  s.add_development_dependency "activerecord"
@@ -33,6 +33,28 @@ describe "Geometry saver plugin" do
33
33
  img.big_image.height(:small).should == 100
34
34
  end
35
35
 
36
+ describe 'file size' do
37
+ before do
38
+ @image = Image.new
39
+ @image.big_image = @big_image
40
+ @image.save!
41
+ end
42
+
43
+ it 'should save file size with meta data ' do
44
+ @image.big_image.size(:small).should == 3526
45
+ end
46
+
47
+ it 'should access normal paperclip method when no style passed' do
48
+ @image.big_image.should_receive(:size_without_meta_data).once.and_return(1234)
49
+ @image.big_image.size.should == 1234
50
+ end
51
+
52
+ it 'should have access to original file size' do
53
+ @image.big_image.size.should == 37042
54
+ end
55
+
56
+ end
57
+
36
58
  it "clears geometry fields when image is destroyed" do
37
59
  img = Image.new
38
60
  img.small_image = @small_image
@@ -53,4 +75,5 @@ describe "Geometry saver plugin" do
53
75
  lambda { img.save! }.should_not raise_error
54
76
  img.small_image.width(:small).should be_nil
55
77
  end
78
+
56
79
  end
@@ -15,6 +15,7 @@ ActiveRecord::Base.logger = Logger.new(nil)
15
15
  load(File.join(File.dirname(__FILE__), 'schema.rb'))
16
16
 
17
17
  Paperclip::Railtie.insert
18
+ Paperclip::Meta::Railtie.insert
18
19
 
19
20
  class Image < ActiveRecord::Base
20
21
  has_attached_file :small_image,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paperclip-meta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-25 00:00:00.000000000 Z
12
+ date: 2012-03-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: &70281062647600 !ruby/object:Gem::Requirement
16
+ requirement: &70335412175260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: 1.0.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70281062647600
24
+ version_requirements: *70335412175260
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &70335412173700 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70335412173700
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: paperclip
27
- requirement: &70281062647060 !ruby/object:Gem::Requirement
38
+ requirement: &70335412172380 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *70281062647060
46
+ version_requirements: *70335412172380
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: rspec
38
- requirement: &70281062646360 !ruby/object:Gem::Requirement
49
+ requirement: &70335412171460 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: '0'
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *70281062646360
57
+ version_requirements: *70335412171460
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: activerecord
49
- requirement: &70281062645580 !ruby/object:Gem::Requirement
60
+ requirement: &70335412170640 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: '0'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70281062645580
68
+ version_requirements: *70335412170640
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: sqlite3-ruby
60
- requirement: &70281062644620 !ruby/object:Gem::Requirement
71
+ requirement: &70335412169360 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: '0'
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70281062644620
79
+ version_requirements: *70335412169360
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: paperclip
71
- requirement: &70281062643560 !ruby/object:Gem::Requirement
82
+ requirement: &70335412168500 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,7 +87,7 @@ dependencies:
76
87
  version: '0'
77
88
  type: :runtime
78
89
  prerelease: false
79
- version_requirements: *70281062643560
90
+ version_requirements: *70335412168500
80
91
  description: Add width, height and size methods to paperclip thumbnails
81
92
  email:
82
93
  - y8@ya.ru
@@ -86,12 +97,15 @@ extra_rdoc_files: []
86
97
  files:
87
98
  - .gitignore
88
99
  - .rspec
100
+ - .travis.yml
89
101
  - Gemfile
90
102
  - Gemfile.lock
91
103
  - README.rdoc
92
104
  - Rakefile
93
105
  - init.rb
94
106
  - lib/paperclip-meta.rb
107
+ - lib/paperclip-meta/attachment.rb
108
+ - lib/paperclip-meta/railtie.rb
95
109
  - lib/paperclip-meta/version.rb
96
110
  - paperclip-meta.gemspec
97
111
  - spec/fixtures/big.jpg