Setting the env in test
authorBlake Mizerany <blake@blake.local>
Thu, 17 Jan 2008 02:16:41 +0000 (16 18:16 -0800)
committerBlake Mizerany <blake@blake.local>
Thu, 17 Jan 2008 02:16:41 +0000 (16 18:16 -0800)
lib/sinatra.rb
lib/sinatra/test/unit.rb

index f20fc0f..e2bf3c8 100644 (file)
@@ -260,7 +260,8 @@ module Sinatra
     
   class Application
     
-    attr_reader :events, :layouts, :default_options
+    attr_reader :events, :layouts, :default_options, :filters
+    attr_writer :options
     
     def self.default_options
       @@default_options ||= {
@@ -286,6 +287,7 @@ module Sinatra
         
     def initialize
       @events = Hash.new { |hash, key| hash[key] = [] }
+      @filters = Hash.new { |hash, key| hash[key] = [] }
       @layouts = Hash.new
       load_options!
     end
@@ -303,6 +305,10 @@ module Sinatra
       events[:errors][code] = Error.new(code, &b)
     end
     
+    def define_filter(type, &b)
+      filters[:before] << b
+    end
+    
     def static
       @static ||= Static.new
     end
@@ -330,7 +336,7 @@ module Sinatra
     def options
       @options ||= OpenStruct.new(default_options)
     end
-    
+        
     def call(env)
       result = lookup(env)
       context = EventContext.new(
@@ -341,6 +347,7 @@ module Sinatra
       begin
         context.status(result.status)
         returned = catch(:halt) do
+          filters[:before].each { |f| context.instance_eval(&f) }
           [:complete, context.instance_eval(&result.block)]
         end
         body = returned.to_result(context)
@@ -380,6 +387,10 @@ def delete(path, options ={}, &b)
   Sinatra.application.define_event(:delete, path, options, &b)
 end
 
+def before(&b)
+  Sinatra.application.define_filter(:before, &b)
+end
+
 def helpers(&b)
   Sinatra::EventContext.class_eval(&b)
 end
@@ -516,11 +527,6 @@ at_exit do
   Sinatra.run if Sinatra.application.options.run
 end
 
-ENV['SINATRA_ENV'] = 'test' if $0 =~ /_test\.rb$/
-Sinatra::Application.default_options.merge!(
-  :env => (ENV['SINATRA_ENV'] || 'development').to_sym
-)
-
 configures :development do
   
   get '/sinatra_custom_images/:image.png' do
index dab139f..1bb0eb5 100644 (file)
@@ -4,5 +4,8 @@ require File.dirname(__FILE__) + '/methods'
 Test::Unit::TestCase.send(:include, Sinatra::Test::Methods)
 
 Sinatra::Application.default_options.merge!(
+  :env => :test,
   :run => false
 )
+
+Sinatra.application.options = nil