turkish_support 1.0.4 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 290cce063477228d7a8032087805c068b467af96
4
- data.tar.gz: 5fb69af5c2164fdbc3101da288c0beac801da65c
2
+ SHA256:
3
+ metadata.gz: bf5b94d930d37d61a0712cf5153278d446977829e4a8f6b10f95d0e237953bb3
4
+ data.tar.gz: 46bf4bd9b65029b24979315db8a5e0595665e267d9d739530ad9d77d39b2b2ec
5
5
  SHA512:
6
- metadata.gz: '018f11e35079fb843da1fa9f955b9f8dac21fa3bffc80b05a23aa9eba75447a09a4fcd2f15613218e272bca91485158084ecdc9b43a0672b975b37705d8f77e3'
7
- data.tar.gz: f2c51ae7bf25e8170b71e628b257b880a3db7d6a7a96cc001baed4db9db7ee518a493704907396dfaf250a07f74c80a42dc17b4066e33eca9a29f29a27598ec8
6
+ metadata.gz: 9b200823ace98c49c4e2c7be185771bb9bb9390ba3b6c693786a99b2caef83bbbd399a6df4af45358087016e45c39e4097f0697c4db6aca31950bdb6990f5f70
7
+ data.tar.gz: e6d100a4395f0fc6c792aa2a105a7f9b739b34b97677e25693ab46ab152fffa2f345b9ce3ba14811b20ac27ebf8d3b1fa9b9d4246531fd9ab44d02b1455bb030
@@ -5,3 +5,5 @@ Documentation:
5
5
  DotPosition:
6
6
  EnforcedStyle: leading
7
7
  Enabled: true
