merb-core 0.9.6 → 0.9.7
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.
- 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}
|