cgialt 0.0.2 → 1.0.0
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/CHANGES.txt +21 -2
- data/README.txt +22 -9
- data/bench.rb +3 -3
- data/lib/cgialt.rb +1 -1
- data/lib/cgialt/cookie.rb +7 -5
- data/lib/cgialt/core.rb +92 -70
- data/lib/cgialt/fcgi.rb +3 -3
- data/lib/cgialt/fcgi/cgi_helper.rb +4 -4
- data/lib/cgialt/fcgi/core.rb +50 -50
- data/lib/cgialt/util.rb +71 -27
- data/setup.rb +861 -607
- data/test/test_cgi_cookie.rb +1 -1
- data/test/test_cgi_core.rb +21 -2
- data/test/test_cgi_header.rb +1 -1
- data/test/test_cgi_modruby.rb +1 -1
- data/test/test_cgi_multipart.rb +29 -4
- data/test/test_cgi_util.rb +240 -0
- metadata +41 -33
data/test/test_cgi_cookie.rb
CHANGED
data/test/test_cgi_core.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
#require 'cgi'
|
3
|
-
require(ENV['CGI'] || '
|
3
|
+
require(ENV['CGI'] || 'cgialt')
|
4
4
|
require 'stringio'
|
5
5
|
|
6
6
|
|
@@ -18,11 +18,19 @@ class CGICoreTest < Test::Unit::TestCase
|
|
18
18
|
|
19
19
|
|
20
20
|
def teardown
|
21
|
-
@environ.each do |key, val| ENV.delete(key) end
|
21
|
+
@environ and @environ.each do |key, val| ENV.delete(key) end
|
22
22
|
$stdout = STDOUT
|
23
23
|
end
|
24
24
|
|
25
25
|
|
26
|
+
def test_cgi_core_parse
|
27
|
+
assert_equal({'foo'=>['bar']}, CGI.parse('foo=bar'))
|
28
|
+
assert_equal({'a'=>['10'], 'b'=>['20']}, CGI.parse('a=10&b=20'))
|
29
|
+
assert_equal({'noval'=>['']}, CGI.parse('noval='))
|
30
|
+
assert_equal({'noeq'=>[nil]}, CGI.parse('noeq')) # same spec as cgi.rb
|
31
|
+
end
|
32
|
+
|
33
|
+
|
26
34
|
def test_cgi_core_params_GET
|
27
35
|
@environ = {
|
28
36
|
'REQUEST_METHOD' => 'GET',
|
@@ -174,6 +182,8 @@ class CGICoreTest < Test::Unit::TestCase
|
|
174
182
|
"Content-Language: ja\r\n" +
|
175
183
|
"\r\n" +
|
176
184
|
euc_str
|
185
|
+
# actual.encoding => US-ASCII, expected.encoding => ASCII-8BIT
|
186
|
+
expected = _convert_encoding(expected, actual)
|
177
187
|
assert_equal(expected, actual)
|
178
188
|
## shift_jis
|
179
189
|
options = { 'charset'=>'Shift_JIS' }
|
@@ -186,6 +196,8 @@ class CGICoreTest < Test::Unit::TestCase
|
|
186
196
|
"Content-Language: ja\r\n" +
|
187
197
|
"\r\n" +
|
188
198
|
sjis_str
|
199
|
+
# actual.encoding => US-ASCII, expected.encoding => ASCII-8BIT
|
200
|
+
expected = _convert_encoding(expected, actual)
|
189
201
|
assert_equal(expected, actual)
|
190
202
|
## utf8 (not converted)
|
191
203
|
options = { 'charset'=>'utf8' }
|
@@ -197,6 +209,8 @@ class CGICoreTest < Test::Unit::TestCase
|
|
197
209
|
"Content-Length: 22\r\n" +
|
198
210
|
"\r\n" +
|
199
211
|
euc_str
|
212
|
+
# actual.encoding => US-ASCII, expected.encoding => ASCII-8BIT
|
213
|
+
expected = _convert_encoding(expected, actual)
|
200
214
|
assert_equal(expected, actual)
|
201
215
|
## language is keeped
|
202
216
|
options = { 'charset'=>'Shift_JIS', 'language'=>'en' }
|
@@ -215,6 +229,11 @@ class CGICoreTest < Test::Unit::TestCase
|
|
215
229
|
assert_equal(expected, actual)
|
216
230
|
end
|
217
231
|
|
232
|
+
def _convert_encoding(expected, actual)
|
233
|
+
"".respond_to?(:encoding) && actual.encoding != expected.encoding \
|
234
|
+
? expected.force_encoding(actual.encoding) \
|
235
|
+
: expected
|
236
|
+
end
|
218
237
|
|
219
238
|
def test_cgi_core_print
|
220
239
|
@environ = {
|
data/test/test_cgi_header.rb
CHANGED
data/test/test_cgi_modruby.rb
CHANGED
data/test/test_cgi_multipart.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
#require 'cgi'
|
3
|
-
require(ENV['CGI'] || '
|
3
|
+
require(ENV['CGI'] || 'cgialt')
|
4
4
|
require 'tempfile'
|
5
5
|
require 'stringio'
|
6
6
|
|
@@ -36,6 +36,16 @@ class MultiPart
|
|
36
36
|
end
|
37
37
|
attr_reader :boundary
|
38
38
|
|
39
|
+
if "".respond_to?(:encoding) && "".respond_to?(:force_encoding) # Ruby1.9
|
40
|
+
def _convert_encoding(str, str2)
|
41
|
+
str.force_encoding(str2.encoding)
|
42
|
+
end
|
43
|
+
else
|
44
|
+
def _convert_encoding(str, str2)
|
45
|
+
str
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
39
49
|
def append(name, value, filename=nil, content_type=nil)
|
40
50
|
content_type = detect_content_type(filename) if filename && content_type.nil?
|
41
51
|
s = filename ? "; filename=\"#{filename}\"" : ''
|
@@ -44,6 +54,7 @@ class MultiPart
|
|
44
54
|
buf << "Content-Disposition: form-data: name=\"#{name}\"#{s}\r\n"
|
45
55
|
buf << "Content-Type: #{content_type}\r\n" if content_type
|
46
56
|
buf << "\r\n"
|
57
|
+
buf = _convert_encoding(buf, value)
|
47
58
|
buf << value
|
48
59
|
buf << "\r\n"
|
49
60
|
return self
|
@@ -109,7 +120,7 @@ class CGIMultipartTest < Test::Unit::TestCase
|
|
109
120
|
end
|
110
121
|
|
111
122
|
def teardown
|
112
|
-
%[REQUEST_METHOD CONTENT_TYPE CONTENT_LENGTH REQUEST_METHOD].each do |name|
|
123
|
+
%w[REQUEST_METHOD CONTENT_TYPE CONTENT_LENGTH REQUEST_METHOD].each do |name|
|
113
124
|
ENV.delete(name)
|
114
125
|
end
|
115
126
|
$stdin.close() if $stdin.is_a?(Tempfile)
|
@@ -151,7 +162,11 @@ class CGIMultipartTest < Test::Unit::TestCase
|
|
151
162
|
expected = hash[:value]
|
152
163
|
expected_class = @expected_class || (hash[:value].length < threshold ? StringIO : Tempfile)
|
153
164
|
assert_kind_of(expected_class, cgi[name])
|
154
|
-
|
165
|
+
actual = cgi[name].read()
|
166
|
+
if "".respond_to?(:encoding) # Ruby1.9
|
167
|
+
expected = expected.force_encoding(actual.encoding)
|
168
|
+
end
|
169
|
+
assert_equal(expected, actual)
|
155
170
|
assert_equal(hash[:filename] || '', cgi[name].original_filename) #if hash[:filename]
|
156
171
|
assert_equal(hash[:content_type] || '', cgi[name].content_type) #if hash[:content_type]
|
157
172
|
end
|
@@ -190,7 +205,11 @@ class CGIMultipartTest < Test::Unit::TestCase
|
|
190
205
|
{:name=>'image1', :value=>_read('large.png'),
|
191
206
|
:filename=>'large.png', :content_type=>'image/png'}, # large image
|
192
207
|
]
|
193
|
-
|
208
|
+
if "".respond_to?(:encoding) # Ruby1.9
|
209
|
+
@expected_class = File
|
210
|
+
else
|
211
|
+
@expected_class = Tempfile
|
212
|
+
end
|
194
213
|
_test_multipart()
|
195
214
|
end
|
196
215
|
|
@@ -248,6 +267,9 @@ class CGIMultipartTest < Test::Unit::TestCase
|
|
248
267
|
:filename=>'file1.html', :content_type=>'text/html'},
|
249
268
|
]
|
250
269
|
_prepare(@data) do |input|
|
270
|
+
if input.respond_to?(:encoding) # Ruby1.9
|
271
|
+
input = input.force_encoding('ASCII-8BIT')
|
272
|
+
end
|
251
273
|
input2 = input.sub(/--(\r\n)?\z/, "\r\n")
|
252
274
|
assert input2 != input
|
253
275
|
#p input2
|
@@ -259,6 +281,9 @@ class CGIMultipartTest < Test::Unit::TestCase
|
|
259
281
|
assert_equal("bad boundary end of body part", ex.message)
|
260
282
|
#
|
261
283
|
_prepare(@data) do |input|
|
284
|
+
if input.respond_to?(:encoding) # Ruby1.9
|
285
|
+
input = input.force_encoding('ASCII-8BIT')
|
286
|
+
end
|
262
287
|
input2 = input.sub(/--(\r\n)?\z/, "")
|
263
288
|
assert input2 != input
|
264
289
|
#p input2
|
@@ -0,0 +1,240 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
#require 'cgi'
|
3
|
+
require(ENV['CGI'] || 'cgialt')
|
4
|
+
|
5
|
+
|
6
|
+
if defined?(CGIExt)
|
7
|
+
def if_cgiext; yield if block_given?; true; end
|
8
|
+
def if_cgialt; false; end
|
9
|
+
else
|
10
|
+
def if_cgiext; false; end
|
11
|
+
def if_cgialt; yield if block_given?; true; end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
class CGIUtilTest < Test::Unit::TestCase
|
16
|
+
|
17
|
+
def test_escape_html
|
18
|
+
## escape html characters
|
19
|
+
input = '<>&"\''
|
20
|
+
expected = '<>&"\''
|
21
|
+
actual = nil
|
22
|
+
if_cgiext { actual = CGIExt.escape_html(input) }
|
23
|
+
if_cgialt { actual = CGI.escapeHTML(input) }
|
24
|
+
assert_equal(expected, actual)
|
25
|
+
if_cgiext { assert_equal(CGI.escapeHTML(input), actual) }
|
26
|
+
## if no html characters found, return the passed argument as is
|
27
|
+
input = 'foobar'
|
28
|
+
expected = input
|
29
|
+
if_cgiext { actual = CGIExt.escape_html(input) }
|
30
|
+
if_cgialt { actual = CGI.escapeHTML(input) }
|
31
|
+
assert_equal(expected, actual)
|
32
|
+
#assert_same(expected, actual)
|
33
|
+
## when non-string is passed, error raised
|
34
|
+
input = nil
|
35
|
+
if_cgiext { assert_raise(TypeError) { CGIExt.escape_html(input) } }
|
36
|
+
if_cgialt { assert_raise(NoMethodError) { CGI.escapeHTML(input) } }
|
37
|
+
input = 123
|
38
|
+
if_cgiext { assert_raise(TypeError) { CGIExt.escape_html(input) } }
|
39
|
+
if_cgialt { assert_raise(NoMethodError) { CGI.escapeHTML(input) } }
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
if_cgiext {
|
44
|
+
def test_escape_html!
|
45
|
+
## escape html characters
|
46
|
+
input = '<>&"\''
|
47
|
+
expected = '<>&"\''
|
48
|
+
actual = CGIExt.escape_html!(input)
|
49
|
+
assert_equal(expected, actual)
|
50
|
+
assert_equal(CGI.escapeHTML(input), actual)
|
51
|
+
## if no html characters found, return the string as is
|
52
|
+
input = 'foobar'
|
53
|
+
expected = input
|
54
|
+
actual = CGIExt.escape_html!(input)
|
55
|
+
assert_equal(expected, actual)
|
56
|
+
assert_same(expected, actual)
|
57
|
+
## non-string value are converted into string
|
58
|
+
input = nil
|
59
|
+
expected = ''
|
60
|
+
actual = CGIExt.escape_html!(input)
|
61
|
+
assert_equal(expected, actual)
|
62
|
+
input = 123
|
63
|
+
expected = '123'
|
64
|
+
actual = CGIExt.escape_html!(input)
|
65
|
+
assert_equal(expected, actual)
|
66
|
+
end
|
67
|
+
}
|
68
|
+
|
69
|
+
|
70
|
+
def test_unescape_html
|
71
|
+
## unescape html characters
|
72
|
+
tdata = [
|
73
|
+
## html entities ('<>&"')
|
74
|
+
['<>&"', '<>&"'],
|
75
|
+
## otehr html entities (ex. '©')
|
76
|
+
['©&heart;', '©&heart;'],
|
77
|
+
## 'c' format
|
78
|
+
['"&'<>', '"&\'<>'],
|
79
|
+
## '香' format
|
80
|
+
['"&'<>', '"&\'<>'],
|
81
|
+
## invalid format
|
82
|
+
['&<&>"&abcdefghijklmn', '&<&>"&abcdefghijklmn'],
|
83
|
+
]
|
84
|
+
actual = nil
|
85
|
+
tdata.each do |input, expected|
|
86
|
+
if_cgiext { actual = CGIExt.unescape_html(input) }
|
87
|
+
if_cgialt { actual = CGI.unescapeHTML(input) }
|
88
|
+
assert_equal(expected, actual)
|
89
|
+
if_cgiext { assert_equal(CGI.unescapeHTML(input), actual) }
|
90
|
+
end
|
91
|
+
## return as-is when no html entity found
|
92
|
+
input = "foobar"
|
93
|
+
expected = input
|
94
|
+
if_cgiext { actual = CGIExt.unescape_html(input) }
|
95
|
+
if_cgialt { actual = CGI.unescapeHTML(input) }
|
96
|
+
assert_equal(expected, actual)
|
97
|
+
if_cgiext { assert_same(expected, actual) }
|
98
|
+
## when non-string is passed, error raised
|
99
|
+
input = nil
|
100
|
+
if_cgiext { assert_raise(TypeError) { CGIExt.unescape_html(input) } }
|
101
|
+
if_cgialt { assert_raise(NoMethodError) { CGI.unescapeHTML(input) } }
|
102
|
+
input = 123
|
103
|
+
if_cgiext { assert_raise(TypeError) { CGIExt.unescape_html(input) } }
|
104
|
+
if_cgialt { assert_raise(NoMethodError) { CGI.unescapeHTML(input) } }
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
TESTDATA_FOR_ESCAPE_URL = [
|
109
|
+
## example data
|
110
|
+
["'Stop!' said Fred._-+", '%27Stop%21%27+said+Fred._-%2B'],
|
111
|
+
## characters not to be escaped
|
112
|
+
["abcdefgxyzABCDEFGXYZ0123456789_.-", "abcdefgxyzABCDEFGXYZ0123456789_.-"],
|
113
|
+
## characters to be escaped
|
114
|
+
[' !"#$%&\'()*+,/:;<=>?@[\\]^`{|}~', "+%21%22%23%24%25%26%27%28%29%2A%2B%2C%2F%3A%3B%3C%3D%3E%3F%40%5B%5C%5D%5E%60%7B%7C%7D%7E"],
|
115
|
+
## '%' format
|
116
|
+
["k[]", 'k%5B%5D'],
|
117
|
+
## unicode characters
|
118
|
+
["\244\242\244\244\244\246\244\250\244\252", "%A4%A2%A4%A4%A4%A6%A4%A8%A4%AA"],
|
119
|
+
]
|
120
|
+
|
121
|
+
|
122
|
+
def test_escape_url
|
123
|
+
## encode url string
|
124
|
+
testdata = TESTDATA_FOR_ESCAPE_URL + [
|
125
|
+
## containing '%' character
|
126
|
+
["%XX%5%%%", "%25XX%255%25%25%25"],
|
127
|
+
]
|
128
|
+
actual = nil
|
129
|
+
testdata.each do |input, expected|
|
130
|
+
if_cgiext { actual = CGIExt.escape_url(input) }
|
131
|
+
if_cgialt { actual = CGI.escape(input) }
|
132
|
+
assert_equal(expected, actual)
|
133
|
+
if_cgiext { assert_equal(CGI.escape(input), actual) }
|
134
|
+
#assert_equal(expected, CGI.escape(input))
|
135
|
+
end
|
136
|
+
## error when non-string
|
137
|
+
if_cgiext { assert_raise(TypeError) { CGIExt.escape_url(nil) } }
|
138
|
+
if_cgialt { assert_raise(NoMethodError) { CGI.escape(nil) } }
|
139
|
+
if_cgiext { assert_raise(TypeError) { CGIExt.escape_url(123) } }
|
140
|
+
if_cgialt { assert_raise(NoMethodError) { CGI.escape(123) } }
|
141
|
+
end
|
142
|
+
|
143
|
+
|
144
|
+
def test_unescape_url
|
145
|
+
## decode url string
|
146
|
+
testdata = TESTDATA_FOR_ESCAPE_URL + [
|
147
|
+
## invalid '%' format
|
148
|
+
["%XX%5%%%", "%XX%5%%%"],
|
149
|
+
## combination of lower case and upper case
|
150
|
+
["\244\252", "%a4%Aa"],
|
151
|
+
]
|
152
|
+
actual = nil
|
153
|
+
testdata.each do |expected, input|
|
154
|
+
if_cgiext { actual = CGIExt.unescape_url(input) }
|
155
|
+
if_cgialt { actual = CGI.unescape(input) }
|
156
|
+
assert_equal(expected, actual)
|
157
|
+
if_cgiext { assert_equal(CGI.unescape(input), actual) }
|
158
|
+
#assert_equal(expected, CGI.unescape(input))
|
159
|
+
end
|
160
|
+
## error when non-string
|
161
|
+
if_cgiext { assert_raise(TypeError) { CGIExt.unescape_url(nil) } }
|
162
|
+
if_cgialt { assert_raise(NoMethodError) { CGI.unescape(nil) } }
|
163
|
+
if_cgiext { assert_raise(TypeError) { CGIExt.unescape_url(123) } }
|
164
|
+
if_cgialt { assert_raise(NoMethodError) { CGI.unescape(123) } }
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
def test_rfc1123_date
|
169
|
+
sec = 1196524602
|
170
|
+
t = Time.at(sec)
|
171
|
+
expected = 'Sat, 01 Dec 2007 15:56:42 GMT'
|
172
|
+
actual = nil
|
173
|
+
if_cgiext { actual = CGIExt.rfc1123_date(t) }
|
174
|
+
if_cgialt { actual = CGI.rfc1123_date(t) }
|
175
|
+
assert_equal(expected, actual)
|
176
|
+
if_cgiext { assert_equal(CGI.rfc1123_date(t), actual) }
|
177
|
+
## error when not Time object
|
178
|
+
if_cgiext { assert_raise(TypeError) { CGIExt.rfc1123_date(nil) } }
|
179
|
+
if_cgialt { assert_raise(TypeError) { CGI.rfc1123_date(nil) } }
|
180
|
+
if_cgiext { assert_raise(TypeError) { CGIExt.rfc1123_date(123) } }
|
181
|
+
if_cgialt { assert_raise(TypeError) { CGI.rfc1123_date(123) } }
|
182
|
+
end
|
183
|
+
|
184
|
+
|
185
|
+
def test_parse_query_string
|
186
|
+
## equal with CGI.parse()
|
187
|
+
tuples = [
|
188
|
+
## '&' separator
|
189
|
+
['a=10&b=20&key1=val1', {'a'=>['10'], 'b'=>['20'], 'key1'=>['val1']} ],
|
190
|
+
## ';' separator
|
191
|
+
['a=10;b=20;key1=val1', {'a'=>['10'], 'b'=>['20'], 'key1'=>['val1']} ],
|
192
|
+
## same keys
|
193
|
+
['a=1&a=2&a=3', {'a'=>['1', '2', '3']} ],
|
194
|
+
## no value
|
195
|
+
['key=&key=', {'key'=>['', '']} ],
|
196
|
+
## unescape ascii string
|
197
|
+
['k%5B%5D=%5B%5D%26%3B', {'k[]'=>['[]&;']} ],
|
198
|
+
## unescape unicode string
|
199
|
+
["%A4%A2%a4%a4=%A4%a6%A4%A8%A4%Aa", {"\244\242\244\244"=>["\244\246\244\250\244\252"]} ],
|
200
|
+
## invalid '%' format
|
201
|
+
['k%XX%5=%%%', {'k%XX%5'=>['%%%']} ],
|
202
|
+
]
|
203
|
+
actual = nil
|
204
|
+
tuples.each do |input, expected|
|
205
|
+
if_cgiext { actual = CGIExt.parse_query_string(input) }
|
206
|
+
if_cgialt { actual = CGI.parse(input) }
|
207
|
+
assert_equal(expected, actual)
|
208
|
+
if_cgiext { assert_equal(CGI.parse(input), actual) }
|
209
|
+
end
|
210
|
+
## different with CGI.parse()
|
211
|
+
tdata = {}
|
212
|
+
## without '=' (CGI: {"a"=>[nil], "b"=>[nil]})
|
213
|
+
if_cgiext { tdata['a&b'] = {'a'=>[''], 'b'=>['']} }
|
214
|
+
if_cgialt { tdata['a&b'] = {"a"=>[nil], "b"=>[nil]} }
|
215
|
+
## no key (CGI: {""=>["a", "b"], nil=>[nil]})
|
216
|
+
if_cgiext { tdata['&=a&=b'] = {''=>['', 'a', 'b']} }
|
217
|
+
if_cgialt { tdata['&=a&=b'] = {""=>["a", "b"], nil=>[nil]} }
|
218
|
+
## invalid format (CGI: {"a"=>[""], "b"=>[nil]})
|
219
|
+
if_cgiext { tdata['a=&b&&'] = {'a'=>[''], 'b'=>[''], ''=>['', '']} }
|
220
|
+
if_cgialt { tdata['a=&b&&'] = {"a"=>[""], "b"=>[nil]} }
|
221
|
+
tdata.each do |input, expected|
|
222
|
+
if_cgiext { actual = CGIExt.parse_query_string(input) }
|
223
|
+
if_cgialt { actual = CGI.parse(input) }
|
224
|
+
assert_equal(expected, actual)
|
225
|
+
if_cgiext { assert_equal(CGI.parse(input), actual) }
|
226
|
+
end
|
227
|
+
## default value is frozen empty array
|
228
|
+
assert_equal(actual['unknownkey'], [])
|
229
|
+
ex = nil
|
230
|
+
if "".respond_to?(:encoding) # Ruby1.9
|
231
|
+
errclass = RuntimeError
|
232
|
+
else
|
233
|
+
errclass = TypeError
|
234
|
+
end
|
235
|
+
ex = assert_raise(errclass) { actual['unknownkey'] << 'foo' }
|
236
|
+
assert_equal("can't modify frozen array", ex.message)
|
237
|
+
end
|
238
|
+
|
239
|
+
|
240
|
+
end
|
metadata
CHANGED
@@ -1,33 +1,26 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.2
|
3
|
-
specification_version: 1
|
4
2
|
name: cgialt
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0
|
7
|
-
date: 2007-12-11 00:00:00 +09:00
|
8
|
-
summary: an alternative of 'cgi.rb' in pure Ruby
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email:
|
12
|
-
homepage: http://cgialt.rubyforge.org/
|
13
|
-
rubyforge_project:
|
14
|
-
description: CGIAlt is an alternative library of 'cgi.rb'. It is compatible with and faster than 'cgi.rb'. It is able to install with CGIExt (which is re-implementation of cgi.rb in C extension).
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: false
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 1.0.0
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- makoto kuwata
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-11-09 00:00:00 +09:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: CGIAlt is an alternative library of 'cgi.rb'. It is compatible with and faster than 'cgi.rb'. It is able to install with CGIExt (which is re-implementation of cgi.rb in C extension).
|
17
|
+
email:
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
31
24
|
files:
|
32
25
|
- lib/cgialt
|
33
26
|
- lib/cgialt/cookie.rb
|
@@ -44,6 +37,7 @@ files:
|
|
44
37
|
- test/test_cgi_header.rb
|
45
38
|
- test/test_cgi_modruby.rb
|
46
39
|
- test/test_cgi_multipart.rb
|
40
|
+
- test/test_cgi_util.rb
|
47
41
|
- test/testdata
|
48
42
|
- test/testdata/file1.html
|
49
43
|
- test/testdata/large.png
|
@@ -52,17 +46,31 @@ files:
|
|
52
46
|
- bench.rb
|
53
47
|
- setup.rb
|
54
48
|
- CHANGES.txt
|
55
|
-
|
56
|
-
|
49
|
+
has_rdoc: false
|
50
|
+
homepage: http://cgialt.rubyforge.org/
|
51
|
+
post_install_message:
|
57
52
|
rdoc_options: []
|
58
53
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
version:
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
version:
|
65
68
|
requirements: []
|
66
69
|
|
67
|
-
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 1.2.0
|
72
|
+
signing_key:
|
73
|
+
specification_version: 2
|
74
|
+
summary: an alternative of 'cgi.rb' in pure Ruby
|
75
|
+
test_files: []
|
68
76
|
|