8
+ Metrics/BlockLength:
9
+ ExcludedMethods: ['describe', 'context']
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014-2016 Sıtkı Bağdat
1
+ Copyright (c) 2014-2017 Sıtkı Bağdat
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/turkish_support.svg)](http://badge.fury.io/rb/turkish_support)
4
4
  [![Build Status](https://travis-ci.org/sbagdat/turkish_support.svg?branch=master)](https://travis-ci.org/sbagdat/turkish_support)
5
- [![Gitter chat](https://badges.gitter.im/sbagdat/turkish_support.png)](https://gitter.im/sbagdat/turkish_support)
6
5
 
7
6
  Turkish character support for core ruby methods. This gem provides support nearly all `String` methods, such as `String#upcase`, `String#downcase`, `String#match`, `String#gsub`. It also provides support for `Array#sort`and some bonus methods like `String#titleize`.
8
7
 
@@ -11,7 +10,7 @@ Turkish character support for core ruby methods. This gem provides support nearl
11
10
  * Ruby >= 2.0.0
12
11
  * Rails >= 4.0.0
13
12
 
14
- __Notice:__ TurkishSupport uses refinements instead of monkey patching. ~~Refinements come with Ruby 2.0.0 as a new feature and also, it is an experimental feature for now. If you want to more information about refinements, you can see the doc at [http://www.ruby-doc.org/core-2.0.0/doc/syntax/refinements_rdoc.html](http://www.ruby-doc.org/core-2.0.0/doc/syntax/refinements_rdoc.html)~~ *Refinements are not an experimental feature, it is a core feature now.*
13
+ __Notice:__ TurkishSupport uses __refinements__ instead of monkey patching.
15
14
 
16
15
  * [Installation](#installation)
17
16
  * [Usage](#usage)
@@ -19,6 +18,7 @@ __Notice:__ TurkishSupport uses refinements instead of monkey patching. ~~Refine
19
18
  * [Using with ruby on rails](#using-with-ruby-on-rails)
20
19
  * [Using Core Methods](#using-core-methods)
21
20
  * [String Methods](#string-methods)
21
+ * [#<=>](#-spaceship)
22
22
  * [#[] and #[]=](#-and-)
23
23
  * [#=~](#-equal-tilda)
24
24
  * [capitalize](#capitalize-and-capitalize)
@@ -123,6 +123,15 @@ If you want to use original set of the core methods in the same scope, you can u
123
123
 
124
124
  ## String Methods
125
125
 
126
+ ### <=> (spaceship)
127
+ ```ruby
128
+ 'Cahit' <=> 'Çağla' # => -1
129
+ 'Sıtkı' <=> 'Ömer' # => 1
130
+ 'Eren' <=> 'Eren' # => 0
131
+ 'c' <=> 'ca' # => -1
132
+ ```
133
+
134
+
126
135
  ### [] and []=
127
136
 
128
137
  ```ruby
@@ -4,8 +4,7 @@ module TurkishSupport
4
4
  sort_by do |item|
5
5
  item.chars.map do |ch|
6
6
  if ALPHABET.include?(ch)
7
- # Add 65 to put special chars and numbers in correct order
8
- ALPHABET.index(ch) + 65
7
+ ASCII_ALPHABET[ch]
9
8
  else
10
9
  ch.ord
11
10
  end
@@ -7,7 +7,12 @@ module TurkishSupportHelpers
7
7
  }.freeze
8
8
 
9
9
  ALPHABET = ALPHA[:upper] + ALPHA[:lower]
10
-
10
+
11
+ ASCII_ALPHABET = ALPHABET.chars.map.with_index do |ch, i|
12
+ # Add 65 to put special chars and numbers in correct order
13
+ [ch, i + 65]
14
+ end.to_h
15
+
11
16
  META_CHARS = {
12
17
  '\w' => '[\p{Latin}\d_]',
13
18
  '\W' => '[^\p{Latin}\d_]'
@@ -24,7 +24,7 @@ module TurkishSupportHelpers
24
24
  end
25
25
 
26
26
  def prepare_for(meth, string)
27
- valid_meths = %i(upcase downcase capitalize)
27
+ valid_meths = %i[upcase downcase capitalize]
28
28
  unless valid_meths.include?(meth) && string.is_a?(String)
29
29
  raise ArgumentError, 'Invalid arguments for method `prepare_for`!'
30
30
  end
@@ -1,5 +1,5 @@
1
1
  module TurkishSupport
2
- refine String do
2
+ refine String do # rubocop:disable Metrics/BlockLength
3
3
  (RE_RE_METHS + RE_OP_METHS).each do |meth|
4
4
  define_method meth do |*args|
5
5
  extend(TurkishSupportHelpers)
@@ -56,5 +56,23 @@ module TurkishSupport
56
56
  def casecmp(other_string)
57
57
  upcase.public_send(:casecmp, other_string.upcase)
58
58
  end
59
+
60
+ def <=>(other_string)
61
+ return nil unless other_string.is_a? String
62
+
63
+ each_char.with_index do |ch, i|
64
+ position1 = ASCII_ALPHABET[ch]
65
+ position2 = ASCII_ALPHABET[other_string[i]]
66
+
67
+ return (position2.nil? ? 0 : -1) if position1.nil?
68
+ return 1 if position2.nil?
69
+ return (position1 < position2 ? -1 : 1) if position1 != position2
70
+ end
71
+
72
+ return 0 if length == other_string.length
73
+ return -1 if length < other_string.length
74
+ return 1
75
+
76
+ end
59
77
  end
60
78
  end
@@ -1,3 +1,3 @@
1
1
  module TurkishSupport
2
- VERSION = '1.0.4'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
@@ -15,7 +15,7 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
15
15
  let(:upcased_english_alphabet) { [*'A'..'Z'].join }
16
16
 
17
17
  let(:turkish_words) do
18
- %w(çamur ıhlamur insan ördek şahika ümraniye)
18
+ %w[çamur ıhlamur insan ördek şahika ümraniye]
19
19
  end
20
20
 
21
21
  describe '#[]' do
@@ -279,7 +279,7 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
279
279
  capitalized_words = turkish_words.map { |w| w.capitalize }
280
280
 
281
281
  expect(capitalized_words)
282
- .to eq(%w(Çamur Ihlamur İnsan Ördek Şahika Ümraniye))
282
+ .to eq(%w[Çamur Ihlamur İnsan Ördek Şahika Ümraniye])
283
283
  end
284
284
 
285
285
  it 'capitalizes the first character of a string and downcase others' do
@@ -554,19 +554,66 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
554
554
  end
555
555
  end
556
556
  end
557
+
558
+ describe "#<=>" do
559
+ let(:sorted_equal_length_strings) { %w[Cahit Çağla Ömer Sıtkı Şakir] }
560
+ let(:sorted_different_length_strings) { %w[c ca falan om saki sıt] }
561
+ context "with equal length strings" do
562
+ it "works for smaller test" do
563
+ 0.upto(sorted_equal_length_strings.length - 2) do |i|
564
+ expect(sorted_equal_length_strings[i] <=> sorted_equal_length_strings[i+1]).to eq(-1)
565
+ end
566
+ end
567
+
568
+ it "works for bigger test" do
569
+ (sorted_equal_length_strings.length-1).downto(1) do |i|
570
+ expect(sorted_equal_length_strings[i] <=> sorted_equal_length_strings[i-1]).to eq(1)
571
+ end
572
+ end
573
+
574
+ it "works for equals test" do
575
+ sorted_equal_length_strings.each do |str|
576
+ expect(str <=> str).to eq(0)
577
+ end
578
+ end
579
+ end
580
+
581
+ context "with different length strings" do
582
+ it "works for smaller test" do
583
+ 0.upto(sorted_different_length_strings.length - 2) do |i|
584
+ expect(sorted_different_length_strings[i] <=> sorted_different_length_strings[i+1]).to eq(-1)
585
+ end
586
+ end
587
+
588
+ it "works for bigger test" do
589
+ (sorted_different_length_strings.length-1).downto(1) do |i|
590
+ expect(sorted_different_length_strings[i] <=> sorted_different_length_strings[i-1]).to eq(1)
591
+ end
592
+ end
593
+ end
594
+
595
+ context "invalid comparisons" do
596
+ it "returns nil" do
597
+ expect("a" <=> 3.5).to eq(nil)
598
+ expect("a" <=> true).to eq(nil)
599
+ expect("a" <=> Object.new).to eq(nil)
600
+ expect("a" <=> 1).to eq(nil)
601
+ end
602
+ end
603
+ end
557
604
  end
558
605
 
559
606
  describe Array do
560
607
  let(:unsorted_array1) do
561
- %w(bağcılar bahçelievler şimdi çüNKÜ olmalı üç\ kere düş ılık duy)
608
+ %w[bağcılar bahçelievler şimdi çüNKÜ olmalı üç\ kere düş ılık duy]
562
609
  end
563
610
 
564
611
  let(:sorted_array1) do
565
- %w(bağcılar bahçelievler çüNKÜ duy düş ılık olmalı şimdi üç\ kere)
612
+ %w[bağcılar bahçelievler çüNKÜ duy düş ılık olmalı şimdi üç\ kere]
566
613
  end
567
614
 
568
- let(:unsorted_array2) { %w(iki Üç dört ılık İğne iyne Ul) }
569
- let(:sorted_array2) { %w(İğne Ul Üç dört ılık iki iyne) }
615
+ let(:unsorted_array2) { %w[iki Üç dört ılık İğne iyne Ul] }
616
+ let(:sorted_array2) { %w[İğne Ul Üç dört ılık iki iyne] }
570
617
 
571
618
  let(:unsorted_array3) do
572
619
  ['Sıtkı1 Bağdat', 'Sıtkı Bağdat', 'a', '3s', '2 b', 'ab ']
@@ -578,6 +625,12 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
578
625
 
579
626
  describe '#sort' do
580
627
  context 'with non-destructive version' do
628
+ let(:unsorted_array_for_block_using) {
629
+ %w[ağa aça aşa aöa aüa aua afa aba]
630
+ }
631
+ let(:sorted_array_for_block_using) {
632
+ %w[aba aça afa ağa aöa aşa aua aüa]
633
+ }
581
634
  it 'does not change the original value of the array' do
582
635
  expect { unsorted_array1.sort }.to_not change { unsorted_array1 }
583
636
  end
@@ -593,6 +646,10 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
593
646
  it 'sorts an array that include special chars, numbers, etc.' do
594
647
  expect(unsorted_array3.sort).to eq(sorted_array3)
595
648
  end
649
+
650
+ it 'sorts array for random conditions' do
651
+ expect(unsorted_array_for_block_using.sort {|a, b| a[1] <=> b[1]}).to eq(sorted_array_for_block_using)
652
+ end
596
653
  end
597
654
 
598
655
  context 'with destructive version' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turkish_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sıtkı Bağdat
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-07 00:00:00.000000000 Z
11
+ date: 2017-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  version: '0'
101
101
  requirements: []
102
102
  rubyforge_project:
103
- rubygems_version: 2.6.13
103
+ rubygems_version: 2.7.3
104
104
  signing_key:
105
105
  specification_version: 4
106
106
  summary: Turkish character support for core ruby methods.