babosa 1.0.4 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Changelog.md +12 -0
  5. data/README.md +81 -119
  6. data/Rakefile +9 -8
  7. data/lib/babosa.rb +2 -4
  8. data/lib/babosa/identifier.rb +104 -129
  9. data/lib/babosa/transliterator/base.rb +57 -56
  10. data/lib/babosa/transliterator/bulgarian.rb +3 -2
  11. data/lib/babosa/transliterator/cyrillic.rb +5 -5
  12. data/lib/babosa/transliterator/danish.rb +3 -3
  13. data/lib/babosa/transliterator/german.rb +3 -2
  14. data/lib/babosa/transliterator/greek.rb +4 -3
  15. data/lib/babosa/transliterator/hindi.rb +3 -2
  16. data/lib/babosa/transliterator/latin.rb +5 -5
  17. data/lib/babosa/transliterator/macedonian.rb +3 -2
  18. data/lib/babosa/transliterator/norwegian.rb +3 -3
  19. data/lib/babosa/transliterator/romanian.rb +3 -2
  20. data/lib/babosa/transliterator/russian.rb +3 -2
  21. data/lib/babosa/transliterator/serbian.rb +29 -27
  22. data/lib/babosa/transliterator/spanish.rb +2 -2
  23. data/lib/babosa/transliterator/swedish.rb +3 -3
  24. data/lib/babosa/transliterator/turkish.rb +8 -8
  25. data/lib/babosa/transliterator/ukrainian.rb +5 -4
  26. data/lib/babosa/transliterator/vietnamese.rb +4 -3
  27. data/lib/babosa/version.rb +3 -1
  28. data/spec/{babosa_spec.rb → identifier_spec.rb} +13 -14
  29. data/spec/spec_helper.rb +6 -6
  30. data/spec/transliterators/base_spec.rb +5 -6
  31. data/spec/transliterators/bulgarian_spec.rb +4 -5
  32. data/spec/transliterators/danish_spec.rb +5 -6
  33. data/spec/transliterators/german_spec.rb +4 -5
  34. data/spec/transliterators/greek_spec.rb +7 -7
  35. data/spec/transliterators/hindi_spec.rb +7 -7
  36. data/spec/transliterators/latin_spec.rb +3 -4
  37. data/spec/transliterators/macedonian_spec.rb +3 -4
  38. data/spec/transliterators/norwegian_spec.rb +4 -4
  39. data/spec/transliterators/polish_spec.rb +3 -5
  40. data/spec/transliterators/romanian_spec.rb +5 -6
  41. data/spec/transliterators/russian_spec.rb +3 -4
  42. data/spec/transliterators/serbian_spec.rb +6 -7
  43. data/spec/transliterators/spanish_spec.rb +4 -5
  44. data/spec/transliterators/swedish_spec.rb +7 -7
  45. data/spec/transliterators/turkish_spec.rb +24 -24
  46. data/spec/transliterators/ukrainian_spec.rb +74 -75
  47. data/spec/transliterators/vietnamese_spec.rb +10 -10
  48. metadata +44 -38
  49. metadata.gz.sig +2 -0
  50. data/lib/babosa/utf8/active_support_proxy.rb +0 -38
  51. data/lib/babosa/utf8/dumb_proxy.rb +0 -49
  52. data/lib/babosa/utf8/java_proxy.rb +0 -22
  53. data/lib/babosa/utf8/mappings.rb +0 -193
  54. data/lib/babosa/utf8/proxy.rb +0 -125
  55. data/lib/babosa/utf8/unicode_proxy.rb +0 -23
  56. data/spec/utf8_proxy_spec.rb +0 -52
@@ -1,18 +1,18 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::Swedish do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Transliterator::Swedish do
6
6
  let(:t) { described_class.instance }
7
7
  it_behaves_like "a latin transliterator"
8
8
 
9
9
  it "should transliterate various characters" do
10
10
  examples = {
11
11
  "Räksmörgås" => "Raeksmoergaas",
12
- "Öre" => "Oere",
13
- "Åre" => "Aare",
14
- "Älskar" => "Aelskar"
12
+ "Öre" => "Oere",
13
+ "Åre" => "Aare",
14
+ "Älskar" => "Aelskar"
15
15
  }
16
- examples.each {|k, v| expect(t.transliterate(k)).to eql(v)}
16
+ examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
17
17
  end
18
18
  end
