slugify 1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,5 @@
1
+ A slugifier that converts utf-8 latin characters to their ascii counterpart.
2
+ All non-recognized characters are removed, only lowercase alfanumerical characters
3
+ and dashes are left. Also has an option to strip away starting, ending and double dashes.
4
+
5
+ Conversion is based on http://en.wikipedia.org/wiki/Latin_characters_in_Unicode
@@ -0,0 +1,952 @@
1
+ # We need utf-8 support
2
+ if RUBY_VERSION < '1.9'
3
+ $KCODE='u'
4
+ else
5
+ Encoding.default_external = Encoding::UTF_8
6
+ Encoding.default_internal = Encoding::UTF_8
7
+ end
8
+
9
+ class Slugify
10
+
11
+ SLUGGY_MAPPING = {
12
+ '0' => '0',
13
+ '1' => '1',
14
+ '2' => '2',
15
+ '3' => '3',
16
+ '4' => '4',
17
+ '5' => '5',
18
+ '6' => '6',
19
+ '7' => '7',
20
+ '8' => '8',
21
+ '9' => '9',
22
+ '²' => '2',
23
+ '³' => '3',
24
+ '&' => '-',
25
+ '(' => '-',
26
+ '{' => '-',
27
+ '}' => '-',
28
+ ')' => '-',
29
+ '-' => '-',
30
+ '_' => '-',
31
+ '[' => '-',
32
+ ']' => '-',
33
+ ',' => '-',
34
+ '.' => '-',
35
+ ';' => '-',
36
+ ':' => '-',
37
+ '=' => '-',
38
+ '+' => '-',
39
+ '<' => '-',
40
+ '>' => '-',
41
+ '~' => '-',
42
+ 'µ' => 'u',
43
+ 'A' => 'a',
44
+ 'B' => 'b',
45
+ 'C' => 'c',
46
+ 'D' => 'd',
47
+ 'E' => 'e',
48
+ 'F' => 'f',
49
+ 'G' => 'g',
50
+ 'H' => 'h',
51
+ 'I' => 'i',
52
+ 'J' => 'j',
53
+ 'K' => 'k',
54
+ 'L' => 'l',
55
+ 'M' => 'm',
56
+ 'N' => 'n',
57
+ 'O' => 'o',
58
+ 'P' => 'p',
59
+ 'Q' => 'q',
60
+ 'R' => 'r',
61
+ 'S' => 's',
62
+ 'T' => 't',
63
+ 'U' => 'u',
64
+ 'V' => 'v',
65
+ 'W' => 'w',
66
+ 'X' => 'x',
67
+ 'Y' => 'y',
68
+ 'Z' => 'z',
69
+ '[' => '-',
70
+ ']' => '-',
71
+ '_' => '-',
72
+ 'a' => 'a',
73
+ 'b' => 'b',
74
+ 'c' => 'c',
75
+ 'd' => 'd',
76
+ 'e' => 'e',
77
+ 'f' => 'f',
78
+ 'g' => 'g',
79
+ 'h' => 'h',
80
+ 'i' => 'i',
81
+ 'j' => 'j',
82
+ 'k' => 'k',
83
+ 'l' => 'l',
84
+ 'm' => 'm',
85
+ 'n' => 'n',
86
+ 'o' => 'o',
87
+ 'p' => 'p',
88
+ 'q' => 'q',
89
+ 'r' => 'r',
90
+ 's' => 's',
91
+ 't' => 't',
92
+ 'u' => 'u',
93
+ 'v' => 'v',
94
+ 'w' => 'w',
95
+ 'x' => 'x',
96
+ 'y' => 'y',
97
+ 'z' => 'z',
98
+ '{' => '-',
99
+ '}' => '-',
100
+ '~' => '-',
101
+ 'À' => 'a',
102
+ 'Á' => 'a',
103
+ 'Â' => 'a',
104
+ 'Ã' => 'a',
105
+ 'Ä' => 'a',
106
+ 'Å' => 'a',
107
+ 'Æ' => 'ae',
108
+ 'Ç' => 'c',
109
+ 'È' => 'e',
110
+ 'É' => 'e',
111
+ 'Ê' => 'e',
112
+ 'Ë' => 'e',
113
+ 'Ì' => 'i',
114
+ 'Í' => 'i',
115
+ 'Î' => 'i',
116
+ 'Ï' => 'i',
117
+ 'Ð' => 'd',
118
+ 'Ñ' => 'n',
119
+ 'Ò' => 'o',
120
+ 'Ó' => 'o',
121
+ 'Ô' => 'o',
122
+ 'Õ' => 'o',
123
+ 'Ö' => 'o',
124
+ '×' => 'x',
125
+ 'Ø' => 'o',
126
+ 'Ù' => 'u',
127
+ 'Ú' => 'u',
128
+ 'Û' => 'u',
129
+ 'Ü' => 'u',
130
+ 'Ý' => 'y',
131
+ 'Þ' => 'th',
132
+ 'ß' => 'b',
133
+ 'à' => 'a',
134
+ 'á' => 'a',
135
+ 'â' => 'a',
136
+ 'ã' => 'a',
137
+ 'ä' => 'a',
138
+ 'å' => 'a',
139
+ 'æ' => 'ae',
140
+ 'ç' => 'c',
141
+ 'è' => 'e',
142
+ 'é' => 'e',
143
+ 'ê' => 'e',
144
+ 'ë' => 'e',
145
+ 'ì' => 'i',
146
+ 'í' => 'i',
147
+ 'î' => 'i',
148
+ 'ï' => 'i',
149
+ 'ð' => 'o',
150
+ 'ñ' => 'n',
151
+ 'ò' => 'o',
152
+ 'ó' => 'o',
153
+ 'ô' => 'o',
154
+ 'õ' => 'o',
155
+ 'ö' => 'o',
156
+ 'ø' => 'o',
157
+ 'ù' => 'u',
158
+ 'ú' => 'u',
159
+ 'û' => 'u',
160
+ 'ü' => 'u',
161
+ 'ý' => 'y',
162
+ 'þ' => 'th',
163
+ 'ÿ' => 'y',
164
+ 'Ā' => 'a',
165
+ 'ā' => 'a',
166
+ 'Ă' => 'a',
167
+ 'ă' => 'a',
168
+ 'Ą' => 'a',
169
+ 'ą' => 'a',
170
+ 'Ć' => 'c',
171
+ 'ć' => 'c',
172
+ 'Ĉ' => 'c',
173
+ 'ĉ' => 'c',
174
+ 'Ċ' => 'c',
175
+ 'ċ' => 'c',
176
+ 'Č' => 'c',
177
+ 'č' => 'c',
178
+ 'Ď' => 'd',
179
+ 'ď' => 'd',
180
+ 'Đ' => 'd',
181
+ 'đ' => 'd',
182
+ 'Ē' => 'e',
183
+ 'ē' => 'e',
184
+ 'Ĕ' => 'e',
185
+ 'ĕ' => 'e',
186
+ 'Ė' => 'e',
187
+ 'ė' => 'e',
188
+ 'Ę' => 'e',
189
+ 'ę' => 'e',
190
+ 'Ě' => 'e',
191
+ 'ě' => 'e',
192
+ 'Ĝ' => 'g',
193
+ 'ĝ' => 'g',
194
+ 'Ğ' => 'g',
195
+ 'ğ' => 'g',
196
+ 'Ġ' => 'g',
197
+ 'ġ' => 'g',
198
+ 'Ģ' => 'g',
199
+ 'ģ' => 'g',
200
+ 'Ĥ' => 'h',
201
+ 'ĥ' => 'h',
202
+ 'Ħ' => 'h',
203
+ 'ħ' => 'h',
204
+ 'Ĩ' => 'i',
205
+ 'ĩ' => 'i',
206
+ 'Ī' => 'i',
207
+ 'ī' => 'i',
208
+ 'Ĭ' => 'i',
209
+ 'ĭ' => 'i',
210
+ 'Į' => 'i',
211
+ 'į' => 'i',
212
+ 'İ' => 'l',
213
+ 'ı' => 'l',
214
+ 'IJ' => 'ij',
215
+ 'ij' => 'ij',
216
+ 'Ĵ' => 'j',
217
+ 'ĵ' => 'j',
218
+ 'Ķ' => 'k',
219
+ 'ķ' => 'k',
220
+ 'ĸ' => 'k',
221
+ 'Ĺ' => 'l',
222
+ 'ĺ' => 'l',
223
+ 'Ļ' => 'l',
224
+ 'ļ' => 'l',
225
+ 'Ľ' => 'l',
226
+ 'ľ' => 'l',
227
+ 'Ŀ' => 'l',
228
+ 'ŀ' => 'l',
229
+ 'Ł' => 'l',
230
+ 'ł' => 'l',
231
+ 'Ń' => 'n',
232
+ 'ń' => 'n',
233
+ 'Ņ' => 'n',
234
+ 'ņ' => 'n',
235
+ 'Ň' => 'n',
236
+ 'ň' => 'n',
237
+ 'ʼn' => 'n',
238
+ 'Ŋ' => 'n',
239
+ 'ŋ' => 'n',
240
+ 'Ō' => 'o',
241
+ 'ō' => 'o',
242
+ 'Ŏ' => 'o',
243
+ 'ŏ' => 'o',
244
+ 'Ő' => 'o',
245
+ 'ő' => 'o',
246
+ 'Œ' => 'oe',
247
+ 'œ' => 'oe',
248
+ 'Ŕ' => 'r',
249
+ 'ŕ' => 'r',
250
+ 'Ŗ' => 'r',
251
+ 'ŗ' => 'r',
252
+ 'Ř' => 'r',
253
+ 'ř' => 'r',
254
+ 'Ś' => 's',
255
+ 'ś' => 's',
256
+ 'Ŝ' => 's',
257
+ 'ŝ' => 's',
258
+ 'Ş' => 's',
259
+ 'ş' => 's',
260
+ 'Š' => 's',
261
+ 'š' => 's',
262
+ 'Ţ' => 't',
263
+ 'ţ' => 't',
264
+ 'Ť' => 't',
265
+ 'ť' => 't',
266
+ 'Ŧ' => 't',
267
+ 'ŧ' => 't',
268
+ 'Ũ' => 'u',
269
+ 'ũ' => 'u',
270
+ 'Ū' => 'u',
271
+ 'ū' => 'u',
272
+ 'Ŭ' => 'u',
273
+ 'ŭ' => 'u',
274
+ 'Ů' => 'u',
275
+ 'ů' => 'u',
276
+ 'Ű' => 'u',
277
+ 'ű' => 'u',
278
+ 'Ų' => 'u',
279
+ 'ų' => 'u',
280
+ 'Ŵ' => 'w',
281
+ 'ŵ' => 'w',
282
+ 'Ŷ' => 'y',
283
+ 'ŷ' => 'y',
284
+ 'Ÿ' => 'y',
285
+ 'Ź' => 'z',
286
+ 'ź' => 'z',
287
+ 'Ż' => 'z',
288
+ 'ż' => 'z',
289
+ 'Ž' => 'z',
290
+ 'ž' => 'z',
291
+ 'ſ' => 's',
292
+ 'ƀ' => 'b',
293
+ 'Ɓ' => 'b',
294
+ 'Ƅ' => 'b',
295
+ 'ƅ' => 'b',
296
+ 'Ƈ' => 'c',
297
+ 'ƈ' => 'c',
298
+ 'Ɖ' => 'd',
299
+ 'Ɗ' => 'd',
300
+ 'Ƌ' => 'nd',
301
+ 'ƌ' => 'nd',
302
+ 'Ɛ' => 'e',
303
+ 'Ƒ' => 'f',
304
+ 'ƒ' => 'f',
305
+ 'Ɠ' => 'g',
306
+ 'Ɩ' => 'i',
307
+ 'Ɨ' => 'i',
308
+ 'Ƙ' => 'k',
309
+ 'ƙ' => 'k',
310
+ 'Ɯ' => 'w',
311
+ 'Ɲ' => 'n',
312
+ 'ƞ' => 'n',
313
+ 'Ɵ' => 'o',
314
+ 'Ơ' => 'o',
315
+ 'ơ' => 'o',
316
+ 'Ƥ' => 'p',
317
+ 'ƥ' => 'p',
318
+ 'Ʀ' => 'r',
319
+ 'Ƨ' => 's',
320
+ 'ƨ' => 's',
321
+ 'Ʃ' => 's',
322
+ 'ƪ' => 't',
323
+ 'ƫ' => 't',
324
+ 'Ƭ' => 't',
325
+ 'ƭ' => 't',
326
+ 'Ʈ' => 't',
327
+ 'Ư' => 'u',
328
+ 'ư' => 'u',
329
+ 'Ʊ' => 'u',
330
+ 'Ʋ' => 'u',
331
+ 'Ƶ' => 'z',
332
+ 'ƶ' => 'z',
333
+ 'Ʒ' => 'z',
334
+ 'Ƽ' => 'q',
335
+ 'ƽ' => 'q',
336
+ 'DŽ' => 'dz',
337
+ 'Dž' => 'dz',
338
+ 'dž' => 'dz',
339
+ 'LJ' => 'lj',
340
+ 'Lj' => 'lj',
341
+ 'lj' => 'lj',
342
+ 'NJ' => 'nj',
343
+ 'Nj' => 'nj',
344
+ 'nj' => 'nj',
345
+ 'Ǎ' => 'a',
346
+ 'ǎ' => 'a',
347
+ 'Ǐ' => 'i',
348
+ 'ǐ' => 'i',
349
+ 'Ǒ' => 'o',
350
+ 'ǒ' => 'o',
351
+ 'Ǔ' => 'u',
352
+ 'ǔ' => 'u',
353
+ 'Ǖ' => 'u',
354
+ 'ǖ' => 'u',
355
+ 'Ǘ' => 'u',
356
+ 'ǘ' => 'u',
357
+ 'Ǚ' => 'u',
358
+ 'ǚ' => 'u',
359
+ 'Ǜ' => 'u',
360
+ 'ǜ' => 'u',
361
+ 'ǝ' => 'e',
362
+ 'Ǟ' => 'a',
363
+ 'ǟ' => 'a',
364
+ 'Ǡ' => 'a',
365
+ 'ǡ' => 'a',
366
+ 'Ǣ' => 'ae',
367
+ 'ǣ' => 'ae',
368
+ 'Ǥ' => 'g',
369
+ 'ǥ' => 'g',
370
+ 'Ǧ' => 'g',
371
+ 'ǧ' => 'g',
372
+ 'Ǩ' => 'k',
373
+ 'ǩ' => 'k',
374
+ 'Ǫ' => 'o',
375
+ 'ǫ' => 'o',
376
+ 'Ǭ' => 'o',
377
+ 'ǭ' => 'o',
378
+ 'ǰ' => 'j',
379
+ 'DZ' => 'dz',
380
+ 'Dz' => 'dz',
381
+ 'dz' => 'dz',
382
+ 'Ǵ' => 'g',
383
+ 'ǵ' => 'g',
384
+ 'Ǹ' => 'n',
385
+ 'ǹ' => 'n',
386
+ 'Ǻ' => 'a',
387
+ 'ǻ' => 'a',
388
+ 'Ǽ' => 'ae',
389
+ 'ǽ' => 'ae',
390
+ 'Ǿ' => 'o',
391
+ 'ǿ' => 'o',
392
+ 'Ȁ' => 'a',
393
+ 'ȁ' => 'a',
394
+ 'Ȃ' => 'a',
395
+ 'ȃ' => 'a',
396
+ 'Ȅ' => 'e',
397
+ 'ȅ' => 'e',
398
+ 'Ȇ' => 'e',
399
+ 'ȇ' => 'e',
400
+ 'Ȉ' => 'i',
401
+ 'ȉ' => 'i',
402
+ 'Ȋ' => 'i',
403
+ 'ȋ' => 'i',
404
+ 'Ȍ' => 'o',
405
+ 'ȍ' => 'o',
406
+ 'Ȏ' => 'o',
407
+ 'ȏ' => 'o',
408
+ 'Ȑ' => 'r',
409
+ 'ȑ' => 'r',
410
+ 'Ȓ' => 'r',
411
+ 'ȓ' => 'r',
412
+ 'Ȕ' => 'u',
413
+ 'ȕ' => 'u',
414
+ 'Ȗ' => 'u',
415
+ 'ȗ' => 'u',
416
+ 'Ș' => 's',
417
+ 'ș' => 's',
418
+ 'Ț' => 't',
419
+ 'ț' => 't',
420
+ 'Ȟ' => 'h',
421
+ 'ȟ' => 'h',
422
+ 'Ƞ' => 'n',
423
+ 'Ȥ' => 'z',
424
+ 'ȥ' => 'z',
425
+ 'Ȧ' => 'a',
426
+ 'ȧ' => 'a',
427
+ 'Ȩ' => 'e',
428
+ 'ȩ' => 'e',
429
+ 'Ȫ' => 'o',
430
+ 'ȫ' => 'o',
431
+ 'Ȭ' => 'o',
432
+ 'ȭ' => 'o',
433
+ 'Ȯ' => 'o',
434
+ 'ȯ' => 'o',
435
+ 'Ȱ' => 'o',
436
+ 'ȱ' => 'o',
437
+ 'Ȳ' => 'y',
438
+ 'ȳ' => 'y',
439
+ 'ȷ' => 'j',
440
+ 'ȸ' => 'db',
441
+ 'ȹ' => 'qp',
442
+ 'Ⱥ' => 'a',
443
+ 'Ȼ' => 'c',
444
+ 'ȼ' => 'c',
445
+ 'Ƚ' => 'l',
446
+ 'Ⱦ' => 'l',
447
+ 'ȿ' => 's',
448
+ 'ɀ' => 'z',
449
+ 'Ƀ' => 'b',
450
+ 'Ʉ' => 'u',
451
+ 'Ʌ' => 'v',
452
+ 'Ɇ' => 'e',
453
+ 'ɇ' => 'e',
454
+ 'Ɉ' => 'j',
455
+ 'ɉ' => 'j',
456
+ 'Ɋ' => 'q',
457
+ 'ɋ' => 'q',
458
+ 'Ɍ' => 'r',
459
+ 'ɍ' => 'r',
460
+ 'Ɏ' => 'y',
461
+ 'ɏ' => 'y',
462
+ 'ɑ' => 'a',
463
+ 'ɗ' => 'd',
464
+ 'ɠ' => 'g',
465
+ 'ɡ' => 'g',
466
+ 'ɢ' => 'g',
467
+ 'ɯ' => 'w',
468
+ 'ɱ' => 'm',
469
+ 'ɵ' => 'o',
470
+ 'ɶ' => 'oe',
471
+ 'ᴀ' => 'a',
472
+ 'ᴁ' => 'ae',
473
+ 'ᴂ' => 'ae',
474
+ 'ᴃ' => 'b',
475
+ 'ᴄ' => 'c',
476
+ 'ᴅ' => 'd',
477
+ 'ᴆ' => 'd',
478
+ 'ᴇ' => 'e',
479
+ 'ᴊ' => 'j',
480
+ 'ᴋ' => 'k',
481
+ 'ᴌ' => 'l',
482
+ 'ᴍ' => 'm',
483
+ 'ᴎ' => 'n',
484
+ 'ᴏ' => 'o',
485
+ 'Ḁ' => 'a',
486
+ 'ḁ' => 'a',
487
+ 'Ḃ' => 'b',
488
+ 'ḃ' => 'b',
489
+ 'Ḅ' => 'b',
490
+ 'ḅ' => 'b',
491
+ 'Ḇ' => 'b',
492
+ 'ḇ' => 'b',
493
+ 'Ḉ' => 'c',
494
+ 'ḉ' => 'c',
495
+ 'Ḋ' => 'd',
496
+ 'ḋ' => 'd',
497
+ 'Ḍ' => 'd',
498
+ 'ḍ' => 'd',
499
+ 'Ḏ' => 'd',
500
+ 'ḏ' => 'd',
501
+ 'Ḑ' => 'd',
502
+ 'ḑ' => 'd',
503
+ 'Ḓ' => 'd',
504
+ 'ḓ' => 'd',
505
+ 'Ḕ' => 'e',
506
+ 'ḕ' => 'e',
507
+ 'Ḗ' => 'e',
508
+ 'ḗ' => 'e',
509
+ 'Ḙ' => 'e',
510
+ 'ḙ' => 'e',
511
+ 'Ḛ' => 'e',
512
+ 'ḛ' => 'e',
513
+ 'Ḝ' => 'e',
514
+ 'ḝ' => 'e',
515
+ 'Ḟ' => 'f',
516
+ 'ḟ' => 'f',
517
+ 'Ḡ' => 'g',
518
+ 'ḡ' => 'g',
519
+ 'Ḣ' => 'h',
520
+ 'ḣ' => 'h',
521
+ 'Ḥ' => 'h',
522
+ 'ḥ' => 'h',
523
+ 'Ḧ' => 'h',
524
+ 'ḧ' => 'h',
525
+ 'Ḩ' => 'h',
526
+ 'ḩ' => 'h',
527
+ 'Ḫ' => 'h',
528
+ 'ḫ' => 'h',
529
+ 'Ḭ' => 'i',
530
+ 'ḭ' => 'i',
531
+ 'Ḯ' => 'i',
532
+ 'ḯ' => 'i',
533
+ 'Ḱ' => 'k',
534
+ 'ḱ' => 'k',
535
+ 'Ḳ' => 'k',
536
+ 'ḳ' => 'k',
537
+ 'Ḵ' => 'k',
538
+ 'ḵ' => 'k',
539
+ 'Ḷ' => 'l',
540
+ 'ḷ' => 'l',
541
+ 'Ḹ' => 'l',
542
+ 'ḹ' => 'l',
543
+ 'Ḻ' => 'l',
544
+ 'ḻ' => 'l',
545
+ 'Ḽ' => 'l',
546
+ 'ḽ' => 'l',
547
+ 'Ḿ' => 'm',
548
+ 'ḿ' => 'm',
549
+ 'Ṁ' => 'm',
550
+ 'ṁ' => 'm',
551
+ 'Ṃ' => 'm',
552
+ 'ṃ' => 'm',
553
+ 'Ṅ' => 'n',
554
+ 'ṅ' => 'n',
555
+ 'Ṇ' => 'n',
556
+ 'ṇ' => 'n',
557
+ 'Ṉ' => 'n',
558
+ 'ṉ' => 'n',
559
+ 'Ṋ' => 'n',
560
+ 'ṋ' => 'n',
561
+ 'Ṍ' => 'o',
562
+ 'ṍ' => 'o',
563
+ 'Ṏ' => 'o',
564
+ 'ṏ' => 'o',
565
+ 'Ṑ' => 'o',
566
+ 'ṑ' => 'o',
567
+ 'Ṓ' => 'o',
568
+ 'ṓ' => 'o',
569
+ 'Ṕ' => 'p',
570
+ 'ṕ' => 'p',
571
+ 'Ṗ' => 'p',
572
+ 'ṗ' => 'p',
573
+ 'Ṙ' => 'r',
574
+ 'ṙ' => 'r',
575
+ 'Ṛ' => 'r',
576
+ 'ṛ' => 'r',
577
+ 'Ṝ' => 'r',
578
+ 'ṝ' => 'r',
579
+ 'Ṟ' => 'r',
580
+ 'ṟ' => 'r',
581
+ 'Ṡ' => 's',
582
+ 'ṡ' => 's',
583
+ 'Ṣ' => 's',
584
+ 'ṣ' => 's',
585
+ 'Ṥ' => 's',
586
+ 'ṥ' => 's',
587
+ 'Ṧ' => 's',
588
+ 'ṧ' => 's',
589
+ 'Ṩ' => 's',
590
+ 'ṩ' => 's',
591
+ 'Ṫ' => 't',
592
+ 'ṫ' => 't',
593
+ 'Ṭ' => 't',
594
+ 'ṭ' => 't',
595
+ 'Ṯ' => 't',
596
+ 'ṯ' => 't',
597
+ 'Ṱ' => 't',
598
+ 'ṱ' => 't',
599
+ 'Ṳ' => 'u',
600
+ 'ṳ' => 'u',
601
+ 'Ṵ' => 'u',
602
+ 'ṵ' => 'u',
603
+ 'Ṷ' => 'u',
604
+ 'ṷ' => 'u',
605
+ 'Ṹ' => 'u',
606
+ 'ṹ' => 'u',
607
+ 'Ṻ' => 'u',
608
+ 'ṻ' => 'u',
609
+ 'Ṽ' => 'v',
610
+ 'ṽ' => 'v',
611
+ 'Ṿ' => 'v',
612
+ 'ṿ' => 'v',
613
+ 'Ẁ' => 'w',
614
+ 'ẁ' => 'w',
615
+ 'Ẃ' => 'w',
616
+ 'ẃ' => 'w',
617
+ 'Ẅ' => 'w',
618
+ 'ẅ' => 'w',
619
+ 'Ẇ' => 'w',
620
+ 'ẇ' => 'w',
621
+ 'Ẉ' => 'w',
622
+ 'ẉ' => 'w',
623
+ 'Ẋ' => 'x',
624
+ 'ẋ' => 'x',
625
+ 'Ẍ' => 'x',
626
+ 'ẍ' => 'x',
627
+ 'Ẏ' => 'y',
628
+ 'ẏ' => 'y',
629
+ 'Ẑ' => 'z',
630
+ 'ẑ' => 'z',
631
+ 'Ẓ' => 'z',
632
+ 'ẓ' => 'z',
633
+ 'Ẕ' => 'z',
634
+ 'ẕ' => 'z',
635
+ 'ẖ' => 'h',
636
+ 'ẗ' => 't',
637
+ 'ẘ' => 'w',
638
+ 'ẙ' => 'y',
639
+ 'ẚ' => 'a',
640
+ 'Ạ' => 'a',
641
+ 'ạ' => 'a',
642
+ 'Ả' => 'a',
643
+ 'ả' => 'a',
644
+ 'Ấ' => 'a',
645
+ 'ấ' => 'a',
646
+ 'Ầ' => 'a',
647
+ 'ầ' => 'a',
648
+ 'Ẩ' => 'a',
649
+ 'ẩ' => 'a',
650
+ 'Ẫ' => 'a',
651
+ 'ẫ' => 'a',
652
+ 'Ậ' => 'a',
653
+ 'ậ' => 'a',
654
+ 'Ắ' => 'a',
655
+ 'ắ' => 'a',
656
+ 'Ằ' => 'a',
657
+ 'ằ' => 'a',
658
+ 'Ẳ' => 'a',
659
+ 'ẳ' => 'a',
660
+ 'Ẵ' => 'a',
661
+ 'ẵ' => 'a',
662
+ 'Ặ' => 'a',
663
+ 'ặ' => 'a',
664
+ 'Ẹ' => 'e',
665
+ 'ẹ' => 'e',
666
+ 'Ẻ' => 'e',
667
+ 'ẻ' => 'e',
668
+ 'Ẽ' => 'e',
669
+ 'ẽ' => 'e',
670
+ 'Ế' => 'e',
671
+ 'ế' => 'e',
672
+ 'Ề' => 'e',
673
+ 'ề' => 'e',
674
+ 'Ể' => 'e',
675
+ 'ể' => 'e',
676
+ 'Ễ' => 'e',
677
+ 'ễ' => 'e',
678
+ 'Ệ' => 'e',
679
+ 'ệ' => 'e',
680
+ 'Ọ' => 'o',
681
+ 'ọ' => 'o',
682
+ 'Ỏ' => 'o',
683
+ 'ỏ' => 'o',
684
+ 'Ố' => 'o',
685
+ 'ố' => 'o',
686
+ 'Ồ' => 'o',
687
+ 'ồ' => 'o',
688
+ 'Ổ' => 'o',
689
+ 'ổ' => 'o',
690
+ 'Ỗ' => 'o',
691
+ 'ỗ' => 'o',
692
+ 'Ộ' => 'o',
693
+ 'ộ' => 'o',
694
+ 'Ớ' => 'o',
695
+ 'ớ' => 'o',
696
+ 'Ờ' => 'o',
697
+ 'ờ' => 'o',
698
+ 'Ở' => 'o',
699
+ 'ở' => 'o',
700
+ 'Ỡ' => 'o',
701
+ 'ỡ' => 'o',
702
+ 'Ợ' => 'o',
703
+ 'ợ' => 'o',
704
+ 'Ụ' => 'u',
705
+ 'ụ' => 'u',
706
+ 'Ủ' => 'u',
707
+ 'ủ' => 'u',
708
+ 'Ứ' => 'u',
709
+ 'ứ' => 'u',
710
+ 'Ừ' => 'u',
711
+ 'ừ' => 'u',
712
+ 'Ử' => 'u',
713
+ 'ử' => 'u',
714
+ 'Ữ' => 'u',
715
+ 'ữ' => 'u',
716
+ 'Ự' => 'u',
717
+ 'ự' => 'u',
718
+ 'Ỳ' => 'y',
719
+ 'ỳ' => 'y',
720
+ 'Ỵ' => 'y',
721
+ 'ỵ' => 'y',
722
+ 'Ỷ' => 'y',
723
+ 'ỷ' => 'y',
724
+ 'Ỹ' => 'y',
725
+ 'ỹ' => 'y',
726
+ 'ₐ' => 'a',
727
+ 'ₑ' => 'e',
728
+ 'ₒ' => 'o',
729
+ 'ₓ' => 'x',
730
+ '℀' => 'ac',
731
+ '℁' => 'as',
732
+ 'ℂ' => 'c',
733
+ '℃' => 'c',
734
+ '℄' => 'c',
735
+ '℅' => 'co',
736
+ '℆' => 'cu',
737
+ '℉' => 'f',
738
+ 'ℊ' => 'g',
739
+ 'ℋ' => 'h',
740
+ 'ℌ' => 'h',
741
+ 'ℍ' => 'h',
742
+ 'ℎ' => 'h',
743
+ 'ℏ' => 'h',
744
+ 'ℕ' => 'n',
745
+ '℗' => 'p',
746
+ 'ℙ' => 'p',
747
+ 'ℚ' => 'q',
748
+ 'ℛ' => 'r',
749
+ 'ℜ' => 'r',
750
+ 'ℝ' => 'r',
751
+ '℞' => 'px',
752
+ '℟' => 'r',
753
+ '℠' => 'sm',
754
+ '℡' => 'tel',
755
+ '™' => 'tm',
756
+ 'ℤ' => 'z',
757
+ 'K' => 'k',
758
+ 'Å' => 'a',
759
+ 'ℬ' => 'b',
760
+ '℮' => 'e',
761
+ 'ℯ' => 'e',
762
+ '⒐' => '9',
763
+ '⒑' => '10',
764
+ '⒒' => '11',
765
+ '⒓' => '12',
766
+ '⒔' => '13',
767
+ '⒕' => '14',
768
+ '⒖' => '15',
769
+ '⒗' => '16',
770
+ '⒘' => '17',
771
+ '⒙' => '18',
772
+ '⒚' => '19',
773
+ '⒛' => '20',
774
+ '⒜' => 'a',
775
+ '⒝' => 'b',
776
+ '⒞' => 'c',
777
+ '⒟' => 'd',
778
+ '⒠' => 'e',
779
+ '⒡' => 'f',
780
+ '⒢' => 'g',
781
+ '⒣' => 'h',
782
+ '⒤' => 'i',
783
+ '⒥' => 'j',
784
+ '⒦' => 'k',
785
+ '⒧' => 'l',
786
+ '⒨' => 'm',
787
+ '⒩' => 'n',
788
+ '⒪' => 'o',
789
+ '⒫' => 'p',
790
+ '⒬' => 'q',
791
+ '⒭' => 'r',
792
+ '⒮' => 's',
793
+ '⒯' => 't',
794
+ '⒰' => 'u',
795
+ '⒱' => 'v',
796
+ '⒲' => 'w',
797
+ '⒳' => 'x',
798
+ '⒴' => 'y',
799
+ '⒵' => 'z',
800
+ 'Ⓐ' => 'a',
801
+ 'Ⓑ' => 'b',
802
+ 'Ⓒ' => 'c',
803
+ 'Ⓓ' => 'd',
804
+ 'Ⓔ' => 'e',
805
+ 'Ⓕ' => 'f',
806
+ 'Ⓖ' => 'g',
807
+ 'Ⓗ' => 'h',
808
+ 'Ⓘ' => 'i',
809
+ 'Ⓙ' => 'j',
810
+ 'Ⓚ' => 'k',
811
+ 'Ⓛ' => 'l',
812
+ 'Ⓜ' => 'm',
813
+ 'Ⓝ' => 'n',
814
+ 'Ⓞ' => 'o',
815
+ 'Ⓟ' => 'p',
816
+ 'Ⓠ' => 'q',
817
+ 'Ⓡ' => 'r',
818
+ 'Ⓢ' => 's',
819
+ 'Ⓣ' => 't',
820
+ 'Ⓤ' => 'u',
821
+ 'Ⓥ' => 'v',
822
+ 'Ⓦ' => 'w',
823
+ 'Ⓧ' => 'x',
824
+ 'Ⓨ' => 'y',
825
+ 'Ⓩ' => 'z',
826
+ 'ⓐ' => 'a',
827
+ 'ⓑ' => 'b',
828
+ 'ⓒ' => 'c',
829
+ 'ⓓ' => 'd',
830
+ 'ⓔ' => 'e',
831
+ 'ⓕ' => 'f',
832
+ 'ⓖ' => 'g',
833
+ 'ⓗ' => 'h',
834
+ 'ⓘ' => 'i',
835
+ 'ⓙ' => 'j',
836
+ 'ⓚ' => 'k',
837
+ 'ⓛ' => 'l',
838
+ 'ⓜ' => 'm',
839
+ 'ⓝ' => 'n',
840
+ 'ⓞ' => 'o',
841
+ 'ⓟ' => 'p',
842
+ 'ⓠ' => 'q',
843
+ 'ⓡ' => 'r',
844
+ 'ⓢ' => 's',
845
+ 'ⓣ' => 't',
846
+ 'ⓤ' => 'u',
847
+ 'ⓥ' => 'v',
848
+ 'ⓦ' => 'w',
849
+ 'ⓧ' => 'x',
850
+ 'ⓨ' => 'y',
851
+ 'ⓩ' => 'z',
852
+ '⓪' => '0',
853
+ 'ꜰ' => 'f',
854
+ 'ꜱ' => 's',
855
+ 'Ꜳ' => 'aa',
856
+ 'ꜳ' => 'aa',
857
+ 'Ꜵ' => 'ao',
858
+ 'ꜵ' => 'ao',
859
+ 'Ꜷ' => 'aj',
860
+ 'ꜷ' => 'aj',
861
+ 'Ꜹ' => 'av',
862
+ 'ꜹ' => 'av',
863
+ 'Ꜻ' => 'af',
864
+ 'ꜻ' => 'af',
865
+ 'Ꜽ' => 'af',
866
+ 'ꜽ' => 'af',
867
+ 'A' => 'a',
868
+ 'B' => 'b',
869
+ 'C' => 'c',
870
+ 'D' => 'd',
871
+ 'E' => 'e',
872
+ 'F' => 'f',
873
+ 'G' => 'g',
874
+ 'H' => 'h',
875
+ 'I' => 'i',
876
+ 'J' => 'j',
877
+ 'K' => 'k',
878
+ 'L' => 'l',
879
+ 'M' => 'm',
880
+ 'N' => 'n',
881
+ 'O' => 'o',
882
+ 'P' => 'p',
883
+ 'Q' => 'q',
884
+ 'R' => 'r',
885
+ 'S' => 's',
886
+ 'T' => 't',
887
+ 'U' => 'u',
888
+ 'V' => 'v',
889
+ 'W' => 'w',
890
+ 'X' => 'x',
891
+ 'Y' => 'y',
892
+ 'Z' => 'z',
893
+ '_' => '-',
894
+ 'a' => 'a',
895
+ 'b' => 'b',
896
+ 'c' => 'c',
897
+ 'd' => 'd',
898
+ 'e' => 'e',
899
+ 'f' => 'f',
900
+ 'g' => 'g',
901
+ 'h' => 'h',
902
+ 'i' => 'i',
903
+ 'j' => 'j',
904
+ 'k' => 'k',
905
+ 'l' => 'l',
906
+ 'm' => 'm',
907
+ 'n' => 'n',
908
+ 'o' => 'o',
909
+ 'p' => 'p',
910
+ 'q' => 'q',
911
+ 'r' => 'r',
912
+ 's' => 's',
913
+ 't' => 't',
914
+ 'u' => 'u',
915
+ 'v' => 'v',
916
+ 'w' => 'w',
917
+ 'x' => 'x',
918
+ 'y' => 'y',
919
+ 'z' => 'z',
920
+ '~' => '-',
921
+
922
+ ' ' => '-'
923
+ }
924
+
925
+ def self.convert (str, trim = false)
926
+ result = ''
927
+
928
+ str.each_char do |kar|
929
+ if SLUGGY_MAPPING.include?(kar)
930
+ result << SLUGGY_MAPPING[kar]
931
+ end
932
+ end
933
+
934
+ if trim
935
+ tmp = result
936
+ result = ""
937
+ prefix = ""
938
+ tmp.each_char do |kar|
939
+ if kar == '-'
940
+ prefix = "-"
941
+ else
942
+ prefix = '' if result == ""
943
+ result << prefix + kar
944
+ prefix = ''
945
+ end
946
+ end
947
+ end
948
+
949
+ result
950
+ end
951
+
952
+ end
@@ -0,0 +1,11 @@
1
+ class String
2
+
3
+ def slugify(trim = false)
4
+ Slugify.convert(self, trim)
5
+ end
6
+
7
+ def slugify_trim
8
+ slugify(true)
9
+ end
10
+
11
+ end
@@ -0,0 +1,113 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/slugify'
3
+
4
+ class SlugifyTest < Test::Unit::TestCase
5
+
6
+ def test_slugify
7
+ assert_nothing_raised do
8
+ assert_equal 'dummy', Slugify.convert('dummy')
9
+ end
10
+
11
+ assert_equal 'abcdefghijklmno', Slugify.convert('@ABCDEFGHIJKLMNO')
12
+ assert_equal 'pqrstuvwxyz---', Slugify.convert('PQRSTUVWXYZ[\]^_')
13
+ assert_equal '-', Slugify.convert('[')
14
+ assert_equal '', Slugify.convert('\\')
15
+ assert_equal '-', Slugify.convert(']')
16
+ assert_equal '', Slugify.convert('^')
17
+ assert_equal '-', Slugify.convert('_')
18
+ assert_equal 'abcdefghijklmno', Slugify.convert('`abcdefghijklmno')
19
+ assert_equal 'pqrstuvwxyz---', Slugify.convert('pqrstuvwxyz{|}~')
20
+ assert_equal '-', Slugify.convert('{')
21
+ assert_equal '', Slugify.convert('|')
22
+ assert_equal '-', Slugify.convert('}')
23
+ assert_equal '-', Slugify.convert('~')
24
+ assert_equal 'aaaaaaaeceeeeiiii', Slugify.convert('ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ')
25
+ assert_equal 'dnoooooxouuuuythb', Slugify.convert('ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß')
26
+ assert_equal 'aaaaaaaeceeeeiiii', Slugify.convert('àáâãäåæçèéêëìíîï')
27
+ assert_equal 'onoooooouuuuythy', Slugify.convert('ðñòóôõö÷øùúûüýþÿ')
28
+ assert_equal 'aaaaaaccccccccdd', Slugify.convert('ĀāĂ㥹ĆćĈĉĊċČčĎď')
29
+ assert_equal 'ddeeeeeeeeeegggg', Slugify.convert('ĐđĒēĔĕĖėĘęĚěĜĝĞğ')
30
+ assert_equal 'gggghhhhiiiiiiii', Slugify.convert('ĠġĢģĤĥĦħĨĩĪīĬĭĮį')
31
+ assert_equal 'llijijjjkkklllllll', Slugify.convert('İıIJijĴĵĶķĸĹĺĻļĽľĿ')
32
+ assert_equal 'lllnnnnnnnnnoooo', Slugify.convert('ŀŁłŃńŅņŇňʼnŊŋŌōŎŏ')
33
+ assert_equal 'oooeoerrrrrrssssss', Slugify.convert('ŐőŒœŔŕŖŗŘřŚśŜŝŞş')
34
+ assert_equal 'ssttttttuuuuuuuu', Slugify.convert('ŠšŢţŤťŦŧŨũŪūŬŭŮů')
35
+ assert_equal 'uuuuwwyyyzzzzzzs', Slugify.convert('ŰűŲųŴŵŶŷŸŹźŻżŽžſ')
36
+ assert_equal 'bbbbccddndnd', Slugify.convert('ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏ')
37
+ assert_equal '', Slugify.convert('ƂƃƆƍƎƏ')
38
+ assert_equal 'effgiikkwnno', Slugify.convert('ƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟ')
39
+ assert_equal '', Slugify.convert('Ɣƕƚƛ')
40
+ assert_equal 'oopprsssttttttu', Slugify.convert('ƠơƢƣƤƥƦƧƨƩƪƫƬƭƫƮƯ')
41
+ assert_equal '', Slugify.convert('Ƣƣ')
42
+ assert_equal 'uuuzzzqq', Slugify.convert('ưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ')
43
+ assert_equal '', Slugify.convert('ƳƴƸƹƺƻƾƿ')
44
+ assert_equal 'dzdzdzljljljnjnjnjaai', Slugify.convert('ǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏ')
45
+ assert_equal '', Slugify.convert('ǀǁǂǃ')
46
+ assert_equal 'ioouuuuuuuuuueaa', Slugify.convert('ǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ')
47
+ assert_equal 'aaaeaeggggkkoooo', Slugify.convert('ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯ')
48
+ assert_equal '', Slugify.convert('ǮǯǶǷȜȝȡȢȣȴȵȶ')
49
+ assert_equal 'jdzdzdzggnnaaaeaeoo', Slugify.convert('ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ')
50
+ assert_equal 'aaaaeeeeiiiioooo', Slugify.convert('ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏ')
51
+ assert_equal 'rrrruuuusstthh', Slugify.convert('ȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟ')
52
+ assert_equal 'nzzaaeeoooooo', Slugify.convert('ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯ')
53
+ assert_equal 'ooyyjdbqpacclls', Slugify.convert('ȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿ')
54
+ assert_equal 'zbuveejjqqrryy', Slugify.convert('ɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ')
55
+ assert_equal '', Slugify.convert('Ɂɂɒɓɔɕɖɘəɚɛɜɝɞɟɣɤɥɦɧɪɫɬɭɮ')
56
+ assert_equal 'ad', Slugify.convert('ɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟ')
57
+ assert_equal 'gggw', Slugify.convert('ɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯ')
58
+ assert_equal 'mooe', Slugify.convert('ɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿ')
59
+ assert_equal '', Slugify.convert('ɰɳɴɷɸɹɺɻɼɽɾɿᴈ')
60
+ assert_equal 'aaeaebcddejklmno', Slugify.convert('ᴀᴁᴂᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌᴍᴎᴏ')
61
+ assert_equal 'aabbbbbbccdddddd', Slugify.convert('ḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏ')
62
+ assert_equal 'ddddeeeeeeeeeeff', Slugify.convert('ḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟ')
63
+ assert_equal 'gghhhhhhhhhhiiii', Slugify.convert('ḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯ')
64
+ assert_equal 'kkkkkkllllllllmm', Slugify.convert('ḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿ')
65
+ assert_equal 'mmmmnnnnnnnnoooo', Slugify.convert('ṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏ')
66
+ assert_equal 'oooopppprrrrrrrr', Slugify.convert('ṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟ')
67
+ assert_equal 'sssssssssstttttt', Slugify.convert('ṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯ')
68
+ assert_equal 'ttuuuuuuuuuuvvvv', Slugify.convert('ṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿ')
69
+ assert_equal 'wwwwwwwwwwxxxxyy', Slugify.convert('ẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏ')
70
+ assert_equal 'zzzzzzhtwya', Slugify.convert('ẐẑẒẓẔẕẖẗẘẙẚẛẞẟ')
71
+ assert_equal '', Slugify.convert('ẛẞẟỈỉỊịₔℇ℈ℐℑℒℓ℔℣℥Ω℧ℨ℩ℭ')
72
+ assert_equal 'aaaaaaaaaaaaaaaa', Slugify.convert('ẠạẢảẤấẦầẨẩẪẫẬậẮắ')
73
+ assert_equal 'aaaaaaaaeeeeeeee', Slugify.convert('ẰằẲẳẴẵẶặẸẹẺẻẼẽẾế')
74
+ assert_equal 'eeeeeeeeoooo', Slugify.convert('ỀềỂểỄễỆệỌọỎỏ')
75
+ assert_equal 'oooooooooooooooo', Slugify.convert('ỐốỒồỔổỖỗỘộỚớỜờỞở')
76
+ assert_equal 'oooouuuuuuuuuuuu', Slugify.convert('ỠỡỢợỤụỦủỨứỪừỬửỮữ')
77
+ assert_equal 'uuyyyyyyyy', Slugify.convert('ỰựỲỳỴỵỶỷỸỹ')
78
+ assert_equal 'aeox', Slugify.convert('ₐₑₒₓₔ')
79
+ assert_equal 'acasccccocufghhhhh', Slugify.convert('℀℁ℂ℃℄℅℆ℇ℈℉ℊℋℌℍℎℏ')
80
+ assert_equal 'nppqrrrpxr', Slugify.convert('ℐℑℒℓ℔ℕ№℗℘ℙℚℛℜℝ℞℟')
81
+ assert_equal 'smteltmzkabee', Slugify.convert('℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯ')
82
+ assert_equal '91011121314151617181920abcd', Slugify.convert('⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⒜⒝⒞⒟')
83
+ assert_equal 'efghijklmnopqrst', Slugify.convert('⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯')
84
+ assert_equal 'uvwxyzabcdefghij', Slugify.convert('⒰⒱⒲⒳⒴⒵ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿ')
85
+ assert_equal 'klmnopqrstuvwxyz', Slugify.convert('ⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ')
86
+ assert_equal 'abcdefghijklmnop', Slugify.convert('ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟ')
87
+ assert_equal 'qrstuvwxyz0', Slugify.convert('ⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ⓪')
88
+ assert_equal 'fsaaaaaoaoajajavavafafafaf', Slugify.convert('ꜰꜱꜲꜳꜴꜵꜶꜷꜸꜹꜺꜻꜼꜽꜾꜿ')
89
+ assert_equal 'abcdefghijklmno', Slugify.convert('@ABCDEFGHIJKLMNO')
90
+ assert_equal 'pqrstuvwxyz-', Slugify.convert('PQRSTUVWXYZ[\]^_')
91
+ assert_equal '', Slugify.convert('[\]^{|}')
92
+ assert_equal 'abcdefghijklmno', Slugify.convert('`abcdefghijklmno')
93
+ assert_equal 'pqrstuvwxyz-', Slugify.convert('pqrstuvwxyz{|}~')
94
+
95
+ assert_equal 'abcdefghijklmnopqrstuvwxyz', Slugify.convert('abcdefghijklmnopqrstuvwxyz')
96
+ assert_equal 'abcdefghijklmnopqrstuvwxyz', Slugify.convert('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
97
+ assert_equal '0123456789', Slugify.convert('0123456789')
98
+ assert_equal '23', Slugify.convert('²³')
99
+ assert_equal '------------------', Slugify.convert('({})-_[],.;:=~+<>&')
100
+ assert_equal '', Slugify.convert('|@"#§^!°*$%£`?/\\')
101
+ assert_equal 'uu', Slugify.convert('ùµ')
102
+ end
103
+
104
+ def test_slugify_trim
105
+ assert_equal '', Slugify.convert('--', true)
106
+ assert_equal 'test', Slugify.convert('-test', true)
107
+ assert_equal 'test', Slugify.convert('test-', true)
108
+ assert_equal 'test', Slugify.convert('-test-', true)
109
+ assert_equal 'test-test', Slugify.convert('-test-test-', true)
110
+ assert_equal 'test-test', Slugify.convert('-test--test-', true)
111
+ end
112
+
113
+ end
@@ -0,0 +1,22 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + "/../lib/string"
3
+
4
+ class StringSlugifyTest < Test::Unit::TestCase
5
+
6
+ def test_slugify
7
+ assert_nothing_raised do
8
+ assert_equal "dummy", "dummy".slugify
9
+ end
10
+
11
+ assert_equal 'test-test', 'tést test'.slugify
12
+ assert_equal 'test--test', 'test test'.slugify
13
+ assert_equal 'test-test', 'test test'.slugify(true)
14
+ end
15
+
16
+ def test_slugify_trim
17
+ assert_nothing_raised do
18
+ assert_equal 'test-test', 'test test'.slugify_trim
19
+ end
20
+ end
21
+
22
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: slugify
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ version: "1.0"
10
+ platform: ruby
11
+ authors:
12
+ - Stefaan Colman
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-09-23 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Adds a method slugify to the string class that converts the string to a slug
22
+ email:
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/slugify.rb
31
+ - lib/string.rb
32
+ - tests/slugify_test.rb
33
+ - tests/string_slugify_test.rb
34
+ - README
35
+ has_rdoc: true
36
+ homepage:
37
+ licenses: []
38
+
39
+ post_install_message:
40
+ rdoc_options: []
41
+
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ hash: 3
50
+ segments:
51
+ - 0
52
+ version: "0"
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.3.7
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Adds String#slugify method
69
+ test_files:
70
+ - tests/slugify_test.rb
71
+ - tests/string_slugify_test.rb