修訂 | 63 (tree) |
---|---|
時間 | 2008-03-27 22:34:42 |
作者 | junkikuchi |
updated.
@@ -8,18 +8,18 @@ | ||
8 | 8 | require 'tenarai/cgi' |
9 | 9 | |
10 | 10 | class CGITest < Test::Unit::TestCase |
11 | - ENCODE1 = 'AaBb123%E3%81%A6%E3%81%Aa%E3%82%89%e3%81%84+x' | |
12 | - DECODE1 = 'AaBb123てならい x' | |
11 | + A = 'AaBb123%e3%81%a6%e3%81%aa%e3%82%89%e3%81%84+x' | |
12 | + B = 'AaBb123てならい x' | |
13 | 13 | |
14 | 14 | DATE = Time.local(2007, 6, 5, 22, 10, 0, 0) |
15 | 15 | DATE_CGI = 'Tue, 05 Jun 2007 13:10:00 GMT' |
16 | 16 | |
17 | - def test_decode | |
18 | - assert_equal(ENCODE1, Tenarai::CGI.decode(DECODE1)) | |
17 | + def test_escape | |
18 | + assert_equal(A, Tenarai::CGI.escape(B)) | |
19 | 19 | end |
20 | 20 | |
21 | - def test_decode | |
22 | - assert_equal(DECODE1, Tenarai::CGI.decode(ENCODE1)) | |
21 | + def test_unescape | |
22 | + assert_equal(B, Tenarai::CGI.unescape(A)) | |
23 | 23 | end |
24 | 24 | |
25 | 25 | def test_date |
@@ -9,8 +9,8 @@ | ||
9 | 9 | module Tenarai |
10 | 10 | class WEBrick |
11 | 11 | class Request < CGI::Request |
12 | - def initialize(request) | |
13 | - super(StringIO.new(request.body.to_s), request.meta_vars) | |
12 | + def initialize(request, param) | |
13 | + super(StringIO.new(request.body.to_s), request.meta_vars, param) | |
14 | 14 | end |
15 | 15 | end |
16 | 16 |
@@ -47,7 +47,7 @@ | ||
47 | 47 | end |
48 | 48 | |
49 | 49 | server.mount_proc(param[:path]) do |_request, _response| |
50 | - request = Request.new(_request) | |
50 | + request = Request.new(_request, @param) | |
51 | 51 | response = Response.new(_response) |
52 | 52 | block.call(request, response) |
53 | 53 | response.flush |
@@ -31,7 +31,7 @@ | ||
31 | 31 | end |
32 | 32 | |
33 | 33 | def to_s |
34 | - a = ["%s=%s" % [@name, CGI.encode(@value)]] | |
34 | + a = ["%s=%s" % [@name, CGI.escape(@value)]] | |
35 | 35 | @expires && a << "expires=%s" % CGI.date(@expires) |
36 | 36 | @path && a << "path=%s" % @path |
37 | 37 | @domain && a << "domain=%s" % @domain |
@@ -19,7 +19,7 @@ | ||
19 | 19 | def decode(query) |
20 | 20 | query.to_s.split(/[&;]/).inject(Query.new) do |ret, q| |
21 | 21 | key, val = q.split('=') |
22 | - ret[CGI.decode(key)] = CGI.decode(val) | |
22 | + ret[CGI.unescape(key)] = CGI.unescape(val) | |
23 | 23 | ret |
24 | 24 | end |
25 | 25 | end |
@@ -75,7 +75,7 @@ | ||
75 | 75 | if v.empty? |
76 | 76 | ret << key |
77 | 77 | else |
78 | - ret << "%s=%s" % [key, CGI.encode(v)] | |
78 | + ret << "%s=%s" % [key, CGI.escape(v)] | |
79 | 79 | end |
80 | 80 | end |
81 | 81 | else |
@@ -82,7 +82,7 @@ | ||
82 | 82 | if val.empty? |
83 | 83 | ret << key |
84 | 84 | else |
85 | - ret << "%s=%s" % [key, CGI.encode(val)] | |
85 | + ret << "%s=%s" % [key, CGI.escape(val)] | |
86 | 86 | end |
87 | 87 | end |
88 | 88 | ret |
@@ -9,11 +9,11 @@ | ||
9 | 9 | module Tenarai |
10 | 10 | class CGI |
11 | 11 | class << self |
12 | - def encode(s) | |
12 | + def escape(s) | |
13 | 13 | s.to_s.gsub(/[^\w ]/n) do |c| '%%%02x' % c[0] end.tr(' ', '+') |
14 | 14 | end |
15 | 15 | |
16 | - def decode(s) | |
16 | + def unescape(s) | |
17 | 17 | s.to_s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do |
18 | 18 | [$1.delete('%')].pack('H*') |
19 | 19 | end |
@@ -24,7 +24,9 @@ | ||
24 | 24 | end |
25 | 25 | end |
26 | 26 | |
27 | - def initialize(&block) | |
27 | + def initialize(param={} &block) | |
28 | + @param = param | |
29 | + | |
28 | 30 | if STDIN.respond_to?(:stat) && STDIN.stat.socket? |
29 | 31 | require 'fcgi' |
30 | 32 | FCGI.each do |fcgi| |
@@ -36,7 +38,7 @@ | ||
36 | 38 | end |
37 | 39 | |
38 | 40 | def dispatch(stdin, stdout, env, &block) |
39 | - request = Request.new(stdin, env) | |
41 | + request = Request.new(stdin, env, @param) | |
40 | 42 | response = Response.new(stdout) |
41 | 43 | block.call(request, response) |
42 | 44 | response.flush |
@@ -14,8 +14,8 @@ | ||
14 | 14 | module Tenarai |
15 | 15 | class Mongrel |
16 | 16 | class Request < CGI::Request |
17 | - def initialize(request) | |
18 | - super(request.body, request.params) | |
17 | + def initialize(request, param) | |
18 | + super(request.body, request.params, param) | |
19 | 19 | end |
20 | 20 | end |
21 | 21 |
@@ -30,12 +30,13 @@ | ||
30 | 30 | end |
31 | 31 | |
32 | 32 | class Handler < ::Mongrel::HttpHandler |
33 | - def initialize(&block) | |
33 | + def initialize(param, &block) | |
34 | + @param = param | |
34 | 35 | @block = block |
35 | 36 | end |
36 | 37 | |
37 | 38 | def process(_request, _response) |
38 | - request = Request.new(_request) | |
39 | + request = Request.new(_request, @param) | |
39 | 40 | response = Response.new(_response) |
40 | 41 | @block.call(request, response) |
41 | 42 | response.flush |
@@ -54,7 +55,7 @@ | ||
54 | 55 | server.stop |
55 | 56 | end |
56 | 57 | |
57 | - server.register(param[:path], Mongrel::Handler.new(&block)) | |
58 | + server.register(param[:path], Mongrel::Handler.new(@param, &block)) | |
58 | 59 | server.run.join |
59 | 60 | end |
60 | 61 | end |
@@ -97,7 +97,7 @@ | ||
97 | 97 | aw.min <=> bw.min |
98 | 98 | end.each do |w, val| |
99 | 99 | query = val.split(',').map do |v| |
100 | - Tenarai::CGI.decode(v) | |
100 | + Tenarai::CGI.unescape(v) | |
101 | 101 | end |
102 | 102 | w.init(*query) |
103 | 103 | end |