srbovanje 0.2.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  srbovanje
2
2
  =========
3
3
 
4
- Ruby gem za transliteraciju ćirilice na latinicu i tzv. ASCII latinicu
4
+ Ruby gem za preslovanjavanje ćirilice na latinicu i tzv. "ošišanu" latinicu
5
5
 
6
6
 
7
7
  ## Instaliranje
@@ -11,23 +11,35 @@ Ruby gem za transliteraciju ćirilice na latinicu i tzv. ASCII latinicu
11
11
 
12
12
  ## Korišćenje
13
13
 
14
- >> "Ђурђевак".recode_sr_latin
14
+ >> "Ђурђевак".na_latinici
15
15
  => "Đurđevak"
16
16
 
17
- >> "Железница Србије".recode_sr_ascii_latin
18
- => "Zeleznica Srbije"
17
+ >> "Ђурђевак".na_latinici :ascii
18
+ => "Djurdjevak"
19
19
 
20
- >> "Железница Србије".slugify
21
- => "zeleznica-srbije"
22
-
23
- >> String.abeceda
20
+ >> Srbovanje.abeceda
24
21
  => ["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", "Ž"]
25
22
 
26
- ## Zašto "recode_sr_latin" kao naziv metode?
27
23
 
28
- Zbog <http://man.he.net/man1/recode-sr-latin>
24
+ ## MIT Licence
25
+
26
+ Copyright (c) 2009 Dejan Simic
29
27
 
28
+ Permission is hereby granted, free of charge, to any person obtaining
29
+ a copy of this software and associated documentation files (the
30
+ "Software"), to deal in the Software without restriction, including
31
+ without limitation the rights to use, copy, modify, merge, publish,
32
+ distribute, sublicense, and/or sell copies of the Software, and to
33
+ permit persons to whom the Software is furnished to do so, subject to
34
+ the following conditions:
30
35
 
31
- ## Autor
36
+ The above copyright notice and this permission notice shall be
37
+ included in all copies or substantial portions of the Software.
32
38
 
