string_case_pl 0.0.6 → 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/Rakefile CHANGED
@@ -19,7 +19,8 @@ end
19
19
 
20
20
  desc "Run tests"
21
21
  task :test do
22
- sh "ruby test/*"
22
+ sh "ruby test/test_character_case_change.rb"
23
+ sh "ruby test/test_comparison.rb"
23
24
  end
24
25
 
25
26
  desc "Clean"
@@ -14,11 +14,11 @@ class String
14
14
  PL_WINDOWS_1250_LOWER = PL_UTF_8_LOWER.encode(WINDOWS_CP1250_ENCODING)
15
15
  PL_WINDOWS_1250_UPPER = PL_UTF_8_UPPER.encode(WINDOWS_CP1250_ENCODING)
16
16
 
17
- alias old_downcase_wo_pl downcase!
18
- alias old_upcase_wo_pl upcase!
17
+ alias old_downcase_wo_pl downcase
18
+ alias old_upcase_wo_pl upcase
19
19
  alias old_capitalize_wo_pl capitalize
20
20
 
21
- def downcase!
21
+ def downcase
22
22
  case self.encoding.name
23
23
  when UTF_8_ENCODING
24
24
  self.tr!(PL_UTF_8_UPPER,PL_UTF_8_LOWER)
@@ -30,13 +30,7 @@ class String
30
30
  self.old_downcase_wo_pl
31
31
  end
32
32
 
33
- def downcase
34
- str = self.dup
35
- str.downcase!
36
- str
37
- end
38
-
39
- def upcase!
33
+ def upcase
40
34
  case self.encoding.name
41
35
  when UTF_8_ENCODING
42
36
  self.tr!(PL_UTF_8_LOWER, PL_UTF_8_UPPER)
@@ -48,12 +42,6 @@ class String
48
42
  self.old_upcase_wo_pl
49
43
  end
50
44
 
51
- def upcase
52
- str = self.dup
53
- str.upcase!
54
- str
55
- end
56
-
57
45
  def capitalize
58
46
  s = self.dup
59
47
  s[0] = s[0].upcase
@@ -68,4 +56,3 @@ class String
68
56
  end
69
57
 
70
58
  end
71
-
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'string_case_pl'
3
+
4
+ class String
5
+ PL_LETTER_ORDER = {}
6
+
7
+ ("AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ" +
8
+ "aąbcćdeęfghijklłmnńoópqrsśtuvwxyzźż").force_encoding(UTF_8_ENCODING).
9
+ each_char.with_index do |char,index|
10
+ PL_LETTER_ORDER[char] = index
11
+ end
12
+
13
+ alias old_cmp_wo_pl <=>
14
+
15
+ def <=>(other)
16
+ if !other.is_a?(String)
17
+ old_cmp_wo_pl(other)
18
+ elsif self.encoding.name != UTF_8_ENCODING ||
19
+ other.encoding.name != UTF_8_ENCODING
20
+ case self.encoding.name
21
+ when UTF_8_ENCODING
22
+ case other.encoding.name
23
+ when ISO_8859_2_ENCODING,WINDOWS_CP1250_ENCODING
24
+ self.<=>(other.encode(UTF_8_ENCODING))
25
+ else
26
+ old_cmp_wo_pl(other)
27
+ end
28
+ when ISO_8859_2_ENCODING
29
+ case other.encoding.name
30
+ when UTF_8_ENCODING
31
+ self.encode(UTF_8_ENCODING) <=> other
32
+ when ISO_8859_2_ENCODING,WINDOWS_CP1250_ENCODING
33
+ self.encode(UTF_8_ENCODING) <=> other.encode(UTF_8_ENCODING)
34
+ else
35
+ old_cmp_wo_pl(other)
36
+ end
37
+ when WINDOWS_CP1250_ENCODING
38
+ case other.encoding.name
39
+ when UTF_8_ENCODING
40
+ self.encode(UTF_8_ENCODING) <=> other
41
+ when ISO_8859_2_ENCODING,WINDOWS_CP1250_ENCODING
42
+ self.encode(UTF_8_ENCODING) <=> other.encode(UTF_8_ENCODING)
43
+ else
44
+ old_cmp_wo_pl(other)
45
+ end
46
+ else
47
+ old_cmp_wo_pl(other)
48
+ end
49
+ else
50
+ self.each_char.with_index do |char,index|
51
+ position1 = PL_LETTER_ORDER[char]
52
+ position2 = PL_LETTER_ORDER[other[index]]
53
+ if position1 && position2
54
+ if position1 != position2
55
+ return (position1 < position2 ? -1 : 1)
56
+ end
57
+ else
58
+ if other[index]
59
+ if char.old_cmp_wo_pl(other[index]) != 0
60
+ return char.old_cmp_wo_pl(other[index])
61
+ end
62
+ else
63
+ return 1
64
+ end
65
+ end
66
+ end
67
+ # all equal, compare length
68
+ if self.length == other.length
69
+ return 0
70
+ elsif self.length < other.length
71
+ return -1
72
+ else
73
+ return 1
74
+ end
75
+ end
76
+ end
77
+ end
@@ -1,15 +1,14 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "string_case_pl"
3
- s.version = "0.0.6"
4
- s.required_ruby_version = '>= 1.9.2'
5
- s.date = "2011-08-02"
3
+ s.version = "0.1.0"
4
+ s.date = "2011-01-11"
6
5
  s.summary = "Additional support for Polish encodings in Ruby 1.9"
