merb-core 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/Rakefile +22 -13
  2. data/lib/merb-core/bootloader.rb +3 -2
  3. data/lib/merb-core/config.rb +1 -1
  4. data/lib/merb-core/constants.rb +3 -1
  5. data/lib/merb-core/controller/abstract_controller.rb +25 -39
  6. data/lib/merb-core/controller/exceptions.rb +14 -16
  7. data/lib/merb-core/controller/merb_controller.rb +2 -2
  8. data/lib/merb-core/controller/mime.rb +2 -1
  9. data/lib/merb-core/controller/mixins/render.rb +12 -0
  10. data/lib/merb-core/controller/mixins/responder.rb +31 -7
  11. data/lib/merb-core/core_ext/hash.rb +7 -0
  12. data/lib/merb-core/core_ext/kernel.rb +31 -34
  13. data/lib/merb-core/core_ext.rb +1 -0
  14. data/lib/merb-core/dispatch/default_exception/default_exception.rb +3 -3
  15. data/lib/merb-core/dispatch/dispatcher.rb +128 -135
  16. data/lib/merb-core/dispatch/request.rb +11 -11
  17. data/lib/merb-core/dispatch/router/behavior.rb +6 -6
  18. data/lib/merb-core/dispatch/router.rb +5 -5
  19. data/lib/merb-core/logger.rb +203 -202
  20. data/lib/merb-core/rack/application.rb +19 -5
  21. data/lib/merb-core/rack/middleware/conditional_get.rb +23 -0
  22. data/lib/merb-core/rack/middleware/content_length.rb +18 -0
  23. data/lib/merb-core/rack/middleware/tracer.rb +20 -0
  24. data/lib/merb-core/rack/middleware.rb +1 -7
  25. data/lib/merb-core/rack.rb +19 -16
  26. data/lib/merb-core/test/matchers/route_matchers.rb +1 -0
  27. data/lib/merb-core/test/matchers/view_matchers.rb +36 -0
  28. data/lib/merb-core/test/run_specs.rb +2 -1
  29. data/lib/merb-core/version.rb +1 -1
  30. data/lib/merb-core.rb +39 -33
  31. data/spec/private/config/merb_spec.rb +34 -0
  32. data/spec/private/dispatch/fixture/log/merb_test.log +372 -0
  33. data/spec/private/router/fixture/log/merb_test.log +42 -0
  34. data/spec/public/abstract_controller/controllers/filters.rb +50 -1
  35. data/spec/public/abstract_controller/filter_spec.rb +25 -0
  36. data/spec/public/controller/base_spec.rb +41 -1
  37. data/spec/public/controller/controllers/base.rb +16 -0
  38. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb +1 -1
  39. data/spec/public/controller/dispatcher_spec.rb +24 -25
  40. data/spec/public/controller/responder_spec.rb +6 -0
  41. data/spec/public/core_ext/kernel_spec.rb +79 -0
  42. data/spec/public/directory_structure/directory/log/merb_test.log +245 -0
  43. data/spec/public/rack/conditinal_get_middleware_spec.rb +139 -0
  44. data/spec/public/rack/rack_middleware_spec.rb +99 -0
  45. data/spec/public/rack/shared_example_groups.rb +35 -0
  46. data/spec/public/reloading/directory/log/merb_test.log +40 -0
  47. data/spec/public/request/request_spec.rb +0 -5
  48. data/spec/public/router/fixture/log/merb_test.log +348 -0
  49. data/spec/public/test/route_matchers_spec.rb +4 -0
  50. data/spec/spec_helper.rb +7 -1
  51. metadata +42 -5
  52. data/spec/private/plugins/plugin_spec.rb +0 -166
@@ -188,6 +188,55 @@ module Merb::Test::Fixtures
188
188
  def foo(bar,baz)
189
189
  bar == "bar" && baz == "baz"
190
190
  end
