addressable 2.4.0 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 77783a5c4c07f7a0862f0efaeb2619a278e32391
4
- data.tar.gz: 8edbb65fa242ce03cf2403c192d2358da64a095b
2
+ SHA256:
3
+ metadata.gz: 03a21b1eab156a16e90bd7963af85980edfbddc8f3dbe052766303dba76cc000
4
+ data.tar.gz: 03eca5d86f4c70f9320000f36e3cff4fd8023342a4e0ac855d0ef1ec89ee6183
5
5
  SHA512:
6
- metadata.gz: b3345827151e1d04e5c532cca1e8e63337b0ce9d9f0e276861ed6be95b114827f68d5f74e5bea857db1faaf7a70a928159436f5e51cbbecc4a6db64145d28ea2
7
- data.tar.gz: 86e4d5c946972502c8ac79bf2582d0d6894db23fa2e285c69b8dae0d1e16fcad447e7f8f393eeb9e9891f0a30e0971f864449b6dfaf4104bee080cfb3dfe4af4
6
+ metadata.gz: d504f9475ad823f5bb077b9c039a2c91c83e52c20896247a7289b61725c61b1ddefe8ae06155fb018fc67087cf04276081b42105a18394b45e2374ad0b2fadb0
7
+ data.tar.gz: b81766fbcb9335d5ca94403b62d3b2a6fae31b66cd3c05f48e1885eaf07883bfa1321b6930271fe1415135aec687af51312a26ce27bd4b83b2ac6424dec597c9
data/CHANGELOG.md CHANGED
@@ -1,3 +1,57 @@
1
+ # Addressable 2.8.0
2
+ - fixes ReDoS vulnerability in Addressable::Template#match
3
+ - no longer replaces `+` with spaces in queries for non-http(s) schemes
4
+ - fixed encoding ipv6 literals
5
+ - the `:compacted` flag for `normalized_query` now dedupes parameters
6
+ - fix broken `escape_component` alias
7
+ - dropping support for Ruby 2.0 and 2.1
8
+ - adding Ruby 3.0 compatibility for development tasks
9
+ - drop support for `rack-mount` and remove Addressable::Template#generate
10
+ - performance improvements
11
+ - switch CI/CD to GitHub Actions
12
+
13
+ # Addressable 2.7.0
14
+ - added `:compacted` flag to `normalized_query`
15
+ - `heuristic_parse` handles `mailto:` more intuitively
16
+ - dropped explicit support for JRuby 9.0.5.0
17
+ - compatibility w/ public_suffix 4.x
18
+ - performance improvements
19
+
20
+ # Addressable 2.6.0
21
+ - added `tld=` method to allow assignment to the public suffix
22
+ - most `heuristic_parse` patterns are now case-insensitive
23
+ - `heuristic_parse` handles more `file://` URI variations
24
+ - fixes bug in `heuristic_parse` when uri starts with digit
25
+ - fixes bug in `request_uri=` with query strings
26
+ - fixes template issues with `nil` and `?` operator
27
+ - `frozen_string_literal` pragmas added
28
+ - minor performance improvements in regexps
29
+ - fixes to eliminate warnings
30
+
31
+ # Addressable 2.5.2
32
+ - better support for frozen string literals
33
+ - fixed bug w/ uppercase characters in scheme
34
+ - IDNA errors w/ emoji URLs
35
+ - compatibility w/ public_suffix 3.x
36
+
37
+ # Addressable 2.5.1
38
+ - allow unicode normalization to be disabled for URI Template expansion
39
+ - removed duplicate test
40
+
41
+ # Addressable 2.5.0
42
+ - dropping support for Ruby 1.9
43
+ - adding support for Ruby 2.4 preview
44
+ - add support for public suffixes and tld; first runtime dependency
45
+ - hostname escaping should match RFC; underscores in hostnames no longer escaped
46
+ - paths beginning with // and missing an authority are now considered invalid
47
+ - validation now also takes place after setting a path
48
+ - handle backslashes in authority more like a browser for `heuristic_parse`
49
+ - unescaped backslashes in host now raise an `InvalidURIError`
50
+ - `merge!`, `join!`, `omit!` and `normalize!` don't disable deferred validation
51
+ - `heuristic_parse` now trims whitespace before parsing
52
+ - host parts longer than 63 bytes will be ignored and not passed to libidn
53
+ - normalized values always encoded as UTF-8
54
+
1
55
  # Addressable 2.4.0
