dimension 0.0.4 → 0.0.5

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.
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