191
- end
191
+ end
192
+
193
+ class BeforeFilterWithThrowHalt < Testing
194
+ before do
195
+ throw :halt, "Halt thrown"
196
+ end
197
+
198
+ def index
199
+ "Halt not thrown"
200
+ end
201
+ end
202
+
203
+ class BeforeFilterWithThrowProc < Testing
204
+ before do
205
+ throw :halt, Proc.new { "Proc thrown" }
206
+ end
207
+
208
+ def index
209
+ "Proc not thrown"
210
+ end
211
+ end
212
+
213
+ class ThrowNil < Testing
214
+ before do
215
+ throw :halt, nil
216
+ end
217
+
218
+ def index
219
+ "Awesome"
220
+ end
221
+ end
222
+
223
+ class FilterChainError < Testing
224
+ before do
225
+ throw :halt, Merb
226
+ end
227
+
228
+ def index
229
+ "Awesome"
230
+ end
231
+ end
232
+
233
+ class Benchmarking < Testing
234
+ before {}
235
+ after {}
236
+
237
+ def index
238
+ "Awesome"
239
+ end
240
+ end
192
241
  end
193
242
  end
@@ -9,6 +9,7 @@
9
9
  # Merb::AbstractController#_dispatch(action<~to_s>)
10
10
 
11
11
  require File.join(File.dirname(__FILE__), "spec_helper")
12
+ AbstractControllers = Merb::Test::Fixtures::Abstract
12
13
 
13
14
  describe Merb::AbstractController, " should support before and after filters" do
14
15
 
@@ -95,9 +96,33 @@ describe Merb::AbstractController, " should support before and after filters" do
95
96
  dispatch_should_make_body("TestBeforeFilterWithArguments", "index action")
96
97
  end
97
98
 
99
+ it "should support throwing :halt to block a filter chain" do
100
+ dispatch_should_make_body("BeforeFilterWithThrowHalt", "Halt thrown")
101
+ end
102
+
103
+ it "should support throwing a proc in filters" do
104
+ dispatch_should_make_body("BeforeFilterWithThrowProc", "Proc thrown")
105
+ end
106
+
107
+ it "should raise an InternalServerError if :halt is thrown with unexpected type" do
108
+ calling { dispatch_to(AbstractControllers::FilterChainError, :index) }.should(
109
+ raise_error(ArgumentError, /Threw :halt, Merb. Expected String/))
110
+ end
111
+
112
+ it "should print useful HTML if throw :halt is called with nil" do
113
+ dispatch_should_make_body("ThrowNil",
114
+ "<html><body><h1>Filter Chain Halted!</h1></body></html>")
115
+ end
116
+
98
117
  it "should inherit before filters" do
99
118
  dispatch_should_make_body("FilterChild2", "Before Limited", :limited)
100
119
  end
120
+
121
+ it "should provide benchmarks" do
122
+ controller = dispatch_to(AbstractControllers::Benchmarking, :index)
123
+ controller._benchmarks[:before_filters_time].should be_kind_of(Numeric)
124
+ controller._benchmarks[:after_filters_time].should be_kind_of(Numeric)
125
+ end
101
126
 
102
127
  it "should not get contaminated by cousins" do
103
128
  dispatch_should_make_body("FilterChild2", "Before Index")
@@ -1,6 +1,7 @@
1
1
  require File.join(File.dirname(__FILE__), "spec_helper")
2
+ Controllers = Merb::Test::Fixtures::Controllers
2
3
 
3
- describe Merb::Controller, " callable actions" do
4
+ describe Merb::Controller, "callable actions" do
4
5
 
5
6
  before do
6
7
  Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
@@ -38,3 +39,42 @@ describe Merb::Controller, " callable actions" do
38
39
  end
39
40
 
40
41
  end
