diacritics 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +13 -0
- data/Guardfile +13 -0
- data/LICENSE.txt +22 -0
- data/README.md +50 -0
- data/Rakefile +5 -0
- data/diacritics.gemspec +22 -0
- data/lib/diacritics/alphabet.rb +137 -0
- data/lib/diacritics/cases.rb +26 -0
- data/lib/diacritics/string.rb +21 -0
- data/lib/diacritics/version.rb +3 -0
- data/lib/diacritics.rb +7 -0
- data/spec/diacritics/alphabet_spec.rb +1 -0
- data/spec/diacritics/cases_spec.rb +254 -0
- data/spec/diacritics/string_spec.rb +35 -0
- data/spec/spec_helper.rb +7 -0
- metadata +97 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 900204c7d54154241404e0e7a53e0dd0e2a27f2a
|
4
|
+
data.tar.gz: b1bf104411b8ceae95c445a85f5a8c589307ad4d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7fb9ad4389ca32ccec7c55d6eec830161e32bab8264718d3a6494dfc1adddec387d335031c0600a108468a99a5e9fd70c2bf0bed368e074dd458470b2de9955a
|
7
|
+
data.tar.gz: 48d93db86a66c5dc7622c67493ece4462f05f9c657f3ce10e590f8a737aa5931aa9b9ed5d9c188885c9f65dbf3220c6afc34ebeaaeff651f09b80ece3baf493b
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
diacritics
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in diacritics.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
group :development, :test do
|
7
|
+
gem 'coveralls', require: false
|
8
|
+
gem 'rspec'
|
9
|
+
gem 'reek'
|
10
|
+
gem 'guard'
|
11
|
+
gem 'guard-bundler'
|
12
|
+
gem 'guard-rspec'
|
13
|
+
end
|
data/Guardfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
guard 'bundler' do
|
2
|
+
watch('Gemfile')
|
3
|
+
watch(/^.+\.gemspec/)
|
4
|
+
end
|
5
|
+
|
6
|
+
guard :rspec do
|
7
|
+
watch(%r{^spec/.+_spec\.rb$})
|
8
|
+
watch(%r{^lib/(.+)\.rb$}) do |array|
|
9
|
+
name = array.last
|
10
|
+
"spec/#{name}_spec.rb"
|
11
|
+
end
|
12
|
+
watch('spec/spec_helper.rb') { "spec" }
|
13
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Fractal Soft
|
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,50 @@
|
|
1
|
+
# Diacritics [](http://badge.fury.io/rb/diacritics) [](https://travis-ci.org/fractalsoft/diacritics) [](https://gemnasium.com/fractalsoft/diacritics) [](https://coveralls.io/r/fractalsoft/diacritics)
|
2
|
+
[](https://coderwall.com/torrocus)
|
3
|
+
|
4
|
+
Diacritics is a gem which support downcase, upcase and permanent link with diacritical characters.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
gem 'diacritics'
|
11
|
+
|
12
|
+
And then execute:
|
13
|
+
|
14
|
+
$ bundle
|
15
|
+
|
16
|
+
Or install it yourself as:
|
17
|
+
|
18
|
+
$ gem install diacritics
|
19
|
+
|
20
|
+
## Usage
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
Diacritics::downcase(text)
|
24
|
+
Diacritics::upcase(text)
|
25
|
+
Diacritics::permanent(text)
|
26
|
+
```
|
27
|
+
|
28
|
+
You can include methods into String class:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
class String
|
32
|
+
include Diacritics::String
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
and use
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
string.diacritics_downcase
|
40
|
+
string.diacritics_upcase
|
41
|
+
string.permanent_link
|
42
|
+
```
|
43
|
+
|
44
|
+
## Contributing
|
45
|
+
|
46
|
+
1. Fork it
|
47
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
48
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
49
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
50
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/diacritics.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'diacritics/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "diacritics"
|
8
|
+
spec.version = Diacritics::VERSION
|
9
|
+
spec.authors = ["Aleksander Malaszkiewicz"]
|
10
|
+
spec.email = ["alek@fractalsoft.org"]
|
11
|
+
spec.summary = %q{Support diacritics}
|
12
|
+
spec.homepage = ""
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.files = `git ls-files`.split($/)
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Diacritics
|
3
|
+
private
|
4
|
+
# Characters from many alphabets
|
5
|
+
class Alphabet
|
6
|
+
attr_reader :regexp, :hash
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@downcase, @upcase, @permanent = [], [], []
|
10
|
+
prepare_alphabet
|
11
|
+
@hash, @regexp = prepare_hash, prepare_regexp
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def prepare_alphabet
|
16
|
+
data.each_pair do |language, hash|
|
17
|
+
@downcase += hash[:downcase]
|
18
|
+
@upcase += hash[:upcase]
|
19
|
+
@permanent += hash[:permanent]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def prepare_hash
|
24
|
+
klass = Diacritics::Alphabet
|
25
|
+
hash = klass.hashed(@downcase, @upcase)
|
26
|
+
one = klass.hashed(@downcase, @permanent)
|
27
|
+
two = klass.hashed(@upcase, @permanent)
|
28
|
+
{
|
29
|
+
downcase: hash.invert,
|
30
|
+
upcase: hash,
|
31
|
+
permanent: one.merge(two),
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
def prepare_regexp
|
36
|
+
downcase, upcase = @upcase.join, @downcase.join
|
37
|
+
permanent = (@downcase + @upcase).uniq.join
|
38
|
+
{
|
39
|
+
downcase: /[#{downcase}]/,
|
40
|
+
upcase: /[#{upcase}]/,
|
41
|
+
permanent: /[#{permanent}]/,
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
# Creates a hash from two arrays
|
46
|
+
#
|
47
|
+
# ["a", "b"], ["A", "B"] #=> {"a" => "A", "b" => "B"}
|
48
|
+
def self.hashed(one, two)
|
49
|
+
hash = {}
|
50
|
+
[one, two].transpose.each { |key, value| hash[key] = value }
|
51
|
+
hash
|
52
|
+
end
|
53
|
+
|
54
|
+
def data
|
55
|
+
{
|
56
|
+
en: { # English
|
57
|
+
downcase: [' ', '?', '.', ','],
|
58
|
+
upcase: [' ', '?', '.', ','],
|
59
|
+
permanent: ['-', '', '', ''],
|
60
|
+
},
|
61
|
+
de: { # German
|
62
|
+
downcase: %w[ä ö ü ß],
|
63
|
+
upcase: %w[Ä Ö Ü ẞ],
|
64
|
+
permanent: %w[ae oe ue ss]
|
65
|
+
},
|
66
|
+
pl: { # Polish
|
67
|
+
downcase: %w[ą ć ę ł ń ó ś ż ź],
|
68
|
+
upcase: %w[Ą Ć Ę Ł Ń Ó Ś Ż Ź],
|
69
|
+
permanent: %w[a c e l n o s z z]
|
70
|
+
},
|
71
|
+
cs: { # Czech [Ď, Ě, Ň, Ť, Ů, Ú, Û]
|
72
|
+
downcase: %w[á č í ř š ý ž],
|
73
|
+
upcase: %w[Á Č Í Ř Š Ý Ž],
|
74
|
+
permanent: %w[a c i r s y z]
|
75
|
+
},
|
76
|
+
fr: { # French [Œ, Ÿ, Î, Ï]
|
77
|
+
downcase: %w[à é è ê ô],
|
78
|
+
upcase: %w[À É È Ê Ô],
|
79
|
+
permanent: %w[a e e e o]
|
80
|
+
},
|
81
|
+
it: { # Italian
|
82
|
+
downcase: %w[ì ù ò],
|
83
|
+
upcase: %w[Ì Ù Ò],
|
84
|
+
permanent: %w[i u o]
|
85
|
+
},
|
86
|
+
eo: { # Esperanto
|
87
|
+
downcase: %w[ĉ ĝ ĥ ĵ ŝ ŭ],
|
88
|
+
upcase: %w[Ĉ Ĝ Ĥ Ĵ Ŝ Ŭ],
|
89
|
+
permanent: %w[c g h j s u]
|
90
|
+
},
|
91
|
+
is: { # Iceland
|
92
|
+
downcase: %w[ð þ],
|
93
|
+
upcase: %w[Ð Þ],
|
94
|
+
permanent: %w[d p]
|
95
|
+
},
|
96
|
+
pt: { # Portugal [Â]
|
97
|
+
downcase: %w[ã ç],
|
98
|
+
upcase: %w[Ã Ç],
|
99
|
+
permanent: %w[a c]
|
100
|
+
},
|
101
|
+
sp: { # Spanish
|
102
|
+
downcase: ['¿'],
|
103
|
+
upcase: ['¿'],
|
104
|
+
permanent: ['']
|
105
|
+
},
|
106
|
+
hu: { # Hungarian
|
107
|
+
downcase: %w[ő],
|
108
|
+
upcase: %w[Ő],
|
109
|
+
permanent: %w[oe]
|
110
|
+
},
|
111
|
+
nn: { # Norwegian
|
112
|
+
downcase: %w[æ å],
|
113
|
+
upcase: %w[Æ Å],
|
114
|
+
permanent: %w[ae a]
|
115
|
+
},
|
116
|
+
ru: { # Russian [Щ, Ъ, Э]
|
117
|
+
downcase: %w[
|
118
|
+
а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш ы ь ю я
|
119
|
+
],
|
120
|
+
upcase: %w[
|
121
|
+
А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Ы Ь Ю Я
|
122
|
+
],
|
123
|
+
permanent: %w[
|
124
|
+
а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш ы ь ю я
|
125
|
+
]
|
126
|
+
},
|
127
|
+
gr: { # Greek [Β, Μ, Χ, Ω, Ή, Ύ, Ώ, ΐ, ΰ, Ϊ, Ϋ]
|
128
|
+
downcase: %w[α ά γ δ ε έ ζ η θ ι ί κ λ μ ν ξ ο ό π ρ σ τ υ φ ψ],
|
129
|
+
upcase: %w[Α Ά Γ Δ Ε Έ Ζ Η Θ Ι Ί Κ Λ Μ Ν Ξ Ο Ό Π Ρ Σ Τ Υ Φ Ψ],
|
130
|
+
permanent: %w[
|
131
|
+
a a g d e e z e th i i k l m n x o o p r s t y ph ps
|
132
|
+
]
|
133
|
+
}
|
134
|
+
}
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Diacritics
|
3
|
+
# Downcase or upcase with diacritics support
|
4
|
+
class Cases
|
5
|
+
def self.instance
|
6
|
+
@instance ||= new
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@alphabet = Diacritics::Alphabet.new
|
11
|
+
@hash, @regexp = @alphabet.hash, @alphabet.regexp
|
12
|
+
end
|
13
|
+
|
14
|
+
def downcase(text)
|
15
|
+
text.downcase.gsub @regexp[:downcase], @hash[:downcase]
|
16
|
+
end
|
17
|
+
|
18
|
+
def upcase(text)
|
19
|
+
text.upcase.gsub @regexp[:upcase], @hash[:upcase]
|
20
|
+
end
|
21
|
+
|
22
|
+
def permanent(text)
|
23
|
+
text.downcase.gsub @regexp[:permanent], @hash[:permanent]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
class String
|
3
|
+
alias_method :old_downcase, :downcase
|
4
|
+
alias_method :old_upcase, :upcase
|
5
|
+
end
|
6
|
+
|
7
|
+
module Diacritics
|
8
|
+
module String
|
9
|
+
def diacritics_downcase
|
10
|
+
Diacritics::Cases.instance.downcase self
|
11
|
+
end
|
12
|
+
|
13
|
+
def diacritics_upcase
|
14
|
+
Diacritics::Cases.instance.upcase self
|
15
|
+
end
|
16
|
+
|
17
|
+
def permanent_link
|
18
|
+
Diacritics::Cases.instance.permanent self
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/diacritics.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'spec_helper'
|
@@ -0,0 +1,254 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Diacritics::Cases do
|
5
|
+
context "#downcase, #upcase, #permanent" do
|
6
|
+
subject { Diacritics::Cases.instance }
|
7
|
+
|
8
|
+
[
|
9
|
+
{ # English
|
10
|
+
text: "Will will Will will Will's will to Will?",
|
11
|
+
lower: "will will will will will's will to will?",
|
12
|
+
upper: "WILL WILL WILL WILL WILL'S WILL TO WILL?",
|
13
|
+
permanent: "will-will-will-will-will's-will-to-will"
|
14
|
+
},
|
15
|
+
{ # German
|
16
|
+
text: "Acht alte Ameisen aßen am Abend Ananas.",
|
17
|
+
lower: "acht alte ameisen aßen am abend ananas.",
|
18
|
+
upper: "ACHT ALTE AMEISEN AẞEN AM ABEND ANANAS.",
|
19
|
+
permanent: "acht-alte-ameisen-assen-am-abend-ananas",
|
20
|
+
},
|
21
|
+
{ # German
|
22
|
+
text: "Hämmer Hämmer? Hämmer hämmer.",
|
23
|
+
lower: "hämmer hämmer? hämmer hämmer.",
|
24
|
+
upper: "HÄMMER HÄMMER? HÄMMER HÄMMER.",
|
25
|
+
permanent: "haemmer-haemmer-haemmer-haemmer",
|
26
|
+
},
|
27
|
+
{ # German
|
28
|
+
text: "Fünf Ferkel fressen frisches Futter.",
|
29
|
+
lower: "fünf ferkel fressen frisches futter.",
|
30
|
+
upper: "FÜNF FERKEL FRESSEN FRISCHES FUTTER.",
|
31
|
+
permanent: "fuenf-ferkel-fressen-frisches-futter",
|
32
|
+
},
|
33
|
+
{
|
34
|
+
text: "Ödögidöggi",
|
35
|
+
lower: "ödögidöggi",
|
36
|
+
upper: "ÖDÖGIDÖGGI",
|
37
|
+
permanent: "oedoegidoeggi",
|
38
|
+
},
|
39
|
+
{ # Polish
|
40
|
+
text: "Ćma ćmę ćmi.",
|
41
|
+
lower: "ćma ćmę ćmi.",
|
42
|
+
upper: "ĆMA ĆMĘ ĆMI.",
|
43
|
+
permanent: "cma-cme-cmi",
|
44
|
+
},
|
45
|
+
{ # Polish
|
46
|
+
text: "Żubr żuł żuchwą żurawinę.",
|
47
|
+
lower: "żubr żuł żuchwą żurawinę.",
|
48
|
+
upper: "ŻUBR ŻUŁ ŻUCHWĄ ŻURAWINĘ.",
|
49
|
+
permanent: "zubr-zul-zuchwa-zurawine",
|
50
|
+
},
|
51
|
+
{ # Polish
|
52
|
+
text: "Pchnąć w tę łódź jeża lub ośm skrzyń fig.",
|
53
|
+
lower: "pchnąć w tę łódź jeża lub ośm skrzyń fig.",
|
54
|
+
upper: "PCHNĄĆ W TĘ ŁÓDŹ JEŻA LUB OŚM SKRZYŃ FIG.",
|
55
|
+
permanent: "pchnac-w-te-lodz-jeza-lub-osm-skrzyn-fig",
|
56
|
+
},
|
57
|
+
{ # Czech
|
58
|
+
text: "Čistý s Čistou čistili činčilový čepec.",
|
59
|
+
lower: "čistý s čistou čistili činčilový čepec.",
|
60
|
+
upper: "ČISTÝ S ČISTOU ČISTILI ČINČILOVÝ ČEPEC.",
|
61
|
+
permanent: "cisty-s-cistou-cistili-cincilovy-cepec",
|
62
|
+
},
|
63
|
+
{ # Czech
|
64
|
+
text: "Řekni řeřicha.",
|
65
|
+
lower: "řekni řeřicha.",
|
66
|
+
upper: "ŘEKNI ŘEŘICHA.",
|
67
|
+
permanent: "rekni-rericha",
|
68
|
+
},
|
69
|
+
{ # Polish
|
70
|
+
text: "Zażółć gęślą jaźń",
|
71
|
+
lower: "zażółć gęślą jaźń",
|
72
|
+
upper: "ZAŻÓŁĆ GĘŚLĄ JAŹŃ",
|
73
|
+
permanent: "zazolc-gesla-jazn",
|
74
|
+
},
|
75
|
+
{
|
76
|
+
text: "À l’époque de la conquête de la Gaule par les armées",
|
77
|
+
lower: "à l’époque de la conquête de la gaule par les armées",
|
78
|
+
upper: "À L’ÉPOQUE DE LA CONQUÊTE DE LA GAULE PAR LES ARMÉES",
|
79
|
+
permanent: "a-l’epoque-de-la-conquete-de-la-gaule-par-les-armees",
|
80
|
+
},
|
81
|
+
{
|
82
|
+
text: "Zalyžařivší si lyžař potkal nezalyžařivšího si lyžaře.",
|
83
|
+
lower: "zalyžařivší si lyžař potkal nezalyžařivšího si lyžaře.",
|
84
|
+
upper: "ZALYŽAŘIVŠÍ SI LYŽAŘ POTKAL NEZALYŽAŘIVŠÍHO SI LYŽAŘE.",
|
85
|
+
permanent: "zalyzarivsi-si-lyzar-potkal-nezalyzarivsiho-si-lyzare",
|
86
|
+
},
|
87
|
+
{
|
88
|
+
text: "Náš pan kaplan v kapli plakal.",
|
89
|
+
lower: "náš pan kaplan v kapli plakal.",
|
90
|
+
upper: "NÁŠ PAN KAPLAN V KAPLI PLAKAL.",
|
91
|
+
permanent: "nas-pan-kaplan-v-kapli-plakal",
|
92
|
+
},
|
93
|
+
{
|
94
|
+
text: "¿Quién lo desenladrillará?",
|
95
|
+
lower: "¿quién lo desenladrillará?",
|
96
|
+
upper: "¿QUIÉN LO DESENLADRILLARÁ?",
|
97
|
+
permanent: "quien-lo-desenladrillara",
|
98
|
+
},
|
99
|
+
{
|
100
|
+
text: "clavó un clavito Pablito.",
|
101
|
+
lower: "clavó un clavito pablito.",
|
102
|
+
upper: "CLAVÓ UN CLAVITO PABLITO.",
|
103
|
+
permanent: "clavo-un-clavito-pablito",
|
104
|
+
},
|
105
|
+
{
|
106
|
+
text: "In Perù però perì.",
|
107
|
+
lower: "in perù però perì.",
|
108
|
+
upper: "IN PERÙ PERÒ PERÌ.",
|
109
|
+
permanent: "in-peru-pero-peri",
|
110
|
+
},
|
111
|
+
{
|
112
|
+
text: "Ĉu ŝi ĉiam ĉe ĉio ruĝiĝas?",
|
113
|
+
lower: "ĉu ŝi ĉiam ĉe ĉio ruĝiĝas?",
|
114
|
+
upper: "ĈU ŜI ĈIAM ĈE ĈIO RUĜIĜAS?",
|
115
|
+
permanent: "cu-si-ciam-ce-cio-rugigas",
|
116
|
+
},
|
117
|
+
{
|
118
|
+
text: "Eĥoŝanĝo ĉiu-ĵaŭde.",
|
119
|
+
lower: "eĥoŝanĝo ĉiu-ĵaŭde.",
|
120
|
+
upper: "EĤOŜANĜO ĈIU-ĴAŬDE.",
|
121
|
+
permanent: "ehosango-ciu-jaude",
|
122
|
+
},
|
123
|
+
{
|
124
|
+
text: "Árni á Á á á á beit (við á).",
|
125
|
+
lower: "árni á á á á á beit (við á).",
|
126
|
+
upper: "ÁRNI Á Á Á Á Á BEIT (VIÐ Á).",
|
127
|
+
permanent: "arni-a-a-a-a-a-beit-(vid-a)",
|
128
|
+
},
|
129
|
+
{
|
130
|
+
text: "Það fer að verða verra ferðaveðrið",
|
131
|
+
lower: "það fer að verða verra ferðaveðrið",
|
132
|
+
upper: "ÞAÐ FER AÐ VERÐA VERRA FERÐAVEÐRIÐ",
|
133
|
+
permanent: "pad-fer-ad-verda-verra-ferdavedrid",
|
134
|
+
},
|
135
|
+
{
|
136
|
+
text: "Четыре чёрненьких чумазеньких чертёнка",
|
137
|
+
lower: "четыре чёрненьких чумазеньких чертёнка",
|
138
|
+
upper: "ЧЕТЫРЕ ЧЁРНЕНЬКИХ ЧУМАЗЕНЬКИХ ЧЕРТЁНКА",
|
139
|
+
permanent: "четыре-чёрненьких-чумазеньких-чертёнка",
|
140
|
+
},
|
141
|
+
{
|
142
|
+
text: "чертили чёрными чернилами чертёж.",
|
143
|
+
lower: "чертили чёрными чернилами чертёж.",
|
144
|
+
upper: "ЧЕРТИЛИ ЧЁРНЫМИ ЧЕРНИЛАМИ ЧЕРТЁЖ.",
|
145
|
+
permanent: "чертили-чёрными-чернилами-чертёж",
|
146
|
+
},
|
147
|
+
{
|
148
|
+
text: "Чайные чашки в печали, скучая, бренча закричали.",
|
149
|
+
lower: "чайные чашки в печали, скучая, бренча закричали.",
|
150
|
+
upper: "ЧАЙНЫЕ ЧАШКИ В ПЕЧАЛИ, СКУЧАЯ, БРЕНЧА ЗАКРИЧАЛИ.",
|
151
|
+
permanent: "чайные-чашки-в-печали-скучая-бренча-закричали",
|
152
|
+
},
|
153
|
+
{
|
154
|
+
text: "Недопереквалифицировавшийся.",
|
155
|
+
lower: "недопереквалифицировавшийся.",
|
156
|
+
upper: "НЕДОПЕРЕКВАЛИФИЦИРОВАВШИЙСЯ.",
|
157
|
+
permanent: "недопереквалифицировавшийся",
|
158
|
+
},
|
159
|
+
{
|
160
|
+
text: "Как в капюшоне он смешон",
|
161
|
+
lower: "как в капюшоне он смешон",
|
162
|
+
upper: "КАК В КАПЮШОНЕ ОН СМЕШОН",
|
163
|
+
permanent: "как-в-капюшоне-он-смешон",
|
164
|
+
},
|
165
|
+
{
|
166
|
+
text: "Стоит гора посреди двора.",
|
167
|
+
lower: "стоит гора посреди двора.",
|
168
|
+
upper: "СТОИТ ГОРА ПОСРЕДИ ДВОРА.",
|
169
|
+
permanent: "стоит-гора-посреди-двора",
|
170
|
+
},
|
171
|
+
{
|
172
|
+
text: "Μια τίγρη με τρία τιγράκια.",
|
173
|
+
lower: "μια τίγρη με τρία τιγράκια.",
|
174
|
+
upper: "ΜΙΑ ΤΊΓΡΗ ΜΕ ΤΡΊΑ ΤΙΓΡΆΚΙΑ.",
|
175
|
+
permanent: "mia-tigre-me-tria-tigrakia",
|
176
|
+
},
|
177
|
+
{
|
178
|
+
text: "Το ξίδι του Ξέρξη ξίδιασε",
|
179
|
+
lower: "το ξίδι του ξέρξη ξίδιασε",
|
180
|
+
upper: "ΤΟ ΞΊΔΙ ΤΟΥ ΞΈΡΞΗ ΞΊΔΙΑΣΕ",
|
181
|
+
permanent: "to-xidi-toy-xerxe-xidiase",
|
182
|
+
},
|
183
|
+
{
|
184
|
+
text: "Πίτα σπανακόπιτα σπανακολαδοφραγκοσυκοπαντζαροκολοκυθόπιτα.",
|
185
|
+
lower: "πίτα σπανακόπιτα σπανακολαδοφραγκοσυκοπαντζαροκολοκυθόπιτα.",
|
186
|
+
upper: "ΠΊΤΑ ΣΠΑΝΑΚΌΠΙΤΑ ΣΠΑΝΑΚΟΛΑΔΟΦΡΑΓΚΟΣΥΚΟΠΑΝΤΖΑΡΟΚΟΛΟΚΥΘΌΠΙΤΑ.",
|
187
|
+
permanent:
|
188
|
+
"pita-spanakopita-spanakoladophragkosykopantzarokolokythopita",
|
189
|
+
},
|
190
|
+
{
|
191
|
+
text: "Κοράλι ψιλοκόραλο και ψιλοκοραλάκι.",
|
192
|
+
lower: "κοράλι ψιλοκόραλο και ψιλοκοραλάκι.",
|
193
|
+
upper: "ΚΟΡΆΛΙ ΨΙΛΟΚΌΡΑΛΟ ΚΑΙ ΨΙΛΟΚΟΡΑΛΆΚΙ.",
|
194
|
+
permanent: "korali-psilokoralo-kai-psilokoralaki",
|
195
|
+
},
|
196
|
+
{
|
197
|
+
text: "É muito socó para um socó só coçar.",
|
198
|
+
lower: "é muito socó para um socó só coçar.",
|
199
|
+
upper: "É MUITO SOCÓ PARA UM SOCÓ SÓ COÇAR.",
|
200
|
+
permanent: "e-muito-soco-para-um-soco-so-cocar",
|
201
|
+
},
|
202
|
+
{
|
203
|
+
text: "Mon père est maire, mon frère est masseur.",
|
204
|
+
lower: "mon père est maire, mon frère est masseur.",
|
205
|
+
upper: "MON PÈRE EST MAIRE, MON FRÈRE EST MASSEUR.",
|
206
|
+
permanent: "mon-pere-est-maire-mon-frere-est-masseur",
|
207
|
+
},
|
208
|
+
{
|
209
|
+
text: "Se não percebeste,",
|
210
|
+
lower: "se não percebeste,",
|
211
|
+
upper: "SE NÃO PERCEBESTE,",
|
212
|
+
permanent: "se-nao-percebeste",
|
213
|
+
},
|
214
|
+
{
|
215
|
+
text: "rôt tenta chat",
|
216
|
+
lower: "rôt tenta chat",
|
217
|
+
upper: "RÔT TENTA CHAT",
|
218
|
+
permanent: "rot-tenta-chat",
|
219
|
+
},
|
220
|
+
{
|
221
|
+
text: "Nyelvtörők",
|
222
|
+
lower: "nyelvtörők",
|
223
|
+
upper: "NYELVTÖRŐK",
|
224
|
+
permanent: "nyelvtoeroek",
|
225
|
+
},
|
226
|
+
{
|
227
|
+
text: "Ein hælv kælv låg i elva og flaut på ein sælapinne.",
|
228
|
+
lower: "ein hælv kælv låg i elva og flaut på ein sælapinne.",
|
229
|
+
upper: "EIN HÆLV KÆLV LÅG I ELVA OG FLAUT PÅ EIN SÆLAPINNE.",
|
230
|
+
permanent: "ein-haelv-kaelv-lag-i-elva-og-flaut-pa-ein-saelapinne",
|
231
|
+
},
|
232
|
+
# {
|
233
|
+
# text: "",
|
234
|
+
# lower: "",
|
235
|
+
# upper: "",
|
236
|
+
# permanent: "",
|
237
|
+
# },
|
238
|
+
].each do |item|
|
239
|
+
text, lower, upper, permanent = item.values
|
240
|
+
|
241
|
+
it "change '#{text}' to lowercase" do
|
242
|
+
subject.downcase(text).should eq(lower)
|
243
|
+
end
|
244
|
+
|
245
|
+
it "change '#{text}' to uppercase" do
|
246
|
+
subject.upcase(text).should eq(upper)
|
247
|
+
end
|
248
|
+
|
249
|
+
it "change '#{text}' to permanent" do
|
250
|
+
subject.permanent(text).should eq(permanent)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Diacritics::String do
|
5
|
+
class String
|
6
|
+
include Diacritics::String
|
7
|
+
end
|
8
|
+
|
9
|
+
context "#diacritics_downcase" do
|
10
|
+
it "downcase String with diacritics" do
|
11
|
+
string = "ŁoreM Ìpsum Ðolór. Šit Ämet"
|
12
|
+
result = "łorem ìpsum ðolór. šit ämet"
|
13
|
+
|
14
|
+
string.diacritics_downcase.should eq(result)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "#diacritics_upcase" do
|
19
|
+
it "upcase String with diacritics" do
|
20
|
+
string = "łorem ìpsum ðolÓr. šit ämet"
|
21
|
+
result = "ŁOREM ÌPSUM ÐOLÓR. ŠIT ÄMET"
|
22
|
+
|
23
|
+
string.diacritics_upcase.should eq(result)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "#permanent_link" do
|
28
|
+
it "permanent String with diacritics" do
|
29
|
+
string = "Łorem ìpsum ÐolÓr. Šit ämet"
|
30
|
+
result = "lorem-ipsum-dolor-sit-aemet"
|
31
|
+
|
32
|
+
string.permanent_link.should eq(result)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: diacritics
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aleksander Malaszkiewicz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description:
|
42
|
+
email:
|
43
|
+
- alek@fractalsoft.org
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- .rspec
|
50
|
+
- .ruby-gemset
|
51
|
+
- .ruby-version
|
52
|
+
- .travis.yml
|
53
|
+
- CHANGELOG.md
|
54
|
+
- Gemfile
|
55
|
+
- Guardfile
|
56
|
+
- LICENSE.txt
|
57
|
+
- README.md
|
58
|
+
- Rakefile
|
59
|
+
- diacritics.gemspec
|
60
|
+
- lib/diacritics.rb
|
61
|
+
- lib/diacritics/alphabet.rb
|
62
|
+
- lib/diacritics/cases.rb
|
63
|
+
- lib/diacritics/string.rb
|
64
|
+
- lib/diacritics/version.rb
|
65
|
+
- spec/diacritics/alphabet_spec.rb
|
66
|
+
- spec/diacritics/cases_spec.rb
|
67
|
+
- spec/diacritics/string_spec.rb
|
68
|
+
- spec/spec_helper.rb
|
69
|
+
homepage: ''
|
70
|
+
licenses:
|
71
|
+
- MIT
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 2.0.3
|
90
|
+
signing_key:
|
91
|
+
specification_version: 4
|
92
|
+
summary: Support diacritics
|
93
|
+
test_files:
|
94
|
+
- spec/diacritics/alphabet_spec.rb
|
95
|
+
- spec/diacritics/cases_spec.rb
|
96
|
+
- spec/diacritics/string_spec.rb
|
97
|
+
- spec/spec_helper.rb
|