deja-vu 0.3

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 (34) hide show
  1. data/Change.log +4 -0
  2. data/LICENSE +19 -0
  3. data/Makefile +0 -0
  4. data/README +22 -0
  5. data/Rakefile +31 -0
  6. data/example-playback/README +6 -0
  7. data/example-playback/analysis.rb +7 -0
  8. data/example-playback/playback.rb +7 -0
  9. data/example-playback/repo/recordings/DejaVuNS/DejaVu/recordings +1 -0
  10. data/example-playback/repo/recordings/DejaVuNS/Recording/bah7aa==/n--ab7689c618445bb17b626741588b50c0500c8f79 +1 -0
  11. data/example/Makefile +6 -0
  12. data/example/config.ru +9 -0
  13. data/example/deja-vu-recordings/6b44093baa40d257106bae6dbcda53af9a57e61f.session +53 -0
  14. data/example/deja-vu-recordings/BAh7AA==/n--ab7689c618445bb17b626741588b50c0500c8f79.session +598 -0
  15. data/example/deja-vu-recordings/README +1 -0
  16. data/example/myapp.rb +15 -0
  17. data/example/repo/recordings/DejaVuNS/DejaVu/recordings +1 -0
  18. data/example/repo/recordings/DejaVuNS/Recording/bah7aa==/n--ab7689c618445bb17b626741588b50c0500c8f79 +1 -0
  19. data/example/views/index.haml +0 -0
  20. data/example/views/layout.haml +0 -0
  21. data/lib/deja-vu.rb +72 -0
  22. data/lib/deja-vu/analyzer.rb +133 -0
  23. data/lib/deja-vu/init.rb +3 -0
  24. data/lib/deja-vu/model/dejavu.rb +42 -0
  25. data/lib/deja-vu/model/generated_model/DejaVuNS.rb +1536 -0
  26. data/lib/deja-vu/model/init.rb +3 -0
  27. data/lib/deja-vu/model/record.rb +58 -0
  28. data/lib/deja-vu/model/recording.rb +55 -0
  29. data/lib/deja-vu/model/xampl-gen.rb +39 -0
  30. data/lib/deja-vu/model/xml/dejavu.xml +28 -0
  31. data/lib/deja-vu/player.rb +241 -0
  32. data/lib/deja-vu/recorder.rb +93 -0
  33. data/lib/rack-session-listener.rb +29 -0
  34. metadata +94 -0
