simpleidn 0.0.5 → 0.0.6
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.
- checksums.yaml +4 -4
- data/.gitignore +9 -0
- data/Gemfile +3 -0
- data/README.rdoc +1 -1
- data/Rakefile +4 -11
- data/lib/simpleidn.rb +49 -43
- data/simpleidn.gemspec +20 -19
- metadata +62 -48
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -2
- data/Manifest +0 -8
- data/spec/idn.rb +0 -57
- data/spec/test_vectors.rb +0 -139
- metadata.gz.sig +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6282e8801d789394c2e062b0bcab6f1e83807b23
|
4
|
+
data.tar.gz: 98036f912ff1374c176827c36a316295e6c852c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fcd5128a0e2d19f485f78aa44b29c9901e63fb14671d1b20cea62412bf374d0820bda175537a9127233e07ec5bc931eaa7b6b4049bac627456c728db0ba4eab7
|
7
|
+
data.tar.gz: 702f08322b85fabcd5210d10b021f42946003a00cb787843f32f8c820dc92bf6183c48f345c88d5f6d8741048c95d330f5fe2f0a2411ab714b50a1936b9bcce6
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.rdoc
CHANGED
@@ -4,7 +4,7 @@ This gem allows easy conversion from punycode ACE strings to unicode UTF-8 strin
|
|
4
4
|
|
5
5
|
The implementation is heavily based on the RFC3492 C example implementation but simplified since it does not preserve case.
|
6
6
|
|
7
|
-
This gem works with
|
7
|
+
This gem works with Ruby 1.8.7, 1.9.2, 1.9.3, 2.0, 2.1, 2.2.
|
8
8
|
|
9
9
|
* http://www.whatastruggle.com
|
10
10
|
|
data/Rakefile
CHANGED
@@ -1,13 +1,6 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
require 'rake'
|
4
|
-
require 'echoe'
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rspec/core/rake_task"
|
5
3
|
|
6
|
-
|
7
|
-
p.description = "This gem allows easy conversion from punycode ACE strings to unicode UTF-8 strings and visa versa."
|
8
|
-
p.url = "http://github.com/mmriis/simpleidn"
|
9
|
-
p.author = "Morten Møller Riis"
|
10
|
-
p.email = "mortenmoellerriis _AT_ gmail.com"
|
11
|
-
p.ignore_pattern = ["tmp/*", "script/*"]
|
12
|
-
end
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
13
5
|
|
6
|
+
task :default => :spec
|
data/lib/simpleidn.rb
CHANGED
@@ -7,7 +7,7 @@ if RUBY_VERSION =~ /^1\.8/
|
|
7
7
|
end
|
8
8
|
end
|
9
9
|
else
|
10
|
-
Encoding.default_internal = "UTF-8"
|
10
|
+
Encoding.default_internal = "UTF-8"
|
11
11
|
end
|
12
12
|
|
13
13
|
class Integer
|
@@ -17,9 +17,16 @@ class Integer
|
|
17
17
|
end
|
18
18
|
|
19
19
|
module SimpleIDN
|
20
|
-
|
20
|
+
|
21
|
+
VERSION = "0.0.6"
|
22
|
+
|
23
|
+
# The ConversionError is raised when an error occurs during a
|
24
|
+
# Punycode <-> Unicode conversion.
|
25
|
+
class ConversionError < RangeError
|
26
|
+
end
|
27
|
+
|
21
28
|
module Punycode
|
22
|
-
|
29
|
+
|
23
30
|
INITIAL_N = 0x80
|
24
31
|
INITIAL_BIAS = 72
|
25
32
|
DELIMITER = 0x2D
|
@@ -30,26 +37,26 @@ module SimpleIDN
|
|
30
37
|
SKEW = 38
|
31
38
|
MAXINT = 0x7FFFFFFF
|
32
39
|
|
33
|
-
module_function
|
34
|
-
|
35
|
-
# decode_digit(cp) returns the numeric value of a basic code
|
40
|
+
module_function
|
41
|
+
|
42
|
+
# decode_digit(cp) returns the numeric value of a basic code
|
36
43
|
# point (for use in representing integers) in the range 0 to
|
37
|
-
# base-1, or base if cp is does not represent a value.
|
44
|
+
# base-1, or base if cp is does not represent a value.
|
38
45
|
def decode_digit(cp)
|
39
46
|
cp - 48 < 10 ? cp - 22 : cp - 65 < 26 ? cp - 65 : cp - 97 < 26 ? cp - 97 : BASE
|
40
47
|
end
|
41
|
-
|
48
|
+
|
42
49
|
# encode_digit(d,flag) returns the basic code point whose value
|
43
50
|
# (when used for representing integers) is d, which needs to be in
|
44
51
|
# the range 0 to base-1. The lowercase form is used unless flag is
|
45
52
|
# nonzero, in which case the uppercase form is used. The behavior
|
46
|
-
# is undefined if flag is nonzero and digit d has no uppercase form.
|
53
|
+
# is undefined if flag is nonzero and digit d has no uppercase form.
|
47
54
|
def encode_digit(d)
|
48
55
|
d + 22 + 75 * (d < 26 ? 1 : 0)
|
49
|
-
# 0..25 map to ASCII a..z or A..Z
|
56
|
+
# 0..25 map to ASCII a..z or A..Z
|
50
57
|
# 26..35 map to ASCII 0..9
|
51
58
|
end
|
52
|
-
|
59
|
+
|
53
60
|
# Bias adaptation function
|
54
61
|
def adapt(delta, numpoints, firsttime)
|
55
62
|
delta = firsttime ? (delta / DAMP) : (delta >> 1)
|
@@ -62,7 +69,7 @@ module SimpleIDN
|
|
62
69
|
end
|
63
70
|
return k + (BASE - TMIN + 1) * delta / (delta + SKEW)
|
64
71
|
end
|
65
|
-
|
72
|
+
|
66
73
|
# encode_basic(bcp,flag) forces a basic code point to lowercase if flag is zero,
|
67
74
|
# uppercase if flag is nonzero, and returns the resulting code point.
|
68
75
|
# The code point is unchanged if it is caseless.
|
@@ -71,28 +78,28 @@ module SimpleIDN
|
|
71
78
|
bcp -= (bcp - 97 < 26 ? 1 : 0) << 5
|
72
79
|
return bcp + ((!flag && (bcp - 65 < 26 ? 1 : 0)) << 5)
|
73
80
|
end
|
74
|
-
|
81
|
+
|
75
82
|
# Main decode
|
76
83
|
def decode(input)
|
77
84
|
output = []
|
78
85
|
|
79
|
-
# Initialize the state:
|
86
|
+
# Initialize the state:
|
80
87
|
n = INITIAL_N
|
81
88
|
i = 0
|
82
89
|
bias = INITIAL_BIAS
|
83
90
|
|
84
|
-
# Handle the basic code points: Let basic be the number of input code
|
91
|
+
# Handle the basic code points: Let basic be the number of input code
|
85
92
|
# points before the last delimiter, or 0 if there is none, then
|
86
93
|
# copy the first basic code points to the output.
|
87
94
|
basic = input.rindex(DELIMITER.to_utf8_character) || 0
|
88
95
|
|
89
96
|
input.unpack("U*")[0, basic].each do |char|
|
90
|
-
raise(
|
97
|
+
raise(ConversionError, "Illegal input >= 0x80") if char >= 0x80
|
91
98
|
output << char.chr # to_utf8_character not needed her because ord < 0x80 (128) which is within US-ASCII.
|
92
99
|
end
|
93
100
|
|
94
101
|
# Main decoding loop: Start just after the last delimiter if any
|
95
|
-
# basic code points were copied; start at the beginning otherwise.
|
102
|
+
# basic code points were copied; start at the beginning otherwise.
|
96
103
|
|
97
104
|
ic = basic > 0 ? basic + 1 : 0
|
98
105
|
while ic < input.length do
|
@@ -100,26 +107,26 @@ module SimpleIDN
|
|
100
107
|
|
101
108
|
# Decode a generalized variable-length integer into delta,
|
102
109
|
# which gets added to i. The overflow checking is easier
|
103
|
-
# if we increase i as we go, then subtract off its starting
|
110
|
+
# if we increase i as we go, then subtract off its starting
|
104
111
|
# value at the end to obtain delta.
|
105
112
|
oldi = i
|
106
113
|
w = 1
|
107
114
|
k = BASE
|
108
115
|
while true do
|
109
|
-
raise(
|
116
|
+
raise(ConversionError, "punycode_bad_input(1)") if ic >= input.length
|
110
117
|
|
111
118
|
digit = decode_digit(input[ic].ord)
|
112
119
|
ic += 1
|
113
120
|
|
114
|
-
raise(
|
115
|
-
|
116
|
-
raise(
|
121
|
+
raise(ConversionError, "punycode_bad_input(2)") if digit >= BASE
|
122
|
+
|
123
|
+
raise(ConversionError, "punycode_overflow(1)") if digit > (MAXINT - i) / w
|
117
124
|
|
118
125
|
i += digit * w
|
119
126
|
t = k <= bias ? TMIN : k >= bias + TMAX ? TMAX : k - bias
|
120
127
|
break if digit < t
|
121
|
-
raise(
|
122
|
-
|
128
|
+
raise(ConversionError, "punycode_overflow(2)") if w > MAXINT / (BASE - t)
|
129
|
+
|
123
130
|
w *= BASE - t
|
124
131
|
k += BASE
|
125
132
|
end
|
@@ -128,58 +135,57 @@ module SimpleIDN
|
|
128
135
|
bias = adapt(i - oldi, out, oldi == 0)
|
129
136
|
|
130
137
|
# i was supposed to wrap around from out to 0,
|
131
|
-
# incrementing n each time, so we'll fix that now:
|
132
|
-
raise(
|
138
|
+
# incrementing n each time, so we'll fix that now:
|
139
|
+
raise(ConversionError, "punycode_overflow(3)") if (i / out) > MAXINT - n
|
133
140
|
|
134
141
|
n += (i / out)
|
135
142
|
i %= out
|
136
143
|
|
137
|
-
# Insert n at position i of the output:
|
144
|
+
# Insert n at position i of the output:
|
138
145
|
output.insert(i, n.to_utf8_character)
|
139
146
|
i += 1
|
140
147
|
end
|
141
|
-
|
148
|
+
|
142
149
|
return output.join
|
143
150
|
end
|
144
151
|
|
145
152
|
# Main encode function
|
146
153
|
def encode(input)
|
147
|
-
|
148
154
|
input = input.downcase.unpack("U*")
|
149
155
|
output = []
|
150
156
|
|
151
|
-
# Initialize the state:
|
157
|
+
# Initialize the state:
|
152
158
|
n = INITIAL_N
|
153
159
|
delta = 0
|
154
160
|
bias = INITIAL_BIAS
|
155
161
|
|
156
|
-
# Handle the basic code points:
|
162
|
+
# Handle the basic code points:
|
157
163
|
output = input.select do |char|
|
158
164
|
char if char < 0x80
|
159
165
|
end
|
160
|
-
|
166
|
+
|
161
167
|
h = b = output.length
|
162
168
|
|
163
169
|
# h is the number of code points that have been handled, b is the
|
164
|
-
# number of basic code points
|
170
|
+
# number of basic code points
|
165
171
|
|
166
172
|
output << DELIMITER if b > 0
|
167
173
|
|
168
174
|
# Main encoding loop:
|
169
175
|
while h < input.length do
|
170
176
|
# All non-basic code points < n have been
|
171
|
-
# handled already. Find the next larger one:
|
177
|
+
# handled already. Find the next larger one:
|
172
178
|
|
173
179
|
m = MAXINT
|
174
|
-
|
180
|
+
|
175
181
|
input.each do |char|
|
176
182
|
m = char if char >= n && char < m
|
177
183
|
end
|
178
184
|
|
179
185
|
# Increase delta enough to advance the decoder's
|
180
|
-
# <n,i> state to <m,0>, but guard against overflow:
|
186
|
+
# <n,i> state to <m,0>, but guard against overflow:
|
181
187
|
|
182
|
-
raise(
|
188
|
+
raise(ConversionError, "punycode_overflow (1)") if m - n > ((MAXINT - delta) / (h + 1)).floor
|
183
189
|
|
184
190
|
delta += (m - n) * (h + 1)
|
185
191
|
n = m
|
@@ -187,11 +193,11 @@ module SimpleIDN
|
|
187
193
|
input.each_with_index do |char, j|
|
188
194
|
if char < n
|
189
195
|
delta += 1
|
190
|
-
raise(
|
196
|
+
raise(ConversionError, "punycode_overflow(2)") if delta > MAXINT
|
191
197
|
end
|
192
198
|
|
193
199
|
if (char == n)
|
194
|
-
# Represent delta as a generalized variable-length integer:
|
200
|
+
# Represent delta as a generalized variable-length integer:
|
195
201
|
q = delta
|
196
202
|
k = BASE
|
197
203
|
while true do
|
@@ -215,13 +221,13 @@ module SimpleIDN
|
|
215
221
|
end
|
216
222
|
|
217
223
|
end
|
218
|
-
|
224
|
+
|
219
225
|
module_function
|
220
|
-
|
226
|
+
|
221
227
|
# Converts a UTF-8 unicode string to a punycode ACE string.
|
222
228
|
# == Example
|
223
229
|
# SimpleIDN.to_ascii("møllerriis.com")
|
224
|
-
# => "xn--mllerriis-l8a.com"
|
230
|
+
# => "xn--mllerriis-l8a.com"
|
225
231
|
def to_ascii(domain)
|
226
232
|
domain_array = domain.split(".") rescue []
|
227
233
|
return domain if domain_array.length == 0
|
@@ -238,7 +244,7 @@ module SimpleIDN
|
|
238
244
|
# Converts a punycode ACE string to a UTF-8 unicode string.
|
239
245
|
# == Example
|
240
246
|
# SimpleIDN.to_unicode("xn--mllerriis-l8a.com")
|
241
|
-
# => "møllerriis.com"
|
247
|
+
# => "møllerriis.com"
|
242
248
|
def to_unicode(domain)
|
243
249
|
domain_array = domain.split(".") rescue []
|
244
250
|
return domain if domain_array.length == 0
|
data/simpleidn.gemspec
CHANGED
@@ -1,22 +1,23 @@
|
|
1
|
-
#
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'simpleidn'
|
2
5
|
|
3
|
-
Gem::Specification.new do |
|
4
|
-
|
5
|
-
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "simpleidn"
|
8
|
+
spec.version = SimpleIDN::VERSION
|
9
|
+
spec.authors = ["Morten Møller Riis"]
|
10
|
+
spec.email = ["mortenmoellerriis _AT_ gmail.com"]
|
6
11
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
s.rubyforge_project = "simpleidn"
|
19
|
-
s.rubygems_version = "2.0.3"
|
20
|
-
s.signing_key = "/Users/mmr/gem-private_key.pem"
|
21
|
-
s.summary = "This gem allows easy conversion from punycode ACE strings to unicode UTF-8 strings and visa versa."
|
12
|
+
spec.summary = %q{Punycode ACE to unicode UTF-8 (and vice-versa) string conversion.}
|
13
|
+
spec.description = %q{This gem allows easy conversion from punycode ACE strings to unicode UTF-8 strings and vice-versa.}
|
14
|
+
spec.homepage = "https://github.com/mmriis/simpleidn"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
21
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
22
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
22
23
|
end
|
metadata
CHANGED
@@ -1,80 +1,94 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simpleidn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Morten Møller Riis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
34
55
|
description: This gem allows easy conversion from punycode ACE strings to unicode
|
35
|
-
UTF-8 strings and
|
36
|
-
email:
|
56
|
+
UTF-8 strings and vice-versa.
|
57
|
+
email:
|
58
|
+
- mortenmoellerriis _AT_ gmail.com
|
37
59
|
executables: []
|
38
60
|
extensions: []
|
39
|
-
extra_rdoc_files:
|
40
|
-
- README.rdoc
|
41
|
-
- lib/simpleidn.rb
|
61
|
+
extra_rdoc_files: []
|
42
62
|
files:
|
63
|
+
- ".gitignore"
|
64
|
+
- Gemfile
|
43
65
|
- LICENCE
|
44
|
-
- Manifest
|
45
66
|
- README.rdoc
|
46
67
|
- Rakefile
|
47
68
|
- lib/simpleidn.rb
|
48
69
|
- simpleidn.gemspec
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
licenses: []
|
70
|
+
homepage: https://github.com/mmriis/simpleidn
|
71
|
+
licenses:
|
72
|
+
- MIT
|
53
73
|
metadata: {}
|
54
74
|
post_install_message:
|
55
|
-
rdoc_options:
|
56
|
-
- --line-numbers
|
57
|
-
- --title
|
58
|
-
- Simpleidn
|
59
|
-
- --main
|
60
|
-
- README.rdoc
|
75
|
+
rdoc_options: []
|
61
76
|
require_paths:
|
62
77
|
- lib
|
63
78
|
required_ruby_version: !ruby/object:Gem::Requirement
|
64
79
|
requirements:
|
65
|
-
- -
|
80
|
+
- - ">="
|
66
81
|
- !ruby/object:Gem::Version
|
67
82
|
version: '0'
|
68
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
84
|
requirements:
|
70
|
-
- -
|
85
|
+
- - ">="
|
71
86
|
- !ruby/object:Gem::Version
|
72
|
-
version: '
|
87
|
+
version: '0'
|
73
88
|
requirements: []
|
74
|
-
rubyforge_project:
|
75
|
-
rubygems_version: 2.
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 2.4.5
|
76
91
|
signing_key:
|
77
92
|
specification_version: 4
|
78
|
-
summary:
|
79
|
-
strings and visa versa.
|
93
|
+
summary: Punycode ACE to unicode UTF-8 (and vice-versa) string conversion.
|
80
94
|
test_files: []
|
checksums.yaml.gz.sig
DELETED
Binary file
|
data.tar.gz.sig
DELETED
data/Manifest
DELETED
data/spec/idn.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'rspec'
|
3
|
-
require 'simpleidn'
|
4
|
-
require 'test_vectors'
|
5
|
-
|
6
|
-
describe "SimpleIDN" do
|
7
|
-
describe "to_unicode" do
|
8
|
-
it "should pass all test cases" do
|
9
|
-
TESTCASES_JOSEFSSON.sort.each do |testcase, vector|
|
10
|
-
SimpleIDN.to_unicode(vector[1]).should == vector[0]
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should respect * and not try to decode it" do
|
15
|
-
SimpleIDN.to_unicode("*.xn--mllerriis-l8a.com").should == "*.møllerriis.com"
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should respect leading _ and not try to encode it" do
|
19
|
-
SimpleIDN.to_unicode("_something.xn--mllerriis-l8a.com").should == "_something.møllerriis.com"
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should return nil for nil" do
|
23
|
-
SimpleIDN.to_unicode(nil).should be_nil
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should return . if only . given" do
|
27
|
-
# https://github.com/mmriis/simpleidn/issues/3
|
28
|
-
SimpleIDN.to_unicode('.').should == '.'
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "to_ascii" do
|
34
|
-
it "should pass all test cases" do
|
35
|
-
TESTCASES_JOSEFSSON.sort.each do |testcase, vector|
|
36
|
-
SimpleIDN.to_ascii(vector[0]).should == vector[1].downcase
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should respect * and not try to encode it" do
|
41
|
-
SimpleIDN.to_ascii("*.hello.com").should == "*.hello.com"
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should respect leading _ and not try to encode it" do
|
45
|
-
SimpleIDN.to_ascii("_something.example.org").should == "_something.example.org"
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should return nil for nil" do
|
49
|
-
SimpleIDN.to_ascii(nil).should be_nil
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should return . if only . given" do
|
53
|
-
# https://github.com/mmriis/simpleidn/issues/3
|
54
|
-
SimpleIDN.to_ascii('.').should == '.'
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
data/spec/test_vectors.rb
DELETED
@@ -1,139 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
# JOSEFSSON test vectors, taken from DRAFT-JOSEFSSON-IDN-TEST-VECTORS-00:
|
3
|
-
# http://www.gnu.org/software/libidn/draft-josefsson-idn-test-vectors.html
|
4
|
-
#
|
5
|
-
# Modifications:
|
6
|
-
# - omission of 5.20 since it is identical with 5.8 (case H below)
|
7
|
-
|
8
|
-
TESTCASES_JOSEFSSON = {
|
9
|
-
'A' => [
|
10
|
-
[ 0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643,
|
11
|
-
0x0644, 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A,
|
12
|
-
0x061F ].pack('U*'),
|
13
|
-
'xn--egbpdaj6bu4bxfgehfvwxn'
|
14
|
-
],
|
15
|
-
|
16
|
-
'B' => [
|
17
|
-
[ 0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D,
|
18
|
-
0x6587 ].pack('U*'),
|
19
|
-
'xn--ihqwcrb4cv8a8dqg056pqjye'
|
20
|
-
],
|
21
|
-
|
22
|
-
'C' => [
|
23
|
-
[ 0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D,
|
24
|
-
0x6587 ].pack('U*'),
|
25
|
-
'xn--ihqwctvzc91f659drss3x8bo0yb'
|
26
|
-
],
|
27
|
-
|
28
|
-
'D' => [
|
29
|
-
[ 0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073,
|
30
|
-
0x0074, 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076,
|
31
|
-
0x00ED, 0x010D, 0x0065, 0x0073, 0x006B, 0x0079 ].pack('U*'),
|
32
|
-
'xn--Proprostnemluvesky-uyb24dma41a'
|
33
|
-
],
|
34
|
-
|
35
|
-
'E' => [
|
36
|
-
[ 0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5,
|
37
|
-
0x05D8, 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9,
|
38
|
-
0x05DD, 0x05E2, 0x05D1, 0x05E8, 0x05D9, 0x05EA ].pack('U*'),
|
39
|
-
'xn--4dbcagdahymbxekheh6e0a7fei0b'
|
40
|
-
],
|
41
|
-
|
42
|
-
'F' => [
|
43
|
-
[ 0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928,
|
44
|
-
0x094D, 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902,
|
45
|
-
0x0928, 0x0939, 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938,
|
46
|
-
0x0915, 0x0924, 0x0947, 0x0939, 0x0948, 0x0902 ].pack('U*'),
|
47
|
-
'xn--i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd'
|
48
|
-
],
|
49
|
-
|
50
|
-
'G' => [
|
51
|
-
[ 0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E,
|
52
|
-
0x3092, 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044,
|
53
|
-
0x306E, 0x304B ].pack('U*'),
|
54
|
-
'xn--n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa'
|
55
|
-
],
|
56
|
-
|
57
|
-
'H' => [
|
58
|
-
[ 0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435,
|
59
|
-
0x043E, 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432,
|
60
|
-
0x043E, 0x0440, 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443,
|
61
|
-
0x0441, 0x0441, 0x043A, 0x0438 ].pack('U*'),
|
62
|
-
'xn--b1abfaaepdrnnbgefbadotcwatmq2g4l'
|
63
|
-
],
|
64
|
-
|
65
|
-
'I' => [
|
66
|
-
[ 0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F,
|
67
|
-
0x0070, 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069,
|
68
|
-
0x006D, 0x0070, 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074,
|
69
|
-
0x0065, 0x0068, 0x0061, 0x0062, 0x006C, 0x0061, 0x0072, 0x0065,
|
70
|
-
0x006E, 0x0045, 0x0073, 0x0070, 0x0061, 0x00F1, 0x006F,
|
71
|
-
0x006C ].pack('U*'),
|
72
|
-
'xn--PorqunopuedensimplementehablarenEspaol-fmd56a'
|
73
|
-
],
|
74
|
-
|
75
|
-
'J' => [
|
76
|
-
[ 0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD,
|
77
|
-
0x006B, 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3,
|
78
|
-
0x0063, 0x0068, 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069,
|
79
|
-
0x1EBF, 0x006E, 0x0067, 0x0056, 0x0069, 0x1EC7, 0x0074 ].pack('U*'),
|
80
|
-
'xn--TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g'
|
81
|
-
],
|
82
|
-
|
83
|
-
'K' => [
|
84
|
-
[ 0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148,
|
85
|
-
0x751F ].pack('U*'),
|
86
|
-
'xn--3B-ww4c5e180e575a65lsy2b'
|
87
|
-
],
|
88
|
-
|
89
|
-
'L' => [
|
90
|
-
[ 0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069,
|
91
|
-
0x0074, 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052,
|
92
|
-
0x002D, 0x004D, 0x004F, 0x004E, 0x004B, 0x0045, 0x0059,
|
93
|
-
0x0053 ].pack('U*'),
|
94
|
-
'xn---with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n'
|
95
|
-
],
|
96
|
-
|
97
|
-
'M' => [
|
98
|
-
[ 0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E,
|
99
|
-
0x006F, 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061,
|
100
|
-
0x0079, 0x002D, 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834,
|
101
|
-
0x6240 ].pack('U*'),
|
102
|
-
'xn--Hello-Another-Way--fc4qua05auwb3674vfr0b'
|
103
|
-
],
|
104
|
-
|
105
|
-
'N' => [
|
106
|
-
[ 0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B,
|
107
|
-
0x0032 ].pack('U*'),
|
108
|
-
'xn--2-u9tlzr9756bt3uc0v'
|
109
|
-
],
|
110
|
-
|
111
|
-
'O' => [
|
112
|
-
[ 0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069,
|
113
|
-
0x3059, 0x308B, 0x0035, 0x79D2, 0x524D ].pack('U*'),
|
114
|
-
'xn--MajiKoi5-783gue6qz075azm5e'
|
115
|
-
],
|
116
|
-
|
117
|
-
'P' => [
|
118
|
-
[ 0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3,
|
119
|
-
0x30D0 ].pack('U*'),
|
120
|
-
'xn--de-jg4avhby1noc0d'
|
121
|
-
],
|
122
|
-
|
123
|
-
'Q' => [
|
124
|
-
[ 0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067 ].pack('U*'),
|
125
|
-
'xn--d9juau41awczczp'
|
126
|
-
],
|
127
|
-
|
128
|
-
'R' => [
|
129
|
-
[ 0x03B5, 0x03BB, 0x03BB, 0x03B7, 0x03BD, 0x03B9, 0x03BA,
|
130
|
-
0x03AC ].pack('U*'),
|
131
|
-
'xn--hxargifdar'
|
132
|
-
],
|
133
|
-
|
134
|
-
'S' => [
|
135
|
-
[ 0x0062, 0x006F, 0x006E, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127,
|
136
|
-
0x0127, 0x0061 ].pack('U*'),
|
137
|
-
'xn--bonusaa-5bb1da'
|
138
|
-
]
|
139
|
-
}
|
metadata.gz.sig
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
t�fG��Ql���W���������O^���wC�'��|;��~c��̕��y���䏼����&j.Jk�~�Z��E��t��cGif��_�$h0�V�͍���bQ�U�]݆��U��CD�ɓn�$�L*��3d�a��۩�&�=�� r>�H9��_4N��C�-��䐙��u˕Tv�/�RTǖ�R�_��kQ�
|