7
6
  s.email = "apohllo@o2.pl"
8
- s.homepage = "http://apohllo.pl/blog"
9
- s.description = "Polish extensions for Ruby 1.9 String #upcase(!), #downcase(!) and #capitalize(!) supporting polish diacritics"
7
+ s.homepage = "https://github.com/apohllo/string_pl"
8
+ s.description = "Polish extensions for Ruby 1.9 String #upcase, #downcase and #capitalize supporting polish diacritics"
10
9
  s.require_path = "lib"
11
10
  s.has_rdoc = false
12
- s.authors = ['Aleksander Pohl']
11
+ s.authors = ['Aleksander Pohl',"hosiawak","sebcioz"]
13
12
  s.files = ["Rakefile", "string_case_pl.gemspec", 'lib/string_case_pl.rb'] +
14
13
  Dir.glob("lib/**/*")
15
14
  s.test_files = Dir.glob("{test}/**/*")
@@ -38,112 +38,23 @@ class TestCharacterCaseChange < Test::Unit::TestCase
38
38
  def test_windows_1250_upcase
39
39
  assert_equal(@windows_upper, @windows_lower.upcase)
40
40
  end
41
-
41
+
42
42
  def test_utf_8_capitalize
43
43
  assert_equal(@utf_capitalized, @utf_lower.capitalize)
44
44
  end
45
-
45
+
46
46
  def test_windows_1250_capitalize
47
47
  assert_equal(@windows_capitalized, @windows_lower.capitalize)
48
48
  end
49
-
49
+
50
50
  def test_iso_8859_2_capitalize
51
51
  assert_equal(@iso_capitalized, @iso_lower.capitalize)
52
52
  end
53
-
54
- def test_preserve_utf_lower_case
55
- original = @utf_lower.dup
56
- @utf_lower.upcase
57
- assert_equal(original,@utf_lower)
58
- end
59
-
60
- def test_preserve_utf_upper_case
61
- original = @utf_upper.dup
62
- @utf_upper.downcase
63
- assert_equal(original,@utf_upper)
64
- end
65
-
66
- def test_preserve_iso_lower_case
67
- original = @iso_lower.dup
68
- @iso_lower.upcase
69
- assert_equal(original,@iso_lower)
70
- end
71
-
72
- def test_preserve_iso_upper_case
73
- original = @iso_upper.dup
74
- @iso_upper.downcase
75
- assert_equal(original,@iso_upper)
76
- end
77
-
78
- def test_preserve_windows_lower_case
79
- original = @windows_lower.dup
80
- @windows_lower.upcase
81
- assert_equal(original,@windows_lower)
82
- end
83
-
84
- def test_preserve_windows_upper_case
85
- original = @windows_upper.dup
86
- @windows_upper.downcase
87
- assert_equal(original,@windows_upper)
88
- end
89
-
90
- def test_same_case
91
- copy = @utf_lower.dup
92
- assert_equal(@utf_lower,copy.downcase)
93
- end
94
-
95
- def test_same_case_bang
96
- copy = @utf_lower.dup
97
- assert_equal(nil,copy.downcase!)
98
- assert_equal(copy,@utf_lower)
99
- end
100
-
101
- def test_change_utf_lower_case
102
- copy = @utf_lower.dup
103
- copy.upcase!
104
- assert_equal(copy,@utf_upper)
105
- end
106
-
107
- def test_change_utf_upper_case
108
- copy = @utf_upper.dup
109
- copy.downcase!
110
- assert_equal(copy,@utf_lower)
111
- end
112
-
113
- def test_change_iso_lower_case
114
- copy = @iso_lower.dup
115
- copy.upcase!
116
- assert_equal(copy,@iso_upper)
117
- end
118
-
119
- def test_change_iso_upper_case
120
- copy = @iso_upper.dup
121
- copy.downcase!
122
- assert_equal(copy,@iso_lower)
123
- end
124
-
125
- def test_change_windows_lower_case
126
- copy = @windows_lower.dup
127
- copy.upcase!
128
- assert_equal(copy,@windows_upper)
129
- end
130
-
131
- def test_change_windows_upper_case
132
- copy = @windows_upper.dup
133
- copy.downcase!
134
- assert_equal(copy,@windows_lower)
135
- end
136
-
137
- def test_capitalize
138
- original = @utf_lower.dup
139
- assert_equal(original.capitalize, @utf_capitalized)
140
- assert_equal(original, @utf_lower)
141
- end
142
-
53
+
143
54
  def test_capitalize!