42
+
43
+ describe Merb::Controller, "filtered params" do
44
+ it "removes filtered parameters from the log" do
45
+ out = with_level(:info) do
46
+ dispatch_to(Controllers::FilteredParams, :index, :username => "Awesome", :password => "sekrit")
47
+ end
48
+ out.should include_log(/Params:.*"username"\s*=>\s*"Awesome"/)
49
+ out.should_not include_log(/"password"/)
50
+ end
51
+
52
+ it "doesn't put the parameters in the log in levels higher than info" do
53
+ out = with_level(:warn) do
54
+ dispatch_to(Controllers::FilteredParams, :index, :username => "Awesome", :password => "sekrit")
55
+ end
56
+ out.should_not include_log(/Params/)
57
+ end
58
+ end
59
+
60
+ describe Merb::Controller, "records benchmarks" do
61
+ it "collects benchmarks for the amount of time the action took" do
62
+ controller = dispatch_to(Controllers::Base, :index)
63
+ controller._benchmarks[:action_time].should be_kind_of(Numeric)
64
+ end
65
+ end
66
+
67
+ describe Merb::Controller, "handles invalid actions" do
68
+ it "raises if an action was not found" do
69
+ calling { controller = dispatch_to(Controllers::Base, :awesome) }.
70
+ should raise_error(Merb::ControllerExceptions::ActionNotFound,
71
+ /Action.*awesome.*was not found in.*Base/)
72
+ end
73
+ end
74
+
75
+ describe Merb::Controller, "handles invalid status codes" do
76
+ it "raises if an invalid status is set" do
77
+ calling { dispatch_to(Controllers::SetStatus, :index) }.
78
+ should raise_error(ArgumentError, /was.*String/)
79
+ end
80
+ end
@@ -31,6 +31,22 @@ module Merb::Test::Fixtures
31
31
  end
32
32
  hide_action :hidden
33
33
  end
34
+
35
+ class FilteredParams < Testing
36
+ def index
37
+ "Index"
38
+ end
39
+
40
+ def self._filter_params(params)
41
+ params.reject {|k,v| k == "password" }
42
+ end
43
+ end
44
+
45
+ class SetStatus < Testing
46
+ def index
47
+ self.status = "awesome"
48
+ end
49
+ end
34
50
 
35
51
  end
36
52
  end
@@ -1 +1 @@
1
- This should not be rendered
1
+ HTML: Wins Over XML If Both Are Specified
@@ -7,12 +7,6 @@ describe Merb::Dispatcher do
7
7
  include Merb::Test::Rspec::ControllerMatchers
8
8
  include Merb::Test::Rspec::ViewMatchers
9
9
 
10
- def with_level(level)
11
- Merb.logger = Merb::Logger.new(StringIO.new, level)
12
- yield
13
- Merb.logger
14
- end
15
-
16
10
  def dispatch(url)
17
11
  Merb::Dispatcher.handle(request_for(url))
18
12
  end
@@ -38,6 +32,11 @@ describe Merb::Dispatcher do
38
32
  controller.body.should == "Dispatched"
39
33
  end
40
34
 
35
+ it "has the correct status code" do
36
+ controller = dispatch(@url)
37
+ controller.status.should == 200
38
+ end
39
+
41
40
  it "sets the Request#params to include the route params" do
42
41
  controller = dispatch(@url)
43
42
  controller.request.params.should ==
@@ -93,11 +92,11 @@ describe Merb::Dispatcher do
93
92
  it "reports that it is redirecting via Logger#info" do
94
93
  with_level(:info) do
95
94
  dispatch(@url)
96
- end.should include_log("Dispatcher redirecting to: /foo")
95
+ end.should include_log("Dispatcher redirecting to: /foo (301)")
97
96
 
98
97
  with_level(:warn) do
99
98
  dispatch(@url)
100
- end.should_not include_log("Dispatcher redirecting to: /foo")
99
+ end.should_not include_log("Dispatcher redirecting to: /foo (301)")
101
100
  end
102
101
 
103
102
  it "sets the status correctly" do
@@ -270,11 +269,11 @@ describe Merb::Dispatcher do
270
269
  end
271
270
 