33
- [Dejan Simić](http://github.com/dejan)
39
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
40
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
41
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
42
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
43
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
44
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
45
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -1,6 +1,11 @@
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
1
3
  require 'rake/testtask'
2
4
 
3
- desc 'Test srbovanje'
4
- Rake::TestTask.new(:test) do |t|
5
- t.pattern = 'test/**/*_test.rb'
5
+ Rake::TestTask.new do |t|
6
+ t.libs << "test"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ t.verbose = true
6
9
  end
10
+
11
+ task :default => :test
data/lib/srbovanje.rb CHANGED
@@ -1,5 +1,6 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
 
3
3
  $KCODE = 'UTF8' if RUBY_VERSION.to_f < 1.9
4
4
 
5
- require 'srbovanje/string_ext.rb'
5
+ require 'srbovanje/srbovanje.rb'
6
+ require 'srbovanje/string_ext.rb'
@@ -0,0 +1,102 @@
1
+ # encoding: utf-8
2
+
3
+ class Srbovanje
4
+ def self.abeceda
5
+ %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 Ž)
6
+ end
7
+
8
+ def self.latinica_map(charset)
9
+ charset.to_s == 'ascii' ? latinica_ascii_map : latinica_full_map
10
+ end
11
+
12
+ def self.latinica_full_map
13
+ @@latinica_map ||= {
14
+ 'а' => 'a',
15
+ 'А' => 'A',
16
+ 'б' => 'b',
17
+ 'Б' => 'B',
18
+ 'в' => 'v',
19
+ 'В' => 'V',
20
+ 'г' => 'g',
21
+ 'Г' => 'G',
22
+ 'д' => 'd',
23
+ 'Д' => 'D',
24
+ 'ђ' => 'đ',
25
+ 'Ђ' => 'Đ',
26
+ 'е' => 'e',
27
+ 'Е' => 'E',
28
+ 'ж' => 'ž',
29
+ 'Ж' => 'Ž',
30
+ 'з' => 'z',
31
+ 'З' => 'Z',
32
+ 'и' => 'i',
33
+ 'И' => 'I',
34
+ 'ј' => 'j',
35
+ 'Ј' => 'J',
36
+ 'к' => 'k',
37
+ 'К' => 'K',
38
+ 'л' => 'l',
39
+ 'Л' => 'L',
40
+ 'љ' => 'lj',
41
+ 'Љ' => 'LJ',
42
+ 'м' => 'm',
43
+ 'М' => 'M',
44
+ 'н' => 'n',
45
+ 'Н' => 'N',
46
+ 'њ' => 'nj',
47
+ 'Њ' => 'NJ',
48
+ 'о' => 'o',
49
+ 'О' => 'O',
50
+ 'п' => 'p',
51
+ 'П' => 'P',
52
+ 'р' => 'r',
53
+ 'Р' => 'R',
54
+ 'с' => 's',
55
+ 'С' => 'S',
56
+ 'т' => 't',
57
+ 'Т' => 'T',
58
+ 'ћ' => 'ć',
59
+ 'Ћ' => 'Ć',
60
+ 'ц' => 'c',
61
+ 'Ц' => 'C',
62
+ 'у' => 'u',
63
+ 'У' => 'U',
64
+ 'ф' => 'f',
65
+ 'Ф' => 'F',
66
+ 'х' => 'h',
67
+ 'Х' => 'H',
68
+ 'ч' => 'č',
69
+ 'Ч' => 'Č',
70
+ 'џ' => 'dž',
71
+ 'Џ' => 'DŽ',
72
+ 'ш' => 'š',
73
+ 'Ш' => 'Š' }
74
+ end
75
+
76
+ def self.latinica_ascii_map
77
+ @@latinica_ascii_map ||= latinica_full_map.merge(
78
+ 'ћ' => 'c',
79
+ 'ć' => 'c',
80
+ 'ч' => 'c',
81
+ 'č' => 'c',
82
+ 'Ћ' => 'C',
83
+ 'Ć' => 'C',
84
+ 'Ч' => 'C',
85
+ 'Č' => 'C',
86
+ 'ж' => 'z',
87
+ 'ž' => 'z',
88
+ 'Ж' => 'Z',
89
+ 'Ž' => 'Z',
90
+ 'š' => 's',
91
+ 'ш' => 's',
92
+ 'Ш' => 'S',
93
+ 'Š' => 'S',
94
+ 'đ' => 'dj',
95
+ 'ђ' => 'dj',
96
+ 'Ђ' => 'DJ',
97
+ 'Đ' => 'DJ',
98
+ 'џ' => 'dz',
99
+ 'Џ' => 'DZ')
100
+ end
101
+
102
+ end
@@ -1,154 +1,15 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
 
3
3
  String.class_eval do
