enhance 0.0.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/README ADDED
File without changes
data/enhance.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ $:.push File.join(File.dirname(__FILE__), '/lib')
2
+
3
+ require 'enhance/version'
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = "enhance"
7
+ gem.authors = ['Guillaume Malette']
8
+ gem.date = %q{2011-08-26}
9
+ gem.description = %q{Middleware to "enhance" and resize images on the fly.}
10
+ gem.summary = "Image resizing on the fly"
11
+ gem.email = 'gmalette@gmail.com'
12
+ gem.homepage = ''
13
+
14
+ gem.add_runtime_dependency 'rack'
15
+ gem.add_runtime_dependency 'utilities'
16
+ gem.add_development_dependency 'rack-test'
17
+
18
+ gem.executables = []
19
+ gem.files = `git ls-files`.split("\n")
20
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ gem.require_paths = ['lib']
22
+ gem.version = Enhance::VERSION
23
+ end
data/lib/enhance.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'utilities'
2
+ require 'fileutils'
3
+
4
+ module Enhance
5
+ %w( Enhancer ).each do |class_name|
6
+ autoload class_name.to_sym, File.join(File.dirname(__FILE__), "enhance/#{class_name.downcase}")
7
+ end
8
+
9
+ end
@@ -0,0 +1,70 @@
1
+
2
+ class Enhance::Enhancer
3
+
4
+ def initialize app, root, options = {}
5
+ @app = app
6
+ @extensions = options[:extensions] || %w( jpg png )
7
+ @routes = options[:routes] || %w( images )
8
+ @folders = options[:folders] || [File.join(root, "public")]
9
+ @quality = options[:quality] || 100
10
+ @command_path = options[:convert_path] || "#{Paperclip.options[:command_path] if defined?(Paperclip)}"
11
+ @command_path += "/" unless @command_path.blank?
12
+ @cache = options[:cache] || File.join(root, "tmp")
13
+ @max_side = options[:max_side] || 1024
14
+ @server = Rack::File.new("/")
15
+ end
16
+
17
+ def call env
18
+ matches = env['PATH_INFO'].match /(?<filename>(#{@routes.join("|")}).*(#{@extensions.join("|")}))\/(?<geometry>.*)/i
19
+ p matches
20
+ if matches && !matches['filename'].include?("..")
21
+ dup._call env, matches
22
+ else
23
+ @app.call env
24
+ end
25
+ end
26
+
27
+ def _call env, matches
28
+ request = @folders.collect_first{|f| File.join(f, matches['filename']) if File.exists?(File.join(f, matches['filename']))}
29
+
30
+ if request && filename = convert(request, matches['filename'], CGI.unescape(matches['geometry']))
31
+ @server.call env
32
+ else
33
+ @app.call env
34
+ end
35
+ end
36
+
37
+ # Finds the image and resizes it if needs be
38
+ def convert path, filename, geometry
39
+ # Extract the width and height
40
+ if sizes = geometry.match(/^(?<width>\d+)?x?(?<height>\d+)([\>\<\@\%^!])?$/)
41
+ w, h = sizes['width'], sizes['height']
42
+ ow, oh = original_size path
43
+
44
+ # Resize if needed
45
+ if (w.nil? || w.to_i <= @max_side) && (h.nil? || h.to_i <= @max_side) && (ow != w || oh != h)
46
+ new_name = File.join(@cache, filename, geometry) + File.extname(filename)
47
+ resize path, new_name, geometry
48
+ else
49
+ path
50
+ end
51
+ else
52
+ nil
53
+ end
54
+ end
55
+
56
+ # Creates the path and resizes the images
57
+ def resize source, destination, geometry
58
+ FileUtils.mkdir_p File.dirname(destination)
59
+
60
+ `#{@command_path}convert \"#{source}\" -resize \"#{geometry}\" -quality #{@quality} \"#{destination}\"` unless File.exists? destination
61
+
62
+ destination
63
+ end
64
+
65
+ # Finds the size of the original image
66
+ def original_size filename
67
+ `#{@command_path}identify -format '%w %h' #{filename}`.split(/\s/)
68
+ end
69
+
70
+ end
@@ -0,0 +1,3 @@
1
+ module Enhance
2
+ VERSION = '0.0.0'
3
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: enhance
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 0
9
+ version: 0.0.0
10
+ platform: ruby
11
+ authors:
12
+ - Guillaume Malette
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-08-26 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rack
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: utilities
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :runtime
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: rack-test
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ type: :development
58
+ version_requirements: *id003
59
+ description: Middleware to "enhance" and resize images on the fly.
60
+ email: gmalette@gmail.com
61
+ executables: []
62
+
63
+ extensions: []
64
+
65
+ extra_rdoc_files: []
66
+
67
+ files:
68
+ - README
69
+ - enhance.gemspec
70
+ - lib/enhance.rb
71
+ - lib/enhance/enhancer.rb
72
+ - lib/enhance/version.rb
73
+ has_rdoc: true
74
+ homepage: ""
75
+ licenses: []
76
+
77
+ post_install_message:
78
+ rdoc_options: []
79
+
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ segments:
96
+ - 0
97
+ version: "0"
98
+ requirements: []
99
+
100
+ rubyforge_project:
101
+ rubygems_version: 1.3.7
102
+ signing_key:
103
+ specification_version: 3
104
+ summary: Image resizing on the fly
105
+ test_files: []
106
+