babosa 1.0.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Changelog.md +20 -0
  5. data/README.md +83 -121
  6. data/Rakefile +9 -8
  7. data/lib/babosa.rb +2 -4
  8. data/lib/babosa/identifier.rb +104 -129
  9. data/lib/babosa/transliterator/base.rb +57 -54
  10. data/lib/babosa/transliterator/bulgarian.rb +3 -2
  11. data/lib/babosa/transliterator/cyrillic.rb +5 -5
  12. data/lib/babosa/transliterator/danish.rb +3 -3
  13. data/lib/babosa/transliterator/german.rb +3 -2
  14. data/lib/babosa/transliterator/greek.rb +4 -3
  15. data/lib/babosa/transliterator/hindi.rb +138 -0
  16. data/lib/babosa/transliterator/latin.rb +5 -5
  17. data/lib/babosa/transliterator/macedonian.rb +3 -2
  18. data/lib/babosa/transliterator/norwegian.rb +3 -3
  19. data/lib/babosa/transliterator/romanian.rb +3 -2
  20. data/lib/babosa/transliterator/russian.rb +3 -2
  21. data/lib/babosa/transliterator/serbian.rb +29 -27
  22. data/lib/babosa/transliterator/spanish.rb +2 -2
  23. data/lib/babosa/transliterator/swedish.rb +3 -3
  24. data/lib/babosa/transliterator/turkish.rb +8 -0
  25. data/lib/babosa/transliterator/ukrainian.rb +5 -4
  26. data/lib/babosa/transliterator/vietnamese.rb +4 -3
  27. data/lib/babosa/version.rb +3 -1
  28. data/spec/{babosa_spec.rb → identifier_spec.rb} +18 -15
  29. data/spec/spec_helper.rb +15 -6
  30. data/spec/transliterators/base_spec.rb +5 -6
  31. data/spec/transliterators/bulgarian_spec.rb +4 -5
  32. data/spec/transliterators/danish_spec.rb +5 -6
  33. data/spec/transliterators/german_spec.rb +4 -5
  34. data/spec/transliterators/greek_spec.rb +7 -7
  35. data/spec/transliterators/hindi_spec.rb +17 -0
  36. data/spec/transliterators/latin_spec.rb +3 -4
  37. data/spec/transliterators/macedonian_spec.rb +3 -4
  38. data/spec/transliterators/norwegian_spec.rb +4 -4
  39. data/spec/transliterators/polish_spec.rb +3 -5
  40. data/spec/transliterators/romanian_spec.rb +5 -6
  41. data/spec/transliterators/russian_spec.rb +3 -4
  42. data/spec/transliterators/serbian_spec.rb +6 -7
  43. data/spec/transliterators/spanish_spec.rb +4 -5
  44. data/spec/transliterators/swedish_spec.rb +7 -7
  45. data/spec/transliterators/turkish_spec.rb +24 -0
  46. data/spec/transliterators/ukrainian_spec.rb +74 -75
  47. data/spec/transliterators/vietnamese_spec.rb +10 -10
  48. metadata +50 -41
  49. metadata.gz.sig +2 -0
  50. data/lib/babosa/utf8/active_support_proxy.rb +0 -26
  51. data/lib/babosa/utf8/dumb_proxy.rb +0 -49
  52. data/lib/babosa/utf8/java_proxy.rb +0 -22
  53. data/lib/babosa/utf8/mappings.rb +0 -193
  54. data/lib/babosa/utf8/proxy.rb +0 -125
  55. data/lib/babosa/utf8/unicode_proxy.rb +0 -23
  56. data/spec/utf8_proxy_spec.rb +0 -52
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Babosa
3
4
  module Transliterator
4
5
  class Russian < Cyrillic
@@ -16,7 +17,7 @@ module Babosa
16
17
  "ц" => "ts",
17
18
  "щ" => "sch",
18
19
  "ю" => "u"
19
- }
20
+ }.freeze
20
21
  end
21
22
  end
22
23
  end
@@ -1,34 +1,36 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Babosa
4
4
  module Transliterator
5
5
  class Serbian < Latin