144
- copy = @utf_lower.dup
145
- assert_equal(copy.capitalize!, @utf_capitalized)
146
- assert_equal(copy.capitalize!, nil)
55
+ d = @utf_lower.dup
56
+ assert_equal(d.capitalize!, @utf_capitalized)
57
+ assert_equal(d.capitalize!, nil)
147
58
  end
148
-
59
+
149
60
  end
@@ -0,0 +1,107 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
3
+
4
+ class TestCharacterCaseChange < Test::Unit::TestCase
5
+
6
+ def setup
7
+ end
8
+
9
+ def test_each_small_letter_comparison
10
+ assert_equal("a" <=> "b",-1)
11
+ assert_equal("a" <=> "ą",-1)
12
+ assert_equal("ą" <=> "a",1)
13
+ assert_equal("ą" <=> "ą",0)
14
+ assert_equal("b" <=> "ą",1)
15
+ assert_equal("b" <=> "ć",-1)
16
+ assert_equal("ć" <=> "ć",0)
17
+ assert_equal("ć" <=> "e",-1)
18
+ assert_equal("ć" <=> "b",1)
19
+ assert_equal("ę" <=> "e",1)
20
+ assert_equal("ę" <=> "f",-1)
21
+ assert_equal("ł" <=> "l",1)
22
+ assert_equal("ł" <=> "m",-1)
23
+ assert_equal("ń" <=> "n",1)
24
+ assert_equal("ń" <=> "o",-1)
25
+ assert_equal("ó" <=> "o",1)
26
+ assert_equal("ó" <=> "p",-1)
27
+ assert_equal("ś" <=> "s",1)
28
+ assert_equal("ś" <=> "t",-1)
29
+ assert_equal("ź" <=> "z",1)
30
+ assert_equal("ź" <=> "ż",-1)
31
+ assert_equal("ż" <=> "ź",1)
32
+ end
33
+
34
+ def test_each_big_letter_comparison
35
+ assert_equal("A" <=> "B",-1)
36
+ assert_equal("A" <=> "Ą",-1)
37
+ assert_equal("Ą" <=> "A",1)
38
+ assert_equal("Ą" <=> "Ą",0)
39
+ assert_equal("B" <=> "Ą",1)
40
+ assert_equal("B" <=> "Ć",-1)
41
+ assert_equal("Ć" <=> "Ć",0)
42
+ assert_equal("Ć" <=> "E",-1)
43
+ assert_equal("Ć" <=> "B",1)
44
+ assert_equal("Ę" <=> "E",1)
45
+ assert_equal("Ę" <=> "F",-1)
46
+ assert_equal("Ł" <=> "L",1)
47
+ assert_equal("Ł" <=> "M",-1)
48
+ assert_equal("Ń" <=> "N",1)
49
+ assert_equal("Ń" <=> "O",-1)
50
+ assert_equal("Ó" <=> "O",1)
51
+ assert_equal("Ó" <=> "P",-1)
52
+ assert_equal("Ś" <=> "S",1)
53
+ assert_equal("Ś" <=> "T",-1)
54
+ assert_equal("Ź" <=> "Z",1)
55
+ assert_equal("Ź" <=> "Ż",-1)
56
+ assert_equal("Ż" <=> "Ź",1)
57
+ end
58
+
59
+ def test_non_string_comparison
60
+ assert_equal("a" <=> nil,nil)
61
+ assert_equal("ą" <=> nil,nil)
62
+ assert_equal(nil <=> "a",nil)
63
+ assert_equal(nil <=> "ą",nil)
64
+ end
65
+
66
+ def test_cross_encoding_comparison
67
+ assert_equal("a" <=> "b".encode("iso-8859-2"),-1)
68
+ assert_equal("a".encode("iso-8859-2") <=> "ą",-1)
69
+ assert_equal("a" <=> "ą".encode("iso-8859-2"),-1)
70
+ assert_equal("ą".encode("iso-8859-2") <=> "a".encode("iso-8859-2"),1)
71
+ assert_equal("a".encode("iso-8859-2") <=> "ą".encode("iso-8859-2"),-1)
72
+ assert_equal("ą".encode("iso-8859-2") <=> "ą".encode("iso-8859-2"),0)
73
+ assert_equal("b".encode("Windows-1250") <=> "ą".encode("iso-8859-2"),1)
74
+ assert_equal("b".encode("iso-8859-2") <=> "ć".encode("Windows-1250"),-1)
75
+ assert_equal("b".encode("iso-8859-2") <=> "b".encode("Windows-1250"),0)
76
+ assert_equal("ć".encode("Windows-1250") <=> "ć".encode("Windows-1250"),0)
77
+ assert_equal("ć".encode("Windows-1250") <=> "e".encode("Windows-1250"),-1)
78
+ assert_equal("ć" <=> "b".encode("Windows-1250"),1)
79
+ assert_equal("ę".encode("Windows-1250") <=> "e",1)
80
+ assert_equal("ę" <=> "ę".encode("Windows-1250"),0)
81
+ assert_equal("ę".encode("Windows-1250") <=> "ę",0)
82
+ end
83
+
84
+ def test_multiletter_comparison
85
+ assert_equal("" <=> "ał",-1)
86
+ assert_equal("ał" <=> "",1)
87
+ assert_equal("a" <=> "ał",-1)
88
+ assert_equal("ał" <=> "a",1)
89
+ assert_equal("ał" <=> "ał",0)
90
+ assert_equal("ó" <=> "ów",-1)
91
+ assert_equal("ów" <=> "ó",1)
92
+ end
93
+
94
+ def test_sort
95
+ assert_equal(
96
+ ["ała","ama","ala"].sort,
97
+ ["ala","ała","ama"])
98
+ end
99
+
100
+ def test_case_comparison
101
+ assert_equal("Ą" <=> "ą",-1)
102
+ assert_equal("ą" <=> "Ą",1)
103
+ assert_equal("a" <=> "Ą",1)
104
+ assert_equal("Ą" <=> "a",-1)
105
+ end
106
+
107
+ end
data/test/test_helper.rb CHANGED
@@ -2,3 +2,4 @@ $:.unshift(File.dirname(__FILE__) + '/../lib')
2
2
 
