escape_utils 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +43 -0
  3. data/.gitignore +0 -1
  4. data/CHANGELOG.md +23 -0
  5. data/Gemfile +15 -0
  6. data/README.md +48 -91
  7. data/Rakefile +4 -2
  8. data/benchmark/html_escape_once.rb +25 -0
  9. data/benchmark/javascript_escape.rb +1 -1
  10. data/benchmark/javascript_unescape.rb +1 -1
  11. data/benchmark/url_decode.rb +28 -0
  12. data/benchmark/url_encode.rb +37 -0
  13. data/benchmark/xml_escape.rb +7 -11
  14. data/bin/console +8 -0
  15. data/escape_utils.gemspec +1 -12
  16. data/ext/escape_utils/escape_utils.c +8 -115
  17. data/ext/escape_utils/houdini.h +3 -5
  18. data/ext/escape_utils/houdini_html_e.c +52 -24
  19. data/ext/escape_utils/houdini_js_e.c +15 -3
  20. data/ext/escape_utils/houdini_uri_e.c +7 -18
  21. data/ext/escape_utils/houdini_uri_u.c +5 -15
  22. data/ext/escape_utils/houdini_xml_e.c +15 -1
  23. data/lib/escape_utils/html/cgi.rb +10 -8
  24. data/lib/escape_utils/html/erb.rb +1 -10
  25. data/lib/escape_utils/html/haml.rb +1 -7
  26. data/lib/escape_utils/html/rack.rb +3 -3
  27. data/lib/escape_utils/html_safety.rb +13 -0
  28. data/lib/escape_utils/url/cgi.rb +0 -8
  29. data/lib/escape_utils/url/erb.rb +1 -1
  30. data/lib/escape_utils/url/rack.rb +0 -12
  31. data/lib/escape_utils/url/uri.rb +11 -7
  32. data/lib/escape_utils/version.rb +1 -1
  33. data/lib/escape_utils/xml/builder.rb +2 -2
  34. data/lib/escape_utils.rb +61 -9
  35. data/test/helper.rb +16 -3
  36. data/test/html/escape_test.rb +66 -42
  37. data/test/html/unescape_test.rb +3 -21
  38. data/test/html_safety_test.rb +1 -27
  39. data/test/javascript/escape_test.rb +53 -20
  40. data/test/javascript/unescape_test.rb +16 -18
  41. data/test/query/escape_test.rb +3 -21
  42. data/test/query/unescape_test.rb +5 -23
  43. data/test/uri/escape_test.rb +16 -18
  44. data/test/uri/unescape_test.rb +17 -19
  45. data/test/uri_component/escape_test.rb +15 -17
  46. data/test/uri_component/unescape_test.rb +17 -19
  47. data/test/url/escape_test.rb +3 -21
  48. data/test/url/unescape_test.rb +5 -23
  49. data/test/xml/escape_test.rb +15 -17
  50. metadata +14 -127
  51. data/.travis.yml +0 -7
  52. data/benchmark/html_escape.rb +0 -68
  53. data/benchmark/html_unescape.rb +0 -35
  54. data/benchmark/url_escape.rb +0 -56
  55. data/benchmark/url_unescape.rb +0 -50
  56. data/ext/escape_utils/houdini_html_u.c +0 -122
@@ -43,26 +43,24 @@ class UriComponentEscapeTest < Minitest::Test
43
43
  assert_equal "a%2Fslash", EscapeUtils.escape_uri_component("a/slash")
44
44
  end
45
45
 
46
- if RUBY_VERSION =~ /^1.9/
47
- def test_input_must_be_utf8_or_ascii
48
- str = "fo<o>bar"
46
+ def test_input_must_be_utf8_or_ascii
47
+ str = "fo<o>bar"
49
48
 
50
- str.force_encoding 'ISO-8859-1'
51
- assert_raises Encoding::CompatibilityError do
52
- EscapeUtils.escape_uri_component(str)
53
- end
54
-
55
- str.force_encoding 'UTF-8'
56
- begin
57
- EscapeUtils.escape_uri_component(str)
58
- rescue Encoding::CompatibilityError => e
59
- assert_nil e, "#{e.class.name} raised, expected not to"
60
- end
49
+ str.force_encoding 'ISO-8859-1'
50
+ assert_raises Encoding::CompatibilityError do
51
+ EscapeUtils.escape_uri_component(str)
61
52
  end
62
53
 
63
- def test_return_value_is_tagged_as_utf8
64
- str = "fo<o>bar"
65
- assert_equal Encoding.find('UTF-8'), EscapeUtils.escape_uri_component(str).encoding
54
+ str.force_encoding 'UTF-8'
55
+ begin
56
+ EscapeUtils.escape_uri_component(str)
57
+ rescue Encoding::CompatibilityError => e
58
+ assert_nil e, "#{e.class.name} raised, expected not to"
66
59
  end
67
60
  end
61
+
62
+ def test_return_value_is_tagged_as_utf8
63
+ str = "fo<o>bar"
64
+ assert_equal Encoding.find('UTF-8'), EscapeUtils.escape_uri_component(str).encoding
65
+ end
68
66
  end
@@ -39,33 +39,31 @@ class UriComponentUnescapeTest < Minitest::Test
39
39
 
40
40
  def test_multibyte_characters
41
41
  matz_name = "\xE3\x81\xBE\xE3\x81\xA4\xE3\x82\x82\xE3\x81\xA8" # Matsumoto
42
- matz_name.force_encoding('UTF-8') if matz_name.respond_to?(:force_encoding)
42
+ matz_name.force_encoding('UTF-8')
43
43
  assert_equal matz_name, EscapeUtils.unescape_uri_component('%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8')
44
44
  matz_name_sep = "\xE3\x81\xBE\xE3\x81\xA4 \xE3\x82\x82\xE3\x81\xA8" # Matsu moto
45
- matz_name_sep.force_encoding('UTF-8') if matz_name_sep.respond_to?(:force_encoding)
45
+ matz_name_sep.force_encoding('UTF-8')
46
46
  assert_equal matz_name_sep, EscapeUtils.unescape_uri_component('%E3%81%BE%E3%81%A4%20%E3%82%82%E3%81%A8')
47
47
  end
48
48
 
49
- if RUBY_VERSION =~ /^1.9/
50
- def test_input_must_be_valid_utf8_or_ascii
51
- escaped = EscapeUtils.escape_uri_component("fo<o>bar")
49
+ def test_input_must_be_valid_utf8_or_ascii
50
+ escaped = EscapeUtils.escape_uri_component("fo<o>bar")
52
51
 
53
- escaped.force_encoding 'ISO-8859-1'
54
- assert_raises Encoding::CompatibilityError do
55
- EscapeUtils.unescape_uri_component(escaped)
56
- end
57
-
58
- escaped.force_encoding 'UTF-8'
59
- begin
60
- EscapeUtils.unescape_uri_component(escaped)
61
- rescue Encoding::CompatibilityError => e
62
- assert_nil e, "#{e.class.name} raised, expected not to"
63
- end
52
+ escaped.force_encoding 'ISO-8859-1'
53
+ assert_raises Encoding::CompatibilityError do
54
+ EscapeUtils.unescape_uri_component(escaped)
64
55
  end
65
56
 
66
- def test_return_value_is_tagged_as_utf8
67
- escaped = EscapeUtils.escape_uri_component("fo<o>bar")
68
- assert_equal Encoding.find('UTF-8'), EscapeUtils.unescape_uri_component(escaped).encoding
57
+ escaped.force_encoding 'UTF-8'
58
+ begin
59
+ EscapeUtils.unescape_uri_component(escaped)
60
+ rescue Encoding::CompatibilityError => e
61
+ assert_nil e, "#{e.class.name} raised, expected not to"
69
62
  end
70
63
  end
64
+
65
+ def test_return_value_is_tagged_as_utf8
66
+ escaped = EscapeUtils.escape_uri_component("fo<o>bar")
67
+ assert_equal Encoding.find('UTF-8'), EscapeUtils.unescape_uri_component(escaped).encoding
68
+ end
71
69
  end
@@ -41,26 +41,8 @@ class UrlEscapeTest < Minitest::Test
41
41
  assert_equal "a%2Fslash", EscapeUtils.escape_url("a/slash")
42
42
  end
43
43
 
44
- if RUBY_VERSION =~ /^1.9/
45
- def test_input_must_be_utf8_or_ascii
46
- str = "fo<o>bar"
47
-
48
- str.force_encoding 'ISO-8859-1'
49
- assert_raises Encoding::CompatibilityError do
50
- EscapeUtils.escape_url(str)
51
- end
52
-
53
- str.force_encoding 'UTF-8'
54
- begin
55
- EscapeUtils.escape_url(str)
56
- rescue Encoding::CompatibilityError => e
57
- assert_nil e, "#{e.class.name} raised, expected not to"
58
- end
59
- end
60
-
61
- def test_return_value_is_tagged_as_utf8
62
- str = "fo<o>bar"
63
- assert_equal Encoding.find('UTF-8'), EscapeUtils.escape_url(str).encoding
64
- end
44
+ def test_return_value_is_tagged_as_utf8
45
+ str = "fo<o>bar"
46
+ assert_equal Encoding.find('UTF-8'), EscapeUtils.escape_url(str).encoding
65
47
  end
66
48
  end
@@ -28,10 +28,10 @@ class UrlUnescapeTest < Minitest::Test
28
28
 
29
29
  def test_multibyte_characters
30
30
  matz_name = "\xE3\x81\xBE\xE3\x81\xA4\xE3\x82\x82\xE3\x81\xA8" # Matsumoto
31
- matz_name.force_encoding('UTF-8') if matz_name.respond_to?(:force_encoding)
31
+ matz_name.force_encoding('UTF-8')
32
32
  assert_equal matz_name, EscapeUtils.unescape_url('%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8')
33
33
  matz_name_sep = "\xE3\x81\xBE\xE3\x81\xA4 \xE3\x82\x82\xE3\x81\xA8" # Matsu moto
34
- matz_name_sep.force_encoding('UTF-8') if matz_name_sep.respond_to?(:force_encoding)
34
+ matz_name_sep.force_encoding('UTF-8')
35
35
  assert_equal matz_name_sep, EscapeUtils.unescape_url('%E3%81%BE%E3%81%A4%20%E3%82%82%E3%81%A8')
36
36
  end
37
37
 
@@ -46,26 +46,8 @@ class UrlUnescapeTest < Minitest::Test
46
46
  end
47
47
  end
48
48
 
49
- if RUBY_VERSION =~ /^1.9/
50
- def test_input_must_be_valid_utf8_or_ascii
51
- escaped = EscapeUtils.escape_url("fo<o>bar")
52
-
53
- escaped.force_encoding 'ISO-8859-1'
54
- assert_raises Encoding::CompatibilityError do
55
- EscapeUtils.unescape_url(escaped)
56
- end
57
-
58
- escaped.force_encoding 'UTF-8'
59
- begin
60
- EscapeUtils.unescape_url(escaped)
61
- rescue Encoding::CompatibilityError => e
62
- assert_nil e, "#{e.class.name} raised, expected not to"
63
- end
64
- end
65
-
66
- def test_return_value_is_tagged_as_utf8
67
- escaped = EscapeUtils.escape_url("fo<o>bar")
68
- assert_equal Encoding.find('UTF-8'), EscapeUtils.unescape_url(escaped).encoding
69
- end
49
+ def test_return_value_is_tagged_as_utf8
50
+ escaped = EscapeUtils.escape_url("fo<o>bar")
51
+ assert_equal Encoding.find('UTF-8'), EscapeUtils.unescape_url(escaped).encoding
70
52
  end
71
53
  end
@@ -42,26 +42,24 @@ class XmlEscapeTest < Minitest::Test
42
42
  end
43
43
  end
44
44
 
45
- if RUBY_VERSION =~ /^1.9/
46
- def test_input_must_be_utf8_or_ascii
47
- str = "<some_tag/>"
45
+ def test_input_must_be_utf8_or_ascii
46
+ str = "<some_tag/>"
48
47
 
49
- str.force_encoding 'ISO-8859-1'
50
- assert_raises Encoding::CompatibilityError do
51
- EscapeUtils.escape_xml(str)
52
- end
53
-
54
- str.force_encoding 'UTF-8'
55
- begin
56
- EscapeUtils.escape_xml(str)
57
- rescue Encoding::CompatibilityError => e
58
- assert_nil e, "#{e.class.name} raised, expected not to"
59
- end
48
+ str.force_encoding 'ISO-8859-1'
49
+ assert_raises Encoding::CompatibilityError do
50
+ EscapeUtils.escape_xml(str)
60
51
  end
61
52
 
62
- def test_return_value_is_tagged_as_utf8
63
- str = "<some_tag/>"
64
- assert_equal Encoding.find('UTF-8'), EscapeUtils.escape_url(str).encoding
53
+ str.force_encoding 'UTF-8'
54
+ begin
55
+ EscapeUtils.escape_xml(str)
56
+ rescue Encoding::CompatibilityError => e
57
+ assert_nil e, "#{e.class.name} raised, expected not to"
65
58
  end
66
59
  end
60
+
61
+ def test_return_value_is_tagged_as_utf8
62
+ str = "<some_tag/>"
63
+ assert_equal Encoding.find('UTF-8'), EscapeUtils.escape_url(str).encoding
64
+ end
67
65
  end
metadata CHANGED
@@ -1,127 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: escape_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Lopez
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-25 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake-compiler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 0.7.5
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 0.7.5
27
- - !ruby/object:Gem::Dependency
28
- name: minitest
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 5.0.0
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 5.0.0
41
- - !ruby/object:Gem::Dependency
42
- name: benchmark-ips
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rack
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: haml
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: fast_xs
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: actionpack
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: url_escape
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
11
+ date: 2022-06-16 00:00:00.000000000 Z
12
+ dependencies: []
125
13
  description: Quickly perform HTML, URL, URI and Javascript escaping/unescaping
126
14
  email: seniorlopez@gmail.com
127
15
  executables: []
@@ -129,19 +17,20 @@ extensions:
129
17
  - ext/escape_utils/extconf.rb
130
18
  extra_rdoc_files: []
131
19
  files:
20
+ - ".github/workflows/ci.yml"
132
21
  - ".gitignore"
133
- - ".travis.yml"
22
+ - CHANGELOG.md
134
23
  - Gemfile
135
24
  - LICENSE
136
25
  - README.md
137
26
  - Rakefile
138
- - benchmark/html_escape.rb
139
- - benchmark/html_unescape.rb
27
+ - benchmark/html_escape_once.rb
140
28
  - benchmark/javascript_escape.rb
141
29
  - benchmark/javascript_unescape.rb
142
- - benchmark/url_escape.rb
143
- - benchmark/url_unescape.rb
30
+ - benchmark/url_decode.rb
31
+ - benchmark/url_encode.rb
144
32
  - benchmark/xml_escape.rb
33
+ - bin/console
145
34
  - escape_utils.gemspec
146
35
  - ext/escape_utils/buffer.c
147
36
  - ext/escape_utils/buffer.h
@@ -150,7 +39,6 @@ files:
150
39
  - ext/escape_utils/houdini.h
151
40
  - ext/escape_utils/houdini_href_e.c
152
41
  - ext/escape_utils/houdini_html_e.c
153
- - ext/escape_utils/houdini_html_u.c
154
42
  - ext/escape_utils/houdini_js_e.c
155
43
  - ext/escape_utils/houdini_js_u.c
156
44
  - ext/escape_utils/houdini_uri_e.c
@@ -191,7 +79,7 @@ homepage: https://github.com/brianmario/escape_utils
191
79
  licenses:
192
80
  - MIT
193
81
  metadata: {}
194
- post_install_message:
82
+ post_install_message:
195
83
  rdoc_options:
196
84
  - "--charset=UTF-8"
197
85
  require_paths:
@@ -200,16 +88,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
200
88
  requirements:
201
89
  - - ">="
202
90
  - !ruby/object:Gem::Version
203
- version: 1.9.3
91
+ version: '2.5'
204
92
  required_rubygems_version: !ruby/object:Gem::Requirement
205
93
  requirements:
206
94
  - - ">="
207
95
  - !ruby/object:Gem::Version
208
96
  version: '0'
209
97
  requirements: []
210
- rubyforge_project:
211
- rubygems_version: 2.5.1
212
- signing_key:
98
+ rubygems_version: 3.1.2
99
+ signing_key:
213
100
  specification_version: 4
214
101
  summary: Faster string escaping routines for your web apps
215
102
  test_files:
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.0
6
- - 2.2.0
7
- - 2.3.0
@@ -1,68 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'rubygems'
4
- require 'bundler/setup'
5
- require 'benchmark/ips'
6
-
7
- require 'rack'
8
- require 'erb'
9
- require 'cgi'
10
- require 'haml'
11
- require 'fast_xs_extra'
12
- require 'escape_utils'
13
-
14
- module HamlBench
15
- extend Haml::Helpers
16
- end
17
-
18
- url = "https://en.wikipedia.org/wiki/Succession_to_the_British_throne"
19
- html = `curl -s #{url}`
20
- html = html.force_encoding('utf-8') if html.respond_to?(:force_encoding)
21
- puts "Escaping #{html.bytesize} bytes of html from #{url}"
22
-
23
- Benchmark.ips do |x|
24
- x.report "Rack::Utils.escape_html" do |times|
25
- times.times do
26
- Rack::Utils.escape_html(html)
27
- end
28
- end
29
-
30
- x.report "Haml::Helpers.html_escape" do |times|
31
- times.times do
32
- HamlBench.html_escape(html)
33
- end
34
- end
35
-
36
- x.report "ERB::Util.html_escape" do |times|
37
- times.times do
38
- ERB::Util.html_escape(html)
39
- end
40
- end
41
-
42
- x.report "CGI.escapeHTML" do |times|
43
- times.times do
44
- CGI.escapeHTML(html)
45
- end
46
- end
47
-
48
- x.report "String#gsub" do |times|
49
- html_escape = { '&' => '&amp;', '>' => '&gt;', '<' => '&lt;', '"' => '&quot;', "'" => '&#39;' }
50
- times.times do
51
- html.gsub(/[&"'><]/, html_escape)
52
- end
53
- end
54
-
55
- x.report "fast_xs_extra#fast_xs_html" do |times|
56
- times.times do
57
- html.fast_xs_html
58
- end
59
- end
60
-
61
- x.report "EscapeUtils.escape_html" do |times|
62
- times.times do
63
- EscapeUtils.escape_html(html)
64
- end
65
- end
66
-
67
- x.compare!
68
- end
@@ -1,35 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'rubygems'
4
- require 'bundler/setup'
5
- require 'benchmark/ips'
6
-
7
- require 'cgi'
8
- require 'haml'
9
- require 'escape_utils'
10
-
11
- module HamlBench
12
- extend Haml::Helpers
13
- end
14
-
15
- url = "https://en.wikipedia.org/wiki/Succession_to_the_British_throne"
16
- html = `curl -s #{url}`
17
- html = html.force_encoding('binary') if html.respond_to?(:force_encoding)
18
- escaped_html = EscapeUtils.escape_html(html)
19
- puts "Unescaping #{escaped_html.bytesize} bytes of escaped html, from #{url}"
20
-
21
- Benchmark.ips do |x|
22
- x.report "CGI.unescapeHTML" do |times|
23
- times.times do
24
- CGI.unescapeHTML(escaped_html)
25
- end
26
- end
27
-
28
- x.report "EscapeUtils.unescape_html" do |times|
29
- times.times do
30
- EscapeUtils.unescape_html(escaped_html)
31
- end
32
- end
33
-
34
- x.compare!
35
- end
@@ -1,56 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'rubygems'
4
- require 'bundler/setup'
5
- require 'benchmark/ips'
6
-
7
- require 'rack'
8
- require 'erb'
9
- require 'cgi'
10
- require 'url_escape'
11
- require 'fast_xs_extra'
12
- require 'escape_utils'
13
-
14
- url = "https://www.yourmom.com/cgi-bin/session.cgi?sess_args=mYHcEA dh435dqUs0moGHeeAJTSLLbdbcbd9ef----,574b95600e9ab7d27eb0bf524ac68c27----"
15
- url = url.force_encoding('us-ascii') if url.respond_to?(:force_encoding)
16
- puts "Escaping a #{url.bytesize} byte URL times"
17
-
18
- Benchmark.ips do |x|
19
- x.report "ERB::Util.url_encode" do |times|
20
- times.times do
21
- ERB::Util.url_encode(url)
22
- end
23
- end
24
-
25
- x.report "Rack::Utils.escape" do |times|
26
- times.times do
27
- Rack::Utils.escape(url)
28
- end
29
- end
30
-
31
- x.report "CGI.escape" do |times|
32
- times.times do
33
- CGI.escape(url)
34
- end
35
- end
36
-
37
- x.report "URLEscape#escape" do |times|
38
- times.times do
39
- URLEscape.escape(url)
40
- end
41
- end
42
-
43
- x.report "fast_xs_extra#fast_xs_url" do |times|
44
- times.times do
45
- url.fast_xs_url
46
- end
47
- end
48
-
49
- x.report "EscapeUtils.escape_url" do |times|
50
- times.times do
51
- EscapeUtils.escape_url(url)
52
- end
53
- end
54
-
55
- x.compare!
56
- end
@@ -1,50 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'rubygems'
4
- require 'bundler/setup'
5
- require 'benchmark/ips'
6
-
7
- require 'rack'
8
- require 'cgi'
9
- require 'url_escape'
10
- require 'fast_xs_extra'
11
- require 'escape_utils'
12
-
13
- url = "https://www.yourmom.com/cgi-bin/session.cgi?sess_args=mYHcEA dh435dqUs0moGHeeAJTSLLbdbcbd9ef----,574b95600e9ab7d27eb0bf524ac68c27----"
14
- url = url.force_encoding('us-ascii') if url.respond_to?(:force_encoding)
15
- escaped_url = EscapeUtils.escape_url(url)
16
- puts "Escaping a #{url.bytesize} byte URL"
17
-
18
- Benchmark.ips do |x|
19
- x.report "Rack::Utils.unescape" do |times|
20
- times.times do
21
- Rack::Utils.unescape(escaped_url)
22
- end
23
- end
24
-
25
- x.report "CGI.unescape" do |times|
26
- times.times do
27
- CGI.unescape(escaped_url)
28
- end
29
- end
30
-
31
- x.report "URLEscape#unescape" do |times|
32
- times.times do
33
- URLEscape.unescape(escaped_url)
34
- end
35
- end
36
-
37
- x.report "fast_xs_extra#fast_uxs_cgi" do |times|
38
- times.times do
39
- url.fast_uxs_cgi
40
- end
41
- end
42
-
43
- x.report "EscapeUtils.unescape_url" do |times|
44
- times.times do
45
- EscapeUtils.unescape_url(escaped_url)
46
- end
47
- end
48
-
49
- x.compare!
50
- end