<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>spec/ramaze/app/location.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,16 +1,17 @@
-The Ramaze development team is happy to announce version 2009.06 of Ramaze, the
+The Ramaze development team is happy to announce version 2009.07 of Ramaze, the
 light and modular open source web framework that tries to stay out of your way.
 
-This release features a lot of work directly from our community and we are
-really greatful for everybody who helped in testing, patching and contributing
-exciting new features.
+This release contains mostly bug fixes and compatibility improvements.
 
-Our extensive set of specs and docs now covers almost every detail of
-implementation and usage. Ramaze is under development by a growing community
-and in production use at companies.
+Also, thanks to the work of Jeremy Evans, Scaffolding Extensions works with the
+current version of Ramaze again, giving you a powerful and simple way to
+provide CRUD and admin interfaces for Sequel and ActiveRecord.
 
-There have been too many changes since the last official announcement in
-2008.07, so I will only list changes since the last release.
+I also would like to take this opportunity to ask for volunteers that are
+running on Windows, we are currently working on a major overhaul of the ramaze
+executable and would like to make sure it behaves correctly.
+If you are interested, check out the modular-bin branch and report any issues
+on the bug tracker or hang out on IRC.
 
 
 == Metadata
@@ -19,6 +20,7 @@ Home page:       http://ramaze.net
 Wiki:            http://wiki.ramaze.net
 
 Repository:      http://github.com/manveru/ramaze
+Bug tracker:     http://github.com/manveru/ramaze/issues
 
 Git clone:       git://github.com/manveru/ramaze
 Current tarball: http://github.com/manveru/ramaze/tarball/master
@@ -30,7 +32,7 @@ Simple example:
 
   require 'ramaze'
 
-  class MainController
+  class MainController &lt; Ramaze::Controller
     def index
       'Hello, World!'
     end
@@ -39,66 +41,33 @@ Simple example:
   Ramaze.start
 
 
-== Around 80 commits since 2009.05
-
-- Improved bin/ramaze with lots of specs, should work now even on windows.
-- Middleware order has been inverted.
-- Support for Webrat out of the box.
-- Fixed MemCache caching and sessions.
-- Removed a whole lot of methods that were marked deprecated.
-- New default Layout helper
-
-
 == Summarized changes with their respective commits
 
-- Antti Tuomi 
-  - Link helper did not set the prefix, added spec and fixed the behaviour
-    [ af753a0 | bae2b53 | eba4734 ]
+- Aaron M&#252;ller
+  - Update identity helper with new link helper
+
+- Masahiro Nakagawa
+  - Rewrite localization example
 
 - Michael Fellinger (manveru)
-  - Fix bug that made default port/handler break in bin/ramaze [ e6715e1 ]
-  - Remove deprecated methods on Ramaze::Controller, Helper::Cache,
-    Helper::Link, and Helper::Auth. Also remove the deprecated methods
-    Object#acquire, String#/, and Symbol#/
-    [ 272fced | 1e4ac92 | a0a9329 | 68242b3 | 57e7a85 | 31b809a | 3fc4622 ]
-  - The bacon scope :mock was renamed to :rack_test, added shared :webrat, so
-    you can run your specs with that as well. Also move the bacon-specific code
-    to ramaze/spec/bacon, prepare for test-framework-agnostic behaviour.
-    [ f1a2669 | c12a0a4 | fdde916 ]
-  - Fix ordering of middleware [ 508bffc ]
-  - Warn and fix the ttl if someone exceeds the maximum ttl allowed by MemCache
-    [ 3124879 | bc08091 ]
-  - Comaptibility with localmemcache 0.4.0 [ 096f051 ]
-  - Fixed Cache::Sequel to work with 3.1.0 [ d2c2b85 ]
-  - Fix bug with memcache on 1.9, make sure the Etag middleware works on it
-    [ 21763df | 1d0dff5 ]
-  - A little bit of example-usage for Helper::Form#form_select, improve by
-    allowing :multiple =&gt; 10 [ a634582 | de73014 ]
-  - Avoid useless iteration and fix ambigous linking in helper/paginate
-    [ 6fb74df | 9b73450 ]
-  - Respect preset options for port/adapter on ramaze start [ 6efaaaa ]
-  - Preserve file permissions during `ramaze create` [ 3e3bc0a ]
-  - Implement and spec the lonely controller rule [ fdfe5b9 | 4dd866b ]
-  - Fix &quot;bug&quot; pointed out by druby [ 796627a ]
-  - Output to logger in ramaze/setup if Log is available, don't output the
-    require exception twice. Avoid infinite recursion when a
-    gem name does not match it's lib name [ b9fa0c4 | 7bc9d65 | e6b4996 ]
-  - Put a notice into config.ru making clear that the handler cannot be set
-    inside [ b4bad57 ]
-  - Some mods to contrib, fix facebook.rb syntax for ruby 1.9 and adding
-    Ramaze::AddressableRoute for great profit!  [ c7fbf0c | cafe657 ]
-  - Don't write a file to /tmp during the bin/ramaze spec [ eb5e4ef ]
-
-- Pistos 
-  - Explicitly state top-level namespace for ::File in config.ru, since
-    otherwise it is confused for Rack::File.
-    [ 5509950 ]
-  - Added Layout helper with specs and documentation
-    [ a84f675 | 41ad023 | 4f23d16 ]
-
-- TJ Vanderpoel (bougyman)
-  - Added some specs for ramaze/bin, correcting a require bug already in
-    bin/ramaze. [ 8bbb8e8 | 9a3edf3 | 33fa3aa ]
+  - Adding support for the less CSS templating engine
+  - Better defaults for proto specs
+  - The Helper::Cache#cache_value optionally takes a block now
+  - Make sure proto/config.ru points to correct location
+  - Fix annoying behaviour when '/' location is assigned to an app loaded
+    earlier, apps loaded afterwards would overwrite the mapping. This caused
+    some very annoying and hard to debug behaviour.
+  - Fix bacon task dependency
+  - Fix Controller to work properly on Ruby 1.8.6
+  - Fix bug when using localmemcache on Ruby 1.9
+  - Fix the misc/css example
+  - Remove Helper::Cache#cache method
+  - Use absolute paths for requires in all ramaze specs, $LOAD_PATH in Ruby
+    1.9.2 will not include '.'
+  - Remove ContentLength middleware from :live and :dev modes. Rack handlers
+    use it already.
+  - Refactor contrib/addressable_route, it now uses instance variables and can
+    take a mapping on initialize.
 
 A complete Changelog is available at
 http://github.com/manveru/ramaze/tree/master/doc/CHANGELOG?raw=true