6
- APPROXIMATIONS = Cyrillic.const_get(:APPROXIMATIONS).merge({
7
- "Ð" => "Dj",
8
- "Č" => "Ch",
9
- "Š" => "Sh",
10
- "č" => "ch",
11
- "đ" => "dj",
12
- "š" => "sh",
13
- "Ћ" => "C",
14
- "Ц" => "C",
15
- "Ч" => "Ch",
16
- "Ђ" => "Dj",
17
- "Џ" => "Dz",
18
- "Х" => "H",
19
- "Ј" => "J",
20
- "Љ" => "Lj",
21
- "Њ" => "Nj",
22
- "ц" => "c",
23
- "ћ" => "c",
24
- "ч" => "ch",
25
- "ђ" => "dj",
26
- "џ" => "dz",
27
- "х" => "h",
28
- "ј" => "j",
29
- "љ" => "lj",
30
- "њ" => "nj"
31
- })
6
+ APPROXIMATIONS = Cyrillic.const_get(:APPROXIMATIONS).merge(
7
+ {
8
+ "Ð" => "Dj",
9
+ "Č" => "Ch",
10
+ "Š" => "Sh",
11
+ "č" => "ch",
12
+ "đ" => "dj",
13
+ "š" => "sh",
14
+ "Ћ" => "C",
15
+ "Ц" => "C",
16
+ "Ч" => "Ch",
17
+ "Ђ" => "Dj",
18
+ "Џ" => "Dz",
19
+ "Х" => "H",
20
+ "Ј" => "J",
21
+ "Љ" => "Lj",
22
+ "Њ" => "Nj",
23
+ "ц" => "c",
24
+ "ћ" => "c",
25
+ "ч" => "ch",
26
+ "ђ" => "dj",
27
+ "џ" => "dz",
28
+ "х" => "h",
29
+ "ј" => "j",
30
+ "љ" => "lj",
31
+ "њ" => "nj"
32
+ }
33
+ )
32
34
  end
33
35
  end
34
36
  end
@@ -1,9 +1,9 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Babosa
4
4
  module Transliterator
5
5
  class Spanish < Latin
6
- APPROXIMATIONS = {"ñ" => "ni", "Ñ" => "Ni"}
6
+ APPROXIMATIONS = {"ñ" => "ni", "Ñ" => "Ni"}.freeze
7
7
  end
8
8
  end
9
9
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Babosa
3
4
  module Transliterator
4
5
  class Swedish < Latin
@@ -9,8 +10,7 @@ module Babosa
9
10
  "Å" => "Aa",
10
11
  "Ä" => "Ae",
11
12
  "Ö" => "Oe"
12
- }
13
+ }.freeze
13
14
  end
14
15
  end
15
16
  end
16
-
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Babosa
4
+ module Transliterator
5
+ class Turkish < Latin
6
+ end
7
+ end
8
+ end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Babosa
3
4
  module Transliterator
4
5
  class Ukrainian < Cyrillic
@@ -18,13 +19,13 @@ module Babosa
18
19
  "Х" => "Kh",
19
20
  "х" => "kh",
20
21
  "Ц" => "Ts",
21
- "ц" => 'ts',
22
+ "ц" => "ts",
22
23
  "Щ" => "Shch",
23
24
  "щ" => "shch",
24
25
  "ю" => "iu",
25
26
  "я" => "ia",
26
27
  "'" => ""
27
- }
28
+ }.freeze
28
29
  end
29
30
  end
30
- end
31
+ end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Babosa
3
4
  module Transliterator
4
5
  class Vietnamese < Latin
@@ -137,7 +138,7 @@ module Babosa
137
138
  "Ỹ" => "Y",
138
139
  "đ" => "d",
139
140
  "Đ" => "D"
140
- }
141
+ }.freeze
141
142
  end
142
143
  end
143
- end
144
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Babosa
2
4
  module Version
3
- STRING = '1.0.2'
5
+ STRING = "2.0.0"
4
6
  end
5
7
  end
