merb-core 0.9.4 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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}