@@ -106,19 +75,22 @@ http://github.com/manveru/ramaze/tree/master/doc/CHANGELOG?raw=true
 
 == Known issues
 
-- Some problems may show up when running the specs, these are mostly caused
-  by the gem-versions of Rack::Test and Rack, they only affect the specs and
-  should have no influence on the actual runtime.
+- When running on Ruby 1.9.x, Rack 1.0.0 has problems with the encoding, it is
+  recommended to use master HEAD from http://github.com/rack/rack until the
+  next release of Rack.
+- When running on Ruby 1.9.2dev (ruby trunk), using the thin handler can lead
+  to memory leaks. The cause is yet unknown, please use Ruby 1.9.1 or another
+  handler (mongrel, webrick, and fcgi are known to work well)
 
 
 == Ramaze Features
 
 - Builds on top of the Rack library, which provides easy use of adapters like
-  Mongrel, WEBrick, LiteSpeed, Thin, CGI or FCGI.
+  Mongrel, WEBrick, LiteSpeed, Thin, CGI, SCGI, or FCGI.
 
-- Supports a wide range of templating-engines like: ERB, Erubis, Haml, Liquid,
-  Maruku, Redcloth, Remarkably, Sass, Tagz, Tenjin. And its own engines called
-  Etanni, Ezamar, Gestalt, and Nagoro.
+- Supports a wide range of templating-engines like: ERB, Erubis, Haml, Less,
+  Liquid, Maruku, Redcloth, Remarkably, Sass, Tagz, Tenjin. And its own engines
+  called Etanni, Ezamar, Gestalt, and Nagoro.
 
 - Highly modular structure: you can just use the parts you like. This also
   means that it's very simple to add your own customizations.
@@ -128,8 +100,7 @@ http://github.com/manveru/ramaze/tree/master/doc/CHANGELOG?raw=true
   controllers.
 
 - It is possible to use the ORM you like, be it Sequel, DataMapper,
-  ActiveRecord, Og, Kansas or something more simplistic like DBI, or a wrapper
-  around YAML::Store.
+  ActiveRecord, Og, Kansas or something more simplistic like M4DBI.
 
 - Good documentation: although we don't have 100% documentation right now (dcov
   says around 75%), just about every part of Ramaze is covered with basic and
@@ -137,7 +108,7 @@ http://github.com/manveru/ramaze/tree/master/doc/CHANGELOG?raw=true
   available.
 
 - Friendly community: there are people from all over the world using Ramaze, so
-  you can get almost instant help and info.
+  you can get plenty of help and information around the clock.
 
 
 For more information please come to http://ramaze.net or ask directly on IRC</diff>
      <filename>doc/meta/announcement.txt</filename>
    </modified>
    <modified>
      <diff>@@ -10,15 +10,10 @@ module Ramaze::SourceReloadHooks
 end
 
 class CSSController &lt; Ramaze::Controller
-  engine :Sass
-
-  helper :aspect
-  before_all do
-    response['Content-Type'] = 'text/css'
-    nil
-  end
+  helper :cache
+  provide :css, :type =&gt; 'text/css', :engine =&gt; :Sass
 
-  define_method('style.css') do
+  def style
     %(
 body
   font:
@@ -29,9 +24,8 @@ body
     )
   end
 
-  helper :cache
-  cache 'style.css'
+  cache_action :method =&gt; 'style'
 end
 
-# http://localhost:81/css/style.css
-Ramaze.start :adapter =&gt; :mongrel, :port =&gt; 81
+# http://localhost:7000/css/style.css
+Ramaze.start :adapter =&gt; :mongrel, :port =&gt; 7000</diff>
      <filename>examples/misc/css.rb</filename>
    </modified>
    <modified>
      <diff>@@ -66,7 +66,6 @@ module Ramaze
     m.use Rack::ShowExceptions
     m.use Rack::ShowStatus
     m.use Rack::RouteExceptions
-    m.use Rack::ContentLength
     m.use Rack::ConditionalGet
     m.use Rack::ETag
     m.use Rack::Head
@@ -78,7 +77,6 @@ module Ramaze
     m.use Rack::CommonLogger, Ramaze::Log
     m.use Rack::RouteExceptions
     m.use Rack::ShowStatus
-    m.use Rack::ContentLength
     m.use Rack::ConditionalGet
     m.use Rack::ETag
     m.use Rack::Head</diff>
      <filename>lib/ramaze.rb</filename>
    </modified>
    <modified>
      <diff>@@ -70,10 +70,10 @@ module Ramaze
 
     attr_reader :name, :location, :url_map, :options
 
-    def initialize(name, location)
+    def initialize(name, location = nil)
       @name = name.to_sym
       @url_map = Innate::URLMap.new
-      self.location = location
+      self.location = location if location
 
       APP_LIST[@name] = self
 
@@ -113,7 +113,8 @@ module Ramaze
       roots.map{|root| publics.map{|public| ::File.join(root, public) }}.flatten
     end
 
