polish_chars 0.0.2

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/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *~
2
+ *.swp
3
+ *.gem
4
+ *.rbc
5
+ .bundle
6
+ .config
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 snukky
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # PolishChars
2
+
3
+ Gem extends the Ruby `String` class methods, such as `#downcase` and `#upcase` by
4
+ handling Polish diacritics. It also adds `#no_pl` method.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'polish_chars'
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install polish_chars
19
+
20
+ ## Usage
21
+
22
+ require "polish\_chars"
23
+
24
+ text = "Zażółć Gęślą Jaźń"
25
+ text.downcase # => "zażółć gęślą jaźń"
26
+ text.upcase # => "ZAŻÓŁĆ GĘŚLĄ JAŹŃ"
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList['test/test*.rb']
7
+ t.verbose = true
8
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), "../lib")
4
+
5
+ require_relative "polskie_stringi"
6
+ require "polish_chars"
7
+
8
+ require "benchmark"
9
+
10
+ n = 100_000
11
+
12
+ all_chars = ('a'..'z').to_a + ('A'..'Z').to_a + String::PL_TO_ASCII.keys
13
+ sample_str = (0...n).map{ all_chars[rand(all_chars.size)] }.join
14
+
15
+ Benchmark.bm(16) do |bm|
16
+ bm.report("standard lib:") { sample_str.downcase_ascii }
17
+ bm.report("polskie_stringi:") { sample_str.downcase_ps }
18
+ bm.report("polish_chars:") { sample_str.downcase }
19
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ # code from gem 'polskie_stringi'
3
+
4
+ class ::String
5
+
6
+ def downcase_ps
7
+ pl_replace(String.polish_chars('big') + ('A'..'Z').to_a, String.polish_chars('small') + ('a'..'z').to_a)
8
+ end
9
+
10
+ def self.polish_chars(size = 'all')
11
+ small = %w[ą ę ś ć ź ż ó ł ń]
12
+ big = %w[Ą Ę Ś Ć Ź Ż Ó Ł Ń]
13
+ case size
14
+ when 'small'
15
+ small
16
+ when 'big'
17
+ big
18
+ else
19
+ small + big
20
+ end
21
+ end
22
+
23
+ protected
24
+
25
+ def pl_replace(search, replace)
26
+ self.chars.collect{|c| (id = search.index(c)) ? replace[id] : c}.join('')
27
+ end
28
+ end
@@ -0,0 +1 @@
1
+ require "polish_chars/core_ext/string"
@@ -0,0 +1,91 @@
1
+ # encoding: utf-8
2
+
3
+ class ::String
4
+
5
+ BIG_TO_SMALL_PL = {
6
+ 'Ą' => 'ą',
7
+ 'Ć' => 'ć',
8
+ 'Ę' => 'ę',
9
+ 'Ł' => 'ł',
10
+ 'Ń' => 'ń',
11
+ 'Ó' => 'ó',
12
+ 'Ś' => 'ś',
13
+ 'Ź' => 'ź',
14
+ 'Ż' => 'ż'
15
+ }
16
+
17
+ SMALL_TO_BIG_PL = BIG_TO_SMALL_PL.invert
18
+
19
+ BIG_PL_REGEXP = Regexp.new("([#{BIG_TO_SMALL_PL.keys.join}])")
20
+ SMALL_PL_REGEXP = Regexp.new("([#{SMALL_TO_BIG_PL.keys.join}])")
21
+
22
+ PL_TO_ASCII = {
23
+ 'ą' => 'a',
24
+ 'Ą' => 'A',
25
+ 'ć' => 'c',
26
+ 'Ć' => 'C',
27
+ 'ę' => 'e',
28
+ 'Ę' => 'E',
29
+ 'ł' => 'l',
30
+ 'Ł' => 'L',
31
+ 'ń' => 'n',
32
+ 'Ń' => 'N',
33
+ 'ó' => 'o',
34
+ 'Ó' => 'O',
35
+ 'ś' => 's',
36
+ 'Ś' => 'S',
37
+ 'ź' => 'z',
38
+ 'Ż' => 'Z',
39
+ 'ż' => 'z',
40
+ 'Ź' => 'Z'
41
+ }
42
+
43
+ PL_REGEXP = Regexp.new("([#{PL_TO_ASCII.keys.join}])")
44
+
45
+ alias :downcase_ascii :downcase
46
+
47
+ def downcase
48
+ self.downcase_ascii.gsub(BIG_PL_REGEXP, BIG_TO_SMALL_PL)
49
+ end
50
+
51
+ alias :downcase_ascii! :downcase!
52
+
53
+ def downcase!
54
+ replace downcase
55
+ end
56
+
57
+ alias :upcase_ascii :upcase
58
+
59
+ def upcase
60
+ self.upcase_ascii.gsub(SMALL_PL_REGEXP, SMALL_TO_BIG_PL)
61
+ end
62
+
63
+ alias :upcase_ascii! :upcase!
64
+
65
+ def upcase!
66
+ replace upcase
67
+ end
68
+
69
+ alias :capitalize_ascii :capitalize
70
+
71
+ def capitalize
72
+ str = self.downcase
73
+ str[0] = str[0].upcase if str.size > 0
74
+ str
75
+ end
76
+
77
+ alias :capitalize_ascii! :capitalize!
78
+
79
+ def capitalize!
80
+ replace capitalize
81
+ end
82
+
83
+ def no_pl
84
+ self.gsub(PL_REGEXP, PL_TO_ASCII)
85
+ end
86
+
87
+ def no_pl!
88
+ replace no_pl
89
+ end
90
+
91
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = "polish_chars"
7
+ gem.version = "0.0.2"
8
+ gem.authors = ["snukky"]
9
+ gem.email = ["snk987@gmail.com"]
10
+ gem.description = %q{Gem extends the Ruby String class methods, such
11
+ as #downcase and #upcase by handling Polish diacritics.
12
+ It also adds #no_pl method.}
13
+ gem.summary = %q{Extension of Ruby String class by handling Polish
14
+ diacritics.}
15
+ gem.homepage = "https://github.com/snukky/polish_chars"
16
+
17
+ gem.files = `git ls-files`.split($/)
18
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
19
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
+ gem.require_paths = ["lib"]
21
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), "../lib")
4
+
5
+ require "polish_chars"
6
+ require "test/unit"
7
+
8
+ class TestPolishChars < Test::Unit::TestCase
9
+
10
+ def test_downcase
11
+ assert_equal "zażółć gęślą jaźń", "ZAŻÓŁĆ GĘŚLĄ JAŹŃ".downcase
12
+ end
13
+
14
+ def test_upcase
15
+ assert_equal "ZAŻÓŁĆ GĘŚLĄ JAŹŃ", "zażółć gęślą jaźń".upcase
16
+ end
17
+
18
+ def test_capitalize
19
+ assert_equal "Zażółć gęślą jaźń", "ZAŻÓŁĆ Gęślą jaźń".capitalize
20
+ assert_equal "Ąbć", "ĄBĆ".capitalize
21
+ end
22
+
23
+ def test_no_pl
24
+ assert_equal "ZAZOLC gesla jazn", "ZAŻÓŁĆ gęślą jaźń".no_pl
25
+ end
26
+
27
+ def test_bang_downcase
28
+ str = "ZAŻÓŁĆ GĘŚLĄ JAŹŃ"
29
+
30
+ str.downcase
31
+ assert_equal "ZAŻÓŁĆ GĘŚLĄ JAŹŃ", str
32
+
33
+ str.downcase!
34
+ assert_equal "zażółć gęślą jaźń", str
35
+ end
36
+
37
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: polish_chars
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - snukky
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-30 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: ! "Gem extends the Ruby String class methods, such \n as
15
+ #downcase and #upcase by handling Polish diacritics. \n It
16
+ also adds #no_pl method."
17
+ email:
18
+ - snk987@gmail.com
19
+ executables: []
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - .gitignore
24
+ - Gemfile
25
+ - LICENSE.txt
26
+ - README.md
27
+ - Rakefile
28
+ - bm/benchmark_polish_chars.rb
29
+ - bm/polskie_stringi.rb
30
+ - lib/polish_chars.rb
31
+ - lib/polish_chars/core_ext/string.rb
32
+ - polish_chars.gemspec
33
+ - test/test_polish_chars.rb
34
+ homepage: https://github.com/snukky/polish_chars
35
+ licenses: []
36
+ post_install_message:
37
+ rdoc_options: []
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubyforge_project:
54
+ rubygems_version: 1.8.24
55
+ signing_key:
56
+ specification_version: 3
57
+ summary: Extension of Ruby String class by handling Polish diacritics.
58
+ test_files:
59
+ - test/test_polish_chars.rb