@@ -1,24 +1,24 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
3
-
4
- describe Babosa::Transliterator::Turkish do
5
-
6
- let(:t) { described_class.instance }
7
- it_behaves_like "a latin transliterator"
8
-
9
- it "should transliterate various characters" do
10
- examples = {
11
- "Nâzım" => "Nazim",
12
- "sükûnet" => "sukunet",
13
- "millîleştirmek" => "millilestirmek",
14
- "mêmur" => "memur",
15
- "lôkman" => "lokman",
16
- "yoğurt" => "yogurt",
17
- "şair" => "sair",
18
- "İzmir" => "Izmir",
19
- "yığın" => "yigin",
20
- "çarşı" => "carsi"
21
- }
22
- examples.each {|k, v| expect(t.transliterate(k)).to eql(v)}
23
- end
24
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe Babosa::Transliterator::Turkish 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
+ "Nâzım" => "Nazim",
12
+ "sükûnet" => "sukunet",
13
+ "millîleştirmek" => "millilestirmek",
14
+ "mêmur" => "memur",
15
+ "lôkman" => "lokman",
16
+ "yoğurt" => "yogurt",
17
+ "şair" => "sair",
18
+ "İzmir" => "Izmir",
19
+ "yığın" => "yigin",
20
+ "çarşı" => "carsi"
21
+ }
22
+ examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
23
+ end
24
+ end
@@ -1,88 +1,87 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::Ukrainian do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Transliterator::Ukrainian do
6
6
  let(:t) { described_class.instance }
7
7
  it_behaves_like "a cyrillic transliterator"
8
8
 
9
9
  it "should transliterate Cyrillic characters" do