@@ -1,8 +1,8 @@
1
- # encoding: utf-8
2
- require File.expand_path("../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Identifier do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Identifier do
6
6
  it "should respond_to :empty?" do
7
7
  expect("".to_slug).to respond_to(:empty?)
8
8
  end
@@ -10,15 +10,15 @@ describe Babosa::Identifier do
10
10
  %w[approximate_ascii clean downcase word_chars normalize to_ascii upcase with_dashes].each do |method|
11
11
  describe "##{method}" do
12
12
  it "should work with invalid UTF-8 strings" do
13
- expect {"\x93abc".to_slug.send method}.not_to raise_exception
13
+ expect { "\x93abc".to_slug.send method }.not_to raise_exception
14
14
  end
15
15
  end
16
16
  end
17
17
 
18
18
  describe "#word_chars" do
19
- it "word_chars! should leave only letters and spaces" do
20
- string = "a*$%^$@!@b$%^&*()*!c"
21
- expect(string.to_slug.word_chars!).to match(/[a-z ]*/i)
19
+ it "word_chars! should leave only letters, numbers, and spaces" do
20
+ string = "a*$%^$@!@b$%^&*()*!c 123"
21
+ expect(string.to_slug.word_chars!).to eq "abc 123"
22
22
  end
23
23
  end
24
24
 
@@ -54,9 +54,8 @@ describe Babosa::Identifier do
54
54
  end
55
55
 
56
56
  describe "#normalize" do
57
-
58
57
  it "should allow passing locale as key for :transliterate" do
59
- expect("ö".to_slug.clean.normalize(:transliterate => :german)).to eql("oe")
58
+ expect("ö".to_slug.clean.normalize(transliterate: :german)).to eql("oe")
60
59
  end
61
60
 
62
61
  it "should replace whitespace with dashes" do
@@ -102,7 +101,7 @@ describe Babosa::Identifier do
102
101
  context "with to_ascii option" do
103
102
  it "should approximate and strip non ascii" do
104
103
  ss = "カタカナ: katakana is über cool".to_slug
105
- expect(ss.normalize(:to_ascii => true)).to eql("katakana-is-uber-cool")
104
+ expect(ss.normalize(to_ascii: true)).to eql("katakana-is-uber-cool")
106
105
  end
107
106
  end
108
107
  end
@@ -139,16 +138,20 @@ describe Babosa::Identifier do
139
138
  expect("¿¿¿hello... world???".to_slug.to_ruby_method).to eql("hello_world?")
140
139
  expect("カタカナ: katakana is über cool".to_slug.to_ruby_method).to eql("katakana_is_uber_cool")
141
140
  expect("カタカナ: katakana is über cool!".to_slug.to_ruby_method).to eql("katakana_is_uber_cool!")
142
- expect("カタカナ: katakana is über cool".to_slug.to_ruby_method(false)).to eql("katakana_is_uber_cool")
141
+ expect("カタカナ: katakana is über cool".to_slug.to_ruby_method(allow_bangs: false)).to eql("katakana_is_uber_cool")
142
+ expect("not 2 much 4 ruby".to_slug.to_ruby_method).to eql("not_2_much_4_ruby")
143
143
  end
144
144
 
145
145
  it "should optionally remove trailing punctuation" do
146
- expect("¿¿¿hello... world???".to_slug.to_ruby_method(false)).to eql("hello_world")
146
+ expect("¿¿¿hello... world???".to_slug.to_ruby_method(allow_bangs: false)).to eql("hello_world")
147
147
  end
148
148
 
149
149
  it "should raise an error when it would generate an impossible method name" do
150
- # "1".to_identifier.to_ruby_method
151
- expect {"1".to_identifier.to_ruby_method}.to raise_error(Babosa::Identifier::Error)
150
+ expect { "1".to_identifier.to_ruby_method }.to raise_error(Babosa::Identifier::Error)
151
+ end
152
+
153
+ it "should raise Babosa::Error error when the string is nil" do
154
+ expect { "".to_slug.to_ruby_method }.to raise_error(Babosa::Identifier::Error)
152
155
  end
153
156
  end
154
- end
157
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,12 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- if ENV['COV']
4
- require 'simplecov'
3
+ if ENV["COV"]
4
+ require "simplecov"
5
5
  SimpleCov.start
6
6
  end
7
7
 
8
- require 'bundler/setup'
9
- require 'babosa'
8
+ require "bundler/setup"
9
+ require "babosa"
10
10
 
11
11
  shared_examples_for "a latin transliterator" do
12
12
  let(:t) { described_class.instance }
@@ -33,4 +33,13 @@ shared_examples_for "a greek transliterator" do
33
33
  string = "Γερμανία"
34
34
  expect(t.transliterate(string)).to match(/[\x0-\x7f]/)
35
35
  end
36
- end
36
+ end
37
+
38
+ shared_examples_for "a hindi transliterator" do
39
+ let(:t) { described_class.instance }
40
+
41
+ it "should transliterate hindi characters" do
42
+ string = "आदित्य तापड़िया"
43
+ expect(t.transliterate(string)).to match(/[\x0-\x7f]/)
44
+ end
45
+ end
@@ -1,9 +1,9 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::Base do
3
+ require "spec_helper"
5
4
 
6
- let(:t) {Babosa::Transliterator::Base.instance}
5
+ describe Babosa::Transliterator::Base do
6
+ let(:t) { Babosa::Transliterator::Base.instance }
7
7
 
8
8
  it "should transliterate 'smart' quotes" do
9
9
  expect(t.transliterate("’")).to eql("'")
@@ -12,5 +12,4 @@ describe Babosa::Transliterator::Base do
12
12
  it "should transliterate non-breaking spaces" do
13
13
  expect(t.transliterate("\xc2\xa0")).to eql(" ")
14
14
  end
15
-
16
- end
15
+ end
@@ -1,8 +1,8 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::Bulgarian do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Transliterator::Bulgarian do
6
6
  let(:t) { described_class.instance }
7
7
  it_behaves_like "a cyrillic transliterator"
8
8
 
@@ -14,7 +14,6 @@ describe Babosa::Transliterator::Bulgarian do
14
14
  "Щъркел" => "Shturkel",
15
15
  "полицай" => "policai"
16
16
  }
