ultra-clean-kit 0.0.1
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 +7 -0
- data/babosa-2.1.0/Changelog.md +119 -0
- data/babosa-2.1.0/MIT-LICENSE +19 -0
- data/babosa-2.1.0/README.md +243 -0
- data/babosa-2.1.0/Rakefile +36 -0
- data/babosa-2.1.0/lib/babosa/identifier.rb +268 -0
- data/babosa-2.1.0/lib/babosa/transliterator/base.rb +94 -0
- data/babosa-2.1.0/lib/babosa/transliterator/bulgarian.rb +30 -0
- data/babosa-2.1.0/lib/babosa/transliterator/cyrillic.rb +108 -0
- data/babosa-2.1.0/lib/babosa/transliterator/danish.rb +17 -0
- data/babosa-2.1.0/lib/babosa/transliterator/german.rb +18 -0
- data/babosa-2.1.0/lib/babosa/transliterator/greek.rb +78 -0
- data/babosa-2.1.0/lib/babosa/transliterator/hindi.rb +138 -0
- data/babosa-2.1.0/lib/babosa/transliterator/latin.rb +199 -0
- data/babosa-2.1.0/lib/babosa/transliterator/macedonian.rb +32 -0
- data/babosa-2.1.0/lib/babosa/transliterator/norwegian.rb +16 -0
- data/babosa-2.1.0/lib/babosa/transliterator/romanian.rb +16 -0
- data/babosa-2.1.0/lib/babosa/transliterator/russian.rb +25 -0
- data/babosa-2.1.0/lib/babosa/transliterator/serbian.rb +38 -0
- data/babosa-2.1.0/lib/babosa/transliterator/spanish.rb +11 -0
- data/babosa-2.1.0/lib/babosa/transliterator/swedish.rb +18 -0
- data/babosa-2.1.0/lib/babosa/transliterator/turkish.rb +10 -0
- data/babosa-2.1.0/lib/babosa/transliterator/ukrainian.rb +33 -0
- data/babosa-2.1.0/lib/babosa/transliterator/vietnamese.rb +146 -0
- data/babosa-2.1.0/lib/babosa/version.rb +7 -0
- data/babosa-2.1.0/lib/babosa.rb +14 -0
- data/babosa-2.1.0/spec/identifier_spec.rb +161 -0
- data/babosa-2.1.0/spec/spec_helper.rb +45 -0
- data/babosa-2.1.0/spec/transliterators/base_spec.rb +15 -0
- data/babosa-2.1.0/spec/transliterators/bulgarian_spec.rb +19 -0
- data/babosa-2.1.0/spec/transliterators/danish_spec.rb +16 -0
- data/babosa-2.1.0/spec/transliterators/german_spec.rb +16 -0
- data/babosa-2.1.0/spec/transliterators/greek_spec.rb +17 -0
- data/babosa-2.1.0/spec/transliterators/hindi_spec.rb +17 -0
- data/babosa-2.1.0/spec/transliterators/latin_spec.rb +8 -0
- data/babosa-2.1.0/spec/transliterators/macedonian_spec.rb +8 -0
- data/babosa-2.1.0/spec/transliterators/norwegian_spec.rb +18 -0
- data/babosa-2.1.0/spec/transliterators/polish_spec.rb +12 -0
- data/babosa-2.1.0/spec/transliterators/romanian_spec.rb +18 -0
- data/babosa-2.1.0/spec/transliterators/russian_spec.rb +8 -0
- data/babosa-2.1.0/spec/transliterators/serbian_spec.rb +24 -0
- data/babosa-2.1.0/spec/transliterators/spanish_spec.rb +12 -0
- data/babosa-2.1.0/spec/transliterators/swedish_spec.rb +18 -0
- data/babosa-2.1.0/spec/transliterators/turkish_spec.rb +24 -0
- data/babosa-2.1.0/spec/transliterators/ukrainian_spec.rb +87 -0
- data/babosa-2.1.0/spec/transliterators/vietnamese_spec.rb +18 -0
- data/ultra-clean-kit.gemspec +12 -0
- metadata +87 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "cyrillic"
|
|
4
|
+
|
|
5
|
+
module Babosa
|
|
6
|
+
module Transliterator
|
|
7
|
+
class Macedonian < Cyrillic
|
|
8
|
+
APPROXIMATIONS = {
|
|
9
|
+
"Ѓ" => "Gj",
|
|
10
|
+
"Љ" => "Lj",
|
|
11
|
+
"Њ" => "Nj",
|
|
12
|
+
"Ќ" => "Kj",
|
|
13
|
+
"Џ" => "Dzh",
|
|
14
|
+
"Ж" => "Zh",
|
|
15
|
+
"Ц" => "C",
|
|
16
|
+
"Ѕ" => "Z",
|
|
17
|
+
"Ј" => "J",
|
|
18
|
+
"Х" => "H",
|
|
19
|
+
"ѓ" => "gj",
|
|
20
|
+
"љ" => "lj",
|
|
21
|
+
"њ" => "nj",
|
|
22
|
+
"ќ" => "kj",
|
|
23
|
+
"џ" => "dzh",
|
|
24
|
+
"ж" => "zh",
|
|
25
|
+
"ц" => "c",
|
|
26
|
+
"ѕ" => "z",
|
|
27
|
+
"ј" => "j",
|
|
28
|
+
"х" => "h"
|
|
29
|
+
}.freeze
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "cyrillic"
|
|
4
|
+
|
|
5
|
+
module Babosa
|
|
6
|
+
module Transliterator
|
|
7
|
+
class Russian < Cyrillic
|
|
8
|
+
APPROXIMATIONS = {
|
|
9
|
+
"Й" => "I",
|
|
10
|
+
"М" => "M",
|
|
11
|
+
"Х" => "H",
|
|
12
|
+
"Ц" => "Ts",
|
|
13
|
+
"Ш" => "Sh",
|
|
14
|
+
"Щ" => "Sch",
|
|
15
|
+
"Ю" => "U",
|
|
16
|
+
"Я" => "Ya",
|
|
17
|
+
"й" => "i",
|
|
18
|
+
"х" => "h",
|
|
19
|
+
"ц" => "ts",
|
|
20
|
+
"щ" => "sch",
|
|
21
|
+
"ю" => "u"
|
|
22
|
+
}.freeze
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "latin"
|
|
4
|
+
|
|
5
|
+
module Babosa
|
|
6
|
+
module Transliterator
|
|
7
|
+
class Serbian < Latin
|
|
8
|
+
APPROXIMATIONS = Cyrillic.const_get(:APPROXIMATIONS).merge(
|
|
9
|
+
{
|
|
10
|
+
"Ð" => "Dj",
|
|
11
|
+
"Č" => "Ch",
|
|
12
|
+
"Š" => "Sh",
|
|
13
|
+
"č" => "ch",
|
|
14
|
+
"đ" => "dj",
|
|
15
|
+
"š" => "sh",
|
|
16
|
+
"Ћ" => "C",
|
|
17
|
+
"Ц" => "C",
|
|
18
|
+
"Ч" => "Ch",
|
|
19
|
+
"Ђ" => "Dj",
|
|
20
|
+
"Џ" => "Dz",
|
|
21
|
+
"Х" => "H",
|
|
22
|
+
"Ј" => "J",
|
|
23
|
+
"Љ" => "Lj",
|
|
24
|
+
"Њ" => "Nj",
|
|
25
|
+
"ц" => "c",
|
|
26
|
+
"ћ" => "c",
|
|
27
|
+
"ч" => "ch",
|
|
28
|
+
"ђ" => "dj",
|
|
29
|
+
"џ" => "dz",
|
|
30
|
+
"х" => "h",
|
|
31
|
+
"ј" => "j",
|
|
32
|
+
"љ" => "lj",
|
|
33
|
+
"њ" => "nj"
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "latin"
|
|
4
|
+
|
|
5
|
+
module Babosa
|
|
6
|
+
module Transliterator
|
|
7
|
+
class Swedish < Latin
|
|
8
|
+
APPROXIMATIONS = {
|
|
9
|
+
"å" => "aa",
|
|
10
|
+
"ä" => "ae",
|
|
11
|
+
"ö" => "oe",
|
|
12
|
+
"Å" => "Aa",
|
|
13
|
+
"Ä" => "Ae",
|
|
14
|
+
"Ö" => "Oe"
|
|
15
|
+
}.freeze
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "cyrillic"
|
|
4
|
+
|
|
5
|
+
module Babosa
|
|
6
|
+
module Transliterator
|
|
7
|
+
class Ukrainian < Cyrillic
|
|
8
|
+
APPROXIMATIONS = {
|
|
9
|
+
"Г" => "H",
|
|
10
|
+
"г" => "h",
|
|
11
|
+
"Ґ" => "G",
|
|
12
|
+
"ґ" => "g",
|
|
13
|
+
"є" => "ie",
|
|
14
|
+
"И" => "Y",
|
|
15
|
+
"и" => "y",
|
|
16
|
+
"І" => "I",
|
|
17
|
+
"і" => "i",
|
|
18
|
+
"ї" => "i",
|
|
19
|
+
"Й" => "Y",
|
|
20
|
+
"й" => "i",
|
|
21
|
+
"Х" => "Kh",
|
|
22
|
+
"х" => "kh",
|
|
23
|
+
"Ц" => "Ts",
|
|
24
|
+
"ц" => "ts",
|
|
25
|
+
"Щ" => "Shch",
|
|
26
|
+
"щ" => "shch",
|
|
27
|
+
"ю" => "iu",
|
|
28
|
+
"я" => "ia",
|
|
29
|
+
"'" => ""
|
|
30
|
+
}.freeze
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "latin"
|
|
4
|
+
|
|
5
|
+
module Babosa
|
|
6
|
+
module Transliterator
|
|
7
|
+
class Vietnamese < Latin
|
|
8
|
+
APPROXIMATIONS = {
|
|
9
|
+
"à" => "a",
|
|
10
|
+
"á" => "a",
|
|
11
|
+
"ạ" => "a",
|
|
12
|
+
"ả" => "a",
|
|
13
|
+
"ã" => "a",
|
|
14
|
+
"â" => "a",
|
|
15
|
+
"ầ" => "a",
|
|
16
|
+
"ấ" => "a",
|
|
17
|
+
"ậ" => "a",
|
|
18
|
+
"ẩ" => "a",
|
|
19
|
+
"ẫ" => "a",
|
|
20
|
+
"ă" => "a",
|
|
21
|
+
"ằ" => "a",
|
|
22
|
+
"ắ" => "a",
|
|
23
|
+
"ặ" => "a",
|
|
24
|
+
"ẳ" => "a",
|
|
25
|
+
"ẵ" => "a",
|
|
26
|
+
"À" => "A",
|
|
27
|
+
"Á" => "A",
|
|
28
|
+
"Ạ" => "A",
|
|
29
|
+
"Ả" => "A",
|
|
30
|
+
"Ã" => "A",
|
|
31
|
+
"Â" => "A",
|
|
32
|
+
"Ầ" => "A",
|
|
33
|
+
"Ấ" => "A",
|
|
34
|
+
"Ậ" => "A",
|
|
35
|
+
"Ẩ" => "A",
|
|
36
|
+
"Ẫ" => "A",
|
|
37
|
+
"Ă" => "A",
|
|
38
|
+
"Ằ" => "A",
|
|
39
|
+
"Ắ" => "A",
|
|
40
|
+
"Ặ" => "A",
|
|
41
|
+
"Ẳ" => "A",
|
|
42
|
+
"Ẵ" => "A",
|
|
43
|
+
"ì" => "i",
|
|
44
|
+
"í" => "i",
|
|
45
|
+
"ị" => "i",
|
|
46
|
+
"ỉ" => "i",
|
|
47
|
+
"ĩ" => "i",
|
|
48
|
+
"Ì" => "I",
|
|
49
|
+
"Í" => "I",
|
|
50
|
+
"Ị" => "I",
|
|
51
|
+
"Ỉ" => "I",
|
|
52
|
+
"Ĩ" => "I",
|
|
53
|
+
"ù" => "u",
|
|
54
|
+
"ú" => "u",
|
|
55
|
+
"ụ" => "u",
|
|
56
|
+
"ủ" => "u",
|
|
57
|
+
"ũ" => "u",
|
|
58
|
+
"ư" => "u",
|
|
59
|
+
"ừ" => "u",
|
|
60
|
+
"ứ" => "u",
|
|
61
|
+
"ự" => "u",
|
|
62
|
+
"ử" => "u",
|
|
63
|
+
"ữ" => "u",
|
|
64
|
+
"Ù" => "U",
|
|
65
|
+
"Ú" => "U",
|
|
66
|
+
"Ụ" => "U",
|
|
67
|
+
"Ủ" => "U",
|
|
68
|
+
"Ũ" => "U",
|
|
69
|
+
"Ư" => "U",
|
|
70
|
+
"Ừ" => "U",
|
|
71
|
+
"Ứ" => "U",
|
|
72
|
+
"Ự" => "U",
|
|
73
|
+
"Ử" => "U",
|
|
74
|
+
"Ữ" => "U",
|
|
75
|
+
"è" => "e",
|
|
76
|
+
"é" => "e",
|
|
77
|
+
"ẹ" => "e",
|
|
78
|
+
"ẻ" => "e",
|
|
79
|
+
"ẽ" => "e",
|
|
80
|
+
"ê" => "e",
|
|
81
|
+
"ề" => "e",
|
|
82
|
+
"ế" => "e",
|
|
83
|
+
"ệ" => "e",
|
|
84
|
+
"ể" => "e",
|
|
85
|
+
"ễ" => "e",
|
|
86
|
+
"È" => "E",
|
|
87
|
+
"É" => "E",
|
|
88
|
+
"Ẹ" => "E",
|
|
89
|
+
"Ẻ" => "E",
|
|
90
|
+
"Ẽ" => "E",
|
|
91
|
+
"Ê" => "E",
|
|
92
|
+
"Ề" => "E",
|
|
93
|
+
"Ế" => "E",
|
|
94
|
+
"Ệ" => "E",
|
|
95
|
+
"Ể" => "E",
|
|
96
|
+
"Ễ" => "E",
|
|
97
|
+
"ò" => "o",
|
|
98
|
+
"ó" => "o",
|
|
99
|
+
"ọ" => "o",
|
|
100
|
+
"ỏ" => "o",
|
|
101
|
+
"õ" => "o",
|
|
102
|
+
"ô" => "o",
|
|
103
|
+
"ồ" => "o",
|
|
104
|
+
"ố" => "o",
|
|
105
|
+
"ộ" => "o",
|
|
106
|
+
"ổ" => "o",
|
|
107
|
+
"ỗ" => "o",
|
|
108
|
+
"ơ" => "o",
|
|
109
|
+
"ờ" => "o",
|
|
110
|
+
"ớ" => "o",
|
|
111
|
+
"ợ" => "o",
|
|
112
|
+
"ở" => "o",
|
|
113
|
+
"ỡ" => "o",
|
|
114
|
+
"Ò" => "O",
|
|
115
|
+
"Ó" => "O",
|
|
116
|
+
"Ọ" => "O",
|
|
117
|
+
"Ỏ" => "O",
|
|
118
|
+
"Õ" => "O",
|
|
119
|
+
"Ô" => "O",
|
|
120
|
+
"Ồ" => "O",
|
|
121
|
+
"Ố" => "O",
|
|
122
|
+
"Ộ" => "O",
|
|
123
|
+
"Ổ" => "O",
|
|
124
|
+
"Ỗ" => "O",
|
|
125
|
+
"Ơ" => "O",
|
|
126
|
+
"Ờ" => "O",
|
|
127
|
+
"Ớ" => "O",
|
|
128
|
+
"Ợ" => "O",
|
|
129
|
+
"Ở" => "O",
|
|
130
|
+
"Ỡ" => "O",
|
|
131
|
+
"ỳ" => "y",
|
|
132
|
+
"ý" => "y",
|
|
133
|
+
"ỵ" => "y",
|
|
134
|
+
"ỷ" => "y",
|
|
135
|
+
"ỹ" => "y",
|
|
136
|
+
"Ỳ" => "Y",
|
|
137
|
+
"Ý" => "Y",
|
|
138
|
+
"Ỵ" => "Y",
|
|
139
|
+
"Ỷ" => "Y",
|
|
140
|
+
"Ỹ" => "Y",
|
|
141
|
+
"đ" => "d",
|
|
142
|
+
"Đ" => "D"
|
|
143
|
+
}.freeze
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
4
|
+
|
|
5
|
+
describe Babosa::Identifier do
|
|
6
|
+
it "should respond_to :empty?" do
|
|
7
|
+
expect("".to_slug).to respond_to(:empty?)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
%w[approximate_ascii clean downcase word_chars normalize to_ascii upcase with_dashes].each do |method|
|
|
11
|
+
describe "##{method}" do
|
|
12
|
+
it "should work with invalid UTF-8 strings" do
|
|
13
|
+
expect { "\x93abc".to_slug.send method }.not_to raise_exception
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "#word_chars" do
|
|
19
|
+
it "word_chars! should leave only letters, numbers, and spaces" do
|
|
20
|
+
string = "a*$%^$@!@b$%^&*()*!c 123"
|
|
21
|
+
expect(string.to_slug.word_chars!).to eq "abc 123"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "#transliterate" do
|
|
26
|
+
it "should transliterate to ascii" do
|
|
27
|
+
(0xC0..0x17E).to_a.each do |codepoint|
|
|
28
|
+
ss = [codepoint].pack("U*").to_slug
|
|
29
|
+
expect(ss.approximate_ascii!).to match(/[\x0-\x7f]/)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should transliterate uncomposed utf8" do
|
|
34
|
+
string = [117, 776].pack("U*") # "ü" as ASCII "u" plus COMBINING DIAERESIS
|
|
35
|
+
expect(string.to_slug.approximate_ascii).to eql("u")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should transliterate using multiple transliterators" do
|
|
39
|
+
string = "свободное režģis"
|
|
40
|
+
expect(string.to_slug.approximate_ascii(:latin, :russian)).to eql("svobodnoe rezgis")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "#downcase" do
|
|
45
|
+
it "should lowercase strings" do
|
|
46
|
+
expect("FELIZ AÑO".to_slug.downcase).to eql("feliz año")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe "#upcase" do
|
|
51
|
+
it "should uppercase strings" do
|
|
52
|
+
expect("feliz año".to_slug.upcase).to eql("FELIZ AÑO")
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe "#normalize" do
|
|
57
|
+
it "should allow passing locale as key for :transliterate" do
|
|
58
|
+
expect("ö".to_slug.clean.normalize(transliterate: :german)).to eql("oe")
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should replace whitespace with dashes" do
|
|
62
|
+
expect("a b".to_slug.clean.normalize).to eql("a-b")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should replace multiple spaces with 1 dash" do
|
|
66
|
+
expect("a b".to_slug.clean.normalize).to eql("a-b")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should replace multiple dashes with 1 dash" do
|
|
70
|
+
expect("male - female".to_slug.normalize).to eql("male-female")
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should strip trailing space" do
|
|
74
|
+
expect("ab ".to_slug.normalize).to eql("ab")
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "should strip leading space" do
|
|
78
|
+
expect(" ab".to_slug.normalize).to eql("ab")
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should strip trailing slashes" do
|
|
82
|
+
expect("ab-".to_slug.normalize).to eql("ab")
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "should strip leading slashes" do
|
|
86
|
+
expect("-ab".to_slug.normalize).to eql("ab")
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should not modify valid name strings" do
|
|
90
|
+
expect("a-b-c-d".to_slug.normalize).to eql("a-b-c-d")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should not convert underscores" do
|
|
94
|
+
expect("hello_world".to_slug.normalize).to eql("hello_world")
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should work with non roman chars" do
|
|
98
|
+
expect("検 索".to_slug.normalize).to eql("検-索")
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "should work with emoji chars" do
|
|
102
|
+
expect("Emojis on slug 😋".to_slug.normalize).to eql("emojis-on-slug-😋")
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context "with to_ascii option" do
|
|
106
|
+
it "should approximate and strip non ascii" do
|
|
107
|
+
ss = "カタカナ: katakana is über cool".to_slug
|
|
108
|
+
expect(ss.normalize(to_ascii: true)).to eql("katakana-is-uber-cool")
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
describe "#truncate_bytes" do
|
|
114
|
+
it "should by byte length" do
|
|
115
|
+
expect("üa".to_slug.truncate_bytes(2)).to eql("ü")
|
|
116
|
+
expect("üa".to_slug.truncate_bytes(1)).to eql("")
|
|
117
|
+
expect("üa".to_slug.truncate_bytes(100)).to eql("üa")
|
|
118
|
+
expect("üéøá".to_slug.truncate_bytes(3)).to eql("ü")
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe "#truncate" do
|
|
123
|
+
it "should truncate by char length" do
|
|
124
|
+
expect("üa".to_slug.truncate(2)).to eql("üa")
|
|
125
|
+
expect("üa".to_slug.truncate(1)).to eql("ü")
|
|
126
|
+
expect("üa".to_slug.truncate(100)).to eql("üa")
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
describe "#with_dashes" do
|
|
131
|
+
it "should not change byte size when replacing spaces" do
|
|
132
|
+
expect("".to_slug.with_dashes.bytesize).to eql(0)
|
|
133
|
+
expect(" ".to_slug.with_dashes.bytesize).to eql(1)
|
|
134
|
+
expect("-abc-".to_slug.with_dashes.bytesize).to eql(5)
|
|
135
|
+
expect(" abc ".to_slug.with_dashes.bytesize).to eql(5)
|
|
136
|
+
expect(" a bc ".to_slug.with_dashes.bytesize).to eql(7)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
describe "#to_ruby_method" do
|
|
141
|
+
it "should get a string suitable for use as a ruby method" do
|
|
142
|
+
expect("¿¿¿hello... world???".to_slug.to_ruby_method).to eql("hello_world?")
|
|
143
|
+
expect("カタカナ: katakana is über cool".to_slug.to_ruby_method).to eql("katakana_is_uber_cool")
|
|
144
|
+
expect("カタカナ: katakana is über cool!".to_slug.to_ruby_method).to eql("katakana_is_uber_cool!")
|
|
145
|
+
expect("カタカナ: katakana is über cool".to_slug.to_ruby_method(allow_bangs: false)).to eql("katakana_is_uber_cool")
|
|
146
|
+
expect("not 2 much 4 ruby".to_slug.to_ruby_method).to eql("not_2_much_4_ruby")
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
it "should optionally remove trailing punctuation" do
|
|
150
|
+
expect("¿¿¿hello... world???".to_slug.to_ruby_method(allow_bangs: false)).to eql("hello_world")
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it "should raise an error when it would generate an impossible method name" do
|
|
154
|
+
expect { "1".to_identifier.to_ruby_method }.to raise_error(Babosa::Identifier::Error)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "should raise Babosa::Error error when the string is nil" do
|
|
158
|
+
expect { "".to_slug.to_ruby_method }.to raise_error(Babosa::Identifier::Error)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
if ENV["COV"]
|
|
4
|
+
require "simplecov"
|
|
5
|
+
SimpleCov.start
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
require "bundler/setup"
|
|
9
|
+
require "babosa"
|
|
10
|
+
|
|
11
|
+
shared_examples_for "a latin transliterator" do
|
|
12
|
+
let(:t) { described_class.instance }
|
|
13
|
+
|
|
14
|
+
it "should transliterate latin characters" do
|
|
15
|
+
string = (0xC0..0x17E).to_a.pack("U*")
|
|
16
|
+
expect(t.transliterate(string)).to match(/[\x0-\x7f]/)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
shared_examples_for "a cyrillic transliterator" do
|
|
21
|
+
let(:t) { described_class.instance }
|
|
22
|
+
|
|
23
|
+
it "should transliterate cyrillic characters" do
|
|
24
|
+
string = "Славься, Отечество наше свободное"
|
|
25
|
+
expect(t.transliterate(string)).to match(/[\x0-\x7f]/)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
shared_examples_for "a greek transliterator" do
|
|
30
|
+
let(:t) { described_class.instance }
|
|
31
|
+
|
|
32
|
+
it "should transliterate greek characters" do
|
|
33
|
+
string = "Γερμανία"
|
|
34
|
+
expect(t.transliterate(string)).to match(/[\x0-\x7f]/)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
shared_examples_for "a hindi transliterator" do
|
|
39
|
+
let(:t) { described_class.instance }
|
|
40
|
+
|
|
41
|
+
it "should transliterate hindi characters" do
|
|
42
|
+
string = "आदित्य तापड़िया"
|
|
43
|
+
expect(t.transliterate(string)).to match(/[\x0-\x7f]/)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
4
|
+
|
|
5
|
+
describe Babosa::Transliterator::Base do
|
|
6
|
+
let(:t) { Babosa::Transliterator::Base.instance }
|
|
7
|
+
|
|
8
|
+
it "should transliterate 'smart' quotes" do
|
|
9
|
+
expect(t.transliterate("’")).to eql("'")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should transliterate non-breaking spaces" do
|
|
13
|
+
expect(t.transliterate("\xc2\xa0")).to eql(" ")
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
4
|
+
|
|
5
|
+
describe Babosa::Transliterator::Bulgarian do
|
|
6
|
+
let(:t) { described_class.instance }
|
|
7
|
+
it_behaves_like "a cyrillic transliterator"
|
|
8
|
+
|
|
9
|
+
it "should transliterate Cyrillic characters" do
|
|
10
|
+
examples = {
|
|
11
|
+
"Ютия" => "Iutiia",
|
|
12
|
+
"Чушка" => "Chushka",
|
|
13
|
+
"кьорав" => "kiorav",
|
|
14
|
+
"Щъркел" => "Shturkel",
|
|
15
|
+
"полицай" => "policai"
|
|
16
|
+
}
|
|
17
|
+
examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
4
|
+
|
|
5
|
+
describe Babosa::Transliterator::Danish do
|
|
6
|
+
let(:t) { described_class.instance }
|
|
7
|
+
it_behaves_like "a latin transliterator"
|
|
8
|
+
|
|
9
|
+
it "should transliterate various characters" do
|
|
10
|
+
examples = {
|
|
11
|
+
"Ærøskøbing" => "Aeroeskoebing",
|
|
12
|
+
"Årslev" => "Aarslev"
|
|
13
|
+
}
|
|
14
|
+
examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
4
|
+
|
|
5
|
+
describe Babosa::Transliterator::German do
|
|
6
|
+
let(:t) { described_class.instance }
|
|
7
|
+
it_behaves_like "a latin transliterator"
|
|
8
|
+
|
|
9
|
+
it "should transliterate Eszett" do
|
|
10
|
+
expect(t.transliterate("ß")).to eql("ss")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should transliterate vowels with umlauts" do
|
|
14
|
+
expect(t.transliterate("üöä")).to eql("ueoeae")
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
4
|
+
|
|
5
|
+
describe Babosa::Transliterator::Greek do
|
|
6
|
+
let(:t) { described_class.instance }
|
|
7
|
+
it_behaves_like "a greek transliterator"
|
|
8
|
+
|
|
9
|
+
it "should transliterate various characters" do
|
|
10
|
+
examples = {
|
|
11
|
+
"Γερμανία" => "Germania",
|
|
12
|
+
"Αυστρία" => "Aystria",
|
|
13
|
+
"Ιταλία" => "Italia"
|
|
14
|
+
}
|
|
15
|
+
examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
|
|
16
|
+
end
|
|
17
|
+
end
|