@@ -0,0 +1,4 @@
1
+ -- Dec. 7th
2
+ - added analysis class to do basic stats on recordings
3
+ - refactored the player to be better
4
+ - fixed a bug in the recorder
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2009 Kristan 'Krispy' Uccello <krispy@soldierofcode.com> - Soldier Of Code
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
File without changes
data/README ADDED
@@ -0,0 +1,22 @@
1
+ =Deja Vu
2
+
3
+ == A rack based session record / playback middleware for problemsolving web applications
4
+
5
+ This is user session record and playback. Good for what ales you.
6
+
7
+ == Usage
8
+
9
+ >> require 'deja-vu'
10
+
11
+ YOU NEED TO TURN ON COOKIE SESSIONS UPSTREAM OF DejaVu FOR THIS TO WORK
12
+
13
+ ie.
14
+ use Rack::Session::Cookie,
15
+ :key => 'a-stupid-cookie-name',
16
+ :path => '/',
17
+ :expire_after => 2592000,
18
+ :secret => 'change_me'
19
+
20
+ in your config.ru or your application
21
+
22
+ use SoldierOfCode::DejaVu::Middleware, {:cookie_name=>"a-stupid-cookie-name",:enable_record=>true}
@@ -0,0 +1,31 @@
1
+ require 'rake/testtask'
2
+
3
+ begin
4
+ require 'jeweler'
5
+ Jeweler::Tasks.new do |s|
6
+ s.name = "deja-vu"
7
+ s.description = s.summary = "A rack based session record / playback middleware for problemsolving web applications"
8
+ s.email = "kuccello@gmail.com"
9
+ s.homepage = "http://github.com/kuccello/deja-vu"
10
+ s.authors = ['Kristan "Krispy" Uccello']
11
+ s.files = FileList["[A-Z]*", "{lib,test,example,example-playback}/**/*"]
12
+ s.version = "0.3"
13
+ end
14
+ Jeweler::GemcutterTasks.new
15
+ rescue LoadError
16
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
17
+ end
18
+
19
+ Rake::TestTask.new do |t|
20
+ t.libs << "test"
21
+ t.test_files = FileList['test/*-test.rb']
22
+ t.verbose = true
23
+ end
24
+
25
+ require 'rake/rdoctask'
26
+ desc "Generate documentation"
27
+ Rake::RDocTask.new do |rd|
28
+ rd.main = "README.rdoc"
29
+ rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
30
+ rd.rdoc_dir = 'rdoc'
31
+ end
@@ -0,0 +1,6 @@
1
+ You need to first record using the example web application <dir-root>/example
2
+
3
+ Simply start up the web application and play arround with entering various URIs and it will create a repo directory.
4
+ Copy the "repo" directory into this directory and take note of a recording "pid" repo/DejaVuNS/Recording/<the file name is the pid>
5
+
6
+ Adjust the playback.rb with the pid.
@@ -0,0 +1,7 @@
1
+ require 'patron'
2
+ require 'xampl'
3
+ require 'dirge'
4
+ require 'deja-vu' unless require ~'../lib/deja-vu'
5
+
6
+ analyzer = SoldierOfCode::DejaVu::Analyzer.new
7
+ analyzer.overview_formatted
@@ -0,0 +1,7 @@
1
+ require 'patron'
2
+ require 'xampl'
3
+ require 'dirge'
4
+ require 'deja-vu' unless require ~'../lib/deja-vu'
5
+
6
+ player = SoldierOfCode::DejaVu::Player.new
7
+ player.play
@@ -0,0 +1 @@
1
+ <dejavu:deja-vu pid="recordings" xmlns:dejavu="http://soldierofcode.com/deja-vu"><dejavu:recording pid="bah7aa==&#10;--ab7689c618445bb17b626741588b50c0500c8f79"/></dejavu:deja-vu>
@@ -0,0 +1 @@
1
+ <dejavu:recording pid="bah7aa==&#10;--ab7689c618445bb17b626741588b50c0500c8f79" stamp="1260219390" agent="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.16) Gecko/2009120123 Camino/2.0.1 (like Firefox/3.0.16)" ip="127.0.0.1" xmlns:dejavu="http://soldierofcode.com/deja-vu"><dejavu:record id="1260219390" stamp="1260219390" status="200" httpmethod="GET" url="http://localhost:9999/favicon.ico" request-time="0.00220799446105957"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body></dejavu:record><dejavu:record id="1260219395" stamp="1260219395" status="200" httpmethod="GET" url="http://localhost:9999/one" request-time="0.00183606147766113"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body></dejavu:record><dejavu:record id="1260219397" stamp="1260219397" status="200" httpmethod="GET" url="http://localhost:9999/one/two" request-time="0.000412940979003906"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body></dejavu:record><dejavu:record id="1260219400" stamp="1260219400" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three" request-time="0.000966072082519531"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body></dejavu:record><dejavu:record id="1260219403" stamp="1260219403" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four" request-time="0.00429487228393555"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body></dejavu:record><dejavu:record id="1260219408" stamp="1260219408" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true" request-time="0.0016019344329834"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body><dejavu:param name="five" value="true"/></dejavu:record><dejavu:record id="1260219416" stamp="1260219416" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&amp;six=seven" request-time="0.00183486938476562"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/></dejavu:record><dejavu:record id="1260219422" stamp="1260219422" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&amp;six=seven&amp;eight=9" request-time="0.00100898742675781"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/><dejavu:param name="eight" value="9"/></dejavu:record></dejavu:recording>
@@ -0,0 +1,6 @@
1
+ go:
2
+ thin start --debug --threaded -R config.ru -p 9999
3
+
4
+ l:
5
+ thin start --debug --threaded --no-epoll -R config.ru -p 9999
6
+
@@ -0,0 +1,9 @@
1
+ require 'myapp'
2
+
3
+ use Rack::Session::Cookie,
4
+ :key => 'a-stupid-cookie-name',
5
+ :path => '/',
6
+ :expire_after => 2592000,
7
+ :secret => 'change_me'
8
+
9
+ run MyApp
@@ -0,0 +1,53 @@
1
+ REQUEST [1259876656] START
2
+ METHOD: GET
3
+ URL: http://localhost:9999//
4
+ =====[ENV]=====
5
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
6
+ SERVER_NAME: localhost --> String
7
+ rack.input: #<StringIO:0x00000101339f30> --> StringIO
8
+ rack.version: [1, 0] --> Array
9
+ rack.errors: #<IO:0x00000100888670> --> IO
10
+ rack.multithread: true --> TrueClass
11
+ rack.multiprocess: false --> FalseClass
12
+ rack.run_once: false --> FalseClass
13
+ REQUEST_METHOD: GET --> String
14
+ REQUEST_PATH: / --> String
15
+ PATH_INFO: / --> String
16
+ REQUEST_URI: / --> String
17
+ HTTP_VERSION: HTTP/1.1 --> String
18
+ HTTP_HOST: localhost:9999 --> String
19
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 --> String
20
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
21
+ HTTP_ACCEPT_LANGUAGE: en-us,en;q=0.5 --> String
22
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
23
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
24
+ HTTP_KEEP_ALIVE: 300 --> String
25
+ HTTP_CONNECTION: keep-alive --> String
26
+ HTTP_COOKIE: sifrFetch=true --> String
27
+ GATEWAY_INTERFACE: CGI/1.2 --> String
28
+ SERVER_PORT: 9999 --> String
29
+ QUERY_STRING: --> String
30
+ SERVER_PROTOCOL: HTTP/1.1 --> String
31
+ rack.url_scheme: http --> String
32
+ SCRIPT_NAME: --> String
33
+ REMOTE_ADDR: 127.0.0.1 --> String
34
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
35
+ async.close: #<EventMachine::DefaultDeferrable:0x00000101329648> --> EventMachine::DefaultDeferrable
36
+ rack.request.cookie_string: sifrFetch=true --> String
37
+ rack.request.cookie_hash: {"sifrFetch"=>"true"} --> Hash
38
+ rack.session: {} --> Hash
39
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
40
+ rack.request.query_string: --> String
41
+ rack.request.query_hash: {} --> Hash
42
+ rack.request.form_input: #<StringIO:0x00000101339f30> --> StringIO
43
+ rack.request.form_hash: {} --> Hash
44
+ rack.request.form_vars: --> String
45
+
46
+
47
+ ===============
48
+ STATUS: 200
49
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
50
+ BODY: ["Hello"]
51
+ =====[SESSION]=====
52
+ ===================
53
+ REQUEST [1259876656] END
@@ -0,0 +1,598 @@
1
+ REQUEST [1259876604] START
2
+ METHOD: GET
3
+ URL: http://localhost:9999//
4
+ =====[ENV]=====
5
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
6
+ SERVER_NAME: localhost --> String
7
+ rack.input: #<StringIO:0x00000101074568> --> StringIO
8
+ rack.version: [1, 0] --> Array
9
+ rack.errors: #<IO:0x00000100888670> --> IO
10
+ rack.multithread: true --> TrueClass
11
+ rack.multiprocess: false --> FalseClass
12
+ rack.run_once: false --> FalseClass
13
+ REQUEST_METHOD: GET --> String
14
+ REQUEST_PATH: / --> String
15
+ PATH_INFO: / --> String
16
+ REQUEST_URI: / --> String
17
+ HTTP_VERSION: HTTP/1.1 --> String
18
+ HTTP_HOST: localhost:9999 --> String
19
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
20
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
21
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
22
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
23
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
24
+ HTTP_KEEP_ALIVE: 300 --> String
25
+ HTTP_CONNECTION: keep-alive --> String
26
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
27
+ HTTP_CACHE_CONTROL: max-age=0 --> String
28
+ GATEWAY_INTERFACE: CGI/1.2 --> String
29
+ SERVER_PORT: 9999 --> String
30
+ QUERY_STRING: --> String
31
+ SERVER_PROTOCOL: HTTP/1.1 --> String
32
+ rack.url_scheme: http --> String
33
+ SCRIPT_NAME: --> String
34
+ REMOTE_ADDR: 127.0.0.1 --> String
35
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
36
+ async.close: #<EventMachine::DefaultDeferrable:0x000001017697b8> --> EventMachine::DefaultDeferrable
37
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
38
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
39
+ rack.session: {} --> Hash
40
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
41
+ rack.request.query_string: --> String
42
+ rack.request.query_hash: {} --> Hash
43
+ rack.request.form_input: #<StringIO:0x00000101074568> --> StringIO
44
+ rack.request.form_hash: {} --> Hash
45
+ rack.request.form_vars: --> String
46
+
47
+
48
+ ===============
49
+ STATUS: 200
50
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
51
+ BODY: ["Hello"]
52
+ =====[SESSION]=====
53
+ ===================
54
+ REQUEST [1259876604] END
55
+ REQUEST [1259876637] START
56
+ METHOD: GET
57
+ URL: http://localhost:9999//
58
+ =====[ENV]=====
59
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
60
+ SERVER_NAME: localhost --> String
61
+ rack.input: #<StringIO:0x000001016a1d50> --> StringIO
62
+ rack.version: [1, 0] --> Array
63
+ rack.errors: #<IO:0x00000100888670> --> IO
64
+ rack.multithread: true --> TrueClass
65
+ rack.multiprocess: false --> FalseClass
66
+ rack.run_once: false --> FalseClass
67
+ REQUEST_METHOD: GET --> String
68
+ REQUEST_PATH: / --> String
69
+ PATH_INFO: / --> String
70
+ REQUEST_URI: / --> String
71
+ HTTP_VERSION: HTTP/1.1 --> String
72
+ HTTP_HOST: localhost:9999 --> String
73
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
74
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
75
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
76
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
77
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
78
+ HTTP_KEEP_ALIVE: 300 --> String
79
+ HTTP_CONNECTION: keep-alive --> String
80
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
81
+ HTTP_CACHE_CONTROL: max-age=0 --> String
82
+ GATEWAY_INTERFACE: CGI/1.2 --> String
83
+ SERVER_PORT: 9999 --> String
84
+ QUERY_STRING: --> String
85
+ SERVER_PROTOCOL: HTTP/1.1 --> String
86
+ rack.url_scheme: http --> String
87
+ SCRIPT_NAME: --> String
88
+ REMOTE_ADDR: 127.0.0.1 --> String
89
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
90
+ async.close: #<EventMachine::DefaultDeferrable:0x000001016986d0> --> EventMachine::DefaultDeferrable
91
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
92
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
93
+ rack.session: {} --> Hash
94
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
95
+ rack.request.query_string: --> String
96
+ rack.request.query_hash: {} --> Hash
97
+ rack.request.form_input: #<StringIO:0x000001016a1d50> --> StringIO
98
+ rack.request.form_hash: {} --> Hash
99
+ rack.request.form_vars: --> String
100
+
101
+
102
+ ===============
103
+ STATUS: 200
104
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
105
+ BODY: ["Hello"]
106
+ =====[SESSION]=====
107
+ ===================
108
+ REQUEST [1259876637] END
109
+ REQUEST [1259876638] START
110
+ METHOD: GET
111
+ URL: http://localhost:9999//
112
+ =====[ENV]=====
113
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
114
+ SERVER_NAME: localhost --> String
115
+ rack.input: #<StringIO:0x0000010166ad10> --> StringIO
116
+ rack.version: [1, 0] --> Array
117
+ rack.errors: #<IO:0x00000100888670> --> IO
118
+ rack.multithread: true --> TrueClass
119
+ rack.multiprocess: false --> FalseClass
120
+ rack.run_once: false --> FalseClass
121
+ REQUEST_METHOD: GET --> String
122
+ REQUEST_PATH: / --> String
123
+ PATH_INFO: / --> String
124
+ REQUEST_URI: / --> String
125
+ HTTP_VERSION: HTTP/1.1 --> String
126
+ HTTP_HOST: localhost:9999 --> String
127
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
128
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
129
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
130
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
131
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
132
+ HTTP_KEEP_ALIVE: 300 --> String
133
+ HTTP_CONNECTION: keep-alive --> String
134
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
135
+ HTTP_CACHE_CONTROL: max-age=0 --> String
136
+ GATEWAY_INTERFACE: CGI/1.2 --> String
137
+ SERVER_PORT: 9999 --> String
138
+ QUERY_STRING: --> String
139
+ SERVER_PROTOCOL: HTTP/1.1 --> String
140
+ rack.url_scheme: http --> String
141
+ SCRIPT_NAME: --> String
142
+ REMOTE_ADDR: 127.0.0.1 --> String
143
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
144
+ async.close: #<EventMachine::DefaultDeferrable:0x00000101664f00> --> EventMachine::DefaultDeferrable
145
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
146
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
147
+ rack.session: {} --> Hash
148
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
149
+ rack.request.query_string: --> String
150
+ rack.request.query_hash: {} --> Hash
151
+ rack.request.form_input: #<StringIO:0x0000010166ad10> --> StringIO
152
+ rack.request.form_hash: {} --> Hash
153
+ rack.request.form_vars: --> String
154
+
155
+
156
+ ===============
157
+ STATUS: 200
158
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
159
+ BODY: ["Hello"]
160
+ =====[SESSION]=====
161
+ ===================
162
+ REQUEST [1259876638] END
163
+ REQUEST [1259876638] START
164
+ METHOD: GET
165
+ URL: http://localhost:9999//
166
+ =====[ENV]=====
167
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
168
+ SERVER_NAME: localhost --> String
169
+ rack.input: #<StringIO:0x0000010161bc08> --> StringIO
170
+ rack.version: [1, 0] --> Array
171
+ rack.errors: #<IO:0x00000100888670> --> IO
172
+ rack.multithread: true --> TrueClass
173
+ rack.multiprocess: false --> FalseClass
174
+ rack.run_once: false --> FalseClass
175
+ REQUEST_METHOD: GET --> String
176
+ REQUEST_PATH: / --> String
177
+ PATH_INFO: / --> String
178
+ REQUEST_URI: / --> String
179
+ HTTP_VERSION: HTTP/1.1 --> String
180
+ HTTP_HOST: localhost:9999 --> String
181
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
182
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
183
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
184
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
185
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
186
+ HTTP_KEEP_ALIVE: 300 --> String
187
+ HTTP_CONNECTION: keep-alive --> String
188
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
189
+ HTTP_CACHE_CONTROL: max-age=0 --> String
190
+ GATEWAY_INTERFACE: CGI/1.2 --> String
191
+ SERVER_PORT: 9999 --> String
192
+ QUERY_STRING: --> String
193
+ SERVER_PROTOCOL: HTTP/1.1 --> String
194
+ rack.url_scheme: http --> String
195
+ SCRIPT_NAME: --> String
196
+ REMOTE_ADDR: 127.0.0.1 --> String
197
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
198
+ async.close: #<EventMachine::DefaultDeferrable:0x00000101619eb8> --> EventMachine::DefaultDeferrable
199
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
200
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
201
+ rack.session: {} --> Hash
202
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
203
+ rack.request.query_string: --> String
204
+ rack.request.query_hash: {} --> Hash
205
+ rack.request.form_input: #<StringIO:0x0000010161bc08> --> StringIO
206
+ rack.request.form_hash: {} --> Hash
207
+ rack.request.form_vars: --> String
208
+
209
+
210
+ ===============
211
+ STATUS: 200
212
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
213
+ BODY: ["Hello"]
214
+ =====[SESSION]=====
215
+ ===================
216
+ REQUEST [1259876638] END
217
+ REQUEST [1259876638] START
218
+ METHOD: GET
219
+ URL: http://localhost:9999//
220
+ =====[ENV]=====
221
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
222
+ SERVER_NAME: localhost --> String
223
+ rack.input: #<StringIO:0x000001015acdc0> --> StringIO
224
+ rack.version: [1, 0] --> Array
225
+ rack.errors: #<IO:0x00000100888670> --> IO
226
+ rack.multithread: true --> TrueClass
227
+ rack.multiprocess: false --> FalseClass
228
+ rack.run_once: false --> FalseClass
229
+ REQUEST_METHOD: GET --> String
230
+ REQUEST_PATH: / --> String
231
+ PATH_INFO: / --> String
232
+ REQUEST_URI: / --> String
233
+ HTTP_VERSION: HTTP/1.1 --> String
234
+ HTTP_HOST: localhost:9999 --> String
235
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
236
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
237
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
238
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
239
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
240
+ HTTP_KEEP_ALIVE: 300 --> String
241
+ HTTP_CONNECTION: keep-alive --> String
242
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
243
+ HTTP_CACHE_CONTROL: max-age=0 --> String
244
+ GATEWAY_INTERFACE: CGI/1.2 --> String
245
+ SERVER_PORT: 9999 --> String
246
+ QUERY_STRING: --> String
247
+ SERVER_PROTOCOL: HTTP/1.1 --> String
248
+ rack.url_scheme: http --> String
249
+ SCRIPT_NAME: --> String
250
+ REMOTE_ADDR: 127.0.0.1 --> String
251
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
252
+ async.close: #<EventMachine::DefaultDeferrable:0x000001015aa9e0> --> EventMachine::DefaultDeferrable
253
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
254
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
255
+ rack.session: {} --> Hash
256
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
257
+ rack.request.query_string: --> String
258
+ rack.request.query_hash: {} --> Hash
259
+ rack.request.form_input: #<StringIO:0x000001015acdc0> --> StringIO
260
+ rack.request.form_hash: {} --> Hash
261
+ rack.request.form_vars: --> String
262
+
263
+
264
+ ===============
265
+ STATUS: 200
266
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
267
+ BODY: ["Hello"]
268
+ =====[SESSION]=====
269
+ ===================
270
+ REQUEST [1259876638] END
271
+ REQUEST [1259876639] START
272
+ METHOD: GET
273
+ URL: http://localhost:9999//
274
+ =====[ENV]=====
275
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
276
+ SERVER_NAME: localhost --> String
277
+ rack.input: #<StringIO:0x00000101560258> --> StringIO
278
+ rack.version: [1, 0] --> Array
279
+ rack.errors: #<IO:0x00000100888670> --> IO
280
+ rack.multithread: true --> TrueClass
281
+ rack.multiprocess: false --> FalseClass
282
+ rack.run_once: false --> FalseClass
283
+ REQUEST_METHOD: GET --> String
284
+ REQUEST_PATH: / --> String
285
+ PATH_INFO: / --> String
286
+ REQUEST_URI: / --> String
287
+ HTTP_VERSION: HTTP/1.1 --> String
288
+ HTTP_HOST: localhost:9999 --> String
289
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
290
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
291
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
292
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
293
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
294
+ HTTP_KEEP_ALIVE: 300 --> String
295
+ HTTP_CONNECTION: keep-alive --> String
296
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
297
+ HTTP_CACHE_CONTROL: max-age=0 --> String
298
+ GATEWAY_INTERFACE: CGI/1.2 --> String
299
+ SERVER_PORT: 9999 --> String
300
+ QUERY_STRING: --> String
301
+ SERVER_PROTOCOL: HTTP/1.1 --> String
302
+ rack.url_scheme: http --> String
303
+ SCRIPT_NAME: --> String
304
+ REMOTE_ADDR: 127.0.0.1 --> String
305
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
306
+ async.close: #<EventMachine::DefaultDeferrable:0x0000010155e348> --> EventMachine::DefaultDeferrable
307
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
308
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
309
+ rack.session: {} --> Hash
310
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
311
+ rack.request.query_string: --> String
312
+ rack.request.query_hash: {} --> Hash
313
+ rack.request.form_input: #<StringIO:0x00000101560258> --> StringIO
314
+ rack.request.form_hash: {} --> Hash
315
+ rack.request.form_vars: --> String
316
+
317
+
318
+ ===============
319
+ STATUS: 200
320
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
321
+ BODY: ["Hello"]
322
+ =====[SESSION]=====
323
+ ===================
324
+ REQUEST [1259876639] END
325
+ REQUEST [1259876639] START
326
+ METHOD: GET
327
+ URL: http://localhost:9999//
328
+ =====[ENV]=====
329
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
330
+ SERVER_NAME: localhost --> String
331
+ rack.input: #<StringIO:0x0000010151ff18> --> StringIO
332
+ rack.version: [1, 0] --> Array
333
+ rack.errors: #<IO:0x00000100888670> --> IO
334
+ rack.multithread: true --> TrueClass
335
+ rack.multiprocess: false --> FalseClass
336
+ rack.run_once: false --> FalseClass
337
+ REQUEST_METHOD: GET --> String
338
+ REQUEST_PATH: / --> String
339
+ PATH_INFO: / --> String
340
+ REQUEST_URI: / --> String
341
+ HTTP_VERSION: HTTP/1.1 --> String
342
+ HTTP_HOST: localhost:9999 --> String
343
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
344
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
345
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
346
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
347
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
348
+ HTTP_KEEP_ALIVE: 300 --> String
349
+ HTTP_CONNECTION: keep-alive --> String
350
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
351
+ HTTP_CACHE_CONTROL: max-age=0 --> String
352
+ GATEWAY_INTERFACE: CGI/1.2 --> String
353
+ SERVER_PORT: 9999 --> String
354
+ QUERY_STRING: --> String
355
+ SERVER_PROTOCOL: HTTP/1.1 --> String
356
+ rack.url_scheme: http --> String
357
+ SCRIPT_NAME: --> String
358
+ REMOTE_ADDR: 127.0.0.1 --> String
359
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
360
+ async.close: #<EventMachine::DefaultDeferrable:0x0000010151a338> --> EventMachine::DefaultDeferrable
361
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
362
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
363
+ rack.session: {} --> Hash
364
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
365
+ rack.request.query_string: --> String
366
+ rack.request.query_hash: {} --> Hash
367
+ rack.request.form_input: #<StringIO:0x0000010151ff18> --> StringIO
368
+ rack.request.form_hash: {} --> Hash
369
+ rack.request.form_vars: --> String
370
+
371
+
372
+ ===============
373
+ STATUS: 200
374
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
375
+ BODY: ["Hello"]
376
+ =====[SESSION]=====
377
+ ===================
378
+ REQUEST [1259876639] END
379
+ REQUEST [1259876639] START
380
+ METHOD: GET
381
+ URL: http://localhost:9999//
382
+ =====[ENV]=====
383
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
384
+ SERVER_NAME: localhost --> String
385
+ rack.input: #<StringIO:0x000001014e1298> --> StringIO
386
+ rack.version: [1, 0] --> Array
387
+ rack.errors: #<IO:0x00000100888670> --> IO
388
+ rack.multithread: true --> TrueClass
389
+ rack.multiprocess: false --> FalseClass
390
+ rack.run_once: false --> FalseClass
391
+ REQUEST_METHOD: GET --> String
392
+ REQUEST_PATH: / --> String
393
+ PATH_INFO: / --> String
394
+ REQUEST_URI: / --> String
395
+ HTTP_VERSION: HTTP/1.1 --> String
396
+ HTTP_HOST: localhost:9999 --> String
397
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
398
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
399
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
400
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
401
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
402
+ HTTP_KEEP_ALIVE: 300 --> String
403
+ HTTP_CONNECTION: keep-alive --> String
404
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
405
+ HTTP_CACHE_CONTROL: max-age=0 --> String
406
+ GATEWAY_INTERFACE: CGI/1.2 --> String
407
+ SERVER_PORT: 9999 --> String
408
+ QUERY_STRING: --> String
409
+ SERVER_PROTOCOL: HTTP/1.1 --> String
410
+ rack.url_scheme: http --> String
411
+ SCRIPT_NAME: --> String
412
+ REMOTE_ADDR: 127.0.0.1 --> String
413
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
414
+ async.close: #<EventMachine::DefaultDeferrable:0x000001014de898> --> EventMachine::DefaultDeferrable
415
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
416
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
417
+ rack.session: {} --> Hash
418
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
419
+ rack.request.query_string: --> String
420
+ rack.request.query_hash: {} --> Hash
421
+ rack.request.form_input: #<StringIO:0x000001014e1298> --> StringIO
422
+ rack.request.form_hash: {} --> Hash
423
+ rack.request.form_vars: --> String
424
+
425
+
426
+ ===============
427
+ STATUS: 200
428
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
429
+ BODY: ["Hello"]
430
+ =====[SESSION]=====
431
+ ===================
432
+ REQUEST [1259876639] END
433
+ REQUEST [1259876639] START
434
+ METHOD: GET
435
+ URL: http://localhost:9999//
436
+ =====[ENV]=====
437
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
438
+ SERVER_NAME: localhost --> String
439
+ rack.input: #<StringIO:0x0000010147bf68> --> StringIO
440
+ rack.version: [1, 0] --> Array
441
+ rack.errors: #<IO:0x00000100888670> --> IO
442
+ rack.multithread: true --> TrueClass
443
+ rack.multiprocess: false --> FalseClass
444
+ rack.run_once: false --> FalseClass
445
+ REQUEST_METHOD: GET --> String
446
+ REQUEST_PATH: / --> String
447
+ PATH_INFO: / --> String
448
+ REQUEST_URI: / --> String
449
+ HTTP_VERSION: HTTP/1.1 --> String
450
+ HTTP_HOST: localhost:9999 --> String
451
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
452
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
453
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
454
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
455
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
456
+ HTTP_KEEP_ALIVE: 300 --> String
457
+ HTTP_CONNECTION: keep-alive --> String
458
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
459
+ HTTP_CACHE_CONTROL: max-age=0 --> String
460
+ GATEWAY_INTERFACE: CGI/1.2 --> String
461
+ SERVER_PORT: 9999 --> String
462
+ QUERY_STRING: --> String
463
+ SERVER_PROTOCOL: HTTP/1.1 --> String
464
+ rack.url_scheme: http --> String
465
+ SCRIPT_NAME: --> String
466
+ REMOTE_ADDR: 127.0.0.1 --> String
467
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
468
+ async.close: #<EventMachine::DefaultDeferrable:0x00000101470508> --> EventMachine::DefaultDeferrable
469
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
470
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
471
+ rack.session: {} --> Hash
472
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
473
+ rack.request.query_string: --> String
474
+ rack.request.query_hash: {} --> Hash
475
+ rack.request.form_input: #<StringIO:0x0000010147bf68> --> StringIO
476
+ rack.request.form_hash: {} --> Hash
477
+ rack.request.form_vars: --> String
478
+
479
+
480
+ ===============
481
+ STATUS: 200
482
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
483
+ BODY: ["Hello"]
484
+ =====[SESSION]=====
485
+ ===================
486
+ REQUEST [1259876639] END
487
+ REQUEST [1259876657] START
488
+ METHOD: GET
489
+ URL: http://localhost:9999//favicon.ico
490
+ =====[ENV]=====
491
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
492
+ SERVER_NAME: localhost --> String
493
+ rack.input: #<StringIO:0x000001012c4900> --> StringIO
494
+ rack.version: [1, 0] --> Array
495
+ rack.errors: #<IO:0x00000100888670> --> IO
496
+ rack.multithread: true --> TrueClass
497
+ rack.multiprocess: false --> FalseClass
498
+ rack.run_once: false --> FalseClass
499
+ REQUEST_METHOD: GET --> String
500
+ REQUEST_PATH: /favicon.ico --> String
501
+ PATH_INFO: /favicon.ico --> String
502
+ REQUEST_URI: /favicon.ico --> String
503
+ HTTP_VERSION: HTTP/1.1 --> String
504
+ HTTP_HOST: localhost:9999 --> String
505
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 --> String
506
+ HTTP_ACCEPT: image/png,image/*;q=0.8,*/*;q=0.5 --> String
507
+ HTTP_ACCEPT_LANGUAGE: en-us,en;q=0.5 --> String
508
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
509
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
510
+ HTTP_KEEP_ALIVE: 300 --> String
511
+ HTTP_CONNECTION: keep-alive --> String
512
+ HTTP_COOKIE: sifrFetch=true; a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
513
+ GATEWAY_INTERFACE: CGI/1.2 --> String
514
+ SERVER_PORT: 9999 --> String
515
+ QUERY_STRING: --> String
516
+ SERVER_PROTOCOL: HTTP/1.1 --> String
517
+ rack.url_scheme: http --> String
518
+ SCRIPT_NAME: --> String
519
+ REMOTE_ADDR: 127.0.0.1 --> String
520
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
521
+ async.close: #<EventMachine::DefaultDeferrable:0x000001012bf688> --> EventMachine::DefaultDeferrable
522
+ rack.request.cookie_string: sifrFetch=true; a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
523
+ rack.request.cookie_hash: {"sifrFetch"=>"true", "a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
524
+ rack.session: {} --> Hash
525
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
526
+ rack.request.query_string: --> String
527
+ rack.request.query_hash: {} --> Hash
528
+ rack.request.form_input: #<StringIO:0x000001012c4900> --> StringIO
529
+ rack.request.form_hash: {} --> Hash
530
+ rack.request.form_vars: --> String
531
+ sinatra.error: Sinatra::NotFound --> Sinatra::NotFound
532
+
533
+
534
+ none
535
+ favicon.ico
536
+ ===============
537
+ STATUS: 404
538
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"420"}
539
+ BODY: ["<!DOCTYPE html>\n<html>\n<head>\n <style type=\"text/css\">\n body { text-align:center;font-family:helvetica,arial;font-size:22px;\n color:#888;margin:20px}\n #c {margin:0 auto;width:500px;text-align:left}\n </style>\n</head>\n<body>\n <h2>Sinatra doesn't know this ditty.</h2>\n <img src='/__sinatra__/404.png'>\n <div id=\"c\">\n Try this:\n <pre>get '/favicon.ico' do\n \"Hello World\"\nend</pre>\n </div>\n</body>\n</html>\n"]
540
+ =====[SESSION]=====
541
+ ===================
542
+ REQUEST [1259876657] END
543
+ REQUEST [1259876660] START
544
+ METHOD: GET
545
+ URL: http://localhost:9999//favicon.ico
546
+ =====[ENV]=====
547
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
548
+ SERVER_NAME: localhost --> String
549
+ rack.input: #<StringIO:0x00000101228e88> --> StringIO
550
+ rack.version: [1, 0] --> Array
551
+ rack.errors: #<IO:0x00000100888670> --> IO
552
+ rack.multithread: true --> TrueClass
553
+ rack.multiprocess: false --> FalseClass
554
+ rack.run_once: false --> FalseClass
555
+ REQUEST_METHOD: GET --> String
556
+ REQUEST_PATH: /favicon.ico --> String
557
+ PATH_INFO: /favicon.ico --> String
558
+ REQUEST_URI: /favicon.ico --> String
559
+ HTTP_VERSION: HTTP/1.1 --> String
560
+ HTTP_HOST: localhost:9999 --> String
561
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 --> String
562
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
563
+ HTTP_ACCEPT_LANGUAGE: en-us,en;q=0.5 --> String
564
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
565
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
566
+ HTTP_KEEP_ALIVE: 300 --> String
567
+ HTTP_CONNECTION: keep-alive --> String
568
+ HTTP_COOKIE: sifrFetch=true; a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
569
+ GATEWAY_INTERFACE: CGI/1.2 --> String
570
+ SERVER_PORT: 9999 --> String
571
+ QUERY_STRING: --> String
572
+ SERVER_PROTOCOL: HTTP/1.1 --> String
573
+ rack.url_scheme: http --> String
574
+ SCRIPT_NAME: --> String
575
+ REMOTE_ADDR: 127.0.0.1 --> String
576
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
577
+ async.close: #<EventMachine::DefaultDeferrable:0x00000101227330> --> EventMachine::DefaultDeferrable
578
+ rack.request.cookie_string: sifrFetch=true; a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
579
+ rack.request.cookie_hash: {"sifrFetch"=>"true", "a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
580
+ rack.session: {} --> Hash
581
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
582
+ rack.request.query_string: --> String
583
+ rack.request.query_hash: {} --> Hash
584
+ rack.request.form_input: #<StringIO:0x00000101228e88> --> StringIO
585
+ rack.request.form_hash: {} --> Hash
586
+ rack.request.form_vars: --> String
587
+ sinatra.error: Sinatra::NotFound --> Sinatra::NotFound
588
+
589
+
590
+ none
591
+ favicon.ico
592
+ ===============
593
+ STATUS: 404
594
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"420"}
595
+ BODY: ["<!DOCTYPE html>\n<html>\n<head>\n <style type=\"text/css\">\n body { text-align:center;font-family:helvetica,arial;font-size:22px;\n color:#888;margin:20px}\n #c {margin:0 auto;width:500px;text-align:left}\n </style>\n</head>\n<body>\n <h2>Sinatra doesn't know this ditty.</h2>\n <img src='/__sinatra__/404.png'>\n <div id=\"c\">\n Try this:\n <pre>get '/favicon.ico' do\n \"Hello World\"\nend</pre>\n </div>\n</body>\n</html>\n"]
596
+ =====[SESSION]=====
597
+ ===================
598
+ REQUEST [1259876660] END