4
- def self.recode_sr_latin_map
5
- @@recode_sr_latin_map ||= {
6
- 'а' => 'a',
7
- 'А' => 'A',
8
- 'б' => 'b',
9
- 'Б' => 'B',
10
- 'в' => 'v',
11
- 'В' => 'V',
12
- 'г' => 'g',
13
- 'Г' => 'G',
14
- 'д' => 'd',
15
- 'Д' => 'D',
16
- 'ђ' => 'đ',
17
- 'Ђ' => 'Đ',
18
- 'е' => 'e',
19
- 'Е' => 'E',
20
- 'ж' => 'ž',
21
- 'Ж' => 'Ž',
22
- 'з' => 'z',
23
- 'З' => 'Z',
24
- 'и' => 'i',
25
- 'И' => 'I',
26
- 'ј' => 'j',
27
- 'Ј' => 'J',
28
- 'к' => 'k',
29
- 'К' => 'K',
30
- 'л' => 'l',
31
- 'Л' => 'L',
32
- 'љ' => 'lj',
33
- 'Љ' => 'LJ',
34
- 'м' => 'm',
35
- 'М' => 'M',
36
- 'н' => 'n',
37
- 'Н' => 'N',
38
- 'њ' => 'nj',
39
- 'Њ' => 'NJ',
40
- 'о' => 'o',
41
- 'О' => 'O',
42
- 'п' => 'p',
43
- 'П' => 'P',
44
- 'р' => 'r',
45
- 'Р' => 'R',
46
- 'с' => 's',
47
- 'С' => 'S',
48
- 'т' => 't',
49
- 'Т' => 'T',
50
- 'ћ' => 'ć',
51
- 'Ћ' => 'Ć',
52
- 'ц' => 'c',
53
- 'Ц' => 'C',
54
- 'у' => 'u',
55
- 'У' => 'U',
56
- 'ф' => 'f',
57
- 'Ф' => 'F',
58
- 'х' => 'h',
59
- 'Х' => 'H',
60
- 'ч' => 'č',
61
- 'Ч' => 'Č',
62
- 'џ' => 'dž',
63
- 'Џ' => 'DŽ',
64
- 'ш' => 'š',
65
- 'Ш' => 'Š' }
66
- end
67
-
68
- def self.recode_sr_ascii_latin_map
69
- @@recode_sr_ascii_latin_map ||=
70
- recode_sr_latin_map.merge(
71
- 'ћ' => 'c',
72
- 'ć' => 'c',
73
- 'ч' => 'c',
74
- 'č' => 'c',
75
- 'Ћ' => 'C',
76
- 'Ć' => 'C',
77
- 'Ч' => 'C',
78
- 'Č' => 'C',
79
- 'ж' => 'z',
80
- 'ž' => 'z',
81
- 'Ж' => 'Z',
82
- 'Ž' => 'Z',
83
- 'š' => 's',
84
- 'ш' => 's',
85
- 'Ш' => 'S',
86
- 'Š' => 'S',
87
- 'đ' => 'dj',
88
- 'ђ' => 'dj',
89
- 'Ђ' => 'DJ',
90
- 'Đ' => 'DJ',
91
- 'џ' => 'dz',
92
- 'Џ' => 'DZ')
93
- end
94
-
95
- def self.abeceda
96
- @@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 Ž)
97
- end
98
-
99
- def recode_sr_latin
100
- self.class.recode(self.dup, self.class.recode_sr_latin_map)
101
- end
102
-
103
- def recode_sr_latin!
104
- self.class.recode(self, self.class.recode_sr_latin_map)
105
- end
106
-
107
- def recode_sr_ascii_latin
108
- self.class.recode(self.dup, self.class.recode_sr_ascii_latin_map)
109
- end
110
4
 
