merb-core 0.9.6 → 0.9.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +67 -0
- data/CONTRIBUTORS +1 -0
- data/PUBLIC_CHANGELOG +34 -0
- data/Rakefile +7 -4
- data/bin/merb +1 -31
- data/lib/merb-core.rb +17 -6
- data/lib/merb-core/config.rb +0 -7
- data/lib/merb-core/controller/abstract_controller.rb +6 -3
- data/lib/merb-core/dispatch/cookies.rb +11 -10
- data/lib/merb-core/dispatch/dispatcher.rb +11 -5
- data/lib/merb-core/dispatch/request.rb +7 -2
- data/lib/merb-core/dispatch/session.rb +33 -17
- data/lib/merb-core/dispatch/session/container.rb +19 -9
- data/lib/merb-core/dispatch/session/cookie.rb +27 -12
- data/lib/merb-core/dispatch/session/memcached.rb +47 -27
- data/lib/merb-core/dispatch/session/memory.rb +10 -6
- data/lib/merb-core/dispatch/session/store_container.rb +25 -20
- data/lib/merb-core/test/helpers/request_helper.rb +6 -3
- data/lib/merb-core/test/helpers/route_helper.rb +1 -1
- data/lib/merb-core/test/matchers/view_matchers.rb +5 -1
- data/lib/merb-core/version.rb +1 -1
- data/spec/private/dispatch/fixture/log/merb_test.log +144 -0
- data/spec/private/router/fixture/log/merb_test.log +16 -0
- data/spec/public/controller/controllers/cookies.rb +14 -3
- data/spec/public/controller/cookies_spec.rb +53 -10
- data/spec/public/controller/url_spec.rb +6 -0
- data/spec/public/directory_structure/directory/log/merb_test.log +112 -0
- data/spec/public/reloading/directory/log/merb_test.log +16 -0
- data/spec/public/request/request_spec.rb +19 -10
- data/spec/public/router/fixture/log/merb_test.log +224 -0
- data/spec/public/session/controllers/sessions.rb +4 -0
- data/spec/public/session/memcached_session_spec.rb +2 -2
- data/spec/public/session/multiple_sessions_spec.rb +2 -2
- data/spec/public/session/session_spec.rb +15 -0
- data/spec/public/test/request_helper_spec.rb +21 -0
- data/spec/public/test/route_helper_spec.rb +7 -0
- metadata +6 -17
- data/lib/merb-core/script.rb +0 -112
@@ -37,15 +37,9 @@ module Merb
|
|
37
37
|
# ==== Parameters
|
38
38
|
# session_id<String>:: A unique identifier for this session.
|
39
39
|
def initialize(session_id)
|
40
|
+
@_destroy = false
|
40
41
|
self.session_id = session_id
|
41
42
|
end
|
42
|
-
|
43
|
-
# Teardown and/or persist the current session.
|
44
|
-
#
|
45
|
-
# ==== Parameters
|
46
|
-
# request<Merb::Request>:: The Merb::Request that came in from Rack.
|
47
|
-
def finalize(request)
|
48
|
-
end
|
49
43
|
|
50
44
|
# Assign a new session_id.
|
51
45
|
#
|
@@ -56,9 +50,25 @@ module Merb
|
|
56
50
|
@session_id = sid
|
57
51
|
end
|
58
52
|
|
59
|
-
#
|
60
|
-
|
53
|
+
# Teardown and/or persist the current session.
|
54
|
+
#
|
55
|
+
# If @_destroy is true, clear out the session completely, including
|
56
|
+
# removal of the session cookie itself.
|
57
|
+
#
|
58
|
+
# ==== Parameters
|
59
|
+
# request<Merb::Request>:: The Merb::Request that came in from Rack.
|
60
|
+
def finalize(request)
|
61
61
|
end
|
62
62
|
|
63
|
+
# Destroy the current session - clears data and removes session cookie.
|
64
|
+
def clear!
|
65
|
+
@_destroy = true
|
66
|
+
self.clear
|
67
|
+
end
|
68
|
+
|
69
|
+
# Regenerate the session_id.
|
70
|
+
def regenerate
|
71
|
+
end
|
72
|
+
|
63
73
|
end
|
64
74
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'base64' # to convert Marshal.dump to ASCII
|
2
2
|
require 'openssl' # to generate the HMAC message digest
|
3
|
-
# Most of this code is taken from bitsweat's implementation in rails
|
4
3
|
module Merb
|
5
4
|
|
6
5
|
# If you have more than 4K of session data or don't want your data to be
|
@@ -45,7 +44,7 @@ module Merb
|
|
45
44
|
self.new(Merb::SessionMixin.rand_uuid, "", Merb::Request._session_secret_key)
|
46
45
|
end
|
47
46
|
|
48
|
-
#
|
47
|
+
# Set up a new session on request: make it available on request instance.
|
49
48
|
#
|
50
49
|
# ==== Parameters
|
51
50
|
# request<Merb::Request>:: The Merb::Request that came in from Rack.
|
@@ -72,8 +71,9 @@ module Merb
|
|
72
71
|
def initialize(session_id, cookie, secret)
|
73
72
|
super session_id
|
74
73
|
if secret.blank? || secret.length < 16
|
75
|
-
|
76
|
-
|
74
|
+
msg = "You must specify a session_secret_key in your init file, and it must be at least 16 characters"
|
75
|
+
Merb.logger.warn(msg)
|
76
|
+
raise ArgumentError, msg
|
77
77
|
end
|
78
78
|
@secret = secret
|
79
79
|
self.update(unmarshal(cookie))
|
@@ -81,13 +81,23 @@ module Merb
|
|
81
81
|
|
82
82
|
# Teardown and/or persist the current session.
|
83
83
|
#
|
84
|
+
# If @_destroy is true, clear out the session completely, including
|
85
|
+
# removal of the session cookie itself.
|
86
|
+
#
|
84
87
|
# ==== Parameters
|
85
|
-
# request<Merb::Request>::
|
88
|
+
# request<Merb::Request>:: request object created from Rack environment.
|
86
89
|
def finalize(request)
|
87
|
-
if
|
90
|
+
if @_destroy
|
91
|
+
request.destroy_session_cookie
|
92
|
+
elsif _original_session_data != (new_session_data = self.to_cookie)
|
88
93
|
request.set_session_cookie_value(new_session_data)
|
89
94
|
end
|
90
95
|
end
|
96
|
+
|
97
|
+
# Regenerate the session_id.
|
98
|
+
def regenerate
|
99
|
+
self.session_id = Merb::SessionMixin.rand_uuid
|
100
|
+
end
|
91
101
|
|
92
102
|
# Create the raw cookie string; includes an HMAC keyed message digest.
|
93
103
|
#
|
@@ -95,17 +105,21 @@ module Merb
|
|
95
105
|
# String:: Cookie value.
|
96
106
|
#
|
97
107
|
# ==== Raises
|
98
|
-
# CookieOverflow::
|
108
|
+
# CookieOverflow:: More than 4K of data put into session.
|
99
109
|
#
|
100
110
|
# ==== Notes
|
101
|
-
#
|
102
|
-
# choose to
|
111
|
+
# Session data is converted to a Hash first, since a container might
|
112
|
+
# choose to marshal it, which would make it persist
|
103
113
|
# attributes like 'needs_new_cookie', which it shouldn't.
|
104
114
|
def to_cookie
|
105
115
|
unless self.empty?
|
106
116
|
data = self.serialize
|
107
117
|
value = Merb::Request.escape "#{data}--#{generate_digest(data)}"
|
108
|
-
|
118
|
+
if value.size > MAX
|
119
|
+
msg = "Cookies have limit of 4K. Session contents: #{data.inspect}"
|
120
|
+
Merb.logger.error!(msg)
|
121
|
+
raise CookieOverflow, msg
|
122
|
+
end
|
109
123
|
value
|
110
124
|
end
|
111
125
|
end
|
@@ -145,12 +159,13 @@ module Merb
|
|
145
159
|
|
146
160
|
protected
|
147
161
|
|
148
|
-
# Serialize current session data
|
162
|
+
# Serialize current session data as a Hash.
|
163
|
+
# Uses Base64 encoding for integrity.
|
149
164
|
def serialize
|
150
165
|
Base64.encode64(Marshal.dump(self.to_hash)).chop
|
151
166
|
end
|
152
167
|
|
153
|
-
# Unserialize the raw cookie data
|
168
|
+
# Unserialize the raw cookie data to a Hash
|
154
169
|
def unserialize(data)
|
155
170
|
Marshal.load(Base64.decode64(data)) rescue {}
|
156
171
|
end
|
@@ -3,11 +3,21 @@ module Merb
|
|
3
3
|
# Sessions stored in memcached.
|
4
4
|
#
|
5
5
|
# Requires setup in your +init.rb+.
|
6
|
+
#
|
7
|
+
# This for the 'memcache-client' gem:
|
6
8
|
#
|
7
9
|
# Merb::BootLoader.after_app_loads do
|
8
|
-
# require '
|
10
|
+
# require 'memcache'
|
9
11
|
# Merb::MemcacheSession.store =
|
10
|
-
#
|
12
|
+
# MemCache.new('127.0.0.1:11211', :namespace => 'my_app')
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# Or this for the 'memcached' gem:
|
16
|
+
#
|
17
|
+
# Merb::BootLoader.after_app_loads do
|
18
|
+
# require 'memcache'
|
19
|
+
# Merb::MemcacheSession.store =
|
20
|
+
# Memcached.new('127.0.0.1:11211', :namespace => 'my_app')
|
11
21
|
# end
|
12
22
|
|
13
23
|
class MemcacheSession < SessionStoreContainer
|
@@ -16,33 +26,43 @@ module Merb
|
|
16
26
|
self.session_store_type = :memcache
|
17
27
|
|
18
28
|
end
|
29
|
+
|
30
|
+
module MemcacheStore
|
31
|
+
|
32
|
+
# Make the Memcached gem conform to the SessionStoreContainer interface
|
33
|
+
|
34
|
+
# ==== Parameters
|
35
|
+
# session_id<String>:: ID of the session to retrieve.
|
36
|
+
#
|
37
|
+
# ==== Returns
|
38
|
+
# ContainerSession:: The session corresponding to the ID.
|
39
|
+
def retrieve_session(session_id)
|
40
|
+
get("session:#{session_id}")
|
41
|
+
end
|
42
|
+
|
43
|
+
# ==== Parameters
|
44
|
+
# session_id<String>:: ID of the session to set.
|
45
|
+
# data<ContainerSession>:: The session to set.
|
46
|
+
def store_session(session_id, data)
|
47
|
+
set("session:#{session_id}", data)
|
48
|
+
end
|
49
|
+
|
50
|
+
# ==== Parameters
|
51
|
+
# session_id<String>:: ID of the session to delete.
|
52
|
+
def delete_session(session_id)
|
53
|
+
delete("session:#{session_id}")
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
19
57
|
|
20
58
|
end
|
21
59
|
|
60
|
+
# For the memcached gem.
|
22
61
|
class Memcached
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
# ==== Returns
|
30
|
-
# ContainerSession:: The session corresponding to the ID.
|
31
|
-
def retrieve_session(session_id)
|
32
|
-
get("session:#{session_id}")
|
33
|
-
end
|
34
|
-
|
35
|
-
# ==== Parameters
|
36
|
-
# session_id<String>:: ID of the session to set.
|
37
|
-
# data<ContainerSession>:: The session to set.
|
38
|
-
def store_session(session_id, data)
|
39
|
-
set("session:#{session_id}", data)
|
40
|
-
end
|
41
|
-
|
42
|
-
# ==== Parameters
|
43
|
-
# session_id<String>:: ID of the session to delete.
|
44
|
-
def delete_session(session_id)
|
45
|
-
delete("session:#{session_id}")
|
46
|
-
end
|
47
|
-
|
62
|
+
include Merb::MemcacheStore
|
63
|
+
end
|
64
|
+
|
65
|
+
# For the memcache-client gem.
|
66
|
+
class MemCache
|
67
|
+
include Merb::MemcacheStore
|
48
68
|
end
|
@@ -10,7 +10,11 @@ module Merb
|
|
10
10
|
# end
|
11
11
|
#
|
12
12
|
# Sessions will remain in memory until the server is stopped or the time
|
13
|
-
# as set in :memory_session_ttl expires.
|
13
|
+
# as set in :memory_session_ttl expires. Expired sessions are cleaned up in the
|
14
|
+
# background by a separate thread. Every time reaper
|
15
|
+
# cleans up expired sessions, garbage collection is scheduled start.
|
16
|
+
#
|
17
|
+
# Memory session is accessed in a thread safe manner.
|
14
18
|
class MemorySession < SessionStoreContainer
|
15
19
|
|
16
20
|
# The session store type
|
@@ -30,14 +34,14 @@ module Merb
|
|
30
34
|
|
31
35
|
# Used for handling multiple sessions stored in memory.
|
32
36
|
class MemorySessionStore
|
33
|
-
|
37
|
+
|
34
38
|
# ==== Parameters
|
35
39
|
# ttl<Fixnum>:: Session validity time in seconds. Defaults to 1 hour.
|
36
40
|
def initialize(ttl=nil)
|
37
41
|
@sessions = Hash.new
|
38
42
|
@timestamps = Hash.new
|
39
43
|
@mutex = Mutex.new
|
40
|
-
@session_ttl = ttl ||
|
44
|
+
@session_ttl = ttl || Merb::Const::HOUR # defaults 1 hour
|
41
45
|
start_timer
|
42
46
|
end
|
43
47
|
|
@@ -73,7 +77,7 @@ module Merb
|
|
73
77
|
end
|
74
78
|
|
75
79
|
# Deletes any sessions that have reached their maximum validity.
|
76
|
-
def
|
80
|
+
def reap_expired_sessions
|
77
81
|
@timestamps.each do |session_id,stamp|
|
78
82
|
delete_session(session_id) if (stamp + @session_ttl) < Time.now
|
79
83
|
end
|
@@ -85,11 +89,11 @@ module Merb
|
|
85
89
|
Thread.new do
|
86
90
|
loop {
|
87
91
|
sleep @session_ttl
|
88
|
-
|
92
|
+
reap_expired_sessions
|
89
93
|
}
|
90
94
|
end
|
91
95
|
end
|
92
96
|
|
93
97
|
end
|
94
98
|
|
95
|
-
end
|
99
|
+
end
|
@@ -6,29 +6,27 @@ module Merb
|
|
6
6
|
attr_accessor :_fingerprint
|
7
7
|
|
8
8
|
# The class attribute :store holds a reference to an object that implements
|
9
|
-
# the following interface
|
9
|
+
# the following interface:
|
10
10
|
#
|
11
|
-
# - retrieve_session(session_id) # returns
|
12
|
-
# - store_session(session_id, data) # data
|
11
|
+
# - retrieve_session(session_id) # returns a Hash
|
12
|
+
# - store_session(session_id, data) # expects data to be Hash
|
13
13
|
# - delete_session(session_id)
|
14
14
|
#
|
15
|
-
# You can use
|
15
|
+
# You can use session store classes directly by assigning to :store in your
|
16
16
|
# config/init.rb after_app_loads step, for example:
|
17
17
|
#
|
18
18
|
# Merb::BootLoader.after_app_loads do
|
19
|
-
# SessionStoreContainer.store =
|
19
|
+
# SessionStoreContainer.store = MemorySession.new
|
20
20
|
# end
|
21
21
|
#
|
22
22
|
# Or you can inherit from SessionStoreContainer to create a SessionContainer
|
23
|
-
# that delegates to
|
23
|
+
# that delegates to aggregated store.
|
24
24
|
#
|
25
|
-
# class
|
26
|
-
#
|
27
|
-
# self.store = FooContainer
|
28
|
-
#
|
25
|
+
# class MemorySession < SessionStoreContainer
|
26
|
+
# self.session_store_type = :memory
|
29
27
|
# end
|
30
28
|
#
|
31
|
-
# class
|
29
|
+
# class MemoryContainer
|
32
30
|
#
|
33
31
|
# def self.retrieve_session(session_id)
|
34
32
|
# ...
|
@@ -43,7 +41,6 @@ module Merb
|
|
43
41
|
# end
|
44
42
|
#
|
45
43
|
# end
|
46
|
-
|
47
44
|
# When used directly, report as :store store
|
48
45
|
self.session_store_type = :store
|
49
46
|
|
@@ -114,6 +111,9 @@ module Merb
|
|
114
111
|
|
115
112
|
# Teardown and/or persist the current session.
|
116
113
|
#
|
114
|
+
# If @_destroy is true, clear out the session completely, including
|
115
|
+
# removal of the session cookie itself.
|
116
|
+
#
|
117
117
|
# ==== Parameters
|
118
118
|
# request<Merb::Request>:: The Merb::Request that came in from Rack.
|
119
119
|
#
|
@@ -122,15 +122,20 @@ module Merb
|
|
122
122
|
# choose to do a full Marshal on the data, which would make it persist
|
123
123
|
# attributes like 'needs_new_cookie', which it shouldn't.
|
124
124
|
def finalize(request)
|
125
|
-
if
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
125
|
+
if @_destroy
|
126
|
+
store.delete_session(self.session_id)
|
127
|
+
request.destroy_session_cookie
|
128
|
+
else
|
129
|
+
if _fingerprint != Marshal.dump(data = self.to_hash).hash
|
130
|
+
begin
|
131
|
+
store.store_session(request.session(self.class.session_store_type).session_id, data)
|
132
|
+
rescue => err
|
133
|
+
Merb.logger.warn!("Could not persist session to #{self.class.name}: #{err.message}")
|
134
|
+
end
|
135
|
+
end
|
136
|
+
if needs_new_cookie || Merb::SessionMixin.needs_new_cookie?
|
137
|
+
request.set_session_id_cookie(self.session_id)
|
130
138
|
end
|
131
|
-
end
|
132
|
-
if needs_new_cookie || Merb::SessionMixin.needs_new_cookie?
|
133
|
-
request.set_session_id_cookie(session_id)
|
134
139
|
end
|
135
140
|
end
|
136
141
|
|
@@ -207,9 +207,12 @@ module Merb
|
|
207
207
|
# @public
|
208
208
|
def build_request(params = {}, env = {})
|
209
209
|
params = Merb::Request.params_to_query_string(params)
|
210
|
-
|
210
|
+
|
211
|
+
query_string = env[:query_string] || env['QUERY_STRING']
|
212
|
+
env[:query_string] = query_string ? "#{query_string}&#{params}" : params
|
211
213
|
|
212
|
-
|
214
|
+
post_body = env[:post_body] || env['POST_BODY']
|
215
|
+
fake_request(env, { :post_body => post_body, :req => env[:req] })
|
213
216
|
end
|
214
217
|
|
215
218
|
# An HTTP GET request that operates through the router.
|
@@ -318,7 +321,7 @@ module Merb
|
|
318
321
|
|
319
322
|
multipart = env.delete(:test_with_multipart)
|
320
323
|
|
321
|
-
request =
|
324
|
+
request = build_request(params, env)
|
322
325
|
|
323
326
|
opts = check_request_for_route(request) # Check that the request will be routed correctly
|
324
327
|
controller_name = (opts[:namespace] ? opts.delete(:namespace) + '/' : '') + opts.delete(:controller)
|
@@ -333,7 +333,11 @@ module Merb::Test::Rspec::ViewMatchers
|
|
333
333
|
alias_method :match_selector, :have_selector
|
334
334
|
|
335
335
|
def have_xpath(expected)
|
336
|
-
|
336
|
+
begin
|
337
|
+
require "libxml"
|
338
|
+
rescue LoadError => e
|
339
|
+
puts "To use have_xpath helper you need to install libxml-ruby gem"
|
340
|
+
end
|
337
341
|
HaveXpath.new(expected)
|
338
342
|
end
|
339
343
|
alias_method :match_xpath, :have_xpath
|
data/lib/merb-core/version.rb
CHANGED
@@ -8693,3 +8693,147 @@ Restarting Worker Thread
|
|
8693
8693
|
~ Started request handling: Tue Sep 09 01:15:03 +0300 2008
|
8694
8694
|
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8695
8695
|
~ {:action_time=>0.000236, :before_filters_time=>6.0e-06, :dispatch_time=>0.000434, :after_filters_time=>6.0e-06}
|
8696
|
+
~ Loaded TEST Environment...
|
8697
|
+
~ Compiling routes...
|
8698
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8699
|
+
~ Started request handling: Tue Sep 09 13:12:49 +0300 2008
|
8700
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8701
|
+
~ {:dispatch_time=>0.000871, :after_filters_time=>1.7e-05, :action_time=>0.000599, :before_filters_time=>2.0e-05}
|
8702
|
+
~ Started request handling: Tue Sep 09 13:12:49 +0300 2008
|
8703
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8704
|
+
~ {:dispatch_time=>0.000393, :after_filters_time=>6.0e-06, :action_time=>0.000225, :before_filters_time=>6.0e-06}
|
8705
|
+
~ Loaded TEST Environment...
|
8706
|
+
~ Compiling routes...
|
8707
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8708
|
+
~ Started request handling: Tue Sep 09 23:12:00 +0300 2008
|
8709
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8710
|
+
~ {:dispatch_time=>0.000881, :after_filters_time=>1.8e-05, :action_time=>0.00054, :before_filters_time=>2.6e-05}
|
8711
|
+
~ Started request handling: Tue Sep 09 23:12:00 +0300 2008
|
8712
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8713
|
+
~ {:dispatch_time=>0.000407, :after_filters_time=>6.0e-06, :action_time=>0.000239, :before_filters_time=>7.0e-06}
|
8714
|
+
~ Loaded TEST Environment...
|
8715
|
+
~ Compiling routes...
|
8716
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8717
|
+
~ Started request handling: Wed Sep 10 01:53:03 +0300 2008
|
8718
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8719
|
+
~ {:dispatch_time=>0.000773, :after_filters_time=>1.7e-05, :action_time=>0.000506, :before_filters_time=>1.6e-05}
|
8720
|
+
~ Started request handling: Wed Sep 10 01:53:03 +0300 2008
|
8721
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8722
|
+
~ {:dispatch_time=>0.000401, :after_filters_time=>6.0e-06, :action_time=>0.000239, :before_filters_time=>5.0e-06}
|
8723
|
+
~ Loaded TEST Environment...
|
8724
|
+
~ Compiling routes...
|
8725
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8726
|
+
~ Started request handling: Wed Sep 10 03:11:55 +0300 2008
|
8727
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8728
|
+
~ {:dispatch_time=>0.000816, :after_filters_time=>1.7e-05, :action_time=>0.000538, :before_filters_time=>1.7e-05}
|
8729
|
+
~ Started request handling: Wed Sep 10 03:11:55 +0300 2008
|
8730
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8731
|
+
~ {:dispatch_time=>0.00046, :after_filters_time=>7.0e-06, :action_time=>0.000244, :before_filters_time=>5.0e-06}
|
8732
|
+
~ Loaded TEST Environment...
|
8733
|
+
~ Compiling routes...
|
8734
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8735
|
+
~ Started request handling: Wed Sep 10 03:15:37 +0300 2008
|
8736
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8737
|
+
~ {:dispatch_time=>0.000807, :after_filters_time=>1.7e-05, :action_time=>0.000529, :before_filters_time=>1.6e-05}
|
8738
|
+
~ Started request handling: Wed Sep 10 03:15:37 +0300 2008
|
8739
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8740
|
+
~ {:dispatch_time=>0.000426, :after_filters_time=>7.0e-06, :action_time=>0.000247, :before_filters_time=>5.0e-06}
|
8741
|
+
~ Loaded TEST Environment...
|
8742
|
+
~ Compiling routes...
|
8743
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8744
|
+
~ Started request handling: Wed Sep 10 03:25:15 +0300 2008
|
8745
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8746
|
+
~ {:dispatch_time=>0.000838, :after_filters_time=>1.7e-05, :action_time=>0.000579, :before_filters_time=>2.1e-05}
|
8747
|
+
~ Started request handling: Wed Sep 10 03:25:15 +0300 2008
|
8748
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8749
|
+
~ {:dispatch_time=>0.000405, :after_filters_time=>7.0e-06, :action_time=>0.000235, :before_filters_time=>5.0e-06}
|
8750
|
+
~ Loaded TEST Environment...
|
8751
|
+
~ Compiling routes...
|
8752
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8753
|
+
~ Started request handling: Wed Sep 10 04:26:15 +0300 2008
|
8754
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8755
|
+
~ {:dispatch_time=>0.000822, :after_filters_time=>1.7e-05, :action_time=>0.000504, :before_filters_time=>1.6e-05}
|
8756
|
+
~ Started request handling: Wed Sep 10 04:26:15 +0300 2008
|
8757
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8758
|
+
~ {:dispatch_time=>0.000393, :after_filters_time=>6.0e-06, :action_time=>0.000219, :before_filters_time=>4.0e-06}
|
8759
|
+
~ Loaded TEST Environment...
|
8760
|
+
~ Compiling routes...
|
8761
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8762
|
+
~ Started request handling: Wed Sep 10 04:45:17 +0300 2008
|
8763
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8764
|
+
~ {:dispatch_time=>0.000818, :after_filters_time=>2.0e-05, :action_time=>0.000543, :before_filters_time=>2.0e-05}
|
8765
|
+
~ Started request handling: Wed Sep 10 04:45:17 +0300 2008
|
8766
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8767
|
+
~ {:dispatch_time=>0.000427, :after_filters_time=>1.0e-05, :action_time=>0.000247, :before_filters_time=>8.0e-06}
|
8768
|
+
~ Loaded TEST Environment...
|
8769
|
+
~ Compiling routes...
|
8770
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8771
|
+
~ Started request handling: Thu Sep 11 17:59:15 +0300 2008
|
8772
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8773
|
+
~ {:dispatch_time=>0.000774, :after_filters_time=>1.7e-05, :action_time=>0.000504, :before_filters_time=>1.6e-05}
|
8774
|
+
~ Started request handling: Thu Sep 11 17:59:15 +0300 2008
|
8775
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8776
|
+
~ {:dispatch_time=>0.000392, :after_filters_time=>6.0e-06, :action_time=>0.000228, :before_filters_time=>4.0e-06}
|
8777
|
+
~ Loaded TEST Environment...
|
8778
|
+
~ Compiling routes...
|
8779
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8780
|
+
~ Started request handling: Sat Sep 13 03:29:37 +0300 2008
|
8781
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8782
|
+
~ {:after_filters_time=>1.5e-05, :action_time=>0.00052, :before_filters_time=>1.6e-05, :dispatch_time=>0.001015}
|
8783
|
+
~ Started request handling: Sat Sep 13 03:29:37 +0300 2008
|
8784
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8785
|
+
~ {:after_filters_time=>5.0e-06, :action_time=>0.000236, :before_filters_time=>6.0e-06, :dispatch_time=>0.000404}
|
8786
|
+
~ Loaded TEST Environment...
|
8787
|
+
~ Compiling routes...
|
8788
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8789
|
+
~ Started request handling: Sat Sep 13 05:00:26 +0300 2008
|
8790
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8791
|
+
~ {:after_filters_time=>1.6e-05, :action_time=>0.000504, :before_filters_time=>1.5e-05, :dispatch_time=>0.0008}
|
8792
|
+
~ Started request handling: Sat Sep 13 05:00:26 +0300 2008
|
8793
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8794
|
+
~ {:after_filters_time=>5.0e-06, :action_time=>0.000229, :before_filters_time=>5.0e-06, :dispatch_time=>0.000391}
|
8795
|
+
~ Loaded TEST Environment...
|
8796
|
+
~ Compiling routes...
|
8797
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8798
|
+
~ Started request handling: Sat Sep 13 05:01:25 +0300 2008
|
8799
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8800
|
+
~ {:after_filters_time=>1.6e-05, :action_time=>0.00056, :before_filters_time=>1.6e-05, :dispatch_time=>0.000824}
|
8801
|
+
~ Started request handling: Sat Sep 13 05:01:25 +0300 2008
|
8802
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8803
|
+
~ {:after_filters_time=>5.0e-06, :action_time=>0.000232, :before_filters_time=>5.0e-06, :dispatch_time=>0.000396}
|
8804
|
+
~ Loaded TEST Environment...
|
8805
|
+
~ Compiling routes...
|
8806
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8807
|
+
~ Started request handling: Sat Sep 13 18:50:19 +0300 2008
|
8808
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8809
|
+
~ {:dispatch_time=>0.000762, :after_filters_time=>1.6e-05, :action_time=>0.000499, :before_filters_time=>1.7e-05}
|
8810
|
+
~ Started request handling: Sat Sep 13 18:50:19 +0300 2008
|
8811
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8812
|
+
~ {:dispatch_time=>0.000409, :after_filters_time=>5.0e-06, :action_time=>0.000253, :before_filters_time=>5.0e-06}
|
8813
|
+
~ Loaded TEST Environment...
|
8814
|
+
~ Compiling routes...
|
8815
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8816
|
+
~ Started request handling: Sat Sep 13 18:51:49 +0300 2008
|
8817
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8818
|
+
~ {:dispatch_time=>0.000762, :after_filters_time=>1.5e-05, :action_time=>0.0005, :before_filters_time=>1.6e-05}
|
8819
|
+
~ Started request handling: Sat Sep 13 18:51:49 +0300 2008
|
8820
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8821
|
+
~ {:dispatch_time=>0.000387, :after_filters_time=>5.0e-06, :action_time=>0.000228, :before_filters_time=>5.0e-06}
|
8822
|
+
~ Loaded TEST Environment...
|
8823
|
+
~ Compiling routes...
|
8824
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8825
|
+
~ Started request handling: Sun Sep 14 00:12:16 +0300 2008
|
8826
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8827
|
+
~ {:dispatch_time=>0.000802, :after_filters_time=>1.7e-05, :action_time=>0.000538, :before_filters_time=>1.6e-05}
|
8828
|
+
~ Started request handling: Sun Sep 14 00:12:16 +0300 2008
|
8829
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8830
|
+
~ {:dispatch_time=>0.000401, :after_filters_time=>5.0e-06, :action_time=>0.000225, :before_filters_time=>6.0e-06}
|
8831
|
+
~ Loaded TEST Environment...
|
8832
|
+
~ Compiling routes...
|
8833
|
+
~ Starting Merb server listening at 0.0.0.0:4000
|
8834
|
+
~ Started request handling: Sun Sep 14 00:52:07 +0300 2008
|
8835
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8836
|
+
~ {:dispatch_time=>0.000853, :after_filters_time=>1.8e-05, :action_time=>0.000582, :before_filters_time=>1.6e-05}
|
8837
|
+
~ Started request handling: Sun Sep 14 00:52:07 +0300 2008
|
8838
|
+
~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
|
8839
|
+
~ {:dispatch_time=>0.00041, :after_filters_time=>5.0e-06, :action_time=>0.000227, :before_filters_time=>6.0e-06}
|