3
3
  require 'test/unit'
4
4
  require 'string_case_pl'
5
+ require 'string_cmp_pl'
metadata CHANGED
@@ -2,18 +2,21 @@
2
2
  name: string_case_pl
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.6
5
+ version: 0.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Aleksander Pohl
9
+ - hosiawak
10
+ - sebcioz
9
11
  autorequire:
10
12
  bindir: bin
11
13
  cert_chain: []
12
14
 
13
- date: 2011-08-02 00:00:00 Z
15
+ date: 2011-01-11 00:00:00 +01:00
16
+ default_executable:
14
17
  dependencies: []
15
18
 
16
- description: "Polish extensions for Ruby 1.9 String #upcase(!), #downcase(!) and #capitalize(!) supporting polish diacritics"
19
+ description: "Polish extensions for Ruby 1.9 String #upcase, #downcase and #capitalize supporting polish diacritics"
17
20
  email: apohllo@o2.pl
18
21
  executables: []
19
22
 
@@ -25,9 +28,12 @@ files:
25
28
  - Rakefile
26
29
  - string_case_pl.gemspec
27
30
  - lib/string_case_pl.rb
31
+ - lib/string_cmp_pl.rb
32
+ - test/test_comparison.rb
28
33
  - test/test_character_case_change.rb
29
34
  - test/test_helper.rb
30
- homepage: http://apohllo.pl/blog
35
+ has_rdoc: true
36
+ homepage: https://github.com/apohllo/string_pl
31
37
  licenses: []
32
38
 
33
39
  post_install_message:
@@ -40,7 +46,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
40
46
  requirements:
41
47
  - - ">="
42
48
  - !ruby/object:Gem::Version
43
- version: 1.9.2
49
+ version: "0"
44
50
  required_rubygems_version: !ruby/object:Gem::Requirement
45
51
  none: false
46
52
  requirements:
@@ -50,10 +56,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
50
56
  requirements: []
51
57
 
52
58
  rubyforge_project:
53
- rubygems_version: 1.8.5
59
+ rubygems_version: 1.5.2
54
60
  signing_key:
55
61
  specification_version: 3
56
62
  summary: Additional support for Polish encodings in Ruby 1.9
57
63
  test_files:
64
+ - test/test_comparison.rb
58
65
  - test/test_character_case_change.rb
59
66
  - test/test_helper.rb