add support for upload progress using 'upr' gem
authorLunar <lunar@anargeek.net>
Mon, 27 Feb 2012 15:53:21 +0000 (16:53 +0100)
committerLunar <lunar@anargeek.net>
Thu, 14 Mar 2013 09:12:08 +0000 (10:12 +0100)
Gemfile
Gemfile.lock
README
lib/coquelicot/app.rb

diff --git a/Gemfile b/Gemfile
index f20d0de..e200348 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -13,6 +13,7 @@ gem "lockfile", "~>1.4.3"
 gem "json"
 gem "rainbows"
 gem "multipart-parser"
+gem "upr"
 
 group :test do
   gem "rspec", "~>2.0"
index 2e36e59..7d5844d 100644 (file)
@@ -38,6 +38,7 @@ GEM
     maruku (0.6.0)
       syntax (>= 1.0.0)
     mime-types (1.17.2)
+    moneta (0.6.0)
     multi_json (1.0.4)
     multipart-parser (0.1.0)
     nokogiri (1.5.0)
@@ -88,6 +89,9 @@ GEM
       kgio (~> 2.6)
       rack
       raindrops (~> 0.7)
+    upr (0.2.0)
+      moneta
+      rack
     xpath (0.1.4)
       nokogiri (~> 1.3)
 
@@ -115,3 +119,4 @@ DEPENDENCIES
   sinatra-contrib (~> 1.3)
   thin
   timecop (~> 0.3.5)
+  upr
diff --git a/README b/README
index 4064398..71395c8 100644 (file)
--- a/README
+++ b/README
@@ -48,8 +48,8 @@ Features
 
  * Upload progress bar
 
-   If the web server tracks upload progress, users having javascript
-   enabled will see a nice progress bar during the file upload.
+   Users having javascript enabled will see a nice progress bar during
+   the file upload.
 
  * Downgrade nicely
 
index 2618f2a..9a1992d 100644 (file)
@@ -23,6 +23,8 @@ require 'haml/magic_translations'
 require 'sass'
 require 'digest/sha1'
 require 'fast_gettext'
+require 'upr'
+require 'moneta/memory'
 
 module Coquelicot
   class << self
@@ -36,6 +38,8 @@ module Coquelicot
   end
 
   class Application < Sinatra::Base
+    set :upr_backend, Upr::Monitor.new(Moneta::Memory.new)
+    use Upr, :backend => upr_backend, :path_info => %q{/upload}
     use Coquelicot::Rack::Upload
 
     register Sinatra::ConfigFile
@@ -116,6 +120,14 @@ module Coquelicot
       end
     end
 
+    get '/progress' do
+      response.headers.update(Upr::JSON::RESPONSE_HEADERS)
+      data = Upr::JSON.new(:env => request.env,
+                           :backend => settings.upr_backend,
+                           :upload_id => params['X-Progress-ID'])._once
+      halt 200, { 'Content-Type' => 'application/json' }, data
+    end
+
     post '/upload' do
       # Normally handled by Coquelicot::Rack::Upload, only failures
       # will arrive here.