272
271
  it "renders the default exception template" do
273
- @controller.body.should have_selector("h1:contains(Standard Error)")
274
- @controller.body.should have_selector("h2:contains(Big Error)")
275
-
276
- @controller.body.should have_selector("h1:contains(Load Error)")
277
- @controller.body.should have_selector("h2:contains(Big Error)")
272
+ @controller.body.should have_xpath("//h1[contains(.,'Standard Error')]")
273
+ @controller.body.should have_xpath("//h2[contains(.,'Big error')]")
274
+
275
+ @controller.body.should have_xpath("//h1[contains(.,'Load Error')]")
276
+ @controller.body.should have_xpath("//h2[contains(.,'Big error')]")
278
277
  end
279
278
 
280
279
  it "returns a 500 status code" do
@@ -311,8 +310,8 @@ describe Merb::Dispatcher do
311
310
  end
312
311
 
313
312
  it "renders the default exception template" do
314
- @controller.body.should have_selector("h1:contains(Not Found)")
315
- @controller.body.should have_selector("h2:contains(Somehow, the thing)")
313
+ @controller.body.should have_xpath("//h1[contains(.,'Not Found')]")
314
+ @controller.body.should have_xpath("//h2[contains(.,'Somehow, the thing')]")
316
315
  end
317
316
 
318
317
  it "returns a 404 status code" do
@@ -348,7 +347,7 @@ describe Merb::Dispatcher do
348
347
  end
349
348
 
350
349
  it "renders the default exception template" do
351
- @controller.body.should have_selector("h1:contains(Something failed here)")
350
+ @controller.body.should have_xpath("//h2[contains(.,'Something failed here')]")
352
351
  end
353
352
 
354
353
  it "returns a 500 status code" do
@@ -389,18 +388,18 @@ describe Merb::Dispatcher do
389
388
  end
390
389
 
391
390
  it "renders a list of links to the traces" do
392
- @body.should have_selector("li a[@href=#exception_0]")
393
- @body.should have_selector("li a[@href=#exception_1]")
394
- @body.should have_selector("li a[@href=#exception_2]")
391
+ @body.should have_xpath("//li//a[@href='#exception_0']")
392
+ @body.should have_xpath("//li//a[@href='#exception_1']")
393
+ @body.should have_xpath("//li//a[@href='#exception_2']")
395
394
  end
396
395
 
397
396
  it "renders the default exception template" do
398
- @body.should have_selector("h1:contains(Load Error)")
399
- @body.should have_selector("h2:contains(In the controller)")
400
- @body.should have_selector("h1:contains(Standard Error)")
401
- @body.should have_selector("h2:contains(StandardError)")
402
- @body.should have_selector("h1:contains(Exception)")
403
- @body.should have_selector("h2:contains(Exception)")
397
+ @body.should have_xpath("//h1[contains(.,'Load Error')]")
398
+ @body.should have_xpath("//h2[contains(.,'In the controller')]")
399
+ @body.should have_xpath("//h1[contains(.,'Standard Error')]")
400
+ @body.should have_xpath("//h2[contains(.,'StandardError')]")
401
+ @body.should have_xpath("//h1[contains(.,'Exception')]")
402
+ @body.should have_xpath("//h2[contains(.,'Exception')]")
404
403
  end
405
404
 
406
405
  it "returns a 500 status code" do
@@ -47,6 +47,12 @@ describe Merb::Controller, " responds" do
47
47
  controller.body.should == "HTML: Multi"
48
48
  end
49
49
 
50
+ it "should pick application/xhtml+xml when both application/xml and application/xhtml+xml are available" do
51
+ controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassProvides,
52
+ :index, {}, :http_accept => "application/xml,application/xhtml+xml")
53
+ controller.body.should == "HTML: Wins Over XML If Both Are Specified"
54
+ end
55
+
50
56
  it "should use the first mime-type when accepting anything */*, even if something unprovidable comes first" do