17
- examples.each {|k, v| expect(t.transliterate(k)).to eql(v)}
17
+ examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
18
18
  end
19
-
20
19
  end
@@ -1,8 +1,8 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::Danish do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Transliterator::Danish do
6
6
  let(:t) { described_class.instance }
7
7
  it_behaves_like "a latin transliterator"
8
8
 
@@ -11,7 +11,6 @@ describe Babosa::Transliterator::Danish do
11
11
  "Ærøskøbing" => "Aeroeskoebing",
12
12
  "Årslev" => "Aarslev"
13
13
  }
14
- examples.each {|k, v| expect(t.transliterate(k)).to eql(v)}
14
+ examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
15
15
  end
16
-
17
- end
16
+ end
@@ -1,8 +1,8 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::German do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Transliterator::German do
6
6
  let(:t) { described_class.instance }
7
7
  it_behaves_like "a latin transliterator"
8
8
 
@@ -13,5 +13,4 @@ describe Babosa::Transliterator::German do
13
13
  it "should transliterate vowels with umlauts" do
14
14
  expect(t.transliterate("üöä")).to eql("ueoeae")
15
15
  end
16
-
17
- end
16
+ end
@@ -1,17 +1,17 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::Greek do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Transliterator::Greek do
6
6
  let(:t) { described_class.instance }
7
7
  it_behaves_like "a greek transliterator"
8
8
 
9
9
  it "should transliterate various characters" do
10
10
  examples = {
11
- "Γερμανία" => "Germania",
12
- "Αυστρία" => "Aystria",
13
- "Ιταλία" => "Italia"
11
+ "Γερμανία" => "Germania",
12
+ "Αυστρία" => "Aystria",
13
+ "Ιταλία" => "Italia"
14
14
  }
15
- examples.each {|k, v| expect(t.transliterate(k)).to eql(v)}
15
+ examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
16
16
  end
17
17
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe Babosa::Transliterator::Hindi do
6
+ let(:t) { described_class.instance }
7
+ it_behaves_like "a hindi transliterator"
8
+
9
+ it "should transliterate hindi characters" do
10
+ examples = {
11
+ "आदित्य" => "aadity",
12
+ "सबरीमाला करवाना पायसम" => "sbriimaalaa krvaanaa paaysm",
13
+ "सक्रांति आँख" => "skraanti aankh"
14
+ }
15
+ examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
16
+ end
17
+ end
@@ -1,9 +1,8 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::Latin do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Transliterator::Latin do
6
6
  let(:t) { described_class.instance }
7
7
  it_behaves_like "a latin transliterator"
8
-
9
8
  end
@@ -1,9 +1,8 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::Macedonian do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Transliterator::Macedonian do
6
6
  let(:t) { described_class.instance }
7
7
  it_behaves_like "a cyrillic transliterator"
8
-
9
8
  end
@@ -1,8 +1,8 @@
1
- # encoding: utf-8
2
- require File.expand_path("../../spec_helper", __FILE__)
1
+ # frozen_string_literal: true
3
2
 
4
- describe Babosa::Transliterator::Norwegian do
3
+ require "spec_helper"
5
4
 
5
+ describe Babosa::Transliterator::Norwegian do
6
6
  let(:t) { described_class.instance }
7
7
  it_behaves_like "a latin transliterator"
8
8
 
@@ -13,6 +13,6 @@ describe Babosa::Transliterator::Norwegian do
13
13
  "Åre" => "Aare",
14
14
  "Håkon" => "Haakon"
15
15
  }
16
- examples.each {|k, v| expect(t.transliterate(k)).to eql(v)}
16
+ examples.each { |k, v| expect(t.transliterate(k)).to eql(v) }
17
17
  end
18
18
  end