2
56
  - support for 1.8.x dropped
3
57
  - double quotes in a host now raises an error
data/Gemfile CHANGED
@@ -1,12 +1,17 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
2
 
3
- gemspec
3
+ source 'https://rubygems.org'
4
4
 
5
- gem 'rake', '~> 10.4', '>= 10.4.2'
5
+ gemspec(path: __FILE__ == "(eval)" ? ".." : ".")
6
6
 
7
7
  group :test do
8
- gem 'rspec', '~> 3.0'
9
- gem 'rspec-its', '~> 1.1'
8
+ gem 'rspec', '~> 3.8'
9
+ gem 'rspec-its', '~> 1.3'
10
+ end
11
+
12
+ group :coverage do
13
+ gem "coveralls", "> 0.7", require: false, platforms: :mri
14
+ gem "simplecov", require: false
10
15
  end
11
16
 
12
17
  group :development do
@@ -16,12 +21,8 @@ group :development do
16
21
  end
17
22
 
18
23
  group :test, :development do
19
- gem 'simplecov', :require => false
20
- gem 'coveralls', :require => false, :platforms => [
21
- :ruby_19, :ruby_20, :ruby_21, :rbx, :jruby
22
- ]
23
- # Used to test compatibility.
24
- gem 'rack-mount', git: 'https://github.com/sporkmonger/rack-mount.git', require: 'rack/mount'
24
+ gem 'memory_profiler'
25
+ gem "rake", ">= 12.3.3"
25
26
  end
26
27
 
27
- gem 'idn-ruby', :platform => [:mri_19, :mri_20, :mri_21, :mri_22]
28
+ gem "idn-ruby", platform: :mri
data/README.md CHANGED
@@ -3,28 +3,27 @@
3
3
  <dl>
4
4
  <dt>Homepage</dt><dd><a href="https://github.com/sporkmonger/addressable">github.com/sporkmonger/addressable</a></dd>
5
5
  <dt>Author</dt><dd><a href="mailto:bob@sporkmonger.com">Bob Aman</a></dd>
6
- <dt>Copyright</dt><dd>Copyright © 2006-2015 Bob Aman</dd>
6
+ <dt>Copyright</dt><dd>Copyright © Bob Aman</dd>
7
7
  <dt>License</dt><dd>Apache 2.0</dd>
8
8
  </dl>
9
9
 
