srbovanje 0.2.1 → 1.0.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.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."