-    def self.find_or_create(name, location = '/')
+    def self.find_or_create(name, location = nil)
+      location = '/' if location.nil? &amp;&amp; name == :pristine
       self[name] || new(name, location)
     end
 </diff>
      <filename>lib/ramaze/app.rb</filename>
    </modified>
    <modified>
      <diff>@@ -18,25 +18,22 @@ module Ramaze
   # @example output of request.params at '/order/show'
   #
   #     {'customer_id =&gt; '12', 'order_id' =&gt; '15'}
-  #     
+  #
   # I haven't explored the full capabilities of the templates yet, but the
   # specs of Addressable::Template suggest that there is a lot to be
   # discovered.
   class AddressableRoute
-    ROUTES = {}
-
-    def self.map(from, to)
-      ROUTES[Addressable::Template.new(from)] = to
-    end
-
-    def initialize(app)
+    def initialize(app, routes = {})
       @app = app
+      @routes = {}
+
+      routes.each{|from, to| map(from, to) }
     end
 
     def call(env)
       path_info = env['PATH_INFO']
 
-      ROUTES.each do |template, target|
+      @routes.each do |template, target|
         extracted = template.extract(path_info)
         return dispatch(env, target, extracted) if extracted
       end
@@ -44,6 +41,10 @@ module Ramaze
       @app.call(env)
     end
 
+    def map(from, to)
+      @routes[Addressable::Template.new(from)] = to
+    end
+
     def dispatch(env, target, extracted)
       env['PATH_INFO'] = target
       original = Rack::Utils.parse_query(env['QUERY_STRING'])</diff>
      <filename>lib/ramaze/contrib/addressable_route.rb</filename>
    </modified>
    <modified>
      <diff>@@ -51,9 +51,7 @@ module Ramaze
         trait(:provide_set =&gt; false)
       end
 
-      return if trait[:skip_controller_map]
-
-      map(generate_mapping(name))
+      map(generate_mapping(name)) unless trait[:skip_controller_map]
     end
 
     def self.engine(name)</diff>
      <filename>lib/ramaze/controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -93,11 +93,19 @@ module Ramaze
       end
 
       module SingletonMethods
-        def cache(name, hash = {})
-          Ramaze.deprecated('Helper::Cache::cache', 'Helper::Cache::cache_action')
-          cache_action(hash.merge(:method =&gt; name))
-        end
-
+        # This method allows you to cache whole actions.
+        #
+        # @example Basic usage
+        #
+        #   class Foo &lt; Ramaze::Controller
+        #     helper :cache
+        #     cache_action :method =&gt; :bar
+        #
+        #     def bar
+        #       rand
+        #     end
+        #   end
+        #
         def cache_action(hash, &amp;block)
           hash[:key] = block if block_given?
           hash[:method] = hash[:method].to_s</diff>
      <filename>lib/ramaze/helper/cache.rb</filename>
    </modified>
    <modified>
      <diff>@@ -150,8 +150,11 @@ module Ramaze
 
     # Maybe port to ruby &lt; 1.8.7 ?
     def obfuscate_email(email, text = nil)
