fast_xs 0.7.3 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/GNUmakefile +18 -7
- data/{History.txt → History.rdoc} +9 -0
- data/Manifest.txt +4 -2
- data/{README.txt → README.rdoc} +1 -1
- data/Rakefile +14 -11
- data/ext/fast_xs/fast_xs.c +1 -1
- data/ext/fast_xs/ruby_1_9_compat.h +15 -0
- data/ext/fast_xs_extra/fast_xs_extra.c +11 -13
- data/lib/fast_xs_monkey_patcher.rb +20 -5
- data/test/test_cgi_class_overrides.rb +17 -1
- data/test/test_erb_util_module_overrides.rb +15 -0
- data/test/test_mongrel_overrides.rb +20 -0
- data/test/test_rack_util_overrides.rb +43 -0
- data/test/test_xml_escaping.rb +24 -0
- metadata +37 -18
data/GNUmakefile
CHANGED
@@ -1,16 +1,27 @@
|
|
1
1
|
all: test
|
2
2
|
ext := fast_xs fast_xs_extra
|
3
|
-
|
4
|
-
DLEXT := $(shell $(
|
3
|
+
RUBY = ruby
|
4
|
+
DLEXT := $(shell $(RUBY) -rrbconfig -e 'puts Config::CONFIG["DLEXT"]')
|
5
5
|
|
6
6
|
libs := $(addsuffix .$(DLEXT),$(addprefix lib/,$(ext)))
|
7
7
|
build: $(libs)
|
8
8
|
|
9
|
+
makefiles = $(addsuffix /Makefile,$(addprefix ext/,$(ext)))
|
10
|
+
|
9
11
|
%/Makefile: %/extconf.rb
|
10
|
-
cd $(@D) && $(
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
cd $(@D) && $(RUBY) extconf.rb
|
13
|
+
|
14
|
+
deps := ext/fast_xs/Makefile $(wildcard ext/fast_xs/*.[ch])
|
15
|
+
extra_deps := ext/fast_xs_extra/Makefile $(wildcard ext/fast_xs_extra/*.[ch])
|
16
|
+
|
17
|
+
ext/fast_xs/fast_xs.$(DLEXT): $(deps)
|
18
|
+
$(MAKE) -C $(@D)
|
19
|
+
ext/fast_xs_extra/fast_xs_extra.$(DLEXT): $(extra_deps)
|
20
|
+
$(MAKE) -C $(@D)
|
21
|
+
|
22
|
+
lib/fast_xs.$(DLEXT): ext/fast_xs/fast_xs.$(DLEXT)
|
23
|
+
lib/fast_xs_extra.$(DLEXT): ext/fast_xs_extra/fast_xs_extra.$(DLEXT)
|
24
|
+
lib/%.$(DLEXT):
|
14
25
|
$(MAKE) -C $(<D)
|
15
26
|
install -m 644 $(<D)/$(@F) $@
|
16
27
|
%/clean:
|
@@ -23,6 +34,6 @@ T := $(wildcard test/test_*.rb)
|
|
23
34
|
test:
|
24
35
|
$(MAKE) $(T)
|
25
36
|
$(T): $(libs)
|
26
|
-
$(
|
37
|
+
$(RUBY) -w -Ilib $@
|
27
38
|
|
28
39
|
.PHONY: test doc build all $(T)
|
@@ -1,3 +1,12 @@
|
|
1
|
+
=== 0.8.0 / 2011-01-26
|
2
|
+
|
3
|
+
* preserve encoding of original string under Ruby 1.9
|
4
|
+
* avoid warnings when monkey patching
|
5
|
+
* internal cleanups
|
6
|
+
|
7
|
+
Browse gitweb for full history:
|
8
|
+
http://fast-xs.rubyforge.org/git?p=fast-xs.git
|
9
|
+
|
1
10
|
=== 0.7.3 / 2009-07-31
|
2
11
|
|
3
12
|
* 1 bug fix:
|
data/Manifest.txt
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
.gitignore
|
2
2
|
GNUmakefile
|
3
|
-
History.
|
3
|
+
History.rdoc
|
4
4
|
Manifest.txt
|
5
|
-
README.
|
5
|
+
README.rdoc
|
6
6
|
Rakefile
|
7
7
|
ext/fast_xs/extconf.rb
|
8
8
|
ext/fast_xs/fast_xs.c
|
@@ -15,4 +15,6 @@ lib/fast_xs_monkey_patcher.rb
|
|
15
15
|
setup.rb
|
16
16
|
test/test_cgi_class_overrides.rb
|
17
17
|
test/test_erb_util_module_overrides.rb
|
18
|
+
test/test_mongrel_overrides.rb
|
19
|
+
test/test_rack_util_overrides.rb
|
18
20
|
test/test_xml_escaping.rb
|
data/{README.txt → README.rdoc}
RENAMED
@@ -50,7 +50,7 @@ Rubinius project.
|
|
50
50
|
|
51
51
|
(The MIT License)
|
52
52
|
|
53
|
-
Copyright (c)
|
53
|
+
Copyright (c) all contributors (see logs in git)
|
54
54
|
|
55
55
|
Permission is hereby granted, free of charge, to any person obtaining
|
56
56
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -1,18 +1,21 @@
|
|
1
1
|
require 'hoe'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
Rake::ExtensionTask.new('fast_xs_extra')
|
6
|
-
rescue LoadError
|
7
|
-
warn "rake-compiler not available, cross compiling disabled"
|
8
|
-
end
|
9
|
-
|
10
|
-
Hoe.spec('fast_xs') do
|
11
|
-
self.version = '0.7.3'
|
12
|
-
self.author = 'Eric Wong'
|
2
|
+
hoe = Hoe.spec('fast_xs') do
|
3
|
+
self.version = '0.8.0'
|
4
|
+
self.author = 'fast_xs hackers'
|
13
5
|
self.email = 'fast-xs-general@rubyforge.org'
|
14
6
|
self.url = 'http://fast-xs.rubyforge.org/'
|
7
|
+
self.history_file = 'History.rdoc'
|
8
|
+
self.readme_file = 'README.rdoc'
|
15
9
|
self.remote_rdoc_dir = ''
|
16
10
|
self.rubyforge_name = 'fast-xs'
|
17
11
|
self.spec_extras = { :extensions => Dir.glob('ext/*/extconf.rb') }
|
18
12
|
end
|
13
|
+
|
14
|
+
# optional rake-compiler support in case somebody needs to cross compile
|
15
|
+
begin
|
16
|
+
require 'rake/extensiontask'
|
17
|
+
Rake::ExtensionTask.new('fast_xs', hoe.spec)
|
18
|
+
Rake::ExtensionTask.new('fast_xs_extra', hoe.spec)
|
19
|
+
rescue LoadError
|
20
|
+
warn "rake-compiler not available, cross compiling disabled"
|
21
|
+
end
|
data/ext/fast_xs/fast_xs.c
CHANGED
@@ -12,3 +12,18 @@
|
|
12
12
|
# define RARRAY_LEN(s) (RARRAY(s)->len)
|
13
13
|
#endif
|
14
14
|
|
15
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
16
|
+
#include <ruby/encoding.h>
|
17
|
+
static VALUE fast_xs_buf_new(VALUE orig, long len)
|
18
|
+
{
|
19
|
+
rb_encoding *enc = rb_enc_get(orig);
|
20
|
+
VALUE str = rb_str_new(NULL, len);
|
21
|
+
|
22
|
+
return rb_enc_associate(str, enc);
|
23
|
+
}
|
24
|
+
#else /* ! HAVE_RUBY_ENCODING_H */
|
25
|
+
static VALUE fast_xs_buf_new(VALUE orig, long len)
|
26
|
+
{
|
27
|
+
return rb_str_new(NULL, len);
|
28
|
+
}
|
29
|
+
#endif /* ! HAVE_RUBY_ENCODING_H */
|
@@ -4,6 +4,10 @@
|
|
4
4
|
#include "fast_xs_type.h"
|
5
5
|
#include "gcc.h"
|
6
6
|
|
7
|
+
#define APPEND_CONST(buf, x) do { \
|
8
|
+
buf = (char *)memcpy(buf, x, sizeof(x) - 1) + sizeof(x) - 1; \
|
9
|
+
} while (0)
|
10
|
+
|
7
11
|
/*
|
8
12
|
* This is coding agnostic, and works on each byte, so some multibyte
|
9
13
|
* character sets may not be fully supported (but UTF-8 should be).
|
@@ -27,28 +31,22 @@ static VALUE fast_xs_html(VALUE self)
|
|
27
31
|
new_len += (sizeof(""") - 2);
|
28
32
|
}
|
29
33
|
|
30
|
-
rv =
|
34
|
+
rv = fast_xs_buf_new(self, new_len);
|
31
35
|
new_str = RSTRING_PTR(rv);
|
32
36
|
|
33
|
-
#define append_const(buf, x) do { \
|
34
|
-
buf = memcpy(buf, x, sizeof(x) - 1) + sizeof(x) - 1; \
|
35
|
-
} while (0)
|
36
|
-
|
37
37
|
for (s = RSTRING_PTR(self), i = RSTRING_LEN(self); --i >= 0; ++s) {
|
38
38
|
if (unlikely(*s == '&'))
|
39
|
-
|
39
|
+
APPEND_CONST(new_str, "&");
|
40
40
|
else if (unlikely(*s == '<'))
|
41
|
-
|
41
|
+
APPEND_CONST(new_str, "<");
|
42
42
|
else if (unlikely(*s == '>'))
|
43
|
-
|
43
|
+
APPEND_CONST(new_str, ">");
|
44
44
|
else if (unlikely(*s == '"'))
|
45
|
-
|
45
|
+
APPEND_CONST(new_str, """);
|
46
46
|
else
|
47
47
|
*new_str++ = *s;
|
48
48
|
}
|
49
49
|
|
50
|
-
#undef append_const
|
51
|
-
|
52
50
|
return rv;
|
53
51
|
}
|
54
52
|
|
@@ -72,7 +70,7 @@ static inline VALUE _xs_uri_encode(VALUE self, const unsigned int space_to_plus)
|
|
72
70
|
new_len += 2;
|
73
71
|
}
|
74
72
|
|
75
|
-
rv =
|
73
|
+
rv = fast_xs_buf_new(self, new_len);
|
76
74
|
new_str = RSTRING_PTR(rv);
|
77
75
|
|
78
76
|
for (s = RSTRING_PTR(self), i = RSTRING_LEN(self); --i >= 0; ++s) {
|
@@ -132,7 +130,7 @@ static VALUE _uxs_uri(VALUE self, const unsigned int plus_to_space)
|
|
132
130
|
}
|
133
131
|
}
|
134
132
|
|
135
|
-
rv =
|
133
|
+
rv = fast_xs_buf_new(self, new_len);
|
136
134
|
new_str = RSTRING_PTR(rv);
|
137
135
|
|
138
136
|
for (s = RSTRING_PTR(self), i = RSTRING_LEN(self);
|
@@ -2,13 +2,22 @@ require 'fast_xs'
|
|
2
2
|
require 'fast_xs_extra'
|
3
3
|
|
4
4
|
class CGI # :nodoc:
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
undef_method :escapeHTML
|
7
|
+
undef_method :escape
|
8
|
+
undef_method :unescape
|
9
|
+
def escapeHTML(value); value.fast_xs_html; end
|
10
|
+
def escape(value); value.fast_xs_cgi; end
|
11
|
+
def unescape(value); value.fast_uxs_cgi; end
|
12
|
+
end
|
8
13
|
end if defined?(CGI)
|
9
14
|
|
10
15
|
class ERB # :nodoc:
|
11
16
|
module Util # :nodoc:
|
17
|
+
undef_method :html_escape
|
18
|
+
undef_method :h
|
19
|
+
undef_method :url_encode
|
20
|
+
undef_method :u
|
12
21
|
|
13
22
|
def html_escape(value); value.to_s.fast_xs_html; end
|
14
23
|
alias h html_escape
|
@@ -24,16 +33,22 @@ end if defined?(ERB::Util)
|
|
24
33
|
|
25
34
|
module Mongrel # :nodoc:
|
26
35
|
class HttpRequest # :nodoc:
|
27
|
-
|
28
|
-
|
36
|
+
class << self
|
37
|
+
undef_method :unescape
|
38
|
+
undef_method :escape
|
39
|
+
def unescape(s); s.fast_uxs_cgi; end
|
40
|
+
def escape(s); s.to_s.fast_xs_cgi; end
|
41
|
+
end
|
29
42
|
end
|
30
43
|
end if defined?(Mongrel::HttpRequest)
|
31
44
|
|
32
45
|
module Rack # :nodoc:
|
33
46
|
module Utils # :nodoc:
|
47
|
+
undef_method :unescape
|
34
48
|
def unescape(s); s.fast_uxs_cgi; end
|
35
49
|
module_function :unescape
|
36
50
|
|
51
|
+
undef_method :escape
|
37
52
|
def escape(s); s.to_s.fast_xs_cgi; end
|
38
53
|
module_function :escape
|
39
54
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
1
2
|
require 'test/unit'
|
2
3
|
require 'cgi'
|
3
4
|
require 'fast_xs_monkey_patcher'
|
@@ -56,6 +57,21 @@ class TestCgiClassOverrides < Test::Unit::TestCase
|
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
60
|
+
def test_default_encoding_preserved
|
61
|
+
amp = "&"
|
62
|
+
assert_equal Encoding::UTF_8, amp.encoding
|
63
|
+
res = CGI.escapeHTML(amp)
|
64
|
+
assert_equal "&", res
|
65
|
+
assert_equal Encoding::UTF_8, res.encoding
|
66
|
+
end if defined?(Encoding)
|
59
67
|
|
68
|
+
def test_forced_encoding_preserved
|
69
|
+
amp = "&"
|
70
|
+
assert_nothing_raised {
|
71
|
+
amp.force_encoding Encoding::US_ASCII
|
72
|
+
}
|
73
|
+
res = CGI.escapeHTML(amp)
|
74
|
+
assert_equal "&", res
|
75
|
+
assert_equal Encoding::US_ASCII, res.encoding
|
76
|
+
end if defined?(Encoding)
|
60
77
|
end
|
61
|
-
|
@@ -33,6 +33,21 @@ class TestErbUtilModuleOverrides < Test::Unit::TestCase
|
|
33
33
|
assert_equal 'H3LL0%20W0RLD', url_encode('H3LL0 W0RLD')
|
34
34
|
end
|
35
35
|
|
36
|
+
def test_preserve_encoding
|
37
|
+
foo = "foo"
|
38
|
+
foo.force_encoding Encoding::US_ASCII
|
39
|
+
assert_equal Encoding::US_ASCII, url_encode(foo).encoding
|
40
|
+
assert_equal Encoding::US_ASCII, html_escape(foo).encoding
|
41
|
+
assert_equal Encoding::US_ASCII, u(foo).encoding
|
42
|
+
assert_equal Encoding::US_ASCII, h(foo).encoding
|
43
|
+
|
44
|
+
foo.force_encoding Encoding::BINARY
|
45
|
+
assert_equal Encoding::BINARY, url_encode(foo).encoding
|
46
|
+
assert_equal Encoding::BINARY, html_escape(foo).encoding
|
47
|
+
assert_equal Encoding::BINARY, u(foo).encoding
|
48
|
+
assert_equal Encoding::BINARY, h(foo).encoding
|
49
|
+
end if defined?(Encoding)
|
50
|
+
|
36
51
|
def test_large_strings
|
37
52
|
if ENV['LARGE_STRING_TEST']
|
38
53
|
assert u('&' * (8192 * 1024))
|
@@ -0,0 +1,20 @@
|
|
1
|
+
begin
|
2
|
+
require 'mongrel'
|
3
|
+
$orig_escape = Mongrel::HttpRequest.method(:escape)
|
4
|
+
$orig_unescape = Mongrel::HttpRequest.method(:unescape)
|
5
|
+
rescue SyntaxError,LoadError => e
|
6
|
+
warn "skipping Mongrel test, Mongrel not available or broken under 1.9.2"
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'test/unit'
|
10
|
+
require 'fast_xs_monkey_patcher'
|
11
|
+
|
12
|
+
class TestMongrelHttpOverrides < Test::Unit::TestCase
|
13
|
+
def test_escape
|
14
|
+
assert_equal "%2B", Mongrel::HttpRequest.escape("+")
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_unescape
|
18
|
+
assert_equal "+", Mongrel::HttpRequest.unescape("%2B")
|
19
|
+
end
|
20
|
+
end if defined?(Mongrel::HttpRequest)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'rack'
|
2
|
+
$orig_escape = Rack::Utils.method(:escape)
|
3
|
+
$orig_unescape = Rack::Utils.method(:unescape)
|
4
|
+
require 'test/unit'
|
5
|
+
require 'fast_xs_monkey_patcher'
|
6
|
+
|
7
|
+
# copied and translated to Test::Unit from test/spec_utils.rb in rack
|
8
|
+
|
9
|
+
class TestRackUtilModuleOverrides < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def test_overidden
|
12
|
+
assert $orig_escape != Rack::Utils.method(:escape)
|
13
|
+
assert $orig_unescape != Rack::Utils.method(:unescape)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_escape_html_predefined
|
17
|
+
assert_equal "fo%3Co%3Ebar", Rack::Utils.escape("fo<o>bar")
|
18
|
+
assert_equal "a+space", Rack::Utils.escape("a space")
|
19
|
+
assert_equal "q1%212%22%27w%245%267%2Fz8%29%3F%5C",
|
20
|
+
Rack::Utils.escape("q1!2\"'w$5&7/z8)?\\")
|
21
|
+
|
22
|
+
matz_name = # Matsumoto
|
23
|
+
"\xE3\x81\xBE\xE3\x81\xA4\xE3\x82\x82\xE3\x81\xA8".unpack("a*")[0]
|
24
|
+
matz_name.force_encoding("UTF-8") if matz_name.respond_to? :force_encoding
|
25
|
+
assert_equal '%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8',
|
26
|
+
Rack::Utils.escape(matz_name)
|
27
|
+
|
28
|
+
matz_name_sep = # Matsu moto
|
29
|
+
"\xE3\x81\xBE\xE3\x81\xA4 \xE3\x82\x82\xE3\x81\xA8".unpack("a*")[0]
|
30
|
+
matz_name_sep.respond_to?(:force_encoding) and
|
31
|
+
matz_name_sep.force_encoding("UTF-8")
|
32
|
+
assert_equal '%E3%81%BE%E3%81%A4+%E3%82%82%E3%81%A8',
|
33
|
+
Rack::Utils.escape(matz_name_sep)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_unescape
|
37
|
+
assert_equal "fo<o>bar", Rack::Utils.unescape("fo%3Co%3Ebar")
|
38
|
+
assert_equal "a space", Rack::Utils.unescape("a+space")
|
39
|
+
assert_equal "a space", Rack::Utils.unescape("a%20space")
|
40
|
+
assert_equal "q1!2\"'w$5&7/z8)?\\",
|
41
|
+
Rack::Utils.unescape("q1%212%22%27w%245%267%2Fz8%29%3F%5C")
|
42
|
+
end
|
43
|
+
end
|
data/test/test_xml_escaping.rb
CHANGED
@@ -37,6 +37,30 @@ class TestXmlEscaping < Test::Unit::TestCase
|
|
37
37
|
assert_equal '©', "\xC2\xA9".fast_xs # copy
|
38
38
|
end
|
39
39
|
|
40
|
+
def test_iso_8859_1_encoding_preserved
|
41
|
+
copyright = "\xA9"
|
42
|
+
copyright.force_encoding Encoding::ISO_8859_1
|
43
|
+
assert_equal '©', copyright.fast_xs
|
44
|
+
assert copyright.fast_xs.valid_encoding?
|
45
|
+
assert_equal Encoding::ISO_8859_1, copyright.fast_xs.encoding
|
46
|
+
end if defined?(Encoding)
|
47
|
+
|
48
|
+
def test_win_1252_encoding_preserved
|
49
|
+
euro = "\x80"
|
50
|
+
euro.force_encoding Encoding::CP1252
|
51
|
+
assert_equal '€', euro.fast_xs
|
52
|
+
assert euro.fast_xs.valid_encoding?
|
53
|
+
assert_equal Encoding::CP1252, euro.fast_xs.encoding
|
54
|
+
end if defined?(Encoding)
|
55
|
+
|
56
|
+
def test_utf8_encoding_preserved
|
57
|
+
copy = "\xC2\xA9"
|
58
|
+
copy.force_encoding Encoding::UTF_8
|
59
|
+
assert_equal '©', copy.fast_xs
|
60
|
+
assert_equal Encoding::UTF_8, copy.fast_xs.encoding
|
61
|
+
assert copy.fast_xs.valid_encoding?
|
62
|
+
end if defined?(Encoding)
|
63
|
+
|
40
64
|
def test_large_document
|
41
65
|
if ENV['LARGE_STRING_TEST']
|
42
66
|
assert(('&' * (8192 * 1024)).fast_xs)
|
metadata
CHANGED
@@ -1,27 +1,39 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fast_xs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 63
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 8
|
9
|
+
- 0
|
10
|
+
version: 0.8.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
|
-
-
|
13
|
+
- fast_xs hackers
|
8
14
|
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2011-01-26 00:00:00 +00:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: hoe
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
23
|
-
|
24
|
-
|
29
|
+
hash: 47
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 8
|
33
|
+
- 0
|
34
|
+
version: 2.8.0
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id001
|
25
37
|
description: |-
|
26
38
|
fast_xs provides C extensions for escaping text.
|
27
39
|
|
@@ -49,15 +61,13 @@ extensions:
|
|
49
61
|
- ext/fast_xs/extconf.rb
|
50
62
|
- ext/fast_xs_extra/extconf.rb
|
51
63
|
extra_rdoc_files:
|
52
|
-
- History.txt
|
53
64
|
- Manifest.txt
|
54
|
-
- README.txt
|
55
65
|
files:
|
56
66
|
- .gitignore
|
57
67
|
- GNUmakefile
|
58
|
-
- History.
|
68
|
+
- History.rdoc
|
59
69
|
- Manifest.txt
|
60
|
-
- README.
|
70
|
+
- README.rdoc
|
61
71
|
- Rakefile
|
62
72
|
- ext/fast_xs/extconf.rb
|
63
73
|
- ext/fast_xs/fast_xs.c
|
@@ -70,6 +80,8 @@ files:
|
|
70
80
|
- setup.rb
|
71
81
|
- test/test_cgi_class_overrides.rb
|
72
82
|
- test/test_erb_util_module_overrides.rb
|
83
|
+
- test/test_mongrel_overrides.rb
|
84
|
+
- test/test_rack_util_overrides.rb
|
73
85
|
- test/test_xml_escaping.rb
|
74
86
|
has_rdoc: true
|
75
87
|
homepage: http://fast-xs.rubyforge.org/
|
@@ -78,30 +90,37 @@ licenses: []
|
|
78
90
|
post_install_message:
|
79
91
|
rdoc_options:
|
80
92
|
- --main
|
81
|
-
- README.
|
93
|
+
- README.rdoc
|
82
94
|
require_paths:
|
83
95
|
- lib
|
84
|
-
- ext
|
85
96
|
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
99
|
- - ">="
|
88
100
|
- !ruby/object:Gem::Version
|
101
|
+
hash: 3
|
102
|
+
segments:
|
103
|
+
- 0
|
89
104
|
version: "0"
|
90
|
-
version:
|
91
105
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
92
107
|
requirements:
|
93
108
|
- - ">="
|
94
109
|
- !ruby/object:Gem::Version
|
110
|
+
hash: 3
|
111
|
+
segments:
|
112
|
+
- 0
|
95
113
|
version: "0"
|
96
|
-
version:
|
97
114
|
requirements: []
|
98
115
|
|
99
116
|
rubyforge_project: fast-xs
|
100
|
-
rubygems_version: 1.3.
|
117
|
+
rubygems_version: 1.3.7
|
101
118
|
signing_key:
|
102
119
|
specification_version: 3
|
103
120
|
summary: fast_xs provides C extensions for escaping text
|
104
121
|
test_files:
|
105
|
-
- test/test_cgi_class_overrides.rb
|
106
122
|
- test/test_xml_escaping.rb
|
123
|
+
- test/test_mongrel_overrides.rb
|
124
|
+
- test/test_rack_util_overrides.rb
|
125
|
+
- test/test_cgi_class_overrides.rb
|
107
126
|
- test/test_erb_util_module_overrides.rb
|