thumbnail_on_demand 0.0.0 → 0.1.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/Gemfile CHANGED
@@ -11,3 +11,8 @@ group :development do
11
11
  gem "jeweler", "~> 1.6.4"
12
12
  gem "rcov", ">= 0"
13
13
  end
14
+
15
+ group :test do
16
+ gem "activerecord", "~> 3.0"
17
+ gem "paperclip", "~> 2.4.4"
18
+ end
data/Gemfile.lock CHANGED
@@ -1,12 +1,34 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ activemodel (3.1.1)
5
+ activesupport (= 3.1.1)
6
+ builder (~> 3.0.0)
7
+ i18n (~> 0.6)
8
+ activerecord (3.1.1)
9
+ activemodel (= 3.1.1)
10
+ activesupport (= 3.1.1)
11
+ arel (~> 2.2.1)
12
+ tzinfo (~> 0.3.29)
13
+ activesupport (3.1.1)
14
+ multi_json (~> 1.0)
15
+ arel (2.2.1)
16
+ builder (3.0.0)
17
+ cocaine (0.2.0)
4
18
  diff-lcs (1.1.3)
5
19
  git (1.2.5)
20
+ i18n (0.6.0)
6
21
  jeweler (1.6.4)
7
22
  bundler (~> 1.0)
8
23
  git (>= 1.2.5)
9
24
  rake
25
+ mime-types (1.16)
26
+ multi_json (1.0.3)
27
+ paperclip (2.4.5)
28
+ activerecord (>= 2.3.0)
29
+ activesupport (>= 2.3.2)
30
+ cocaine (>= 0.0.2)
31
+ mime-types
10
32
  rake (0.9.2)
11
33
  rcov (0.9.11)
12
34
  rspec (2.3.0)
@@ -17,12 +39,15 @@ GEM
17
39
  rspec-expectations (2.3.0)
18
40
  diff-lcs (~> 1.1.2)
19
41
  rspec-mocks (2.3.0)
42
+ tzinfo (0.3.30)
20
43
 
21
44
  PLATFORMS
22
45
  ruby
23
46
 
24
47
  DEPENDENCIES
48
+ activerecord (~> 3.0)
25
49
  bundler (~> 1.0.0)
26
50
  jeweler (~> 1.6.4)
51
+ paperclip (~> 2.4.4)
27
52
  rcov