10
10
  examples = {
11
- "Алушта" => "Alushta",
12
- "Андрій" => "Andrii",
13
- "Борщагівка" => "Borshchahivka",
14
- "Борисенко" => "Borysenko",
15
- "Вінниця" => "Vinnytsia",
16
- "Володимир" => "Volodymyr",
17
- "Гадяч" => "Hadiach",
18
- "Богдан" => "Bohdan",
19
- "Ґалаґан" => "Galagan",
20
- "Ґорґани" => "Gorgany",
21
- "Донецьк" => "Donetsk",
22
- "Дмитро" => "Dmytro",
23
- "Рівне" => "Rivne",
24
- "Олег" => "Oleh",
25
- "Есмань" => "Esman",
26
- "Єнакієве" => "Yenakiieve",
27
- "Гаєвич" => "Haievych",
28
- "Короп'є" => "Koropie",
29
- "Житомир" => "Zhytomyr",
30
- "Жанна" => "Zhanna",
31
- "Жежелів" => "Zhezheliv",
32
- "Закарпаття" => "Zakarpattia",
33
- "Казимирчук" => "Kazymyrchuk",
34
- "Медвин" => "Medvyn",
35
- "Михайленко" => "Mykhailenko",
36
- "Іванків" => "Ivankiv",
37
- "Іващенко" => "Ivashchenko",
38
- "Їжакевич" => "Yizhakevych",
39
- "Кадиївка" => "Kadyivka",
40
- "Мар'їне" => "Marine",
41
- "Йосипівка" => "Yosypivka",
42
- "Стрий" => "Stryi",
43
- "Олексій" => "Oleksii",
44
- "Київ" => "Kyiv",
45
- "Коваленко" => "Kovalenko",
46
- "Лебедин" => "Lebedyn",
47
- "Леонід" => "Leonid",
48
- "Миколаїв" => "Mykolaiv",
49
- "Маринич" => "Marynych",
50
- "Ніжин" => "Nizhyn",
51
- "Наталія" => "Nataliia",
52
- "Одеса" => "Odesa",
53
- "Онищенко" => "Onyshchenko",
54
- "Полтава" => "Poltava",
55
- "Петро" => "Petro",
11
+ "Алушта" => "Alushta",
12
+ "Андрій" => "Andrii",
13
+ "Борщагівка" => "Borshchahivka",
14
+ "Борисенко" => "Borysenko",
15
+ "Вінниця" => "Vinnytsia",
16
+ "Володимир" => "Volodymyr",
17
+ "Гадяч" => "Hadiach",
18
+ "Богдан" => "Bohdan",
19
+ "Ґалаґан" => "Galagan",
20
+ "Ґорґани" => "Gorgany",
21
+ "Донецьк" => "Donetsk",
22
+ "Дмитро" => "Dmytro",
23
+ "Рівне" => "Rivne",
24
+ "Олег" => "Oleh",
25
+ "Есмань" => "Esman",
26
+ "Єнакієве" => "Yenakiieve",
27
+ "Гаєвич" => "Haievych",
28
+ "Короп'є" => "Koropie",
29
+ "Житомир" => "Zhytomyr",
30
+ "Жанна" => "Zhanna",
31
+ "Жежелів" => "Zhezheliv",
32
+ "Закарпаття" => "Zakarpattia",
33
+ "Казимирчук" => "Kazymyrchuk",
34
+ "Медвин" => "Medvyn",
35
+ "Михайленко" => "Mykhailenko",
36
+ "Іванків" => "Ivankiv",
37
+ "Іващенко" => "Ivashchenko",
38
+ "Їжакевич" => "Yizhakevych",
39
+ "Кадиївка" => "Kadyivka",
40
+ "Мар'їне" => "Marine",
41
+ "Йосипівка" => "Yosypivka",
42
+ "Стрий" => "Stryi",
43
+ "Олексій" => "Oleksii",
44
+ "Київ" => "Kyiv",
45
+ "Коваленко" => "Kovalenko",
46
+ "Лебедин" => "Lebedyn",
47
+ "Леонід" => "Leonid",
48
+ "Миколаїв" => "Mykolaiv",
49
+ "Маринич" => "Marynych",
50
+ "Ніжин" => "Nizhyn",
51
+ "Наталія" => "Nataliia",
52
+ "Одеса" => "Odesa",
53
+ "Онищенко" => "Onyshchenko",
54
+ "Полтава" => "Poltava",
55
+ "Петро" => "Petro",
56
56
  "Решетилівка" => "Reshetylivka",
57
57
  "Рибчинський" => "Rybchynskyi",
58
- "Суми" => "Sumy",
59
- "Соломія" => "Solomiia",
60
- "Тернопіль" => "Ternopil",
61
- "Троць" => "Trots",
62
- "Ужгород" => "Uzhhorod",
63
- "Уляна" => "Uliana",
64
- "Фастів" => "Fastiv",
65
- "Філіпчук" => "Filipchuk",
66
- "Харків" => "Kharkiv",
67
- "Христина" => "Khrystyna",
58
+ "Суми" => "Sumy",
59
+ "Соломія" => "Solomiia",
60
+ "Тернопіль" => "Ternopil",
61
+ "Троць" => "Trots",
62
+ "Ужгород" => "Uzhhorod",
63
+ "Уляна" => "Uliana",
64
+ "Фастів" => "Fastiv",
65
+ "Філіпчук" => "Filipchuk",
66
+ "Харків" => "Kharkiv",
67
+ "Христина" => "Khrystyna",
68
68
  "Біла Церква" => "Bila Tserkva",
69
- "Стеценко" => "Stetsenko",
70
- "Чернівці" => "Chernivtsi",
71
- "Шевченко" => "Shevchenko",
72
- "Шостка" => "Shostka",
73
- "Кишеньки" => "Kyshenky",
74
- "Щербухи" => "Shcherbukhy",
75
- "Гоща" => "Hoshcha",
76
- "Гаращенко" => "Harashchenko",
77
- "Юрій" => "Yurii",
78
- "Корюківка" => "Koriukivka",
79
- "Яготин" => "Yahotyn",
80
- "Ярошенко" => "Yaroshenko",
81
- "Костянтин" => "Kostiantyn",
82
- "Знам'янка" => "Znamianka",
83
- "Феодосія" => "Feodosiia"
69
+ "Стеценко" => "Stetsenko",
70
+ "Чернівці" => "Chernivtsi",
71
+ "Шевченко" => "Shevchenko",
72
+ "Шостка" => "Shostka",
73
+ "Кишеньки" => "Kyshenky",
74
+ "Щербухи" => "Shcherbukhy",
75
+ "Гоща" => "Hoshcha",
76
+ "Гаращенко" => "Harashchenko",
77
+ "Юрій" => "Yurii",
78
+ "Корюківка" => "Koriukivka",
79
+ "Яготин" => "Yahotyn",
80
+ "Ярошенко" => "Yaroshenko",
81
+ "Костянтин" => "Kostiantyn",
82
+ "Знам'янка" => "Znamianka",
83
+ "Феодосія" => "Feodosiia"
84
84
  }
85
85
  examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
86
86
  end
87
-
88
- end
87
+ end
@@ -1,18 +1,18 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::Vietnamese do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Transliterator::Vietnamese do
6
6
  let(:t) { described_class.instance }
7
7
  it_behaves_like "a latin transliterator"
8
8
 
9
9
  it "should transliterate various characters" do
10
- examples = {
11
- "làm" => "lam",
12
- "đàn ông" => "dan ong",
13
- "thật" => "that",
14
- "khổ" => "kho"
15
- }
16
- examples.each {|k, v| expect(t.transliterate(k)).to eql(v)}
10
+ examples = {
11
+ "làm" => "lam",
12
+ "đàn ông" => "dan ong",
13
+ "thật" => "that",
14
+ "khổ" => "kho"
15
+ }
16
+ examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
17
17
  end
