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.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/babosa-2.1.0/Changelog.md +119 -0
  3. data/babosa-2.1.0/MIT-LICENSE +19 -0
  4. data/babosa-2.1.0/README.md +243 -0
  5. data/babosa-2.1.0/Rakefile +36 -0
  6. data/babosa-2.1.0/lib/babosa/identifier.rb +268 -0
  7. data/babosa-2.1.0/lib/babosa/transliterator/base.rb +94 -0
  8. data/babosa-2.1.0/lib/babosa/transliterator/bulgarian.rb +30 -0
  9. data/babosa-2.1.0/lib/babosa/transliterator/cyrillic.rb +108 -0
  10. data/babosa-2.1.0/lib/babosa/transliterator/danish.rb +17 -0
  11. data/babosa-2.1.0/lib/babosa/transliterator/german.rb +18 -0
  12. data/babosa-2.1.0/lib/babosa/transliterator/greek.rb +78 -0
  13. data/babosa-2.1.0/lib/babosa/transliterator/hindi.rb +138 -0
  14. data/babosa-2.1.0/lib/babosa/transliterator/latin.rb +199 -0
  15. data/babosa-2.1.0/lib/babosa/transliterator/macedonian.rb +32 -0
  16. data/babosa-2.1.0/lib/babosa/transliterator/norwegian.rb +16 -0
  17. data/babosa-2.1.0/lib/babosa/transliterator/romanian.rb +16 -0
  18. data/babosa-2.1.0/lib/babosa/transliterator/russian.rb +25 -0
  19. data/babosa-2.1.0/lib/babosa/transliterator/serbian.rb +38 -0
  20. data/babosa-2.1.0/lib/babosa/transliterator/spanish.rb +11 -0
  21. data/babosa-2.1.0/lib/babosa/transliterator/swedish.rb +18 -0
  22. data/babosa-2.1.0/lib/babosa/transliterator/turkish.rb +10 -0
  23. data/babosa-2.1.0/lib/babosa/transliterator/ukrainian.rb +33 -0
  24. data/babosa-2.1.0/lib/babosa/transliterator/vietnamese.rb +146 -0
  25. data/babosa-2.1.0/lib/babosa/version.rb +7 -0
  26. data/babosa-2.1.0/lib/babosa.rb +14 -0
  27. data/babosa-2.1.0/spec/identifier_spec.rb +161 -0
  28. data/babosa-2.1.0/spec/spec_helper.rb +45 -0
  29. data/babosa-2.1.0/spec/transliterators/base_spec.rb +15 -0
  30. data/babosa-2.1.0/spec/transliterators/bulgarian_spec.rb +19 -0
  31. data/babosa-2.1.0/spec/transliterators/danish_spec.rb +16 -0
  32. data/babosa-2.1.0/spec/transliterators/german_spec.rb +16 -0
  33. data/babosa-2.1.0/spec/transliterators/greek_spec.rb +17 -0
  34. data/babosa-2.1.0/spec/transliterators/hindi_spec.rb +17 -0
  35. data/babosa-2.1.0/spec/transliterators/latin_spec.rb +8 -0
  36. data/babosa-2.1.0/spec/transliterators/macedonian_spec.rb +8 -0
  37. data/babosa-2.1.0/spec/transliterators/norwegian_spec.rb +18 -0
  38. data/babosa-2.1.0/spec/transliterators/polish_spec.rb +12 -0
  39. data/babosa-2.1.0/spec/transliterators/romanian_spec.rb +18 -0
  40. data/babosa-2.1.0/spec/transliterators/russian_spec.rb +8 -0
  41. data/babosa-2.1.0/spec/transliterators/serbian_spec.rb +24 -0
  42. data/babosa-2.1.0/spec/transliterators/spanish_spec.rb +12 -0
  43. data/babosa-2.1.0/spec/transliterators/swedish_spec.rb +18 -0
  44. data/babosa-2.1.0/spec/transliterators/turkish_spec.rb +24 -0
  45. data/babosa-2.1.0/spec/transliterators/ukrainian_spec.rb +87 -0
  46. data/babosa-2.1.0/spec/transliterators/vietnamese_spec.rb +18 -0
  47. data/ultra-clean-kit.gemspec +12 -0
  48. 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,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "latin"
4
+
5
+ module Babosa
6
+ module Transliterator
7
+ class Norwegian < Latin
8
+ APPROXIMATIONS = {
9
+ "ø" => "oe",
10
+ "å" => "aa",
11
+ "Ø" => "Oe",
12
+ "Å" => "Aa"
13
+ }.freeze
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "latin"
4
+
5
+ module Babosa
6
+ module Transliterator
7
+ class Romanian < Latin
8
+ APPROXIMATIONS = {
9
+ "ș" => "s",
10
+ "ț" => "t",
11
+ "Ș" => "S",
12
+ "Ț" => "T"
13
+ }.freeze
14
+ end
15
+ end
16
+ 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,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "latin"
4
+
5
+ module Babosa
6
+ module Transliterator
7
+ class Spanish < Latin
8
+ APPROXIMATIONS = {"ñ" => "ni", "Ñ" => "Ni"}.freeze
9
+ end
10
+ end
11
+ 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,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "latin"
4
+
5
+ module Babosa
6
+ module Transliterator
7
+ class Turkish < Latin
8
+ end
9
+ end
10
+ 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,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Babosa
4
+ module Version
5
+ STRING = "2.1.0"
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Babosa
4
+ end
5
+
6
+ class String
7
+ def to_identifier
8
+ Babosa::Identifier.new self
9
+ end
10
+ alias_method :to_slug, :to_identifier
11
+ end
12
+
13
+ require "babosa/transliterator/base"
14
+ require "babosa/identifier"
@@ -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