slugifier 1.0.1 → 1.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3e4925a1f50a654d8855c0c354559c6f0e3482e
4
- data.tar.gz: b735abe0f10a5151dd6572e06f381369ded1bdca
3
+ metadata.gz: 598069f18fce8279b222b39e1c6fa55e75b859f7
4
+ data.tar.gz: e077ad778cc527e6bae806ce48fbdc3461654fc0
5
5
  SHA512:
6
- metadata.gz: a342be2e5c0836cb63eebff155ac2e7c0b8c0b55c22b27f701a227ce3787078a30d7ca248f831c77451bc553ccee694c1aba65cb7f83f45480e9189db82dfbe0
7
- data.tar.gz: ce812d891415b99a08a296665259a5fc04d22a5c7cc517d92d5a8e339c956886694dc4f23f0d0b242eabb73f3cbfac6999283356aaaab89494958f438853c1f4
6
+ metadata.gz: 1ebf17ca1b1c2e01f6b002bce7a2f4d8068a231646b3ed69faf5b3c565338dd319e6739b5a64506cae0ecdead79782a095e29c2be6fbc0d810d461c3db6f6bd6
7
+ data.tar.gz: 1c959a2639b5d838c61fe5d5b9182268db5b61482bcd5f5cf79a4607d822495f2d5b51c0a065f277ad47167befe7aaf21f1ec6922550a17590623f7860c8a3a4
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Slugifier
2
2
 