18
18
  end
metadata CHANGED
@@ -1,29 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: babosa
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Norman Clarke
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
- cert_chain: []
11
- date: 2020-10-06 00:00:00.000000000 Z
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEMjCCApqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhnZW1z
14
+ L0RDPXAvREM9YXJuZHQvREM9aW8wHhcNMjEwNjIzMDkyNzU2WhcNMjIwNjIzMDky
15
+ NzU2WjAjMSEwHwYDVQQDDBhnZW1zL0RDPXAvREM9YXJuZHQvREM9aW8wggGiMA0G
16
+ CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQD0CYnD37uLlJ3Urla2EnnUQ8S6s16k
17
+ AGMpAzpmARo8YwSqtYMJVGyBzUeI7y93Fk9ncswhIFSH/hnh/Ouat/ki9flHlZ+w
18
+ anv0M+9v3wCLyZSC5BQIWpoduFM/fuvLoDUJDWxL50RjwMS0qo2x2LvfQdHN8gn3
19
+ JdSIV5WLJKIvlmIl9S3pw0JO5KRUGn1PcBO7C0S0SlbhVjRHtlao1ycWUULsX109
20
+ hCh39MPGtnZpdCcxheh0TH/UA/jV0/du9/rQdoidkNHkaC24pPfBJ3nS+rAbWaHP
21
+ WmP+0rjfk/XnGBu/HZpKvlnwQjP3QdK4UMtWl8zewqFMNcIiBRALQugnL/SfrP/4
22
+ CSlha9LwkiE6ByeY4WGnNjNqpi5J3IzjEkZRAxG7u9gCB3FzTaBTyXZYI6jplYNw
23
+ TcCJIBHuoPaa+m9brpjb3Uv94nfM97ZP+OmpGYCCAMq4TT7OOV+t8wJc0w8bb0FO
24
+ ROhmVNTxrBaNcl6MkZn88EMRCsGgoWklOG0CAwEAAaNxMG8wCQYDVR0TBAIwADAL
25
+ BgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGu7pbmeILyHnBmannuaNRfdN8MsMBoGA1Ud
26
+ EQQTMBGBD2dlbXNAcC5hcm5kdC5pbzAaBgNVHRIEEzARgQ9nZW1zQHAuYXJuZHQu
27
+ aW8wDQYJKoZIhvcNAQELBQADggGBANlxc4uAnkPC3zbztG7uZfBfn4HSuvv655Pa
28
+ UaYZ6hNETFrqg78mGs3PkFe2Ru7cVWwckbmH46aq50QoNnx4ClxT03vr03n76Jg1
29
+ 8WWHkf0+rcINFlbtIFcmcFrois5Ow3n7pH+xstDtzoWcbh41WwuZStNhrIYsnjAK
30
+ /ovz8D5JlboxceOpVLB/0NiqNEWltK+EMQHmX25Sqf/r5o5rAL9zwEKPFp1Y5X+z
31
+ t2jBjYt2ymr1eMWxux6e+N2uKZL4MblHawxvKlI8UHsIiV9xrc4BwlwlbitcvNIL
32
+ ZykdSlpTJd0Guy92iYjCJMC09tMRUNxiVBwD3jRGSeW9YAPIZGXIcVlm6srIRDjJ
33
+ o8wB6oOvHAkRXnntOo/4bBDH+ehmgvhh/O/mI+au6C0M430fv+ooH0w08LEXLx1k
34
+ e17ZNASZffbQRP09MH2GZ2AOlkildTX6looWRforZEZi+qamognrozd3MI5QHi1W
35
+ UAZUzHLrrFu7gnkFvLVpxOUf4ItOkA==
36
+ -----END CERTIFICATE-----
37
+ date: 2021-08-01 00:00:00.000000000 Z
12
38
  dependencies:
13
39
  - !ruby/object:Gem::Dependency
14
- name: activesupport
40
+ name: rake
15
41
  requirement: !ruby/object:Gem::Requirement
16
42
  requirements:
17
43
  - - ">="
18
44
  - !ruby/object:Gem::Version
19
- version: 3.2.0
45
+ version: '0'
20
46
  type: :development
21
47
  prerelease: false
22
48
  version_requirements: !ruby/object:Gem::Requirement
23
49
  requirements:
24
50
  - - ">="
25
51
  - !ruby/object:Gem::Version