51
57
  controller = dispatch_to(Merb::Test::Fixtures::Controllers::HtmlDefault, :index, {}, :http_accept => "application/json, */*")
52
58
  controller.body.should == "HTML: Default"
@@ -6,4 +6,83 @@ describe Kernel, "#dependency" do
6
6
  dependency "core_ext_dependency"
7
7
  defined?(CoreExtDependency).should_not be_nil
8
8
  end
9
+ end
10
+
11
+ describe Kernel, "#use_orm" do
12
+
13
+ before do
14
+ Kernel.stub!(:dependency)
15
+ Merb.orm = :none # reset orm
16
+ end
17
+
18
+ it "should set Merb.orm" do
19
+ Kernel.use_orm(:activerecord)
20
+ Merb.orm.should == :activerecord
21
+ end
22
+
23
+ it "should add the the orm plugin as a dependency" do
24
+ Kernel.should_receive(:dependency).with('merb_activerecord')
25
+ Kernel.use_orm(:activerecord)
26
+ end
27
+
28
+ end
29
+
30
+ describe Kernel, "#use_template_engine" do
31
+
32
+ before do
33
+ Kernel.stub!(:dependency)
34
+ Merb.template_engine = :erb # reset orm
35
+ end
36
+
37
+ it "should set Merb.template_engine" do
38
+ Kernel.use_template_engine(:haml)
39
+ Merb.template_engine.should == :haml
40
+ end
41
+
42
+ it "should add merb-haml as a dependency for :haml" do
43
+ Kernel.should_receive(:dependency).with('merb-haml')
44
+ Kernel.use_template_engine(:haml)
45
+ end
46
+
47
+ it "should add merb-builder as a dependency for :builder" do
48
+ Kernel.should_receive(:dependency).with('merb-builder')
49
+ Kernel.use_template_engine(:builder)
50
+ end
51
+
52
+ it "should add no dependency for :erb" do
53
+ Kernel.should_not_receive(:dependency)
54
+ Kernel.use_template_engine(:erb)
55
+ end
56
+
57
+ it "should add other plugins as a dependency" do
58
+ Kernel.should_receive(:dependency).with('merb_liquid')
59
+ Kernel.use_template_engine(:liquid)
60
+ end
61
+
62
+ end
63
+
64
+ describe Kernel, "#use_test" do
65
+
66
+ before do
67
+ Merb.test_framework = :rspec # reset orm
68
+ Merb.stub!(:dependencies)
69
+ end
70
+
71
+ it "should set Merb.test_framework" do
72
+ Kernel.use_test(:test_unit)
73
+ Merb.test_framework.should == :test_unit
74
+ end
75
+
76
+ it "should not require test dependencies when not in 'test' env" do
77
+ Merb.stub!(:env).and_return("development")
78
+ Kernel.should_not_receive(:dependencies)
79
+ Merb.use_test(:test_unit, 'hpricot', 'webrat')
80
+ end
81
+
82
+ it "should require test dependencies when in 'test' env" do
83
+ Merb.stub!(:env).and_return("test")
84
+ Kernel.should_receive(:dependencies).with(["hpricot", "webrat"])
85
+ Merb.use_test(:test_unit, 'hpricot', 'webrat')
86
+ end
87
+
9
88
  end
@@ -3768,3 +3768,248 @@ Restarting Worker Thread
3768
3768
  ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000928}
3769
3769
  ~ Params: {"action"=>"template", "controller"=>"custom"}
3770
3770
  ~ {:after_filters_time=>1.2e-05, :before_filters_time=>1.1e-05, :action_time=>0.001381}