10
- [![Gem Version](http://img.shields.io/gem/dt/addressable.svg)][gem]
11
- [![Build Status](https://secure.travis-ci.org/sporkmonger/addressable.png?branch=master)][travis]
12
- [![Dependency Status](https://gemnasium.com/sporkmonger/addressable.png?travis)][gemnasium]
10
+ [![Gem Version](https://img.shields.io/gem/dt/addressable.svg)][gem]
11
+ [![Build Status](https://github.com/sporkmonger/addressable/workflows/CI/badge.svg)][actions]
13
12
  [![Test Coverage Status](https://img.shields.io/coveralls/sporkmonger/addressable.svg)][coveralls]
14
- [![Documentation Coverage Status](http://inch-ci.org/github/sporkmonger/addressable.svg?branch=master)][inch]
15
- [![Gittip Donate](http://img.shields.io/gittip/sporkmonger.png)](https://www.gittip.com/sporkmonger/ "Support Open Source Development w/ Gittip")
13
+ [![Documentation Coverage Status](https://inch-ci.org/github/sporkmonger/addressable.svg?branch=master)][inch]
16
14
 
17
15
  [gem]: https://rubygems.org/gems/addressable
18
- [travis]: http://travis-ci.org/sporkmonger/addressable
19
- [gemnasium]: https://gemnasium.com/sporkmonger/addressable
16
+ [actions]: https://github.com/sporkmonger/addressable/actions
20
17
  [coveralls]: https://coveralls.io/r/sporkmonger/addressable
21
- [inch]: http://inch-ci.org/github/sporkmonger/addressable
18
+ [inch]: https://inch-ci.org/github/sporkmonger/addressable
22
19
 
23
20
  # Description
24
21
 
25
- Addressable is a replacement for the URI implementation that is part of
26
- Ruby's standard library. It more closely conforms to RFC 3986, RFC 3987, and
27
- RFC 6570 (level 4), providing support for IRIs and URI templates.
22
+ Addressable is an alternative implementation to the URI implementation
23
+ that is part of Ruby's standard library. It is flexible, offers heuristic
24
+ parsing, and additionally provides extensive support for IRIs and URI templates.
25
+
26
+ Addressable closely conforms to RFC 3986, RFC 3987, and RFC 6570 (level 4).
28
27
 
29
28
  # Reference
30
29
 
@@ -59,7 +58,7 @@ For more details, see [RFC 6570](https://www.rfc-editor.org/rfc/rfc6570.txt).
59
58
 
60
59
  require "addressable/template"
61
60
 
62
- template = Addressable::Template.new("http://example.com/{?query*}/")
61
+ template = Addressable::Template.new("http://example.com/{?query*}")
63
62
  template.expand({
64
63
  "query" => {
65
64
  'foo' => 'bar',
@@ -92,14 +91,31 @@ template.extract(uri)
92
91
  # Install
93
92
 
94
93
  ```console
95
- $ sudo gem install addressable
94
+ $ gem install addressable
96
95
  ```
97
96
 
98
97
  You may optionally turn on native IDN support by installing libidn and the
99
98
  idn gem:
100
99
 
101
100
  ```console
102
- $ sudo apt-get install idn # Debian/Ubuntu
101
+ $ sudo apt-get install libidn11-dev # Debian/Ubuntu
103
102
  $ brew install libidn # OS X
104
103
  $ gem install idn-ruby
105
104
  ```
105
+
106
+ # Semantic Versioning
107
+
108
+ This project uses [Semantic Versioning](https://semver.org/). You can (and should) specify your
109
+ dependency using a pessimistic version constraint covering the major and minor
110
+ values:
111
+
112
+ ```ruby
113
+ spec.add_dependency 'addressable', '~> 2.7'
114
+ ```
115
+
116
+ If you need a specific bug fix, you can also specify minimum tiny versions
117
+ without preventing updates to the latest minor release:
118
+
119
+ ```ruby
120
+ spec.add_dependency 'addressable', '~> 2.3', '>= 2.3.7'
121
+ ```
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'rake'
3
5
 
@@ -12,9 +14,9 @@ RELEASE_NAME = "REL #{PKG_VERSION}"
12
14
 
13
15
  PKG_SUMMARY = "URI Implementation"
14
16
  PKG_DESCRIPTION = <<-TEXT
15
- Addressable is a replacement for the URI implementation that is part of
16
- Ruby's standard library. It more closely conforms to the relevant RFCs and
17
- adds support for IRIs and URI templates.
17
+ Addressable is an alternative implementation to the URI implementation that is
18
+ part of Ruby's standard library. It is flexible, offers heuristic parsing, and
19
+ additionally provides extensive support for IRIs and URI templates.
18
20
  TEXT
19
21
 
20
22
  PKG_FILES = FileList[
data/addressable.gemspec CHANGED
@@ -1,34 +1,37 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: addressable 2.4.0 ruby lib
2
+ # stub: addressable 2.8.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
- s.name = "addressable"
6
- s.version = "2.4.0"
5
+ s.name = "addressable".freeze
6
+ s.version = "2.8.0"
7
7
 
8
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
- s.require_paths = ["lib"]
10
- s.authors = ["Bob Aman"]
11
- s.date = "2015-12-07"
12
- s.description = "Addressable is a replacement for the URI implementation that is part of\nRuby's standard library. It more closely conforms to the relevant RFCs and\nadds support for IRIs and URI templates.\n"
13
- s.email = "bob@sporkmonger.com"
14
- s.extra_rdoc_files = ["README.md"]
15
- s.files = ["CHANGELOG.md", "Gemfile", "LICENSE.txt", "README.md", "Rakefile", "addressable.gemspec", "data/unicode.data", "lib/addressable.rb", "lib/addressable/idna.rb", "lib/addressable/idna/native.rb", "lib/addressable/idna/pure.rb", "lib/addressable/template.rb", "lib/addressable/uri.rb", "lib/addressable/version.rb", "spec/addressable/idna_spec.rb", "spec/addressable/net_http_compat_spec.rb", "spec/addressable/rack_mount_compat_spec.rb", "spec/addressable/security_spec.rb", "spec/addressable/template_spec.rb", "spec/addressable/uri_spec.rb", "spec/spec_helper.rb", "tasks/clobber.rake", "tasks/gem.rake", "tasks/git.rake", "tasks/metrics.rake", "tasks/rspec.rake", "tasks/yard.rake"]
16
- s.homepage = "https://github.com/sporkmonger/addressable"
17
- s.licenses = ["Apache-2.0"]
18
- s.rdoc_options = ["--main", "README.md"]
19
- s.required_ruby_version = Gem::Requirement.new(">= 1.9.0")
20
- s.rubygems_version = "2.5.0"
21
- s.summary = "URI Implementation"
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
+ s.require_paths = ["lib".freeze]
10
+ s.authors = ["Bob Aman".freeze]
11
+ s.date = "2021-07-03"
12
+ s.description = "Addressable is an alternative implementation to the URI implementation that is\npart of Ruby's standard library. It is flexible, offers heuristic parsing, and\nadditionally provides extensive support for IRIs and URI templates.\n".freeze
13
+ s.email = "bob@sporkmonger.com".freeze
14
+ s.extra_rdoc_files = ["README.md".freeze]
15
+ s.files = ["CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE.txt".freeze, "README.md".freeze, "Rakefile".freeze, "addressable.gemspec".freeze, "data/unicode.data".freeze, "lib/addressable.rb".freeze, "lib/addressable/idna.rb".freeze, "lib/addressable/idna/native.rb".freeze, "lib/addressable/idna/pure.rb".freeze, "lib/addressable/template.rb".freeze, "lib/addressable/uri.rb".freeze, "lib/addressable/version.rb".freeze, "spec/addressable/idna_spec.rb".freeze, "spec/addressable/net_http_compat_spec.rb".freeze, "spec/addressable/security_spec.rb".freeze, "spec/addressable/template_spec.rb".freeze, "spec/addressable/uri_spec.rb".freeze, "spec/spec_helper.rb".freeze, "tasks/clobber.rake".freeze, "tasks/gem.rake".freeze, "tasks/git.rake".freeze, "tasks/metrics.rake".freeze, "tasks/profile.rake".freeze, "tasks/rspec.rake".freeze, "tasks/yard.rake".freeze]
16
+ s.homepage = "https://github.com/sporkmonger/addressable".freeze
17
+ s.licenses = ["Apache-2.0".freeze]
18
+ s.rdoc_options = ["--main".freeze, "README.md".freeze]
19
+ s.required_ruby_version = Gem::Requirement.new(">= 2.0".freeze)
20
+ s.rubygems_version = "3.0.3".freeze
21
+ s.summary = "URI Implementation".freeze
22
22
 
23
23
  if s.respond_to? :specification_version then
24
24
  s.specification_version = 4
25
25
 
26
26
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
- s.add_development_dependency(%q<bundler>, ["~> 1.0"])
27
+ s.add_runtime_dependency(%q<public_suffix>.freeze, [">= 2.0.2", "< 5.0"])
28
+ s.add_development_dependency(%q<bundler>.freeze, [">= 1.0", "< 3.0"])
28
29
  else
29
- s.add_dependency(%q<bundler>, ["~> 1.0"])
30
+ s.add_dependency(%q<public_suffix>.freeze, [">= 2.0.2", "< 5.0"])
31
+ s.add_dependency(%q<bundler>.freeze, [">= 1.0", "< 3.0"])
30
32
  end
31
33
  else
32
- s.add_dependency(%q<bundler>, ["~> 1.0"])
34
+ s.add_dependency(%q<public_suffix>.freeze, [">= 2.0.2", "< 5.0"])
35
+ s.add_dependency(%q<bundler>.freeze, [">= 1.0", "< 3.0"])
33
36
  end
34
37
  end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # encoding:utf-8
2
4
  #--
3
- # Copyright (C) 2006-2015 Bob Aman
5
+ # Copyright (C) Bob Aman
4
6
  #
5
7
  # Licensed under the Apache License, Version 2.0 (the "License");
6
8
  # you may not use this file except in compliance with the License.
@@ -34,8 +36,10 @@ module Addressable
34
36
 
35
37
  def self.to_ascii(value)
36
38
  value.to_s.split('.', -1).map do |segment|
37
- if segment.size > 0
38
- IDN::Idna.toASCII(segment)
39
+ if segment.size > 0 && segment.size < 64
40
+ IDN::Idna.toASCII(segment, IDN::Idna::ALLOW_UNASSIGNED)
41
+ elsif segment.size >= 64
42
+ segment
39
43
  else
40
44
  ''
41
45
  end
@@ -44,8 +48,10 @@ module Addressable
44
48
 
45
49
  def self.to_unicode(value)
46
50
  value.to_s.split('.', -1).map do |segment|
47
- if segment.size > 0
48
- IDN::Idna.toUnicode(segment)
51
+ if segment.size > 0 && segment.size < 64
52
+ IDN::Idna.toUnicode(segment, IDN::Idna::ALLOW_UNASSIGNED)
53
+ elsif segment.size >= 64
54
+ segment
49
55
  else
50
56
  ''
51
57
  end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # encoding:utf-8
2
4
  #--
3
- # Copyright (C) 2006-2015 Bob Aman
5
+ # Copyright (C) Bob Aman
4
6
  #
5
7
  # Licensed under the Apache License, Version 2.0 (the "License");
6
8
  # you may not use this file except in compliance with the License.
@@ -94,7 +96,12 @@ module Addressable
94
96
  parts = input.split('.')
95
97
  parts.map! do |part|
96
98
  if part =~ /^#{ACE_PREFIX}(.+)/
97
- punycode_decode(part[/^#{ACE_PREFIX}(.+)/, 1])
99
+ begin
100
+ punycode_decode(part[/^#{ACE_PREFIX}(.+)/, 1])
101
+ rescue Addressable::IDNA::PunycodeBadInput
102
+ # toUnicode is explicitly defined as never-fails by the spec
103
+ part
104
+ end
98
105
  else
99
106
  part
100
107
  end
@@ -128,7 +135,7 @@ module Addressable
128
135
  unpacked.map! { |codepoint| lookup_unicode_lowercase(codepoint) }
129
136
  return unpacked.pack("U*")
130
137
  end
131
- (class <<self; private :unicode_downcase; end)
138
+ private_class_method :unicode_downcase
132
139
 
133
140
  def self.unicode_compose(unpacked)
134
141
  unpacked_result = []
@@ -141,22 +148,19 @@ module Addressable
141
148
  starter_cc = 256 if starter_cc != 0
142
149
  for i in 1...length
143
150
  ch = unpacked[i]
144
- cc = lookup_unicode_combining_class(ch)
145
151
 
146
152
  if (starter_cc == 0 &&
147
153
  (composite = unicode_compose_pair(starter, ch)) != nil)
148
154
  starter = composite
149
- startercc = lookup_unicode_combining_class(composite)
150
155
  else
151
156
  unpacked_result << starter
152
157
  starter = ch
153
- startercc = cc
154
158
  end
155
159
  end
156
160
  unpacked_result << starter
157
161
  return unpacked_result
158
162
  end
159
- (class <<self; private :unicode_compose; end)
163
+ private_class_method :unicode_compose
160
164
 
161
165
  def self.unicode_compose_pair(ch_one, ch_two)
162
166
  if ch_one >= HANGUL_LBASE && ch_one < HANGUL_LBASE + HANGUL_LCOUNT &&
@@ -174,43 +178,45 @@ module Addressable
174
178
  end
175
179
 
176
180
  p = []
177
- ucs4_to_utf8 = lambda do |ch|
178
- if ch < 128
179
- p << ch
180
- elsif ch < 2048
181
- p << (ch >> 6 | 192)
182
- p << (ch & 63 | 128)
183
- elsif ch < 0x10000
184
- p << (ch >> 12 | 224)
185
- p << (ch >> 6 & 63 | 128)
186
- p << (ch & 63 | 128)
187
- elsif ch < 0x200000
188
- p << (ch >> 18 | 240)
189
- p << (ch >> 12 & 63 | 128)
190
- p << (ch >> 6 & 63 | 128)
191
- p << (ch & 63 | 128)
192
- elsif ch < 0x4000000
193
- p << (ch >> 24 | 248)
194
- p << (ch >> 18 & 63 | 128)
195
- p << (ch >> 12 & 63 | 128)
196
- p << (ch >> 6 & 63 | 128)
197
- p << (ch & 63 | 128)
198
- elsif ch < 0x80000000
199
- p << (ch >> 30 | 252)
200
- p << (ch >> 24 & 63 | 128)
201
- p << (ch >> 18 & 63 | 128)
202
- p << (ch >> 12 & 63 | 128)
203
- p << (ch >> 6 & 63 | 128)
204
- p << (ch & 63 | 128)
205
- end
206
- end
207
181
 
208
- ucs4_to_utf8.call(ch_one)
209
- ucs4_to_utf8.call(ch_two)
182
+ ucs4_to_utf8(ch_one, p)
183
+ ucs4_to_utf8(ch_two, p)
210
184
 
211
185
  return lookup_unicode_composition(p)
212
186
  end
213
- (class <<self; private :unicode_compose_pair; end)
187
+ private_class_method :unicode_compose_pair
188
+
189
+ def self.ucs4_to_utf8(char, buffer)
190
+ if char < 128
191
+ buffer << char
192
+ elsif char < 2048
193
+ buffer << (char >> 6 | 192)
194
+ buffer << (char & 63 | 128)
195
+ elsif char < 0x10000
196
+ buffer << (char >> 12 | 224)
197
+ buffer << (char >> 6 & 63 | 128)
198
+ buffer << (char & 63 | 128)
199
+ elsif char < 0x200000
200
+ buffer << (char >> 18 | 240)
201
+ buffer << (char >> 12 & 63 | 128)
202
+ buffer << (char >> 6 & 63 | 128)
203
+ buffer << (char & 63 | 128)
204
+ elsif char < 0x4000000
205
+ buffer << (char >> 24 | 248)
206
+ buffer << (char >> 18 & 63 | 128)
207
+ buffer << (char >> 12 & 63 | 128)
208
+ buffer << (char >> 6 & 63 | 128)
209
+ buffer << (char & 63 | 128)
210
+ elsif char < 0x80000000
211
+ buffer << (char >> 30 | 252)
212
+ buffer << (char >> 24 & 63 | 128)
213
+ buffer << (char >> 18 & 63 | 128)
214
+ buffer << (char >> 12 & 63 | 128)
215
+ buffer << (char >> 6 & 63 | 128)
216
+ buffer << (char & 63 | 128)
217
+ end
218
+ end
219
+ private_class_method :ucs4_to_utf8
214
220
 
215
221
  def self.unicode_sort_canonical(unpacked)
216
222
  unpacked = unpacked.dup
@@ -234,7 +240,7 @@ module Addressable
234
240
  end
235
241
  return unpacked
236
242
  end
237
- (class <<self; private :unicode_sort_canonical; end)
243
+ private_class_method :unicode_sort_canonical
238
244
 
239
245
  def self.unicode_decompose(unpacked)
240
246
  unpacked_result = []
@@ -255,7 +261,7 @@ module Addressable
255
261
  end
256
262
  return unpacked_result
257
263
  end
258
- (class <<self; private :unicode_decompose; end)
264
+ private_class_method :unicode_decompose
259
265
 
260
266
  def self.unicode_decompose_hangul(codepoint)
261
267
  sindex = codepoint - HANGUL_SBASE;
@@ -272,7 +278,7 @@ module Addressable
272
278
  end
273
279
  return l, v, t
274
280
  end
275
- (class <<self; private :unicode_decompose_hangul; end)
281
+ private_class_method :unicode_decompose_hangul
276
282
 
277
283
  def self.lookup_unicode_combining_class(codepoint)
278
284
  codepoint_data = UNICODE_DATA[codepoint]
@@ -280,14 +286,14 @@ module Addressable
280
286
  (codepoint_data[UNICODE_DATA_COMBINING_CLASS] || 0) :
281
287
  0)
282
288
  end
283
- (class <<self; private :lookup_unicode_combining_class; end)
289
+ private_class_method :lookup_unicode_combining_class
284
290
 
285
291
  def self.lookup_unicode_compatibility(codepoint)
286
292
  codepoint_data = UNICODE_DATA[codepoint]
287
293
  (codepoint_data ?
288
294
  codepoint_data[UNICODE_DATA_COMPATIBILITY] : nil)
289
295
  end
290
- (class <<self; private :lookup_unicode_compatibility; end)
296
+ private_class_method :lookup_unicode_compatibility
291
297
 
292
298
  def self.lookup_unicode_lowercase(codepoint)
293
299
  codepoint_data = UNICODE_DATA[codepoint]
@@ -295,12 +301,12 @@ module Addressable
295
301
  (codepoint_data[UNICODE_DATA_LOWERCASE] || codepoint) :
296
302
  codepoint)
297
303
  end
298
- (class <<self; private :lookup_unicode_lowercase; end)
304
+ private_class_method :lookup_unicode_lowercase
299
305
 
300
306
  def self.lookup_unicode_composition(unpacked)
301
307
  return COMPOSITION_TABLE[unpacked]
302
308
  end
303
- (class <<self; private :lookup_unicode_composition; end)
309
+ private_class_method :lookup_unicode_composition
304
310
 
305
311
  HANGUL_SBASE = 0xac00
306
312
  HANGUL_LBASE = 0x1100
@@ -337,7 +343,7 @@ module Addressable
337
343
  end
338
344
 
339
345
  COMPOSITION_TABLE = {}
340
- for codepoint, data in UNICODE_DATA
346
+ UNICODE_DATA.each do |codepoint, data|
341
347
  canonical = data[UNICODE_DATA_CANONICAL]
342
348
  exclusion = data[UNICODE_DATA_EXCLUSION]
343
349
 
@@ -496,7 +502,7 @@ module Addressable
496
502
 
497
503
  output[0..outlen].map { |x| x.chr }.join("").sub(/\0+\z/, "")
498
504
  end
499
- (class <<self; private :punycode_encode; end)
505
+ private_class_method :punycode_encode
500
506
 
501
507
  def self.punycode_decode(punycode)
502
508
  input = []
@@ -618,22 +624,22 @@ module Addressable
618
624
 
619
625
  output.pack("U*")
620
626
  end
621
- (class <<self; private :punycode_decode; end)
627
+ private_class_method :punycode_decode
622
628
 
623
629
  def self.punycode_basic?(codepoint)
624
630
  codepoint < 0x80
625
631
  end
626
- (class <<self; private :punycode_basic?; end)
632
+ private_class_method :punycode_basic?
627
633
 
628
634
  def self.punycode_delimiter?(codepoint)
629
635
  codepoint == PUNYCODE_DELIMITER
630
636
  end
631
- (class <<self; private :punycode_delimiter?; end)
637
+ private_class_method :punycode_delimiter?
632
638
 
633
639
  def self.punycode_encode_digit(d)
634
640
  d + 22 + 75 * ((d < 26) ? 1 : 0)
635
641
  end
636
- (class <<self; private :punycode_encode_digit; end)
642
+ private_class_method :punycode_encode_digit
637
643
 
638
644
  # Returns the numeric value of a basic codepoint
639
645
  # (for use in representing integers) in the range 0 to
@@ -649,7 +655,7 @@ module Addressable
649
655
  PUNYCODE_BASE
650
656
  end
651
657
  end
652
- (class <<self; private :punycode_decode_digit; end)
658
+ private_class_method :punycode_decode_digit
653
659
 
654
660
  # Bias adaptation method
655
661
  def self.punycode_adapt(delta, numpoints, firsttime)
@@ -666,7 +672,7 @@ module Addressable
666
672
 
667
673
  k + (difference + 1) * delta / (delta + PUNYCODE_SKEW)
668
674
  end
669
- (class <<self; private :punycode_adapt; end)
675
+ private_class_method :punycode_adapt
670
676
  end
671
677
  # :startdoc:
672
678
  end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # encoding:utf-8
2
4
  #--
3
- # Copyright (C) 2006-2015 Bob Aman
5
+ # Copyright (C) Bob Aman
4
6
  #
5
7
  # Licensed under the Apache License, Version 2.0 (the "License");
6
8
  # you may not use this file except in compliance with the License.