111
- def recode_sr_ascii_latin!
112
- self.class.recode(self, self.class.recode_sr_ascii_latin_map)
113
- end
114
-
115
- def slugify(separator = '-', return_separator_if_empty = true)
116
- s = parameterize(self.recode_sr_ascii_latin, separator)
117
- s.empty? && return_separator_if_empty ? separator : s
118
- end
119
-
120
- private
121
-
122
- # NOTE: slighlty modified after porting from ActiveSupport
123
- #
124
- # Replaces special characters in a string so that it may be used as part of a 'pretty' URL.
125
- #
126
- # ==== Examples
127
- #
128
- # @person = Person.find(1)
129
- # # => #<Person id: 1, name: "Donald E. Knuth">
130
- #
131
- # <%= link_to(@person.name, person_path(@person)) %>
132
- # # => <a href="/person/1-donald-e-knuth">Donald E. Knuth</a>
133
- #
134
- def parameterize(string, sep = '-')
135
- # nil is same as blank
136
- sep = sep || ''
137
- parameterized_string = string.gsub(/[^a-z0-9\-_\+]+/i, sep)
138
- # Turn unwanted chars into the seperator
139
- unless sep.empty?
140
- re_sep = Regexp.escape(sep)
141
- # No more than one of the separator in a row.
142
- parameterized_string.gsub!(/#{re_sep}{2,}/, sep)
143
- # Remove leading/trailing separator.
144
- parameterized_string.gsub!(/^#{re_sep}|#{re_sep}$/i, '')
145
- end
146
- parameterized_string.downcase
147
- end
148
-
149
- def self.recode(str, mapping)
150
- str.gsub!(/.+?/) do |chr|
5
+ # Preslovljava na latinicu
6
+ # Params:
7
+ # +charset+:: ako je :ascii preslovljava u "ošišanju" latinicu.
8
+ def na_latinici(charset=:utf8)
9
+ mapping = Srbovanje.latinica_map(charset)
10
+ self.gsub(/.+?/) do |chr|
151
11
  mapping[chr] || chr
152
12
  end
153
13
  end
14
+
154
15
  end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test_helper'
4
+
5
+ describe Srbovanje do
6
+ describe '::abeceda' do
7
+ it 'vraca abecedu kao niz' do
8
+ assert_equal 'B', Srbovanje.abeceda[1]
9
+ end
10
+
11
+ it 'ima 30 slova' do
12
+ assert_equal 30, Srbovanje.abeceda.size
13
+ end
14
+ end
15
+
16
+ describe 'latinica_map' do
17
+ it 'vraca potpunu mapu latinice' do
18
+ assert_equal 'Š', Srbovanje.latinica_full_map['Ш']
19
+ end
20
+ end
21
+
22
+ describe 'latinica_ascii_map' do
23
+ it 'vraca mapu ascii latinice' do
24
+ assert_equal 'dj', Srbovanje.latinica_ascii_map['ђ']
25
+ end
26
+ end
27
+ end
28
+
@@ -1,65 +1,18 @@
1
- # -*- encoding: utf-8 -*-
2
- $: << "."
1
+ # encoding: utf-8
3
2
 
4
- require File.dirname(__FILE__) + '/test_helper'
3
+ require 'test_helper'
5
4
 
6
- class TestStringExt < Test::Unit::TestCase
7
- def test_recode_sr_latin
8
- # don't change argument
9
- str = "ЊЕГОШ"
10
- assert_equal("NJEGOŠ", str.recode_sr_latin)
11
- assert_equal("ЊЕГОШ", str)
12
-
13
- # plain
14
- assert_equal("NJEGOŠ", "ЊЕГОШ".recode_sr_latin)
15
- assert_equal("Šaban Šaulić", "Шабан Шаулић".recode_sr_latin)
16
- assert_equal("elektrodistribucija", "електродистрибуција".recode_sr_latin)
17
- assert_equal("Đurđevak", "Ђурђевак".recode_sr_latin)
18
-
19
- # non_convertive_characters
20
- assert_equal("Latinica", "Latinica".recode_sr_latin)
21
- assert_equal('[]2#}(,.);2@$"', '[]2#}(,.);2@$"'.recode_sr_latin)
5
+ describe String do
6
+ it 'preslovnjava u latinicu' do
7
+ assert_equal "NJEGOŠ", "ЊЕГОШ".na_latinici
8
+ assert_equal "Šaban Šaulić", "Шабан Шаулић".na_latinici
9
+ assert_equal "elektrodistribucija", "електродистрибуција".na_latinici
10
+ assert_equal "Đurđevak", "Ђурђевак".na_latinici
11
+ assert_equal "Latinica", "Latinica".na_latinici
12
+ assert_equal '[]2#}(,.);2@$"', '[]2#}(,.);2@$"'.na_latinici
22
13
  end
23
14
 
24
- def test_recode_sr_latin!
25
- str = "ноћ"
26
- assert_equal("noć", str.recode_sr_latin!)
27
- assert_equal("noć", str)
28
- end
29
-
30
- def test_recode_sr_ascii_latin
31
- str = "Железница Србије"
32
- assert_equal("Zeleznica Srbije", str.recode_sr_ascii_latin)
33
- assert_equal("Железница Србије", str)
34
- end
35
-
36
- def test_recode_sr_ascii_latin!
37
- str = "ноћ"
38
- assert_equal("noc", str.recode_sr_ascii_latin!)
39
- assert_equal("noc", str)
40
- end
41
-
42
- def test_abeceda
43
- assert_equal(30, String.abeceda.size)
44
- end
45
-
46
- def test_slugify
47
- assert_equal("zeleznica-srbije", "Железница Србије".slugify)
48
- assert_equal("kako-je", "Kako je?".slugify)
49
- assert_equal("mis-zaba", "miš,žaba".slugify)
50
- assert_equal("mis-zaba", "миш, жаба".slugify)
51
- assert_equal("agencija", " aGenCIJa ".slugify)
52
- assert_equal("vamo-tamo", "vamo-tamo".slugify)
53
- assert_equal("vamo-tamo", "vamo tamo".slugify)
54
- assert_equal("pokvarenspejs", "Pokvaren Spejs".slugify(nil))
55
- assert_equal("abcdeavioni", "a b c d e avioni".slugify(''))
56
- assert_equal("-", "び諸芸や奇抜な衣装".slugify)
57
- assert_equal("-", "び諸芸や奇 抜な衣 装 び諸芸や 奇抜な衣装".slugify)
58
- assert_equal("", "び諸芸や奇抜な衣装".slugify('-', false))
59
- assert_equal("-", "び諸芸や奇抜な衣装".slugify('-', true))
60
- assert_equal("+", "び諸芸や奇抜な衣装 び諸芸や奇抜な衣装".slugify('+'))
61
- assert_equal("ako-ako", 'ako, ako'.slugify)
62
- assert_equal("ako-ako", 'ako,ako'.slugify)
63
- assert_equal("ako-ako", 'ako ako'.slugify)
15
+ it 'preslovanjava u ošišanu latinicu' do
16
+ assert_equal("Zeleznica Srbije", "Железница Србије".na_latinici(:ascii))
64
17
  end
65
18
  end
data/test/test_helper.rb CHANGED
@@ -1,5 +1,4 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require "test/unit"
4
-
5
- require File.dirname(__FILE__) + '/../lib/srbovanje'
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'srbovanje'
4
+ require 'minitest/autorun'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: srbovanje
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease: false
4
+ hash: 23
5
+ prerelease:
6
6
  segments:
7
- - 0
8
- - 2
9
7
  - 1
10
- version: 0.2.1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dejan Simic
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-05 00:00:00 +01:00
18
+ date: 2013-02-25 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -29,13 +29,15 @@ extra_rdoc_files: []
29
29
 
30
30
  files:
31
31
  - Rakefile
32
+ - lib/srbovanje/srbovanje.rb
32
33
  - lib/srbovanje/string_ext.rb
33
34
  - lib/srbovanje.rb
35
+ - test/srbovanje_test.rb
34
36
  - test/string_ext_test.rb
35
37
  - test/test_helper.rb
36
38
  - README.md
37
39
  has_rdoc: true
38
- homepage: http://github.com/dejan/srbovanje
40
+ homepage: https://github.com/dejan/srbovanje
39
41
  licenses: []
40
42
 
41
43
  post_install_message:
@@ -64,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
66
  requirements: []
65
67
 
66
68
  rubyforge_project:
67
- rubygems_version: 1.3.7
69
+ rubygems_version: 1.6.2
68
70
  signing_key:
69
71
  specification_version: 3
70
72
  summary: "Ruby gem za transliteraciju \xC4\x87irilice na latinicu i tzv. ASCII latinicu."