28
53
  rspec (~> 2.3.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.1.0
@@ -0,0 +1,81 @@
1
+ Paperclip::Attachment.class_eval do
2
+
3
+ IMAGE_EXTENSIONS = [".jpg", ".jpeg", ".jpe", ".png", ".gif", ".bmp"]
4
+
5
+ # Creates a thumbnail if it doesn't already exist and not if it does. Either way, it returns the URL to the thumbnail
6
+ #
7
+ # @param [Symbol] style A symbol telling which style to use (from the :on_demand_styles option)
8
+ # @param [Symbol] from_style A symbol telling which paperclip style to create the thumbnail from.
9
+ # If either nil or :original it will use the originally uploaded image (default_style)
10
+ # @param [Object] options An object of url options, same as the second param in paperclip's url method
11
+ # @return [String] The URL to the thumbnail
12
+ # TODO check to be sure the attachment is an image (thumbnailable)?
13
+ # TODO S3/other storage support
14
+ # TODO should remove thumbnails when removing the orginal paperclip attachment
15
+ # TODO would be nice to have the ability to crop default_url according to the requested style
16
+ def thumbnail(style_name, from_style = nil, options = {})
17
+ options = handle_url_options(options)
18
+ thumbnail_url = interpolate(most_appropriate_url, style_name)
19
+ thumbnail_path = original_filename.nil? ? nil : interpolate(@options.path, style_name)
20
+ # Since this add-on only supports images, make sure thumbnail_path is going to save with an image file extension.
21
+ # Otherwise it will save an image with the extension of the original file, which will be wrong if the original isn't an image.
22
+ # We do this to support thumbnailing of other attachment types, such as video (see README.rdoc for an example).
23
+ # TODO we shouldn't just assume jpg format when picking an image extension to add
24
+ unless IMAGE_EXTENSIONS.include? File.extname(thumbnail_path)
25
+ thumbnail_path = "#{thumbnail_path}#{IMAGE_EXTENSIONS.first}"
26
+ thumbnail_url = "#{thumbnail_url}#{IMAGE_EXTENSIONS.first}"
27
+ end
28
+ # Initalize original_path using the default_style (original attachment)
29
+ original_path = original_filename.nil? ? nil : interpolate(@options.path, default_style)
30
+ # We can optionally create the thumbnail from another (non on-demand) style and set original_path to that instead
31
+ # TODO test to be sure from_style is in @options.styles
32
+ # TODO if from_style isn't found in @options.styles also check @options.raw_options[:on_demand_styles] and attempt to use it from there
33
+ unless from_style.nil? || from_style == :original
34
+ # get the path to the thumbnail
35
+ from_style_path = original_filename.nil? ? nil : interpolate(@options.path, from_style)
36
+ # only try to use it if that file exists
37
+ if File.exists? from_style_path
38
+ original_path = from_style_path
39
+ end
40
+ end
41
+
42
+ # If thumbnail_path or original_filename is nil then we have no image so we'll let it return the default_url
43
+ unless thumbnail_path.nil? || original_filename.nil? || !File.exists?(original_path)
44
+ # If the file doesn't exist we need to make it first
45
+ unless File.exists?(thumbnail_path)
46
+ begin
47
+ # TODO should create this on init of paperclip somehow and not here?
48
+ style = Paperclip::Style.new(style_name, @options.raw_options[:on_demand_styles][:"#{style_name}"], self)
49
+ original_file = File.new(original_path)
50
+ if original_file && original_file.size > 0
51
+ temp_thumbnail = Paperclip.processor(:thumbnail).make(original_file, style.processor_options, self)
52
+ original_file.close
53
+ if temp_thumbnail && temp_thumbnail.size > 0
54
+ # If the folder doesn't exist, make it
55
+ FileUtils.mkdir_p(File.dirname(thumbnail_path))
56
+ # Save the thumnail to thumbnail_path
57
+ FileUtils.cp(temp_thumbnail.path, thumbnail_path)
58
+ # Close and unlink the tempfile
59
+ temp_thumbnail.close!
60
+ else
61
+ thumbnail_url = interpolate(default_url, style_name)
62
+ end
63
+ else
64
+ thumbnail_url = interpolate(default_url, style_name)
65
+ end
66
+ rescue
67
+ thumbnail_url = interpolate(default_url, style_name)
68
+ end
69
+ end
70
+ else
71
+ thumbnail_url = interpolate(default_url, style_name)
72
+ end
73
+
74
+ thumbnail_url = url_timestamp(thumbnail_url) if options[:timestamp]
75
+ thumbnail_url = escape_url(thumbnail_url) if options[:escape]
76
+ thumbnail_url
77
+ end
78
+
79
+ end
80
+
81
+ class ThumbnailOnDemandError < StandardError; end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'rspec'
4
+ require 'active_record'
5
+ require 'paperclip'
4
6
  require 'thumbnail_on_demand'
5
7
 
6
8
  # Requires supporting files with custom matchers and macros, etc,
@@ -1,7 +1,17 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- describe "ThumbnailOnDemand" do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
3
+ class TestModel < ActiveRecord::Base
4
+ include Paperclip
5
+ has_attached_file :attachment,
6
+ :styles => { :large => '1000x1000>'},
7
+ :on_demand_styles => { :small => "600x600>" }
8
+ end
9
+
10
+ describe ThumbnailOnDemand do
11
+ before(:each) do
12
+
13
+ end
14
+ describe "#thumbnail" do
15
+ it "should return a string"
6
16
  end
7
17
  end
@@ -0,0 +1,60 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{thumbnail_on_demand}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = [%q{Jonathan Dean}]
12
+ s.date = %q{2011-10-27}
13
+ s.description = %q{An add-on to paperclip that allows for on-demand, cached thumbnail creation}
14
+ s.email = %q{jon@jonathandean.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/thumbnail_on_demand.rb",
29
+ "spec/spec_helper.rb",
30
+ "spec/thumbnail_on_demand_spec.rb",
31
+ "thumbnail_on_demand.gemspec"
32
+ ]
33
+ s.homepage = %q{http://github.com/jonathandean/thumbnail_on_demand}
34
+ s.licenses = [%q{MIT}]
35
+ s.require_paths = [%q{lib}]
36
+ s.rubygems_version = %q{1.8.6}
37
+ s.summary = %q{An add-on to paperclip that allows for on-demand, cached thumbnail creation}
38
+
39
+ if s.respond_to? :specification_version then
40
+ s.specification_version = 3
41
+
42
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
44
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
45
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
46
+ s.add_development_dependency(%q<rcov>, [">= 0"])
47
+ else
48
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
49
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
50
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
51
+ s.add_dependency(%q<rcov>, [">= 0"])
52
+ end
53
+ else
54
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
55
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
56
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
57
+ s.add_dependency(%q<rcov>, [">= 0"])
58
+ end
59
+ end
60
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thumbnail_on_demand
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.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: 2011-10-20 00:00:00.000000000Z
12
+ date: 2011-10-27 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70187281868740 !ruby/object:Gem::Requirement
16
+ requirement: &70355859360900 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.3.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70187281868740
24
+ version_requirements: *70355859360900
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &70187281868260 !ruby/object:Gem::Requirement
27
+ requirement: &70355859360420 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70187281868260
35
+ version_requirements: *70355859360420
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &70187281867780 !ruby/object:Gem::Requirement
38
+ requirement: &70355859322820 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.6.4
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70187281867780
46
+ version_requirements: *70355859322820
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rcov
49
- requirement: &70187281863200 !ruby/object:Gem::Requirement
49
+ requirement: &70355859322340 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70187281863200
57
+ version_requirements: *70355859322340
58
58
  description: An add-on to paperclip that allows for on-demand, cached thumbnail creation
59
59
  email: jon@jonathandean.com
60
60
  executables: []
@@ -74,6 +74,7 @@ files:
74
74
  - lib/thumbnail_on_demand.rb
75
75
  - spec/spec_helper.rb
76
76
  - spec/thumbnail_on_demand_spec.rb
77
+ - thumbnail_on_demand.gemspec
77
78
  homepage: http://github.com/jonathandean/thumbnail_on_demand
78
79
  licenses:
79
80
  - MIT
@@ -89,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
90
  version: '0'
90
91
  segments:
91
92
  - 0
92
- hash: -1674008596836906761
93
+ hash: 1666669109934222201
93
94
  required_rubygems_version: !ruby/object:Gem::Requirement
94
95
  none: false
95
96
  requirements: