escape_utils 1.2.0 → 1.3.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.
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