26
- version: 3.2.0
52
+ version: '0'
27
53
  - !ruby/object:Gem::Dependency
28
54
  name: rspec
29
55
  requirement: !ruby/object:Gem::Requirement
@@ -39,35 +65,21 @@ dependencies:
39
65
  - !ruby/object:Gem::Version
40
66
  version: 3.7.0
41
67
  - !ruby/object:Gem::Dependency
42
- name: simplecov
68
+ name: rubocop
43
69
  requirement: !ruby/object:Gem::Requirement
44
70
  requirements:
45
71
  - - ">="
46
72
  - !ruby/object:Gem::Version
47
- version: '0'
73
+ version: 0.93.0
48
74
  type: :development
49
75
  prerelease: false
50
76
  version_requirements: !ruby/object:Gem::Requirement
51
77
  requirements:
52
78
  - - ">="
53
79
  - !ruby/object:Gem::Version
54
- version: '0'
80
+ version: 0.93.0
55
81
  - !ruby/object:Gem::Dependency
56
- name: rake
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: unicode
82
+ name: simplecov
71
83
  requirement: !ruby/object:Gem::Requirement
72
84
  requirements:
73
85
  - - ">="
@@ -114,14 +126,8 @@ files:
114
126
  - lib/babosa/transliterator/turkish.rb
115
127
  - lib/babosa/transliterator/ukrainian.rb
116
128
  - lib/babosa/transliterator/vietnamese.rb
117
- - lib/babosa/utf8/active_support_proxy.rb
118
- - lib/babosa/utf8/dumb_proxy.rb
119
- - lib/babosa/utf8/java_proxy.rb
120
- - lib/babosa/utf8/mappings.rb
121
- - lib/babosa/utf8/proxy.rb
122
- - lib/babosa/utf8/unicode_proxy.rb
123
129
  - lib/babosa/version.rb
124
- - spec/babosa_spec.rb
130
+ - spec/identifier_spec.rb
125
131
  - spec/spec_helper.rb
126
132
  - spec/transliterators/base_spec.rb
127
133
  - spec/transliterators/bulgarian_spec.rb
@@ -141,11 +147,11 @@ files:
141
147
  - spec/transliterators/turkish_spec.rb
142
148
  - spec/transliterators/ukrainian_spec.rb
143
149
  - spec/transliterators/vietnamese_spec.rb
144
- - spec/utf8_proxy_spec.rb
145
150
  homepage: http://github.com/norman/babosa
146
- licenses: []
151
+ licenses:
152
+ - MIT
147
153
  metadata: {}
148
- post_install_message:
154
+ post_install_message:
149
155
  rdoc_options: []
150
156
  require_paths:
151
157
  - lib
@@ -153,15 +159,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
159
  requirements:
154
160
  - - ">="
155
161
  - !ruby/object:Gem::Version
156
- version: 2.0.0
162
+ version: 2.5.0
157
163
  required_rubygems_version: !ruby/object:Gem::Requirement
158
164
  requirements:
159
165
  - - ">="
160
166
  - !ruby/object:Gem::Version
161
167
  version: '0'
162
168
  requirements: []
163
- rubygems_version: 3.1.2
164
- signing_key:
169
+ rubygems_version: 3.1.6
170
+ signing_key:
165
171
  specification_version: 4
166
172
  summary: A library for creating slugs.
167
173
  test_files: []
metadata.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ Q/�C�����5-S��D�A
2
+ �l@���y]+�/l`� �Rr?
@@ -1,38 +0,0 @@
1
- require 'active_support'
2
- require 'active_support/multibyte/unicode'
3
-
4
- module Babosa
5
- module UTF8
6
- # A UTF-8 proxy using Active Support's multibyte support.
7
- module ActiveSupportProxy
8
- extend ActiveSupport::Multibyte::Unicode
9
- extend self
10
-
11
- def self.normalize_utf8(string)
12
- normalize(string, :c)
13
- end
14
-
15
- if ActiveSupport::VERSION::MAJOR == 3
16
- def downcase(string)
17
- ActiveSupport::Multibyte::Chars.new(string).downcase.to_s
18
- end
19
-
20
- def upcase(string)
21
- ActiveSupport::Multibyte::Chars.new(string).upcase.to_s
22
- end
23
- elsif ActiveSupport::VERSION::MAJOR >= 6
24
- def self.normalize_utf8(string)
25
- string.unicode_normalize(:nfc).to_s
26
- end
27
-
28
- def downcase(string)
29
- string.downcase.to_s
30
- end
31
-
32
- def upcase(string)
33
- string.upcase.to_s
34
- end
35
- end
36
- end
37
- end
38
- end