Return-Path: Delivered-To: apmail-incubator-deltacloud-dev-archive@minotaur.apache.org Received: (qmail 80109 invoked from network); 26 Nov 2010 14:26:47 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 26 Nov 2010 14:26:47 -0000 Received: (qmail 39532 invoked by uid 500); 26 Nov 2010 14:26:47 -0000 Delivered-To: apmail-incubator-deltacloud-dev-archive@incubator.apache.org Received: (qmail 39458 invoked by uid 500); 26 Nov 2010 14:26:46 -0000 Mailing-List: contact deltacloud-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: deltacloud-dev@incubator.apache.org Delivered-To: mailing list deltacloud-dev@incubator.apache.org Received: (qmail 39450 invoked by uid 99); 26 Nov 2010 14:26:46 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Nov 2010 14:26:46 +0000 X-ASF-Spam-Status: No, hits=-5.0 required=10.0 tests=RCVD_IN_DNSWL_HI,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of mfojtik@redhat.com designates 209.132.183.28 as permitted sender) Received: from [209.132.183.28] (HELO mx1.redhat.com) (209.132.183.28) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Nov 2010 14:26:41 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id oAQEQKu7007892 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 26 Nov 2010 09:26:20 -0500 Received: from redhat.com (dhcp-2-138.brq.redhat.com [10.34.2.138]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id oAQEQHIZ007090 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 26 Nov 2010 09:26:19 -0500 Date: Fri, 26 Nov 2010 15:26:16 +0100 From: Michal Fojtik To: deltacloud-dev@incubator.apache.org Subject: Re: [PATCH core 2/2] Added Rack middleware which set driver/per request using HTTP headers Message-ID: <20101126142616.GA7243@redhat.com> References: <1290781190-11171-2-git-send-email-mfojtik@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <1290781190-11171-2-git-send-email-mfojtik@redhat.com> X-Operating-System: Linux patashnik 2.6.35.6-48.fc14.i686.PAE User-Agent: Mutt/1.5.20 (2009-06-14) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 On 26/11/10 15:19 +0100, mfojtik@redhat.com wrote: Please ignore this email: Send this email? ([y]es|[n]o|[q]uit|[a]ll): n Result: 250 2.0.0 oAQEJsxJ013728 Message accepted for delivery -- Michal >From: Michal Fojtik > >--- > server/lib/sinatra/rack_driver_select.rb | 23 +++++++++++++++++++++++ > server/server.rb | 3 +++ > server/views/api/drivers.xml.haml | 6 ++++++ > 3 files changed, 32 insertions(+), 0 deletions(-) > create mode 100644 server/lib/sinatra/rack_driver_select.rb > create mode 100644 server/views/api/drivers.xml.haml > >diff --git a/server/lib/sinatra/rack_driver_select.rb b/server/lib/sinatra/rack_driver_select.rb >new file mode 100644 >index 0000000..a1a3c63 >--- /dev/null >+++ b/server/lib/sinatra/rack_driver_select.rb >@@ -0,0 +1,23 @@ >+class RackDriverSelect >+ >+ def initialize(app, opts={}) >+ @app = app >+ @opts = opts >+ end >+ >+ def call(env) >+ original_driver = settings.driver >+ if env['HTTP_HEADERS'] and new_driver=extract_driver(env) >+ set :driver, new_driver >+ end >+ response = @app.call(env) >+ set :driver, original_driver >+ response >+ end >+ >+ def extract_driver(env) >+ driver_name = env['HTTP_HEADERS'].match(/X\-Deltacloud\-Driver:(\w+)/).to_a >+ return driver_name[1] if driver_name[1] >+ end >+ >+end >diff --git a/server/server.rb b/server/server.rb >index 297e556..f888af9 100644 >--- a/server/server.rb >+++ b/server/server.rb >@@ -10,10 +10,13 @@ require 'erb' > require 'haml' > require 'open3' > require 'lib/deltacloud/helpers/blob_stream' >+require 'sinatra/rack_driver_select' > > set :driver, (ENV['API_DRIVER'] ? ENV['API_DRIVER'] : :mock) > set :version, '0.0.1' > >+use RackDriverSelect >+ > configure do > set :raise_errors => false > set :show_exceptions, false >diff --git a/server/views/api/drivers.xml.haml b/server/views/api/drivers.xml.haml >new file mode 100644 >index 0000000..7beb9c8 >--- /dev/null >+++ b/server/views/api/drivers.xml.haml >@@ -0,0 +1,6 @@ >+%api{ :version => settings.version } >+ %drivers >+ - DRIVERS.each do |id, details| >+ %driver{ :id => id } >+ %name< >+ =details[:name] >-- >1.7.3.2 > -- -------------------------------------------------------- Michal Fojtik, mfojtik@redhat.com Deltacloud API: http://deltacloud.org --------------------------------------------------------