srbovanje 0.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.
data/README.rdoc ADDED
@@ -0,0 +1,33 @@
1
+ = srbovanje
2
+
3
+ Esencijalni Ruby Gem za Ruby aplikaciju na srpskom. Pruža mogućnosti:
4
+
5
+ * transliteracije ćirilice na latinicu (npr. "Ђурђевак" u "Đurđevak")
6
+ * transliteracije ćirilice na ascii latinicu (npr. "Ђурђевак" u "Djurdjevak")
7
+ * slugifikacije (parametrizaciju) stringa na srpskom (npr: "Železnica Srbije" u "zeleznica-srbije")
8
+ * ispisa relativnih vremena u rečima, pravopisno ispravno (npr. "3 sata"; Rails lokalizacija ne razlikuje različite oblike u zavisnosti od količine i ispisao bi pogrešno "3 sati")
9
+
10
+
11
+ == Upotreba
12
+
13
+ === Transliteracije ćirilice na latinicu
14
+
15
+ >> "Ђурђевак".latin
16
+ => "Đurđevak"
17
+
18
+ === Transliteracije ćirilice na ascii latinicu
19
+
20
+ >> "Ђурђевак".ascii_latin
21
+ => "Djurdjevak"
22
+
23
+ === slugifikacije (parametrizaciju) stringa na srpskom
24
+
25
+ >> "Železnica Srbije".ascii_latin
26
+ => "zeleznica-srbije"
27
+
28
+ === ispisa relativnih vremena u rečima (npr. "3 sata")
29
+
30
+
31
+ == Autor
32
+
33
+ {Dejan Simić}[http://github.com/dejan]
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 1
3
+ :minor: 0
4
+ :patch: 0
data/lib/srbovanje.rb ADDED
@@ -0,0 +1,3 @@
1
+ $KCODE = 'UTF8'
2
+
3
+ require 'srbovanje/string_ext.rb'
@@ -0,0 +1,153 @@
1
+ class String
2
+
3
+ @@latin_map = {
4
+ 'а' => 'a',
5
+ 'А' => 'A',
6
+ 'б' => 'b',
7
+ 'Б' => 'B',
8
+ 'в' => 'v',
9
+ 'В' => 'V',
10
+ 'г' => 'g',
11
+ 'Г' => 'G',
12
+ 'д' => 'd',
13
+ 'Д' => 'D',
14
+ 'ђ' => 'đ',
15
+ 'Ђ' => 'Đ',
16
+ 'е' => 'e',
17
+ 'Е' => 'E',
18
+ 'ж' => 'ž',
19
+ 'Ж' => 'Ž',
20
+ 'з' => 'z',
21
+ 'З' => 'Z',
22
+ 'и' => 'i',
23
+ 'И' => 'I',
24
+ 'ј' => 'j',
25
+ 'Ј' => 'J',
26
+ 'к' => 'k',
27
+ 'К' => 'K',
28
+ 'л' => 'l',
29
+ 'Л' => 'L',
30
+ 'љ' => 'lj',
31
+ 'Љ' => 'LJ',
32
+ 'м' => 'm',
33
+ 'М' => 'M',
34
+ 'н' => 'n',
35
+ 'Н' => 'N',
36
+ 'њ' => 'nj',
37
+ 'Њ' => 'NJ',
38
+ 'о' => 'o',
39
+ 'О' => 'O',
40
+ 'п' => 'p',
41
+ 'П' => 'P',
42
+ 'р' => 'r',
43
+ 'Р' => 'R',
44
+ 'с' => 's',
45
+ 'С' => 'S',
46
+ 'т' => 't',
47
+ 'Т' => 'T',
48
+ 'ћ' => 'ć',
49
+ 'Ћ' => 'Ć',
50
+ 'ц' => 'c',
51
+ 'Ц' => 'C',
52
+ 'у' => 'u',
53
+ 'У' => 'U',
54
+ 'ф' => 'f',
55
+ 'Ф' => 'F',
56
+ 'х' => 'h',
57
+ 'Х' => 'H',
58
+ 'ч' => 'č',
59
+ 'Ч' => 'Č',
60
+ 'џ' => 'dž',
61
+ 'Џ' => 'DŽ',
62
+ 'ш' => 'š',
63
+ 'Ш' => 'Š' }
64
+
65
+ @@ascii_latin_map =
66
+ @@latin_map.merge(
67
+ 'ћ' => 'c',
68
+ 'ć' => 'c',
69
+ 'ч' => 'c',
70
+ 'č' => 'c',
71
+ 'Ћ' => 'C',
72
+ 'Ć' => 'C',
73
+ 'Ч' => 'C',
74
+ 'Č' => 'C',
75
+ 'ж' => 'z',
76
+ 'ž' => 'z',
77
+ 'Ж' => 'Z',
78
+ 'Ž' => 'Z',
79
+ 'š' => 's',
80
+ 'ш' => 's',
81
+ 'Ш' => 'S',
82
+ 'Š' => 'S',
83
+ 'đ' => 'dj',
84
+ 'ђ' => 'dj',
85
+ 'Ђ' => 'DJ',
86
+ 'Đ' => 'DJ',
87
+ 'џ' => 'dz',
88
+ 'Џ' => 'DZ')
89
+
90
+ def latin
91
+ self.class.recode(self.dup, @@latin_map)
92
+ end
93
+
94
+ def latin!
95
+ self.class.recode(self, @@latin_map)
96
+ end
97
+
98
+ def ascii_latin
99
+ self.class.recode(self.dup, @@ascii_latin_map)
100
+ end
101
+
102
+ def ascii_latin!
103
+ self.class.recode(self, @@ascii_latin_map)
104
+ end
105
+
106
+ def self.abeceda
107
+ @@abeceda ||= %w(A B C Č Ć D DŽ Đ E F G H I J K L LJ M N NJ O P R S Š T U V Z Ž)
108
+ end
109
+
110
+ def self.abeceda
111
+ @@abeceda ||= %w(A B C Č Ć D DŽ Đ E F G H I J K L LJ M N NJ O P R S Š T U V Z Ž)
112
+ end
113
+
114
+ def slugify(separator = '-', return_separator_if_empty = true)
115
+ s = parameterize(self.ascii_latin, separator)
116
+ s.empty? && return_separator_if_empty ? separator : s
117
+ end
118
+
119
+ private
120
+
121
+ # NOTE: slighlty modified after porting from ActiveSupport
122
+ #
123
+ # Replaces special characters in a string so that it may be used as part of a 'pretty' URL.
124
+ #
125
+ # ==== Examples
126
+ #
127
+ # @person = Person.find(1)
128
+ # # => #<Person id: 1, name: "Donald E. Knuth">
129
+ #
130
+ # <%= link_to(@person.name, person_path(@person)) %>
131
+ # # => <a href="/person/1-donald-e-knuth">Donald E. Knuth</a>
132
+ #
133
+ def parameterize(string, sep = '-')
134
+ # nil is same as blank
135
+ sep = sep || ''
136
+ parameterized_string = string.gsub(/[^a-z0-9\-_\+]+/i, sep)
137
+ # Turn unwanted chars into the seperator
138
+ unless sep.empty?
139
+ re_sep = Regexp.escape(sep)
140
+ # No more than one of the separator in a row.
141
+ parameterized_string.gsub!(/#{re_sep}{2,}/, sep)
142
+ # Remove leading/trailing separator.
143
+ parameterized_string.gsub!(/^#{re_sep}|#{re_sep}$/i, '')
144
+ end
145
+ parameterized_string.downcase
146
+ end
147
+
148
+ def self.recode(str, mapping)
149
+ str.gsub!(/.+?/) do |chr|
150
+ mapping[chr] || chr
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,62 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class TestStringExt < Test::Unit::TestCase
4
+ def test_latin
5
+ # don't change argument
6
+ str = "ЊЕГОШ"
7
+ assert_equal("NJEGOŠ", str.latin)
8
+ assert_equal("ЊЕГОШ", str)
9
+
10
+ # plain
11
+ assert_equal("NJEGOŠ", "ЊЕГОШ".latin)
12
+ assert_equal("Šaban Šaulić", "Шабан Шаулић".latin)
13
+ assert_equal("elektrodistribucija", "електродистрибуција".latin)
14
+ assert_equal("Đurđevak", "Ђурђевак".latin)
15
+
16
+ # non_convertive_characters
17
+ assert_equal("Latinica", "Latinica".latin)
18
+ assert_equal('[]2#}(,.);2@$"', '[]2#}(,.);2@$"'.latin)
19
+ end
20
+
21
+ def test_latin!
22
+ str = "ноћ"
23
+ assert_equal("noć", str.latin!)
24
+ assert_equal("noć", str)
25
+ end
26
+
27
+ def test_ascii_latin
28
+ str = "Железница Србије"
29
+ assert_equal("Zeleznica Srbije", str.ascii_latin)
30
+ assert_equal("Железница Србије", str)
31
+ end
32
+
33
+ def test_latin!
34
+ str = "ноћ"
35
+ assert_equal("noc", str.ascii_latin!)
36
+ assert_equal("noc", str)
37
+ end
38
+
39
+ def test_abeceda
40
+ assert_equal(30, String.abeceda.size)
41
+ end
42
+
43
+ def test_slugify
44
+ assert_equal("zeleznica-srbije", "Железница Србије".slugify)
45
+ assert_equal("kako-je", "Kako je?".slugify)
46
+ assert_equal("mis-zaba", "miš,žaba".slugify)
47
+ assert_equal("mis-zaba", "миш, жаба".slugify)
48
+ assert_equal("agencija", " aGenCIJa ".slugify)
49
+ assert_equal("vamo-tamo", "vamo-tamo".slugify)
50
+ assert_equal("vamo-tamo", "vamo tamo".slugify)
51
+ assert_equal("pokvarenspejs", "Pokvaren Spejs".slugify(nil))
52
+ assert_equal("abcdeavioni", "a b c d e avioni".slugify(''))
53
+ assert_equal("-", "び諸芸や奇抜な衣装".slugify)
54
+ assert_equal("-", "び諸芸や奇 抜な衣 装 び諸芸や 奇抜な衣装".slugify)
55
+ assert_equal("", "び諸芸や奇抜な衣装".slugify('-', false))
56
+ assert_equal("-", "び諸芸や奇抜な衣装".slugify('-', true))
57
+ assert_equal("+", "び諸芸や奇抜な衣装 び諸芸や奇抜な衣装".slugify('+'))
58
+ assert_equal("ako-ako", 'ako, ako'.slugify)
59
+ assert_equal("ako-ako", 'ako,ako'.slugify)
60
+ assert_equal("ako-ako", 'ako ako'.slugify)
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ require "test/unit"
2
+
3
+ require File.dirname(__FILE__) + '/../lib/srbovanje'
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: srbovanje
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Dejan Simic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-03-14 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: "Ruby gem za transliteraciju \xC4\x87irilice na latinicu i tzv. ASCII latinicu"
17
+ email: desimic@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - README.rdoc
26
+ - VERSION.yml
27
+ - lib/srbovanje/string_ext.rb
28
+ - lib/srbovanje.rb
29
+ - test/string_ext_test.rb
30
+ - test/test_helper.rb
31
+ has_rdoc: true
32
+ homepage: http://github.com/dejan/srbovanje
33
+ licenses: []
34
+
35
+ post_install_message:
36
+ rdoc_options:
37
+ - --inline-source
38
+ - --charset=UTF-8
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ version:
53
+ requirements: []
54
+
55
+ rubyforge_project:
56
+ rubygems_version: 1.3.5
57
+ signing_key:
58
+ specification_version: 2
59
+ summary: "Ruby gem za transliteraciju \xC4\x87irilice na latinicu i tzv. ASCII latinicu"
60
+ test_files: []
61
+