dimension 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6cf302e4bb1fc448c02a78c5c8301b16f3f3b3e8
4
- data.tar.gz: c6f093638b2ac08b6cf18f23b37ca6c8bdceaf3b
3
+ metadata.gz: 06041accf96d75786ffb67e1f1688035b5748954
4
+ data.tar.gz: 3c1be7b7ea191d66b614653bf4100aa0cbe77a77
5
5
  SHA512:
6
- metadata.gz: 88bae316d7293757aa1699835e5d685c564315ca513ccafa9ffabb1384605b0f34807f06cfca5758ba7363eba75bc4c425205ecde4be738bcca6766652e5f25a
7
- data.tar.gz: e511c93b2e6e4cc5dce4e8858498508eb6d8f82be4acd278f92996e0dad154e009d6520c5cbc42466c65b5323b3c75dbdc1805d253386f77f5c21eefcb25ed45
6
+ metadata.gz: 2bc01c771714e7efb0303213d75f296450d1a8763026092c3f4742fcc1664076a2f097c490e23722f087530eed07cda1356f1ac2fe40a0772a32e6a093cb6b80
7
+ data.tar.gz: a9fbf7942b35dc01fa4f94af05306b13e35042c7d858554304523a60a6733e70a214b7df79158cefb3432bb35013f43e327133e87b1bc38a12709263623550d8
data/dimension.gemspec CHANGED
@@ -18,4 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
19
19
  s.require_path = 'lib'
20
20
  # s.bindir = 'bin'
21
+
22
+ s.add_runtime_dependency 'rack-throttle', '~> 0.3'
21
23
  end
@@ -9,9 +9,12 @@ require ROOT + '/../lib/dimension/middleware'
9
9
 
10
10
  app = Rack::Builder.new do
11
11
 
12
- root = File.join(ROOT, 'assets')
12
+ # root = File.join(ROOT, 'assets')
13
+ root = ROOT
13
14
 
14
- use Dimension::Middleware, { :root => root }
15
+ use Rack::CommonLogger
16
+
17
+ use Dimension::Middleware, { :root => root, :throttle => 1, :save => false }
15
18
 
16
19
  use Rack::Static,
17
20
  :urls => ['/'],
@@ -21,6 +24,6 @@ app = Rack::Builder.new do
21
24
  [ 200, { 'Content-Type' => 'text/html'}, ['Not Found.'] ]
22
25
  }
23
26
 
24
- end.to_app
27
+ end
25
28
 
26
- Thin::Server.start('0.0.0.0', 4567, app)
29
+ Thin::Server.start('0.0.0.0', 4567, app.to_app)
@@ -104,7 +104,7 @@ class Image
104
104
  end
105
105
 
106
106
  def to_response(env = nil)
107
- [200, {'Content-Type' => "image/#{format}"}, image_data]
107
+ [200, {'Content-Type' => "image/#{format}"}, [image_data]]
108
108
  end
109
109
 
110
110
  def log(msg)
@@ -1,26 +1,42 @@
1
+ require 'rack/throttle'
2
+
1
3
  module Dimension
2
4
 
3
5
  class Middleware
4
6
 
5
- FORMATS = ['.jpg', '.png', '.gif', '.jpeg']
7
+ EXCEEDED = [403, {'Content-Type' => 'text/plain'}, ['Limit Exceeded.']]
6
8
 
7
9
  def initialize(app, opts = {})
8
10
  @app = app
9
11
  @root = File.expand_path(opts[:root] || Dir.pwd())
12
+ @save = opts[:save]
13
+
14
+ if opts[:throttle]
15
+ @throttle = Rack::Throttle::Interval.new(self, :min => opts[:throttle])
16
+ end
10
17
  end
11
18
 
12
19
  def call(env)
13
20
  url = env['PATH_INFO']
14
- query = env['QUERY_STRING']
15
- geometry = query && query[/geometry=([^\&|$]+)/, 1]
21
+ geometry = url[/-([0-9x:-]+)\.(png|gif|jpe?g)/, 1]
22
+
23
+ return @app.call(env) unless geometry
24
+
25
+ resized = File.join(@root, url)
26
+ original = resized.sub("-#{geometry}", '')
16
27
 
17
- if geometry and ext = File.extname(url) and ext != '' and FORMATS.include?(ext.downcase)
18
- file = File.join(@root, url)
28
+ if !File.exist?(resized) and File.exist?(original)
29
+
30
+ if @throttle
31
+ req = Rack::Request.new(env)
32
+ return EXCEEDED unless @throttle.allowed?(req)
33
+ end
34
+
19
35
  # puts 'Processing image: ' + file
20
-
21
- image = Dimension.open(file)
36
+ image = Dimension.open(original)
22
37
  image.generate(geometry) do
23
- image.to_response
38
+ image.save_as(resized) if @save
39
+ return image.to_response
24
40
  end
25
41
  end
26
42
 
@@ -1,7 +1,7 @@
1
1
  module Dimension
2
2
  MAJOR = 0
3
3
  MINOR = 0
4
- PATCH = 4
4
+ PATCH = 5
5
5
 
6
6
  VERSION = [MAJOR, MINOR, PATCH].join('.')
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dimension
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomás Pollak
@@ -9,7 +9,21 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2014-04-10 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack-throttle
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.3'
13
27
  description: Yes, there are other graphic libraries besides ImageMagick.
14
28
  email:
15
29
  - tomas@forkhq.com