3771
+ ~ Not Using Sessions
3772
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3773
+ ~ {:after_filters_time=>1.8e-05, :before_filters_time=>1.9e-05, :action_time=>0.000195}
3774
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3775
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>8.0e-06, :action_time=>0.004358}
3776
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3777
+ ~ {:after_filters_time=>2.1e-05, :before_filters_time=>1.3e-05, :action_time=>0.022162}
3778
+ ~ Not Using Sessions
3779
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3780
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>4.4e-05, :action_time=>0.000203}
3781
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3782
+ ~ {:after_filters_time=>5.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000694}
3783
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3784
+ ~ {:after_filters_time=>1.2e-05, :before_filters_time=>1.0e-05, :action_time=>0.000773}
3785
+ ~ Not Using Sessions
3786
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3787
+ ~ {:after_filters_time=>1.8e-05, :before_filters_time=>2.0e-05, :action_time=>0.000211}
3788
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3789
+ ~ {:after_filters_time=>7.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000791}
3790
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3791
+ ~ {:after_filters_time=>1.2e-05, :before_filters_time=>1.3e-05, :action_time=>0.000861}
3792
+ ~ Not Using Sessions
3793
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3794
+ ~ {:after_filters_time=>1.6e-05, :before_filters_time=>1.9e-05, :action_time=>0.000637}
3795
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3796
+ ~ {:after_filters_time=>7.0e-06, :before_filters_time=>7.0e-06, :action_time=>0.000811}
3797
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3798
+ ~ {:after_filters_time=>1.6e-05, :before_filters_time=>1.2e-05, :action_time=>0.002617}
3799
+ ~ Not Using Sessions
3800
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3801
+ ~ {:action_time=>0.000202, :after_filters_time=>1.5e-05, :before_filters_time=>1.8e-05}
3802
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3803
+ ~ {:action_time=>0.001615, :after_filters_time=>7.0e-06, :before_filters_time=>6.0e-06}
3804
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3805
+ ~ {:action_time=>0.025443, :after_filters_time=>4.9e-05, :before_filters_time=>1.2e-05}
3806
+ ~ Not Using Sessions
3807
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3808
+ ~ {:action_time=>0.000168, :after_filters_time=>1.3e-05, :before_filters_time=>1.6e-05}
3809
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3810
+ ~ {:action_time=>0.000671, :after_filters_time=>7.0e-06, :before_filters_time=>6.0e-06}
3811
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3812
+ ~ {:action_time=>0.000707, :after_filters_time=>1.0e-05, :before_filters_time=>1.0e-05}
3813
+ ~ Not Using Sessions
3814
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3815
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.7e-05, :action_time=>0.000287}
3816
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3817
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>8.0e-06, :action_time=>0.000608}
3818
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3819
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.1e-05, :action_time=>0.000651}
3820
+ ~ Not Using Sessions
3821
+ ~ Not Using Sessions
3822
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3823
+ ~ {:action_time=>0.000192, :after_filters_time=>1.5e-05, :before_filters_time=>1.9e-05}
3824
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3825
+ ~ {:action_time=>0.036927, :after_filters_time=>9.0e-06, :before_filters_time=>6.0e-06}
3826
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3827
+ ~ {:action_time=>0.001957, :after_filters_time=>1.2e-05, :before_filters_time=>1.2e-05}
3828
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3829
+ ~ {:action_time=>0.000188, :after_filters_time=>1.6e-05, :before_filters_time=>1.9e-05}
3830
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3831
+ ~ {:action_time=>0.004562, :after_filters_time=>7.0e-06, :before_filters_time=>6.0e-06}
3832
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3833
+ ~ {:action_time=>0.002057, :after_filters_time=>1.1e-05, :before_filters_time=>1.4e-05}
3834
+ ~ Not Using Sessions
3835
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3836
+ ~ {:action_time=>0.000172, :after_filters_time=>1.4e-05, :before_filters_time=>1.7e-05}
3837
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3838
+ ~ {:action_time=>0.000685, :after_filters_time=>6.0e-06, :before_filters_time=>5.0e-06}
3839
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3840
+ ~ {:action_time=>0.001134, :after_filters_time=>1.7e-05, :before_filters_time=>1.4e-05}
3841
+ ~ Not Using Sessions
3842
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3843
+ ~ {:action_time=>0.000175, :after_filters_time=>1.4e-05, :before_filters_time=>1.6e-05}
3844
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3845
+ ~ {:action_time=>0.000924, :after_filters_time=>7.0e-06, :before_filters_time=>5.0e-06}
3846
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3847
+ ~ {:action_time=>0.000805, :after_filters_time=>1.0e-05, :before_filters_time=>1.1e-05}
3848
+ ~ Not Using Sessions
3849
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3850
+ ~ {:action_time=>0.000177, :after_filters_time=>1.3e-05, :before_filters_time=>1.7e-05}
3851
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3852
+ ~ {:action_time=>0.000723, :after_filters_time=>6.0e-06, :before_filters_time=>5.0e-06}
3853
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3854
+ ~ {:action_time=>0.001328, :after_filters_time=>1.2e-05, :before_filters_time=>1.0e-05}
3855
+ ~ Not Using Sessions
3856
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3857
+ ~ {:action_time=>0.000169, :after_filters_time=>1.4e-05, :before_filters_time=>1.6e-05}
3858
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3859
+ ~ {:action_time=>0.000677, :after_filters_time=>6.0e-06, :before_filters_time=>5.0e-06}
3860
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3861
+ ~ {:action_time=>0.000846, :after_filters_time=>1.1e-05, :before_filters_time=>1.0e-05}
3862
+ ~ Not Using Sessions
3863
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3864
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>1.6e-05, :action_time=>0.000187}
3865
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3866
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000533}
3867
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3868
+ ~ {:after_filters_time=>1.0e-05, :before_filters_time=>1.1e-05, :action_time=>0.000606}
3869
+ ~ Not Using Sessions
3870
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3871
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>1.8e-05, :action_time=>0.000185}
3872
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3873
+ ~ {:after_filters_time=>5.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000668}
3874
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3875
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.1e-05, :action_time=>0.000615}
3876
+ ~ Not Using Sessions
3877
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3878
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.7e-05, :action_time=>0.000192}
3879
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3880
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000556}
3881
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3882
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.1e-05, :action_time=>0.00062}
3883
+ ~ Not Using Sessions
3884
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3885
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.7e-05, :action_time=>0.000167}
3886
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3887
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000671}
3888
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3889
+ ~ {:after_filters_time=>1.0e-05, :before_filters_time=>1.0e-05, :action_time=>0.00067}
3890
+ ~ Not Using Sessions
3891
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3892
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.6e-05, :action_time=>0.000173}
3893
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3894
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000644}
3895
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3896
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.0e-05, :action_time=>0.000677}
3897
+ ~ Not Using Sessions
3898
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3899
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>1.7e-05, :action_time=>0.000174}
3900
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3901
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000636}
3902
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3903
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.0e-05, :action_time=>0.000644}
3904
+ ~ Not Using Sessions
3905
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3906
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.7e-05, :action_time=>0.000176}
3907
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3908
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000642}
3909
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3910
+ ~ {:after_filters_time=>1.0e-05, :before_filters_time=>1.0e-05, :action_time=>0.000653}
3911
+ ~ Not Using Sessions
3912
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3913
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>1.7e-05, :action_time=>0.000173}
3914
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3915
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000649}
3916
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3917
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.1e-05, :action_time=>0.000649}
3918
+ ~ Not Using Sessions
3919
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3920
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.7e-05, :action_time=>0.000171}
3921
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3922
+ ~ {:after_filters_time=>5.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000626}
3923
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3924
+ ~ {:after_filters_time=>1.0e-05, :before_filters_time=>1.0e-05, :action_time=>0.000699}
3925
+ ~ Not Using Sessions
3926
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3927
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.8e-05, :action_time=>0.00025}
3928
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3929
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000638}
3930
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3931
+ ~ {:after_filters_time=>1.3e-05, :before_filters_time=>1.0e-05, :action_time=>0.000778}
3932
+ ~ Not Using Sessions
3933
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3934
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.7e-05, :action_time=>0.000176}
3935
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3936
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000663}
3937
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3938
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.0e-05, :action_time=>0.00066}
3939
+ ~ Not Using Sessions
3940
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3941
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.8e-05, :action_time=>0.000174}
3942
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3943
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000639}
3944
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3945
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.0e-05, :action_time=>0.000645}
3946
+ ~ Not Using Sessions
3947
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3948
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>1.8e-05, :action_time=>0.000174}
3949
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3950
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000639}
3951
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3952
+ ~ {:after_filters_time=>1.0e-05, :before_filters_time=>1.1e-05, :action_time=>0.000648}
3953
+ ~ Not Using Sessions
3954
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3955
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>1.7e-05, :action_time=>0.000173}
3956
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3957
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000672}
3958
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3959
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.0e-05, :action_time=>0.00065}
3960
+ ~ Not Using Sessions
3961
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3962
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>1.7e-05, :action_time=>0.000173}
3963
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3964
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000647}
3965
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3966
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.1e-05, :action_time=>0.000711}
3967
+ ~ Not Using Sessions
3968
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3969
+ ~ {:after_filters_time=>1.6e-05, :before_filters_time=>2.0e-05, :action_time=>0.000223}
3970
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3971
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>7.0e-06, :action_time=>0.000735}
3972
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3973
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.1e-05, :action_time=>0.000678}
3974
+ ~ Not Using Sessions
3975
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3976
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.8e-05, :action_time=>0.000196}
3977
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3978
+ ~ {:after_filters_time=>7.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000743}
3979
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3980
+ ~ {:after_filters_time=>1.2e-05, :before_filters_time=>1.2e-05, :action_time=>0.000783}
3981
+ ~ Not Using Sessions
3982
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3983
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.7e-05, :action_time=>0.000177}
3984
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3985
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000824}
3986
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3987
+ ~ {:after_filters_time=>1.2e-05, :before_filters_time=>1.1e-05, :action_time=>0.000713}
3988
+ ~ Not Using Sessions
3989
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3990
+ ~ {:after_filters_time=>1.5e-05, :before_filters_time=>1.8e-05, :action_time=>0.000198}
3991
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3992
+ ~ {:after_filters_time=>7.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000909}
3993
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
3994
+ ~ {:after_filters_time=>1.3e-05, :before_filters_time=>1.2e-05, :action_time=>0.000948}
3995
+ ~ Not Using Sessions
3996
+ ~ Params: {"action"=>"string", "controller"=>"base"}
3997
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>1.6e-05, :action_time=>0.00017}
3998
+ ~ Params: {"action"=>"template", "controller"=>"base"}
3999
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000654}
4000
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
4001
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.0e-05, :action_time=>0.000698}
4002
+ ~ Not Using Sessions
4003
+ ~ Params: {"action"=>"string", "controller"=>"base"}
4004
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>1.7e-05, :action_time=>0.000169}
4005
+ ~ Params: {"action"=>"template", "controller"=>"base"}
4006
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>6.0e-06, :action_time=>0.000642}
4007
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
4008
+ ~ {:after_filters_time=>1.1e-05, :before_filters_time=>1.0e-05, :action_time=>0.000705}
4009
+ ~ Not Using Sessions
4010
+ ~ Params: {"action"=>"string", "controller"=>"base"}
4011
+ ~ {:after_filters_time=>1.4e-05, :before_filters_time=>1.7e-05, :action_time=>0.000175}
4012
+ ~ Params: {"action"=>"template", "controller"=>"base"}
4013
+ ~ {:after_filters_time=>6.0e-06, :before_filters_time=>5.0e-06, :action_time=>0.000645}
4014
+ ~ Params: {"action"=>"template", "controller"=>"custom"}
4015
+ ~ {:after_filters_time=>1.0e-05, :before_filters_time=>1.0e-05, :action_time=>0.000657}