3
+ [![Build Status](https://secure.travis-ci.org/pedrogimenez/slugifier.svg?branch=master)](http://travis-ci.org/pedrogimenez/slugifier)
4
+
3
5
  Heavily-based on [Keyvan Akbary's PHP slugifier](https://github.com/keyvanakbary/slugifier).
4
6
 
5
7
  We use this at [Chicisimo](https://github.com/chicisimo).
data/lib/slugifier.rb CHANGED
@@ -18,23 +18,97 @@ class Slugifier
18
18
 
19
19
  def self.transliterate(string)
20
20
  transliteration = string
21
- table.each { |character, translit| transliteration.tr!(character, translit) }
21
+ table.each { |character, translit| transliteration.gsub!(character, translit) }
22
22
  transliteration
23
23
  end
24
24
 
25
25
  def self.table
26
26
  {
27
- "Š"=>"S", "š"=>"s", "Đ"=>"Dj", "đ"=>"dj", "Ž"=>"Z", "ž"=>"z", "Č"=>"C",
28
- "č"=>"c", "Ć"=>"C", "ć"=>"c", "À"=>"A", "Á"=>"A", "Â"=>"A", "Ã"=>"A",
29
- "Ä"=>"A", "Å"=>"A", "Æ"=>"A", "Ç"=>"C", "È"=>"E", "É"=>"E", "Ê"=>"E",
30
- "Ë"=>"E", "Ì"=>"I", "Í"=>"I", "Î"=>"I", "Ï"=>"I", "Ñ"=>"N", "Ò"=>"O",
31
- "Ó"=>"O", "Ô"=>"O", "Õ"=>"O", "Ö"=>"O", "Ø"=>"O", "Ù"=>"U", "Ú"=>"U",
32
- "Û"=>"U", "Ü"=>"U", "Ý"=>"Y", "Þ"=>"B", "ß"=>"Ss", "à"=>"a", "á"=>"a",
33
- "â"=>"a", "ã"=>"a", "ä"=>"a", "å"=>"a", "æ"=>"a", "ç"=>"c", "è"=>"e",
34
- "é"=>"e", "ê"=>"e", "ë"=>"e", "ì"=>"i", "í"=>"i", "î"=>"i", "ï"=>"i",
35
- "ð"=>"o", "ñ"=>"n", "ò"=>"o", "ó"=>"o", "ô"=>"o", "õ"=>"o", "ö"=>"o",
36
- "ø"=>"o", "ù"=>"u", "ú"=>"u", "û"=>"u", "ý"=>"y", "þ"=>"b", "ÿ"=>"y",
37
- "Ŕ"=>"R", "ŕ"=>"r", "ü" => "u", "ƒ" => "f"
27
+ # Latin
28
+ "°" => "0", "æ" => "ae", "ǽ" => "ae", "À" => "A", "Á" => "A", "Â" => "A", "Ã" => "A", "Å" => "A", "Ǻ" => "A",
29
+ "Ă" => "A", "Ǎ" => "A", "Æ" => "AE", "Ǽ" => "AE", "à" => "a", "á" => "a", "â" => "a", "ã" => "a", "å" => "a",
30
+ "ǻ" => "a", "ă" => "a", "ǎ" => "a", "ª" => "a", "@" => "at", "Ĉ" => "C", "Ċ" => "C", "ĉ" => "c", "ċ" => "c",
31
+ "©" => "c", "Ð" => "Dj", "Đ" => "D", "ð" => "dj", "đ" => "d", "È" => "E", "É" => "E", "Ê" => "E", "Ë" => "E",
32
+ "Ĕ" => "E", "Ė" => "E", "è" => "e", "é" => "e", "ê" => "e", "ë" => "e", "ĕ" => "e", "ė" => "e", "ƒ" => "f",
33
+ "Ĝ" => "G", "Ġ" => "G", "ĝ" => "g", "ġ" => "g", "Ĥ" => "H", "Ħ" => "H", "ĥ" => "h", "ħ" => "h", "Ì" => "I",
34
+ "Í" => "I", "Î" => "I", "Ï" => "I", "Ĩ" => "I", "Ĭ" => "I", "Ǐ" => "I", "Į" => "I", "IJ" => "IJ", "ì" => "i",
35
+ "í" => "i", "î" => "i", "ï" => "i", "ĩ" => "i", "ĭ" => "i", "ǐ" => "i", "į" => "i", "ij" => "ij", "Ĵ" => "J",
36
+ "ĵ" => "j", "Ĺ" => "L", "Ľ" => "L", "Ŀ" => "L", "ĺ" => "l", "ľ" => "l", "ŀ" => "l", "Ñ" => "N", "ñ" => "n",
37
+ "ʼn" => "n", "Ò" => "O", "Ô" => "O", "Õ" => "O", "Ō" => "O", "Ŏ" => "O", "Ǒ" => "O", "Ő" => "O", "Ơ" => "O",
38
+ "Ø" => "O", "Ǿ" => "O", "Œ" => "OE", "ò" => "o", "ô" => "o", "õ" => "o", "ō" => "o", "ŏ" => "o", "ǒ" => "o",
39
+ "ő" => "o", "ơ" => "o", "ø" => "o", "ǿ" => "o", "º" => "o", "œ" => "oe", "Ŕ" => "R", "Ŗ" => "R", "ŕ" => "r",
40
+ "ŗ" => "r", "Ŝ" => "S", "Ș" => "S", "ŝ" => "s", "ș" => "s", "ſ" => "s", "Ţ" => "T", "Ț" => "T", "Ŧ" => "T",
41
+ "Þ" => "TH", "ţ" => "t", "ț" => "t", "ŧ" => "t", "þ" => "th", "Ù" => "U", "Ú" => "U", "Û" => "U", "Ũ" => "U",
42
+ "Ŭ" => "U", "Ű" => "U", "Ų" => "U", "Ư" => "U", "Ǔ" => "U", "Ǖ" => "U", "Ǘ" => "U", "Ǚ" => "U", "Ǜ" => "U",
43
+ "ù" => "u", "ú" => "u", "û" => "u", "ũ" => "u", "ŭ" => "u", "ű" => "u", "ų" => "u", "ư" => "u", "ǔ" => "u",
44
+ "ǖ" => "u", "ǘ" => "u", "ǚ" => "u", "ǜ" => "u", "Ŵ" => "W", "ŵ" => "w", "Ý" => "Y", "Ÿ" => "Y", "Ŷ" => "Y",
45
+ "ý" => "y", "ÿ" => "y", "ŷ" => "y",
46
+
47
+ # Greek
48
+ "Α" => "A", "Β" => "B", "Γ" => "G", "Δ" => "D", "Ε" => "E", "Ζ" => "Z", "Η" => "E", "Θ" => "Th", "Ι" => "I",
49
+ "Κ" => "K", "Λ" => "L", "Μ" => "M", "Ν" => "N", "Ξ" => "X", "Ο" => "O", "Π" => "P", "Ρ" => "R", "Σ" => "S",
50
+ "Τ" => "T", "Υ" => "Y", "Φ" => "Ph", "Χ" => "Ch", "Ψ" => "Ps", "Ω" => "O", "Ϊ" => "I", "Ϋ" => "Y", "ά" => "a",
51
+ "έ" => "e", "ή" => "e", "ί" => "i", "ΰ" => "Y", "α" => "a", "β" => "b", "γ" => "g", "δ" => "d", "ε" => "e",
52
+ "ζ" => "z", "η" => "e", "θ" => "th", "ι" => "i", "κ" => "k", "λ" => "l", "μ" => "m", "ν" => "n", "ξ" => "x",
53
+ "ο" => "o", "π" => "p", "ρ" => "r", "ς" => "s", "σ" => "s", "τ" => "t", "υ" => "y", "φ" => "ph", "χ" => "ch",
54
+ "ψ" => "ps", "ω" => "o", "ϊ" => "i", "ϋ" => "y", "ό" => "o", "ύ" => "y", "ώ" => "o", "ϐ" => "b", "ϑ" => "th",
55
+ "ϒ" => "Y",
56
+
57
+ # Turkish
58
+ "Ç" => "C", "Ğ" => "G", "İ" => "I", "Ş" => "S", "ç" => "c", "ğ" => "g", "ı" => "i", "ş" => "s",
59
+
60
+ # Czech
61
+ "Č" => "C", "Ď" => "D", "Ě" => "E", "Ň" => "N", "Ř" => "R", "Š" => "S", "Ť" => "T", "Ů" => "U", "Ž" => "Z",
62
+ "č" => "c", "ď" => "d", "ě" => "e", "ň" => "n", "ř" => "r", "š" => "s", "ť" => "t", "ů" => "u", "ž" => "z",
63
+
64
+ # Arabic
65
+ "أ" => "a", "ب" => "b", "ت" => "t", "ث" => "th", "ج" => "g", "ح" => "h", "خ" => "kh", "د" => "d", "ذ" => "th",
66
+ "ر" => "r", "ز" => "z", "س" => "s", "ش" => "sh", "ص" => "s", "ض" => "d", "ط" => "t", "ظ" => "th", "ع" => "aa",
67
+ "غ" => "gh", "ف" => "f", "ق" => "k", "ك" => "k", "ل" => "l", "م" => "m", "ن" => "n", "ه" => "h", "و" => "o",
68
+ "ي" => "y",
69
+
70
+ # Vietnamese
71
+ "ạ" => "a", "ả" => "a", "ầ" => "a", "ấ" => "a", "ậ" => "a", "ẩ" => "a", "ẫ" => "a", "ằ" => "a", "ắ" => "a",
72
+ "ặ" => "a", "ẳ" => "a", "ẵ" => "a", "ẹ" => "e", "ẻ" => "e", "ẽ" => "e", "ề" => "e", "ế" => "e", "ệ" => "e",
73
+ "ể" => "e", "ễ" => "e", "ị" => "i", "ỉ" => "i", "ọ" => "o", "ỏ" => "o", "ồ" => "o", "ố" => "o", "ộ" => "o",
74
+ "ổ" => "o", "ỗ" => "o", "ờ" => "o", "ớ" => "o", "ợ" => "o", "ở" => "o", "ỡ" => "o", "ụ" => "u", "ủ" => "u",
75
+ "ừ" => "u", "ứ" => "u", "ự" => "u", "ử" => "u", "ữ" => "u", "ỳ" => "y", "ỵ" => "y", "ỷ" => "y", "ỹ" => "y",
76
+ "Ạ" => "A", "Ả" => "A", "Ầ" => "A", "Ấ" => "A", "Ậ" => "A", "Ẩ" => "A", "Ẫ" => "A", "Ằ" => "A", "Ắ" => "A",
77
+ "Ặ" => "A", "Ẳ" => "A", "Ẵ" => "A", "Ẹ" => "E", "Ẻ" => "E", "Ẽ" => "E", "Ề" => "E", "Ế" => "E", "Ệ" => "E",
78
+ "Ể" => "E", "Ễ" => "E", "Ị" => "I", "Ỉ" => "I", "Ọ" => "O", "Ỏ" => "O", "Ồ" => "O", "Ố" => "O", "Ộ" => "O",
79
+ "Ổ" => "O", "Ỗ" => "O", "Ờ" => "O", "Ớ" => "O", "Ợ" => "O", "Ở" => "O", "Ỡ" => "O", "Ụ" => "U", "Ủ" => "U",
80
+ "Ừ" => "U", "Ứ" => "U", "Ự" => "U", "Ử" => "U", "Ữ" => "U", "Ỳ" => "Y", "Ỵ" => "Y", "Ỷ" => "Y", "Ỹ" => "Y",
81
+
82
+ # Polish
83
+ "Ą" => "A", "Ć" => "C", "Ę" => "E", "Ł" => "L", "Ń" => "N", "Ó" => "O", "Ś" => "S", "Ź" => "Z", "Ż" => "Z",
84
+ "ą" => "a", "ć" => "c", "ę" => "e", "ł" => "l", "ń" => "n", "ó" => "o", "ś" => "s", "ź" => "z", "ż" => "z",
85
+
86
+ # Latvian
87
+ "Ā" => "A", "Ē" => "E", "Ģ" => "G", "Ī" => "I", "Ķ" => "K", "Ļ" => "L", "Ņ" => "N", "Ū" => "U", "ā" => "a",
88
+ "ē" => "e", "ģ" => "g", "ī" => "i", "ķ" => "k", "ļ" => "l", "ņ" => "n", "ū" => "u",
89
+
90
+ # German
91
+ "Ä" => "AE", "Ö" => "OE", "Ü" => "UE", "ß" => "ss", "ä" => "ae", "ö" => "oe", "ü" => "ue",
92
+
93
+ # Ukrainian
94
+ "Ґ" => "G", "І" => "I", "Ї" => "Ji", "Є" => "Ye", "ґ" => "g", "і" => "i", "ї" => "ji", "є" => "ye",
95
+
96
+ # Serbian
97
+ "ђ" => "dj", "ј" => "j", "љ" => "lj", "њ" => "nj", "ћ" => "c", "џ" => "dz", "Ђ" => "Dj", "Ј" => "j",
98
+ "Љ" => "Lj", "Њ" => "Nj", "Ћ" => "C", "Џ" => "Dz",
99
+
100
+ # Russian
101
+ "Ъ" => "", "Ь" => "", "А" => "A", "Б" => "B", "Ц" => "C", "Ч" => "Ch", "Д" => "D", "Е" => "E", "Ё" => "E",
102
+ "Э" => "E", "Ф" => "F", "Г" => "G", "Х" => "H", "И" => "I", "Й" => "J", "Я" => "Ja", "Ю" => "Ju", "К" => "K",
103
+ "Л" => "L", "М" => "M", "Н" => "N", "О" => "O", "П" => "P", "Р" => "R", "С" => "S", "Ш" => "Sh", "Щ" => "Shch",
104
+ "Т" => "T", "У" => "U", "В" => "V", "Ы" => "Y", "З" => "Z", "Ж" => "Zh", "ъ" => "", "ь" => "", "а" => "a",
105
+ "б" => "b", "ц" => "c", "ч" => "ch", "д" => "d", "е" => "e", "ё" => "e", "э" => "e", "ф" => "f", "г" => "g",
106
+ "х" => "h", "и" => "i", "й" => "j", "я" => "ja", "ю" => "ju", "к" => "k", "л" => "l", "м" => "m", "н" => "n",
107
+ "о" => "o", "п" => "p", "р" => "r", "с" => "s", "ш" => "sh", "щ" => "shch", "т" => "t", "у" => "u", "в" => "v",
108
+ "ы" => "y", "з" => "z", "ж" => "zh",
109
+
110
+ # Other
111
+ "¹" => "1", "²" => "2", "³" => "3", "¶" => "P"
38
112
  }
39
113
  end
40
114
 
@@ -1,17 +1,26 @@
1
1
  require_relative "../lib/slugifier"
2
2
 
3
3
  describe Slugifier do
4
- it "returns an slug" do
4
+ it "returns a slug" do
5
5
  examples.each { |string, slug| expect(Slugifier.slugify(string)).to eq(slug) }
6
6
  end
7
7
 
8
8
  def examples
9
9
  [
10
10
  ["Word", "word"],
11
+ ["JúST å fëw wørds", "just-a-few-words"],
12
+ ["J\"étudie le français", "j-etudie-le-francais"],
11
13
  ["An awesome slug", "an-awesome-slug"],
12
- [" should trim this text ", "should-trim-this-text"],
14
+ [" should trim this text ", "should-trim-this-text"],
13
15
  ["Práctica de acentuación", "practica-de-acentuacion"],
14
- ["Cumpleaños del muerciélago", "cumpleanos-del-muercielago"]
16
+ ["Cumpleaños del muerciélago", "cumpleanos-del-muercielago"],
17
+ ["هذا هو الاختبار", "hth-ho-l-khtb-r"],
18
+ ["Блоґ їжачка", "blog-jizhachka"],
19
+ ["Это тест", "eto-test"],
20
+ ["Це тест", "ce-test"],
21
+ ["Đây là một thử nghiệm", "day-la-mot-thu-nghiem"],
22
+ ["Αυτή είναι μια δοκιμή", "ayte-einai-mia-dokime"],
23
+ ["°¹²³@¶", "0123atp"]
15
24
  ]
16
25
  end
17
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slugifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pedro Gimenez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-28 00:00:00.000000000 Z
11
+ date: 2015-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -32,9 +32,9 @@ extensions: []
32
32
  extra_rdoc_files:
33
33
  - README.md
34
34
  files:
35
- - README.md
36
35
  - lib/slugifier.rb
37
36
  - spec/slugifier_spec.rb
37
+ - README.md
38
38
  homepage: http://github.com/pedrogimenez/slugifier
39
39
  licenses:
40
40
  - MIT
@@ -55,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
55
  version: '0'
56
56
  requirements: []
57
57
  rubyforge_project:
58
- rubygems_version: 2.2.0
58
+ rubygems_version: 2.0.14
59
59
  signing_key:
60
60
  specification_version: 4
61
61
  summary: Returns a slug given a string.