kebab 1.0.2

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 (55) hide show
  1. checksums.yaml +7 -0
  2. data/.gemtest +0 -0
  3. data/Changelog.md +99 -0
  4. data/MIT-LICENSE +19 -0
  5. data/README.md +26 -0
  6. data/Rakefile +34 -0
  7. data/lib/kebab.rb +18 -0
  8. data/lib/kebab/identifier.rb +294 -0
  9. data/lib/kebab/transliterator/base.rb +110 -0
  10. data/lib/kebab/transliterator/bulgarian.rb +27 -0
  11. data/lib/kebab/transliterator/cyrillic.rb +108 -0
  12. data/lib/kebab/transliterator/danish.rb +15 -0
  13. data/lib/kebab/transliterator/german.rb +15 -0
  14. data/lib/kebab/transliterator/greek.rb +77 -0
  15. data/lib/kebab/transliterator/hindi.rb +137 -0
  16. data/lib/kebab/transliterator/latin.rb +199 -0
  17. data/lib/kebab/transliterator/macedonian.rb +29 -0
  18. data/lib/kebab/transliterator/norwegian.rb +14 -0
  19. data/lib/kebab/transliterator/romanian.rb +13 -0
  20. data/lib/kebab/transliterator/russian.rb +22 -0
  21. data/lib/kebab/transliterator/serbian.rb +34 -0
  22. data/lib/kebab/transliterator/spanish.rb +9 -0
  23. data/lib/kebab/transliterator/swedish.rb +16 -0
  24. data/lib/kebab/transliterator/turkish.rb +8 -0
  25. data/lib/kebab/transliterator/ukrainian.rb +30 -0
  26. data/lib/kebab/transliterator/vietnamese.rb +143 -0
  27. data/lib/kebab/utf8/active_support_proxy.rb +26 -0
  28. data/lib/kebab/utf8/dumb_proxy.rb +49 -0
  29. data/lib/kebab/utf8/java_proxy.rb +22 -0
  30. data/lib/kebab/utf8/mappings.rb +193 -0
  31. data/lib/kebab/utf8/proxy.rb +125 -0
  32. data/lib/kebab/utf8/unicode_proxy.rb +23 -0
  33. data/lib/kebab/version.rb +5 -0
  34. data/spec/kebab_spec.rb +155 -0
  35. data/spec/spec_helper.rb +45 -0
  36. data/spec/transliterators/base_spec.rb +16 -0
  37. data/spec/transliterators/bulgarian_spec.rb +20 -0
  38. data/spec/transliterators/danish_spec.rb +17 -0
  39. data/spec/transliterators/german_spec.rb +17 -0
  40. data/spec/transliterators/greek_spec.rb +17 -0
  41. data/spec/transliterators/hindi_spec.rb +17 -0
  42. data/spec/transliterators/latin_spec.rb +9 -0
  43. data/spec/transliterators/macedonian_spec.rb +9 -0
  44. data/spec/transliterators/norwegian_spec.rb +18 -0
  45. data/spec/transliterators/polish_spec.rb +14 -0
  46. data/spec/transliterators/romanian_spec.rb +19 -0
  47. data/spec/transliterators/russian_spec.rb +9 -0
  48. data/spec/transliterators/serbian_spec.rb +25 -0
  49. data/spec/transliterators/spanish_spec.rb +13 -0
  50. data/spec/transliterators/swedish_spec.rb +18 -0
  51. data/spec/transliterators/turkish_spec.rb +24 -0
  52. data/spec/transliterators/ukrainian_spec.rb +88 -0
  53. data/spec/transliterators/vietnamese_spec.rb +18 -0
  54. data/spec/utf8_proxy_spec.rb +53 -0
  55. metadata +167 -0
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../../spec_helper", __FILE__)
3
+
4
+ describe Kebab::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
@@ -0,0 +1,88 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../../spec_helper", __FILE__)
3
+
4
+ describe Kebab::Transliterator::Ukrainian do
5
+
6
+ let(:t) { described_class.instance }
7
+ it_behaves_like "a cyrillic transliterator"
8
+
9
+ it "should transliterate Cyrillic characters" do
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",
56
+ "Решетилівка" => "Reshetylivka",
57
+ "Рибчинський" => "Rybchynskyi",
58
+ "Суми" => "Sumy",
59
+ "Соломія" => "Solomiia",
60
+ "Тернопіль" => "Ternopil",
61
+ "Троць" => "Trots",
62
+ "Ужгород" => "Uzhhorod",
63
+ "Уляна" => "Uliana",
64
+ "Фастів" => "Fastiv",
65
+ "Філіпчук" => "Filipchuk",
66
+ "Харків" => "Kharkiv",
67
+ "Христина" => "Khrystyna",
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"
84
+ }
85
+ examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
86
+ end
87
+
88
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../../spec_helper", __FILE__)
3
+
4
+ describe Kebab::Transliterator::Vietnamese 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
+ "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
+ end
18
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../spec_helper", __FILE__)
3
+
4
+ PROXIES = [Kebab::UTF8::DumbProxy, Kebab::UTF8::ActiveSupportProxy, Kebab::UTF8::UnicodeProxy]
5
+ PROXIES << Kebab::UTF8::JavaProxy if Kebab.jruby15?
6
+
7
+ PROXIES.each do |proxy|
8
+
9
+ describe proxy do
10
+ using Kebab
11
+
12
+ around do |example|
13
+ begin
14
+ old_proxy = Kebab::Identifier.utf8_proxy
15
+ Kebab::Identifier.utf8_proxy = proxy
16
+ example.run
17
+ ensure
18
+ Kebab::Identifier.utf8_proxy = old_proxy
19
+ end
20
+ end
21
+
22
+ describe "#normalize_utf8" do
23
+ it "should normalize to canonical composed" do
24
+ # ÅÉÎØÜ
25
+ uncomposed_bytes = [65, 204, 138, 69, 204, 129, 73, 204, 130, 195, 152, 85, 204, 136]
26
+ composed_bytes = [195, 133, 195, 137, 195, 142, 195, 152, 195, 156]
27
+ uncomposed_string = uncomposed_bytes.pack("C*").unpack("U*").pack("U*")
28
+ expect(proxy.normalize_utf8(uncomposed_string).unpack("C*")).to eql(composed_bytes)
29
+ end
30
+ end
31
+
32
+ describe "#upcase" do
33
+ it "should upcase the string" do
34
+ expect(proxy.upcase("åéîøü")).to eql("ÅÉÎØÜ")
35
+ expect("åéîøü".to_identifier.upcase).to eql("ÅÉÎØÜ")
36
+ end
37
+ end
38
+
39
+ describe "#downcase" do
40
+ it "should downcase the string" do
41
+ expect(proxy.downcase("ÅÉÎØÜ")).to eql("åéîøü")
42
+ expect("ÅÉÎØÜ".to_identifier.downcase).to eql("åéîøü")
43
+ end
44
+ end
45
+
46
+ describe 'tidy_bytes' do
47
+ it 'should fix invalid UTF-8 strings' do
48
+ expect(proxy.tidy_bytes("\x93abc")).to eq('“abc')
49
+ end
50
+ end
51
+
52
+ end
53
+ end
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kebab
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Tom Chipchase
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-11-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.7.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.7.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !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
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: |2
84
+ A library for creating kebab case strings. Forked from kebab, but using
85
+ refinements instead of monkey patching.
86
+ email: tom.chipchase@farmdop.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gemtest"
92
+ - Changelog.md
93
+ - MIT-LICENSE
94
+ - README.md
95
+ - Rakefile
96
+ - lib/kebab.rb
97
+ - lib/kebab/identifier.rb
98
+ - lib/kebab/transliterator/base.rb
99
+ - lib/kebab/transliterator/bulgarian.rb
100
+ - lib/kebab/transliterator/cyrillic.rb
101
+ - lib/kebab/transliterator/danish.rb
102
+ - lib/kebab/transliterator/german.rb
103
+ - lib/kebab/transliterator/greek.rb
104
+ - lib/kebab/transliterator/hindi.rb
105
+ - lib/kebab/transliterator/latin.rb
106
+ - lib/kebab/transliterator/macedonian.rb
107
+ - lib/kebab/transliterator/norwegian.rb
108
+ - lib/kebab/transliterator/romanian.rb
109
+ - lib/kebab/transliterator/russian.rb
110
+ - lib/kebab/transliterator/serbian.rb
111
+ - lib/kebab/transliterator/spanish.rb
112
+ - lib/kebab/transliterator/swedish.rb
113
+ - lib/kebab/transliterator/turkish.rb
114
+ - lib/kebab/transliterator/ukrainian.rb
115
+ - lib/kebab/transliterator/vietnamese.rb
116
+ - lib/kebab/utf8/active_support_proxy.rb
117
+ - lib/kebab/utf8/dumb_proxy.rb
118
+ - lib/kebab/utf8/java_proxy.rb
119
+ - lib/kebab/utf8/mappings.rb
120
+ - lib/kebab/utf8/proxy.rb
121
+ - lib/kebab/utf8/unicode_proxy.rb
122
+ - lib/kebab/version.rb
123
+ - spec/kebab_spec.rb
124
+ - spec/spec_helper.rb
125
+ - spec/transliterators/base_spec.rb
126
+ - spec/transliterators/bulgarian_spec.rb
127
+ - spec/transliterators/danish_spec.rb
128
+ - spec/transliterators/german_spec.rb
129
+ - spec/transliterators/greek_spec.rb
130
+ - spec/transliterators/hindi_spec.rb
131
+ - spec/transliterators/latin_spec.rb
132
+ - spec/transliterators/macedonian_spec.rb
133
+ - spec/transliterators/norwegian_spec.rb
134
+ - spec/transliterators/polish_spec.rb
135
+ - spec/transliterators/romanian_spec.rb
136
+ - spec/transliterators/russian_spec.rb
137
+ - spec/transliterators/serbian_spec.rb
138
+ - spec/transliterators/spanish_spec.rb
139
+ - spec/transliterators/swedish_spec.rb
140
+ - spec/transliterators/turkish_spec.rb
141
+ - spec/transliterators/ukrainian_spec.rb
142
+ - spec/transliterators/vietnamese_spec.rb
143
+ - spec/utf8_proxy_spec.rb
144
+ homepage: http://github.com/tomchipchase/kebab
145
+ licenses: []
146
+ metadata: {}
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: 2.0.0
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 2.7.3
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: A library for creating slugs.
167
+ test_files: []