-      obfuscated = email.to_s.each_byte.map{|c| &quot;&amp;#%03d&quot; % c}.join
-      %(&lt;a href=&quot;mailto:#{obfuscated}&quot;&gt;#{text || obfuscated}&lt;/a&gt;)
+      obfuscated = []
+      email.to_s.each_byte{|c| obfuscated &lt;&lt; &quot;&amp;#%03d&quot; % c }
+      joined = obfuscated.join
+
+      %(&lt;a href=&quot;mailto:#{joined}&quot;&gt;#{text || joined}&lt;/a&gt;)
     end
 
     # Returns Hash with tags as keys and their weight as value.</diff>
      <filename>lib/ramaze/helper/formatting.rb</filename>
    </modified>
    <modified>
      <diff>@@ -55,7 +55,7 @@ module Ramaze
         #   set_layout 'default' =&gt; [ :index, :admin ]
         def set_layout(hash_or_the_layout)
           if hash_or_the_layout.respond_to?(:to_hash)
-            f = hash_or_the_layout.first
+            f = hash_or_the_layout.to_hash.find{|k,v| k &amp;&amp; v }
             the_layout = f[0]
             whitelist = f[1].map{|action| action.to_s }
           else
@@ -78,7 +78,7 @@ module Ramaze
         #   set_layout_except 'default' =&gt; [ :user_data ]
         def set_layout_except(hash_or_the_layout)
           if hash_or_the_layout.respond_to?(:to_hash)
-            f = hash_or_the_layout.to_hash.first
+            f = hash_or_the_layout.to_hash.find{|k,v| k &amp;&amp; v }
             the_layout = f[0]
             blacklist = f[1].map{|action| action.to_s }
           else</diff>
      <filename>lib/ramaze/helper/layout.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,11 +9,16 @@ require File.expand_path('../', __FILE__) unless defined?(Ramaze)
 
 require 'innate/spec/bacon'
 
+# minimal middleware, no exception handling
+Ramaze.middleware!(:spec){|m|
+  m.run(Ramaze::AppMap)
+}
+
 shared :rack_test do
   Ramaze.setup_dependencies
   extend Rack::Test::Methods
 
-  def app; Ramaze::AppMap; end
+  def app; Ramaze.middleware; end
 end
 
 shared :webrat do</diff>
      <filename>lib/ramaze/spec/bacon.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,8 @@
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
 shared :template_spec do
-  behaves_like :mock
+  behaves_like :rack_test
 
   def spec_template(spec_engine)
     it 'works on /' do</diff>
      <filename>lib/ramaze/spec/helper/template_examples.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-require 'spec/helper'
+require File.expand_path('../../../spec/helper', __FILE__)
 require 'ramaze/contrib/addressable_route'
 
 class SpecAddressableRoute &lt; Ramaze::Controller
@@ -12,11 +12,9 @@ end
 describe 'addressable routing' do
   behaves_like :rack_test
 
-  RAR = Ramaze::AddressableRoute
-  RAR.map('/customer/{customer_id}/order/{order_id}', '/order/show')
-
   Ramaze.middleware! :spec do |m|
-    m.use RAR
+    m.use(Ramaze::AddressableRoute,
+          '/customer/{customer_id}/order/{order_id}' =&gt; '/order/show')
     m.run Ramaze::AppMap
   end
 </diff>
      <filename>spec/contrib/addressable_route.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-require 'spec/helper'
+require File.expand_path('../../../spec/helper', __FILE__)
 require 'ramaze/contrib/rest'
 
 class Posts &lt; Ramaze::Controller</diff>
      <filename>spec/contrib/rest.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
-require 'spec/helper'
-require 'examples/helpers/cache'
+require File.expand_path('../../../spec/helper', __FILE__)
+require File.expand_path('../../../examples/helpers/cache', __FILE__)
 
 describe 'Caching' do
   behaves_like :rack_test</diff>
      <filename>spec/examples/caching.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
-require 'spec/helper'
+require File.expand_path('../../../spec/helper', __FILE__)
 spec_require 'haml'
-require 'examples/misc/css'
+require File.expand_path('../../../examples/misc/css', __FILE__)
 
 describe 'CSSController' do
   behaves_like :rack_test</diff>
      <filename>spec/examples/css.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
-require 'spec/helper'
+require File.expand_path('../../../spec/helper', __FILE__)
 spec_require 'nagoro'
-require 'examples/basic/element'
+require File.expand_path('../../../examples/basic/element', __FILE__)
 
 describe 'Element' do
   behaves_like :rack_test</diff>
      <filename>spec/examples/element.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
-require 'spec/helper'
-require 'examples/basic/hello'
+require File.expand_path('../../../spec/helper', __FILE__)
+require File.expand_path('../../../examples/basic/hello', __FILE__)
 
 describe 'Hello' do
   behaves_like :rack_test</diff>
      <filename>spec/examples/hello.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
-require 'spec/helper'
-require 'examples/helpers/httpdigest'
+require File.expand_path('../../../../spec/helper', __FILE__)
+require File.expand_path('../../../../examples/helpers/httpdigest', __FILE__)
 
 # Not sure if we should change the behaviour of digest_authorize, it keeps
 # challenging the authorization even after a logout, which will log us in right</diff>
      <filename>spec/examples/helpers/httpdigest.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
-require 'spec/helper'
-require 'examples/basic/linking'
+require File.expand_path('../../../spec/helper', __FILE__)
+require File.expand_path('../../../examples/basic/linking', __FILE__)
 
 describe 'Linking' do
   behaves_like :rack_test</diff>
      <filename>spec/examples/linking.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
-require 'spec/helper'
-require 'examples/basic/simple'
+require File.expand_path('../../../spec/helper', __FILE__)
+require File.expand_path('../../../examples/basic/simple', __FILE__)
 
 describe 'Simple' do
   behaves_like :rack_test</diff>
      <filename>spec/examples/simple.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/spec/helper/template_examples'
 
 spec_require 'erubis'
-require 'examples/templates/template_erubis'
+require File.expand_path('../../../../examples/templates/template_erubis', __FILE__)
 
 describe 'Template Erubis' do
   behaves_like :template_spec</diff>
      <filename>spec/examples/templates/template_erubis.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/spec/helper/template_examples'
 
 spec_require 'ezamar'
-require 'examples/templates/template_ezamar'
+require File.expand_path('../../../../examples/templates/template_ezamar', __FILE__)
 
 describe 'Template Ezamar' do
   behaves_like :template_spec</diff>
      <filename>spec/examples/templates/template_ezamar.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/spec/helper/template_examples'
 
 spec_require 'haml'
-require 'examples/templates/template_haml'
+require File.expand_path('../../../../examples/templates/template_haml', __FILE__)
 
 describe 'Template Haml' do
   behaves_like :template_spec</diff>
      <filename>spec/examples/templates/template_haml.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/spec/helper/template_examples'
 
 spec_require 'liquid'
-require 'examples/templates/template_liquid'
+require File.expand_path('../../../../examples/templates/template_liquid', __FILE__)
 
 describe 'Template Liquid' do
   behaves_like :template_spec</diff>
      <filename>spec/examples/templates/template_liquid.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/spec/helper/template_examples'
 
 # spec_require 'markaby'
-# require 'examples/templates/template_markaby'
+# require File.expand_path('../../../../examples/templates/template_erubis', __FILE__)
 
 describe 'Template Markaby' do
   # behaves_like :template_spec</diff>
      <filename>spec/examples/templates/template_markaby.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/spec/helper/template_examples'
 
 spec_require 'nagoro'
-require 'examples/templates/template_nagoro'
+require File.expand_path('../../../../examples/templates/template_nagoro', __FILE__)
 
 describe 'Template Nagoro' do
   behaves_like :template_spec</diff>
      <filename>spec/examples/templates/template_nagoro.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/spec/helper/template_examples'
 
 spec_require 'redcloth'
-spec_require 'examples/templates/template_redcloth'
+require File.expand_path('../../../../examples/templates/template_redcloth', __FILE__)
 
 describe 'Template RedCloth' do
   behaves_like :template_spec</diff>
      <filename>spec/examples/templates/template_redcloth.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/spec/helper/template_examples'
 
 spec_require 'remarkably/engines/html'
-require 'examples/templates/template_remarkably'
+require File.expand_path('../../../../examples/templates/template_remarkably', __FILE__)
 
 describe 'Template Remarkably' do
   behaves_like :template_spec</diff>
      <filename>spec/examples/templates/template_remarkably.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/spec/helper/template_examples'
 
 spec_require 'tenjin'
-require 'examples/templates/template_tenjin'
+require File.expand_path('../../../../examples/templates/template_tenjin', __FILE__)
 
 describe 'Template Tenjin' do
   behaves_like :template_spec</diff>
      <filename>spec/examples/templates/template_tenjin.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecAction &lt; Ramaze::Controller
   map '/'</diff>
      <filename>spec/ramaze/action/render.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../spec/helper', __FILE__)
 
 class SpecAppMain &lt; Ramaze::Controller
   map '/', :core</diff>
      <filename>spec/ramaze/app.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,13 @@
-require &quot;spec/helper&quot;
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require &quot;ramaze/tool/bin&quot;
+
 require &quot;pathname&quot;
+
 module Ramaze
-  BINPATH = Pathname.new(Ramaze::ROOT).join(&quot;..&quot;, &quot;bin&quot;, &quot;ramaze&quot;).expand_path
+  BINPATH = Pathname(Ramaze::ROOT).join(&quot;../bin/ramaze&quot;).expand_path
 end
 
 USAGE = &lt;&lt;TXT</diff>
      <filename>spec/ramaze/bin/ramaze.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'localmemcache'
 
 describe Ramaze::Cache::LocalMemCache do</diff>
      <filename>spec/ramaze/cache/localmemcache.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 spec_precondition 'memcached is running' do
   require 'memcache'</diff>
      <filename>spec/ramaze/cache/memcache.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'sequel'
 
 DB = Sequel.sqlite</diff>
      <filename>spec/ramaze/cache/sequel.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 Ramaze::App.options.merge!(:layouts =&gt; 'view')
 </diff>
      <filename>spec/ramaze/controller/actionless_templates.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
 
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecHello &lt; Ramaze::Controller
   def index</diff>
      <filename>spec/ramaze/controller/lonely_mapping.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 describe 'Controller::generate_mapping' do
   def gen(klass)</diff>
      <filename>spec/ramaze/controller/mapping.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecControllerInheritedMain &lt; Ramaze::Controller
   Ramaze.node('/')</diff>
      <filename>spec/ramaze/controller/provide_inheritance.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class MainController &lt; Ramaze::Controller
   map '/'</diff>
      <filename>spec/ramaze/controller/resolve.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class BaseController &lt; Ramaze::Controller
   alias_view :foo, :bar</diff>
      <filename>spec/ramaze/controller/subclass.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecViewAlias &lt; Ramaze::Controller
   map '/'</diff>
      <filename>spec/ramaze/controller/template_resolving.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 spec_require 'hpricot'
 </diff>
      <filename>spec/ramaze/dispatcher/directory.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,18 +1,18 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 # This spec more or less tries to ensure that we integrate with rack and
 # rack-contrib in regards to static file serving.
 
-module Ramaze
-  # minimal middleware, no exception handling
-  middleware!(:spec){|m|
-    m.apps Rack::ConditionalGet, Rack::ETag
-    m.innate
-  }
-end
+spec_require 'rack/contrib'
+
+# minimal middleware, no exception handling
+Ramaze.middleware!(:spec){|m|
+  m.apps Rack::ConditionalGet, Rack::ETag
+  m.run Ramaze::AppMap
+}
 
 describe 'Serving static files' do
   behaves_like :rack_test</diff>
      <filename>spec/ramaze/dispatcher/file.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../spec/helper', __FILE__)
 require 'rexml/document'
 require 'rexml/xpath'
 </diff>
      <filename>spec/ramaze/error.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../spec/helper', __FILE__)
 
 class SpecFilesCore &lt; Ramaze::Controller
   map '/', :core</diff>
      <filename>spec/ramaze/files.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,9 @@
 # * Encoding: UTF-8
+#
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../spec/helper', __FILE__)
 require 'ramaze/gestalt'
 
 describe &quot;Gestalt&quot; do</diff>
      <filename>spec/ramaze/gestalt.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 $password = Digest::SHA1.hexdigest('pass')
 </diff>
      <filename>spec/ramaze/helper/auth.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/helper/bench'
 
 describe Ramaze::Helper::Bench do</diff>
      <filename>spec/ramaze/helper/bench.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecHelperCache &lt; Ramaze::Controller
   map '/'
@@ -107,7 +107,7 @@ describe Ramaze::Helper::Cache do
       lambda{ get('/ttl').body }.should.not.change{ get('/ttl').body }
     end
 
-    lambda{ sleep 1; get('/ttl').body }.should.change{ get('/ttl').body }
+    lambda{ sleep 1.5; get('/ttl').body }.should.change{ get('/ttl').body }
   end
 
   it 'caches actions with block keys' do</diff>
      <filename>spec/ramaze/helper/cache.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecHelperFlash &lt; Ramaze::Controller
   map '/'</diff>
      <filename>spec/ramaze/helper/flash.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 spec_requires 'hpricot'
 </diff>
      <filename>spec/ramaze/helper/form.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/helper/formatting'
 
 describe 'Helper::Formatting' do</diff>
      <filename>spec/ramaze/helper/formatting.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/helper/gestalt'
 
 describe Ramaze::Helper::Gestalt do</diff>
      <filename>spec/ramaze/helper/gestalt.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/helper/gravatar'
 
 describe Ramaze::Helper::Gravatar do</diff>
      <filename>spec/ramaze/helper/gravatar.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 REALM = 'HttpDigestTestRealm'
 </diff>
      <filename>spec/ramaze/helper/httpdigest.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class LayoutHelperOne &lt; Ramaze::Controller
   map '/one'</diff>
      <filename>spec/ramaze/helper/layout.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecHelperLink &lt; Ramaze::Controller
   map '/'</diff>
      <filename>spec/ramaze/helper/link.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,9 @@
 # * Encoding: UTF-8
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
 $KCODE = 'u' if /regexp/.respond_to?(:kcode)
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_requires 'locale/tag', 'locale'
 
 class SpecHelperLocalize &lt; Ramaze::Controller</diff>
      <filename>spec/ramaze/helper/localize.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'maruku'
 
 class SpecHelperMaruku &lt; Ramaze::Controller</diff>
      <filename>spec/ramaze/helper/maruku.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'hpricot'
 
 module Og</diff>
      <filename>spec/ramaze/helper/pager.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'hpricot'
 
 class SpecHelperPaginateArray &lt; Ramaze::Controller</diff>
      <filename>spec/ramaze/helper/paginate.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecHelperRequestAccessor &lt; Ramaze::Controller
   map '/'</diff>
      <filename>spec/ramaze/helper/request_accessor.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 spec_requires 'hpricot', 'sequel'
 </diff>
      <filename>spec/ramaze/helper/sequel_form.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecSimpleCaptcha &lt; Ramaze::Controller
   helper :simple_captcha</diff>
      <filename>spec/ramaze/helper/simple_captcha.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecStackHelper &lt; Ramaze::Controller
   map '/'</diff>
      <filename>spec/ramaze/helper/stack.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class MockSequelUser
   def profile</diff>
      <filename>spec/ramaze/helper/user.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/helper/xhtml'
 
 describe Ramaze::Helper::XHTML do</diff>
      <filename>spec/ramaze/helper/xhtml.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 require 'ramaze/log/informer'
 
 describe 'Informer' do</diff>
      <filename>spec/ramaze/log/informer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 class SpecLogger
   include Ramaze::Logging</diff>
      <filename>spec/ramaze/log/logging.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,14 @@
 #          Copyright (c) 2008 rob@rebeltechnologies.nl
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 require 'ramaze/log/syslog'
 
 describe 'Syslog' do
 
 	# close the syslog, if it was open for some reason before we
-	# start a test. 
+	# start a test.
 	before do
 		if ( Syslog.opened? )
 			::Syslog.close
@@ -24,8 +24,8 @@ describe 'Syslog' do
 	end
 
 	it 'should handle non default initialization' do
-		syslog = Ramaze::Logger::Syslog.new( 'ramaze_syslog_test', 
-		                                               ::Syslog::LOG_NDELAY | ::Syslog::LOG_NOWAIT, 
+		syslog = Ramaze::Logger::Syslog.new( 'ramaze_syslog_test',
+		                                               ::Syslog::LOG_NDELAY | ::Syslog::LOG_NOWAIT,
 		                                               ::Syslog::LOG_DAEMON )
 		::Syslog.opened?.should == true
 		::Syslog.ident.should   == 'ramaze_syslog_test'
@@ -43,7 +43,7 @@ describe 'Syslog' do
 		child = fork {
 			logpipe[0].close
 			STDERR.reopen(logpipe[1])
-			syslog = Ramaze::Logger::Syslog.new( 'ramaze_syslog_test', 
+			syslog = Ramaze::Logger::Syslog.new( 'ramaze_syslog_test',
 			                                              ::Syslog::LOG_PID | ::Syslog::LOG_NDELAY | ::Syslog::LOG_PERROR,
 														  ::Syslog::LOG_USER )
 			syslog.send priority, msg
@@ -54,7 +54,7 @@ describe 'Syslog' do
 
 		logpipe[0].gets.should == &quot;ramaze_syslog_test[#{child}]: #{msg}\n&quot;
 	end
-	
+
 	it 'should handle debug' do
 		test_log_msg :direct, :debug, &quot;Hello Debug World&quot;
 	end</diff>
      <filename>spec/ramaze/log/syslog.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../spec/helper', __FILE__)
 
 class TCParamsController &lt; Ramaze::Controller
   map '/'</diff>
      <filename>spec/ramaze/params.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../spec/helper', __FILE__)
 
 describe 'Ramaze::Request' do
   def request(env = {})</diff>
      <filename>spec/ramaze/request.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 
 spec_precondition 'memcached is running' do
   require 'memcache'</diff>
      <filename>spec/ramaze/session/memcache.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../spec/helper', __FILE__)
 
 Point = Ramaze::Struct.new(:x,:y)
 </diff>
      <filename>spec/ramaze/struct.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../spec/helper', __FILE__)
 
 module Ramaze
   module View</diff>
      <filename>spec/ramaze/view.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'erubis'
 
 Ramaze::App.options.views = 'erubis'</diff>
      <filename>spec/ramaze/view/erubis.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'ezamar'
 
 Ramaze::App.options.views = 'ezamar'</diff>
      <filename>spec/ramaze/view/ezamar.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
-# Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'ramaze/gestalt'
 
 Ramaze::App.options.views = 'gestalt'</diff>
      <filename>spec/ramaze/view/gestalt.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'haml'
 
 Ramaze::App.options.views = 'haml'</diff>
      <filename>spec/ramaze/view/haml.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,7 @@
-
-### And the CSS output it produces:
-
-
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'less'
 
 Ramaze::App.options.views = 'less'
@@ -31,12 +27,17 @@ end
 describe Ramaze::View::Less do
   behaves_like :rack_test
 
+  def cmp(actually, expected)
+    actually.strip.split(&quot;\n&quot;).sort.
+      should == expected.strip.split(&quot;\n&quot;).sort
+  end
+
   should 'render inline' do
     got = get('/style.css')
     got.status.should == 200
     got['Content-Type'].should == 'text/css'
 
-    got.body.should == &lt;&lt;-CSS.strip
+    cmp(got.body, &lt;&lt;-CSS)
 .outline { border: 1px solid black; }
 .article a { text-decoration: none; }
 .article p { color: #110011; }
@@ -48,7 +49,8 @@ describe Ramaze::View::Less do
     got = get('/file.css')
     got.status.should == 200
     got['Content-Type'].should == 'text/css'
-    got.body.should == &lt;&lt;-CSS.strip
+
+    cmp(got.body, &lt;&lt;-CSS)
 .outline { border: 1px solid black; }
 .article a { text-decoration: none; }
 .article p { color: #110011; }</diff>
      <filename>spec/ramaze/view/less.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'liquid'
 
 Ramaze::App.options.views = 'liquid'</diff>
      <filename>spec/ramaze/view/liquid.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'nagoro'
 
 Ramaze::App.options.views = 'nagoro'</diff>
      <filename>spec/ramaze/view/nagoro.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_requires 'erubis', 'redcloth'
 
 Ramaze::App.options.views = 'redcloth'</diff>
      <filename>spec/ramaze/view/redcloth.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'remarkably'
 
 Ramaze::App.options.views = 'remarkably'</diff>
      <filename>spec/ramaze/view/remarkably.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'haml/util', 'sass/engine'
 
 Ramaze::App.options.views = 'sass'</diff>
      <filename>spec/ramaze/view/sass.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'tagz'
 
 Ramaze::App.options.views = 'tagz'</diff>
      <filename>spec/ramaze/view/tagz.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 #          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
 # All files in this distribution are subject to the terms of the Ruby license.
 
-require 'spec/helper'
+require File.expand_path('../../../../spec/helper', __FILE__)
 spec_require 'tenjin'
 
 Ramaze::App.options.views = 'tenjin'</diff>
      <filename>spec/ramaze/view/tenjin.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,33 +1,38 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
 
-describe 'Array#put_within' do
-  it 'should put a given object at a well-described position' do
-    array = [:foo, :bar, :baz]
-    array.put_within(:foobar, :after =&gt; :bar, :before =&gt; :baz)
-    array.should == [:foo, :bar, :foobar, :baz]
-  end
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
+
+describe 'Array' do
+  describe '#put_within' do
+    it 'puts a given object at a well-described position' do
+      array = [:foo, :bar, :baz]
+      array.put_within(:foobar, :after =&gt; :bar, :before =&gt; :baz)
+      array.should == [:foo, :bar, :foobar, :baz]
+    end
 
-  it 'should raise on uncertainity' do
-    array = [:foo, :bar, :baz]
-    lambda{
-      array.put_within(:foobar, :after =&gt; :foo, :before =&gt; :baz)
-    }.should.raise(ArgumentError).
-      message.should == &quot;Too many elements within constrain&quot;
+    it 'raises on uncertainity' do
+      array = [:foo, :bar, :baz]
+      lambda{
+        array.put_within(:foobar, :after =&gt; :foo, :before =&gt; :baz)
+      }.should.raise(ArgumentError).
+        message.should == &quot;Too many elements within constrain&quot;
+    end
   end
-end
 
-describe 'Array#put_after' do
-  it 'should put a given object at a well-described position' do
-    array = [:foo, :bar, :baz]
-    array.put_after(:bar, :foobar)
-    array.should == [:foo, :bar, :foobar, :baz]
+  describe '#put_after' do
+    it 'puts a given object at a well-described position' do
+      array = [:foo, :bar, :baz]
+      array.put_after(:bar, :foobar)
+      array.should == [:foo, :bar, :foobar, :baz]
+    end
   end
-end
 
-describe 'Array#put_within' do
-  it 'should put a given object at a well-described position' do
-    array = [:foo, :bar, :baz]
-    array.put_before(:bar, :foobar)
-    array.should == [:foo, :foobar, :bar, :baz]
+  describe '#put_within' do
+    it 'puts a given object at a well-described position' do
+      array = [:foo, :bar, :baz]
+      array.put_before(:bar, :foobar)
+      array.should == [:foo, :foobar, :bar, :baz]
+    end
   end
 end</diff>
      <filename>spec/snippets/array/put_within.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe 'locals' do
   should 'find locals' do</diff>
      <filename>spec/snippets/binding/locals.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe &quot;Numeric#filesize_format&quot; do
   it 'it should convert filesizes to human readable format' do</diff>
      <filename>spec/snippets/numeric/filesize_format.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe &quot;Numeric time extensions&quot; do
   it 'should provide times in the past' do
@@ -9,4 +12,4 @@ describe &quot;Numeric time extensions&quot; do
   it 'should provide times in the future' do
     2.weeks.from_now.to_i.should == (Time.now + 2*7*24*60*60).to_i
   end
-end
\ No newline at end of file
+end</diff>
      <filename>spec/snippets/numeric/time.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe '__DIR__' do
   # this is hardly exhaustive, but better than nothing</diff>
      <filename>spec/snippets/object/__dir__.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe 'OrderedSet' do
   os = OrderedSet.new(1,2,3,1)</diff>
      <filename>spec/snippets/ordered_set.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 require 'fileutils'
 
 </diff>
      <filename>spec/snippets/ramaze/acquire.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe Ramaze::Dictionary do
   Dictionary = Ramaze::Dictionary</diff>
      <filename>spec/snippets/ramaze/dictionary.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe Ramaze::Struct do
   should 'provide #values_at' do</diff>
      <filename>spec/snippets/ramaze/struct.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe &quot;String#camel_case&quot; do
 </diff>
      <filename>spec/snippets/string/camel_case.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe 'String#color' do
   it 'should define methods to return ANSI strings' do</diff>
      <filename>spec/snippets/string/color.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe &quot;String#snake_case&quot; do
 </diff>
      <filename>spec/snippets/string/snake_case.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'lib/ramaze/spec/helper/snippets'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe &quot;String#unindent&quot; do
   it &quot;should remove indentation&quot; do</diff>
      <filename>spec/snippets/string/unindent.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
-require 'spec/helper'
+#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
+# All files in this distribution are subject to the terms of the Ruby license.
+
+require File.expand_path('../../../../lib/ramaze/spec/helper/snippets', __FILE__)
 
 describe 'Thread.into' do
   it 'should provide access to thread vars' do</diff>
      <filename>spec/snippets/thread/into.rb</filename>
    </modified>
    <modified>
      <diff>@@ -16,16 +16,22 @@ task :bacon =&gt; :setup do
   left_format = &quot;%4d/%d: %-#{len + 11}s&quot;
   spec_format = &quot;%d specifications (%d requirements), %d failures, %d errors&quot;
 
+  load_path = File.expand_path('../../lib', __FILE__)
+
   specs.each_with_index do |spec, idx|
     print(left_format % [idx + 1, specs_size, spec])
 
-    Open3.popen3(RUBY, spec) do |sin, sout, serr|
+    Open3.popen3(RUBY, '-I', load_path, spec) do |sin, sout, serr|
       out = sout.read.strip
       err = serr.read.strip
 
-      # this is conventional, see spec/innate/state/fiber.rb for usage
+      # this is conventional
       if out =~ /^Bacon::Error: (needed .*)/
         puts(yellow % (&quot;%6s %s&quot; % ['', $1]))
+      elsif out =~ /^Spec (precondition: &quot;[^&quot;]*&quot; failed)/
+        puts(yellow % (&quot;%6s %s&quot; % ['', $1]))
+      elsif out =~ /^Spec require: &quot;require&quot; failed: &quot;(no such file to load -- [^&quot;]*)&quot;/
+        puts(yellow % (&quot;%6s %s&quot; % ['', $1]))
       else
         total = nil
 </diff>
      <filename>tasks/bacon.rake</filename>
    </modified>
    <modified>
      <diff>@@ -44,8 +44,10 @@ task :gem_setup do
       setup
     end
 
-    # first try to activate, install and try to activate again if activation
-    # fails the first time
+    # First try to activate.
+    # If activation fails, try to install and activate again.
+    # If the second activation also fails, try to require as it may just as
+    # well be in $LOAD_PATH.
     def setup_gem(name, options)
       version = [options[:version]].compact
       lib_name = options[:lib] || name
@@ -53,19 +55,30 @@ task :gem_setup do
       log &quot;activating #{name}&quot;
 
       Gem.activate(name, *version)
-    rescue LoadError
-      install_gem(name, options)
-      Gem.activate(name, *version)
+    rescue Gem::LoadError
+      log &quot;activating #{name} failed, try to install&quot;
+
+      install_gem(name, version, options)
     end
 
     # tell rubygems to install a gem
-    def install_gem(name, options)
+    def install_gem(name, version, options)
       installer = Gem::DependencyInstaller.new(options)
 
       temp_argv(options[:extconf]) do
-        log &quot;Installing #{name}&quot;
-        installer.install(name, options[:version])
+        log &quot;installing #{name}&quot;
+        installer.install(name, *version)
       end
+
+      Gem.activate(name, *version)
+
+      log &quot;install and final activation successful&quot;
+    rescue Gem::GemNotFoundException =&gt; ex
+      log &quot;installation failed: #{ex}, use normal require&quot;
+
+      require(options[:lib] || name)
+
+      log &quot;require successful, cannot verify version though&quot;
     end
 
     # prepare ARGV for rubygems installer</diff>
      <filename>tasks/gem_setup.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,12 @@
 desc 'install all possible dependencies'
 task :setup =&gt; [:gem_setup] do
-  GemSetup.new :verbose =&gt; true do
-    setup_gemspec GEMSPEC
+  GemSetup.new :verbose =&gt; false do
+    DEPENDENCIES.each do |name, options|
+      gem(name, options)
+    end
+
+    DEVELOPMENT_DEPENDENCIES.each do |name, options|
+      gem(name, options)
+    end
   end
 end</diff>
      <filename>tasks/setup.rake</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>bad1f2e013f1378e0e77659f4ad3dffe744ed0b4</id>
    </parent>
    <parent>
      <id>b8d016bd0949ae9d84d91b24666e781e9e5c4945</id>
    </parent>
  </parents>
  <author>
    <name>Michael Fellinger</name>
    <email>m.fellinger@gmail.com</email>
  </author>
  <url>http://github.com/manveru/ramaze/commit/efe2b905650df04286519359557819090cc91287</url>
  <id>efe2b905650df04286519359557819090cc91287</id>
  <committed-date>2009-07-03T01:49:55-07:00</committed-date>
  <authored-date>2009-07-03T01:49:55-07:00</authored-date>
  <message>Merge branch 'master' into modular-bin

* master:
  Increase the time we wait for the cache ttl to expire
  Recognize Spec precondition and Spec require in bacon task
  Add the ramaze/lib directory to -I on bacon task
  Clean up the spec middleware mess, it's _always_ m.run(Ramaze::AppMap)
  Add missing rack-contrib development dependency
  Now even obfuscate_mail should work on 1.8 again
  Layout helper asks for #to_hash, so it should use it. Also don't rely on Enumerable#first, not in 1.8.6
  Don't rely on order in less spec
  Improve gem_setup task
  Update announcement
  Let the bacon task pass -I with the root directory
  Fix the require path for bin/ramaze spec
  Refactor AddressableRoute, use instance variable instead of constant
  Fix annoying behaviour when '/' location is assigned to an app earlier loaded, apps after it would overwrite the location. Now only :pristine uses it by default
  Remove ContentLength middleware from default stacks, all Rack handlers do that already
  Fix the misc/css example
  Use absolute path when spec requires spec/helper, '.' will be removed from the load path in 1.9.2
  Remove deprecated cache method, add basic doc for cache_action</message>
  <tree>4d7ab0f3975f4ff2bafe91235f7a33e8be3106d6</tree>
  <committer>
    <name>Michael Fellinger</name>
    <email>m.fellinger@gmail.com</email>
  </committer>
</commit>
