turkish_support 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,74 +1,56 @@
1
- # frozen_string_literal: true
1
+ # frozen_string_literal: false
2
2
 
3
3
  module TurkishSupport
4
4
  refine String do # rubocop:disable Metrics/BlockLength
5
- REGEX_METHS.each do |meth|
5
+ REGEX_METHODS.each do |meth|
6
6
  define_method meth do |*args|
7
- extend TurkishSupportHelpers
7
+ if args[0].is_a?(Regexp) || %i[match scan].include?(meth)
8
+ args[0] = TurkishRegexps::TrRegexp.new(args[0]).translate
9
+ end
8
10
 
9
- args[0] = translate_regexp(args[0]) if REGEX_REQUIRED_METHODS.include?(meth) || args[0].is_a?(Regexp)
10
11
  instance_exec { super(*args) }
11
12
  end
12
13
  end
13
14
 
14
- CASE_RELATED_METHS.each do |meth|
15
- define_method(meth) { super(:turkic) }
16
- end
15
+ CASE_METHODS.each { define_method(_1) { super(:turkic) } }
17
16
 
18
- def titleize(conjuction: true)
19
- extend TurkishSupportHelpers
17
+ # capitalize all words and returns a copy of the string
18
+ #
19
+ # @return [String]
20
+ def titleize
21
+ downcase.gsub(/\b\S/u).each { _1.upcase }
22
+ end
20
23
 
21
- downcase.split.map do |word|
22
- if !conjuction && conjuction?(word)
23
- word
24
- elsif start_with_a_special_char?(word)
25
- word.chr + (word.length > 1 ? word[1..].capitalize : '')
26
- else
27
- word.capitalize
28
- end
29
- end.join(' ')
24
+ # capitalize all words in place
25
+ # @return [String]
26
+ def titleize!
27
+ replace(titleize)
30
28
  end
31
29
 
32
- def titleize!(conjuction: true)
33
- replace(titleize(conjuction: conjuction))
30
+ def casecmp(other) # :nodoc:
31
+ upcase.instance_exec { super(other.upcase) }
34
32
  end
35
33
 
36
- def swapcase
37
- extend TurkishSupportHelpers
34
+ def <=>(other) # :nodoc:
35
+ return nil unless other.is_a? String
38
36
 
39
- chars.map do |c|
40
- if tr_char?(c)
41
- tr_lower?(c) ? c.upcase : c.downcase
42
- else
43
- c.instance_exec { super }
44
- end
45
- end.join
37
+ TurkishRanges::TrText.new(to_s) <=> TurkishRanges::TrText.new(other)
46
38
  end
47
39
 
48
- def swapcase!
49
- replace(swapcase)
40
+ def >(other) # :nodoc:
41
+ (self <=> other) == 1
50
42
  end
51
43
 
52
- def casecmp(other)
53
- upcase.instance_exec { super(other.upcase) }
44
+ def <(other) # :nodoc:
45
+ (self <=> other) == -1
54
46
  end
55
47
 
56
- def <=>(other)
57
- return nil unless other.is_a? String
58
-
59
- each_char.with_index do |ch, i|
60
- position1 = ASCII_ALPHABET[ch]
61
- position2 = ASCII_ALPHABET[other[i]]
62
-
63
- return (position2.nil? ? 0 : -1) if position1.nil?
64
- return 1 if position2.nil?
65
- return (position1 < position2 ? -1 : 1) if position1 != position2
66
- end
67
-
68
- return 0 if length == other.length
69
- return -1 if length < other.length
48
+ def >=(other) # :nodoc:
49
+ (self <=> other) != -1
50
+ end
70
51
 
71
- 1
52
+ def <=(other) # :nodoc:
53
+ (self <=> other) != 1
72
54
  end
73
55
  end
74
56
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module TurkishSupport
2
- VERSION = '2.0.1'.freeze
4
+ VERSION = '2.1.0'
3
5
  end
@@ -1,103 +1,74 @@
1
- require 'spec_helper'
2
- using TurkishSupport
1
+ # frozen_string_literal: false
3
2
 
4
- module TurkishSupport
5
- describe Array do
6
- describe '#sort' do
7
-
8
- let(:samples) {
9
- [
10
- {
11
- mixed: %w[ bağcılar bahçelievler şimdi çüNKÜ olmalı üç\ kere düş ılık duy ],
12
- sorted: %w[ bağcılar bahçelievler çüNKÜ duy düş ılık olmalı şimdi üç\ kere ]
13
- },
14
- {
15
- mixed: %w[ iki Üç dört ılık İğne iyne Ul ],
16
- sorted: %w[ İğne Ul Üç dört ılık iki iyne ]
17
- },
18
- {
19
- mixed: %w[ Sıtkı1\ Bağdat Sıtkı\ Bağdat a 3s 2\ b ab\ ],
20
- sorted: %w[ 2\ b 3s Sıtkı\ Bağdat Sıtkı1\ Bağdat a ab\ ]
21
- }
22
- ]
23
- }
3
+ using TurkishSupport
24
4
 
25
- let(:block_samples) {
26
- [
27
- {
28
- mixed: %w[ ağa aça aşa aöa aüa aua afa aba ],
29
- sorted: {
30
- "a[1]<=>b[1]": %w[ aba aça afa ağa aöa aşa aua aüa ],
31
- "b[1]<=>a[1]": %w[ aüa aua aşa aöa ağa afa aça aba ]
32
- }
33
- },
34
- {
35
- mixed: %w[ iki Üç dört ılık İğne iyne Ul ],
36
- sorted: {
37
- "a.length<=>b.length": %w[ Üç Ul iki dört ılık İğne iyne ],
38
- "b.length<=>a.length": %w[dört ılık İğne iyne iki Üç Ul ]
39
- }
40
- },
41
- {
42
- mixed: [["Şakir", 2], ["İsmet", 0], ["Zeliha", 1]],
43
- sorted: {
44
- "a[1]<=>b[1]": [["İsmet", 0], ["Zeliha", 1], ["Şakir", 2]],
45
- "b[0]<=>a[0]": [["Zeliha", 1], ["Şakir", 2], ["İsmet", 0]]
46
- }
47
- }
48
- ]
49
- }
5
+ describe 'Array' do
6
+ describe '#sort' do
7
+ let(:samples) do
8
+ [{ mixed: %w[bağcılar bahçelievler şimdi çüNKÜ olmalı üç\ kere düş ılık duy],
9
+ sorted: %w[bağcılar bahçelievler çüNKÜ duy düş ılık olmalı şimdi üç\ kere] },
10
+ { mixed: %w[iki Üç dört ılık İğne iyne Ul],
11
+ sorted: %w[İğne Ul Üç dört ılık iki iyne] },
12
+ { mixed: %w[Sıtkı1\ Bağdat Sıtkı\ Bağdat a 3s 2\ b ab\ ],
13
+ sorted: %w[2\ b 3s Sıtkı\ Bağdat Sıtkı1\ Bağdat a ab\ ] }]
14
+ end
15
+ let(:block_samples) do
16
+ [{ mixed: %w[ağa aça aşa aöa aüa aua afa aba],
17
+ sorted: { "a[1]<=>b[1]": %w[aba aça afa ağa aöa aşa aua aüa],
18
+ "b[1]<=>a[1]": %w[aüa aua aşa aöa ağa afa aça aba] } },
19
+ { mixed: %w[iki Üç dört ılık İğne iyne Ul],
20
+ sorted: { "a.length<=>b.length": %w[Üç Ul iki dört ılık İğne iyne],
21
+ "b.length<=>a.length": %w[dört ılık İğne iyne iki Üç Ul] } },
22
+ { mixed: [['Şakir', 2], ['İsmet', 0], ['Zeliha', 1]],
23
+ sorted: { "a[1]<=>b[1]": [['İsmet', 0], ['Zeliha', 1], ['Şakir', 2]],
24
+ "b[0]<=>a[0]": [['Zeliha', 1], ['Şakir', 2], ['İsmet', 0]] } }]
25
+ end
50
26
 
51
- context 'nondestructive version' do
52
- context 'no block given' do
53
- it 'does not change the original value of the array' do
54
- samples.each do |sample|
55
- expect { sample[:mixed].sort }.to_not change { sample[:mixed] }
56
- end
27
+ context 'nondestructive version' do
28
+ context 'no block given' do
29
+ it 'does not change the original value of the array' do
30
+ samples.each do |sample|
31
+ expect { sample[:mixed].sort }.to_not(change { sample[:mixed] })
57
32
  end
33
+ end
58
34
 
59
- it 'sorts array in alphabetical order' do
60
- samples.each do |sample|
61
- expect(sample[:mixed].sort).to eq(sample[:sorted])
62
- end
35
+ it 'sorts array in alphabetical order' do
36
+ samples.each do |sample|
37
+ expect(sample[:mixed].sort).to eq(sample[:sorted])
63
38
  end
64
39
  end
40
+ end
65
41
 
66
- context 'block given' do
67
- it 'sorts array for random conditions' do
68
- sample = block_samples.first
69
- expect(sample[:mixed].sort {|a, b| a[1] <=> b[1]})
70
- .to eq(sample[:sorted][:"a[1]<=>b[1]"])
71
-
72
- expect(sample[:mixed].sort {|a, b| b[1] <=> a[1]})
73
- .to eq(sample[:sorted][:"b[1]<=>a[1]"])
74
-
75
- sample = block_samples[1]
76
- expect(sample[:mixed].sort {|a, b| a.length <=> b.length})
77
- .to eq(sample[:sorted][:"a.length<=>b.length"])
78
-
79
- expect(sample[:mixed].sort {|a, b| b.length <=> a.length})
80
- .to eq(sample[:sorted][:"b.length<=>a.length"])
81
- end
42
+ context 'block given' do
43
+ it 'sorts array for random conditions' do
44
+ sample = block_samples.first
45
+ expect(sample[:mixed].sort { |a, b| a[1] <=> b[1] })
46
+ .to eq(sample[:sorted][:"a[1]<=>b[1]"])
47
+ expect(sample[:mixed].sort { |a, b| b[1] <=> a[1] })
48
+ .to eq(sample[:sorted][:"b[1]<=>a[1]"])
49
+ sample = block_samples[1]
50
+ expect(sample[:mixed].sort { |a, b| a.length <=> b.length })
51
+ .to eq(sample[:sorted][:"a.length<=>b.length"])
52
+ expect(sample[:mixed].sort { |a, b| b.length <=> a.length })
53
+ .to eq(sample[:sorted][:"b.length<=>a.length"])
54
+ end
82
55
 
83
- it 'sorts nested arrays' do
84
- sample = block_samples[2]
85
- expect(sample[:mixed].sort {|a, b| a[1] <=> b[1]})
86
- .to eq(sample[:sorted][:"a[1]<=>b[1]"])
87
- expect(sample[:mixed].sort {|a, b| b[0] <=> a[0]})
88
- .to eq(sample[:sorted][:"b[0]<=>a[0]"])
89
- end
56
+ it 'sorts nested arrays' do
57
+ sample = block_samples[2]
58
+ expect(sample[:mixed].sort { |a, b| a[1] <=> b[1] })
59
+ .to eq(sample[:sorted][:"a[1]<=>b[1]"])
60
+ expect(sample[:mixed].sort { |a, b| b[0] <=> a[0] })
61
+ .to eq(sample[:sorted][:"b[0]<=>a[0]"])
90
62
  end
91
63
  end
64
+ end
92
65
 
93
- context 'with destructive version' do
94
- it 'changes the original value of the array' do
95
- samples.each do |sample|
96
- expect { sample[:mixed].sort! }.to change { sample[:mixed] }
97
- end
66
+ context 'with destructive version' do
67
+ it 'changes the original value of the array' do
68
+ samples.each do |sample|
69
+ expect { sample[:mixed].sort! }.to(change { sample[:mixed] })
98
70
  end
99
71
  end
100
-
101
72
  end
102
73
  end
103
74
  end
@@ -1,2 +1,4 @@
1
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
2
4
  require 'turkish_support'
@@ -1,4 +1,5 @@
1
- require 'spec_helper'
1
+ # frozen_string_literal: false
2
+
2
3
  using TurkishSupport
3
4
 
4
5
  module TurkishSupport # rubocop:disable Metrics/ModuleLength
@@ -13,19 +14,21 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
13
14
  context 'with non-destructive version' do
14
15
  it 'does not change the original value of the string' do
15
16
  word = turkish_words.sample
17
+
16
18
  expect { word[/\w+/] }.to_not(change { word })
17
19
  end
18
20
 
19
21
  it 'is able to capture Turkish characters' do
20
- expect(turkish_words.all? { |w| w[/\w+/] == w }).to eq(true)
21
- expect(turkish_words.all? { |w| w[/[a-z]+/] == w }).to eq(true)
22
- expect(turkish_words.map(&:upcase).all? { |w| w[/[a-z]+/i] == w }).to eq(true)
22
+ expect(turkish_words.all? { |w| w[/\w+/] == w }).to be true
23
+ expect(turkish_words.all? { |w| w[/[a-z]+/] == w }).to be true
24
+ expect(turkish_words.map(&:upcase).all? { |w| w[/[a-z]+/i] == w }).to be true
23
25
  end
24
26
  end
25
27
 
26
28
  context 'with destructive version' do
27
29
  it 'changes the original value of the string' do
28
30
  word = turkish_words.sample
31
+
29
32
  expect { word[/\w+/] = 'new value' }.to(change { word })
30
33
  expect(word).to eq('new value')
31
34
  end
@@ -35,34 +38,36 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
35
38
  describe '#index' do
36
39
  it 'does not change the original value of the string' do
37
40
  word = turkish_words.sample
41
+
38
42
  expect { word.index(/\w+/) }.to_not(change { word })
39
43
  end
40
44
 
41
45
  it 'is able to capture Turkish characters' do
42
- expect(turkish_words.all? { |w| w.index(/\w+/).zero? }).to(eq(true))
43
- expect(turkish_words.all? { |w| w.index(/[a-z]+/).zero? }).to eq(true)
44
- expect(turkish_words.map(&:upcase).all? { |w| w.index(/[a-z]+/i).zero? }).to eq(true)
46
+ expect(turkish_words.all? { |w| w.index(/\w+/).zero? }).to be true
47
+ expect(turkish_words.all? { |w| w.index(/[a-z]+/).zero? }).to be true
48
+ expect(turkish_words.map(&:upcase).all? { |w| w.index(/[a-z]+/i).zero? }).to be true
45
49
  end
46
50
 
47
51
  it 'begins to search from the right position' do
48
- expect('şç-!+*/-ğüı'.index(/\w+/, 2)).to eq(8)
52
+ expect('şç-!+*/-ğüı'.index(/\w+/, 2)).to be 8
49
53
  end
50
54
  end
51
55
 
52
56
  describe '#rindex' do
53
57
  it 'does not change the original value of the string' do
54
58
  word = turkish_words.sample
59
+
55
60
  expect { word.rindex(/\w+/) }.to_not(change { word })
56
61
  end
57
62
 
58
63
  it 'is able to capture Turkish characters' do
59
- expect(turkish_words.map(&:reverse).all? { |w| w.rindex(/\w+/) == w.size - 1 }).to(eq(true))
60
- expect(turkish_words.map(&:reverse).all? { |w| w.rindex(/[a-z]+/) == w.size - 1 }).to eq(true)
61
- expect(turkish_words.map { |w| w.upcase.reverse }.all? { |w| w.rindex(/[a-z]+/i) == w.size - 1 }).to(eq(true))
64
+ expect(turkish_words.map(&:reverse).all? { |w| w.rindex(/\w+/) == w.size - 1 }).to be true
65
+ expect(turkish_words.map(&:reverse).all? { |w| w.rindex(/[a-z]+/) == w.size - 1 }).to be true
66
+ expect(turkish_words.map { |w| w.upcase.reverse }.all? { |w| w.rindex(/[a-z]+/i) == w.size - 1 }).to be true
62
67
  end
63
68
 
64
69
  it 'finishes the searching to the right position' do
65
- expect('şç-!+*/-ğüı'.rindex(/\w+/, 7)).to eq(1)
70
+ expect('şç-!+*/-ğüı'.rindex(/\w+/, 7)).to be 1
66
71
  end
67
72
  end
68
73
 
@@ -99,19 +104,21 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
99
104
  context 'with non-destructive version' do
100
105
  it 'does not change the original value of the string' do
101
106
  sentence = turkish_words * ' '
107
+
102
108
  expect { sentence.slice(/\w+/) }.to_not(change { sentence })
103
109
  end
104
110
 
105
111
  it 'is able to capture Turkish characters' do
106
- expect(turkish_words.all? { |w| w.slice(/\w+/) == w }).to(eq(true))
107
- expect(turkish_words.all? { |w| w.slice(/[a-z]+/) == w }).to eq(true)
108
- expect(turkish_words.map(&:upcase).all? { |w| w.slice(/[a-z]+/i) == w }).to eq(true)
112
+ expect(turkish_words.all? { |w| w.slice(/\w+/) == w }).to be true
113
+ expect(turkish_words.all? { |w| w.slice(/[a-z]+/) == w }).to be true
114
+ expect(turkish_words.map(&:upcase).all? { |w| w.slice(/[a-z]+/i) == w }).to be true
109
115
  end
110
116
  end
111
117
 
112
118
  context 'with destructive version' do
113
119
  it 'changes the original value of the string' do
114
120
  sentence = turkish_words * ' '
121
+
115
122
  expect { sentence.slice!(/\w+/) }.to(change { sentence })
116
123
  expect(sentence).to eq(" #{turkish_words[1..] * ' '}")
117
124
  end
@@ -120,9 +127,9 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
120
127
 
121
128
  describe '#split' do
122
129
  it 'is able to capture Turkish characters' do
123
- expect(turkish_words.join(' ').split(/\w+/).join.strip.empty?).to(eq(true))
124
- expect(turkish_words.join(' ').split(/[a-z]+/).join.strip.empty?).to(eq(true))
125
- expect(turkish_words.join(' ').upcase.split(/[a-z]+/i).join.strip.empty?).to(eq(true))
130
+ expect(turkish_words.join(' ').split(/\w+/).join.strip.empty?).to be true
131
+ expect(turkish_words.join(' ').split(/[a-z]+/).join.strip.empty?).to be true
132
+ expect(turkish_words.join(' ').upcase.split(/[a-z]+/i).join.strip.empty?).to be true
126
133
  end
127
134
  end
128
135
 
@@ -134,12 +141,14 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
134
141
 
135
142
  it 'upcases all of Turkish characters' do
136
143
  upcased_string = downcased_turkish_alphabet.upcase
144
+
137
145
  expect(upcased_string).to(eq(upcased_turkish_alphabet))
138
146
  end
139
147
 
140
148
  it 'upcases English characters except i as I' do
141
149
  upcased_string = downcased_english_alphabet.upcase
142
- expect(upcased_string).to(eq(upcased_english_alphabet.tr('I', 'İ')))
150
+
151
+ expect(upcased_string).to eq upcased_english_alphabet.tr('I', 'İ')
143
152
  end
144
153
  end
145
154
 
@@ -159,12 +168,12 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
159
168
 
160
169
  it 'downcases all of Turkish characters' do
161
170
  downcased_string = upcased_turkish_alphabet.downcase
162
- expect(downcased_string).to(eq(downcased_turkish_alphabet))
171
+ expect(downcased_string).to eq downcased_turkish_alphabet
163
172
  end
164
173
 
165
174
  it 'downcases English characters except I as ı' do
166
175
  downcased_string = upcased_english_alphabet.downcase
167
- expect(downcased_string).to(eq(downcased_english_alphabet.tr('i', 'ı')))
176
+ expect(downcased_string).to eq downcased_english_alphabet.tr('i', 'ı')
168
177
  end
169
178
  end
170
179
 
@@ -180,27 +189,31 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
180
189
  context 'with non-destructive version' do
181
190
  it 'does not change the original value of the string' do
182
191
  turkish_word = turkish_words.sample
192
+
183
193
  expect { turkish_word.capitalize }.to_not(change { turkish_word })
184
194
  end
185
195
 
186
196
  it 'capitalizes the leading first Turkish character' do
187
197
  capitalized_words = turkish_words.map(&:capitalize)
188
- expect(capitalized_words).to(eq(%w[Çamur Ihlamur İnsan Ördek Şahika Ümraniye]))
198
+
199
+ expect(capitalized_words).to eq %w[Çamur Ihlamur İnsan Ördek Şahika Ümraniye]
189
200
  end
190
201
 
191
202
  it 'capitalizes the first character of a string and downcase others' do
192
- expect('türkÇE desteĞİ'.capitalize).to(eq('Türkçe desteği'))
203
+ expect('türkÇE desteĞİ'.capitalize).to eq 'Türkçe desteği'
193
204
  end
194
205
 
195
206
  it 'capitalizes the first character of an English string' do
196
207
  english_word = 'spy'
197
- expect(english_word.capitalize).to(eq('Spy'))
208
+
209
+ expect(english_word.capitalize).to eq 'Spy'
198
210
  end
199
211
  end
200
212
 
201
213
  context 'with destructive version' do
202
214
  it 'changes the original value of the string' do
203
215
  turkish_word = 'çamur'
216
+
204
217
  expect { turkish_word.capitalize! }.to(change { turkish_word })
205
218
  expect(turkish_word).to eq('Çamur')
206
219
  end
@@ -211,11 +224,11 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
211
224
  it 'compares Turkish characters correctly' do
212
225
  result = downcased_turkish_alphabet.casecmp(upcased_turkish_alphabet)
213
226
 
214
- expect(result.zero?).to(eq(true))
227
+ expect(result.zero?).to be true
215
228
  end
216
229
 
217
230
  it 'compares Turkish characters correctly' do
218
- expect('sıtkı'.casecmp('SıTKI')&.zero?).to(eq(true))
231
+ expect('sıtkı'.casecmp('SıTKI')&.zero?).to be true
219
232
  end
220
233
  end
221
234
 
@@ -223,40 +236,40 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
223
236
  context 'with non-destructive version' do
224
237
  it 'does not change the original value of the string' do
225
238
  word = 'mERHABA çAMUR iSMETOĞULLARI'
239
+
226
240
  expect { word.titleize }.to_not(change { word })
227
241
  end
228
242
 
229
243
  it 'upcases first character of all words' do
230
244
  titleized = 'merhaba çamur ismet'.titleize
245
+
231
246
  expect(titleized).to(eq('Merhaba Çamur İsmet'))
232
247
  end
233
248
 
234
249
  it 'no problem with words that consist of special chars only' do
235
250
  titleized = '(( merhaba çamur ismet'.titleize
251
+
236
252
  expect(titleized).to(eq('(( Merhaba Çamur İsmet'))
237
253
  end
238
254
 
239
255
  it 'downcases characters other than first characters of all words' do
240
256
  titleized = 'mERHABA çAMUR iSMETOĞULLARI'.titleize
257
+
241
258
  expect(titleized).to(eq('Merhaba Çamur İsmetoğulları'))
242
259
  end
243
260
 
244
261
  it 'support strings that include paranthesis, quotes, etc.' do
245
262
  titleized = "rUBY roCkS... (really! 'tRUSt' ME)".titleize
246
- expect(titleized).to(eq("Ruby Rocks... (Really! 'Trust' Me)"))
247
- end
248
263
 
249
- it 'does not capitalize conjuctions when false passed' do
250
- titleized = 'kerem VE aslı VeYa leyla İlE mecnun'.titleize(conjuction: false)
251
- expect(titleized).to eq('Kerem ve Aslı veya Leyla ile Mecnun')
264
+ expect(titleized).to(eq("Ruby Rocks... (Really! 'Trust' Me)"))
252
265
  end
253
266
  end
254
267
 
255
268
  context 'with destructive version' do
256
269
  it 'changes the original value of the string' do
257
270
  word = 'mERHABA çAMUR iSMETOĞULLARI'
258
- expect { word.titleize! }.to(change { word })
259
271
 
272
+ expect { word.titleize! }.to(change { word })
260
273
  expect(word).to(eq('Merhaba Çamur İsmetoğulları'))
261
274
  end
262
275
  end
@@ -266,11 +279,13 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
266
279
  context 'with non-destructive version' do
267
280
  it 'does not change the original value of the string' do
268
281
  word = 'mErHaba çamur ismetoğullarI'
282
+
269
283
  expect { word.swapcase }.to_not(change { word })
270
284
  end
271
285
 
272
286
  it 'swaps characters correctly' do
273
287
  word = 'mErHaba çamur ismetoğullarI'.swapcase
288
+
274
289
  expect(word).to(eq('MeRhABA ÇAMUR İSMETOĞULLARı'))
275
290
  end
276
291
  end
@@ -278,6 +293,7 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
278
293
  context 'with destructive version' do
279
294
  it 'changes the original value of the string' do
280
295
  word = 'mErHaba çamur ismetoğullarI'
296
+
281
297
  expect { word.swapcase! }.to(change { word })
282
298
  expect(word).to(eq('MeRhABA ÇAMUR İSMETOĞULLARı'))
283
299
  end
@@ -317,7 +333,7 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
317
333
  end
318
334
 
319
335
  it "matches Turkish characters when regex include '\\w'" do
320
- expect(turkish_words.join(' ').scan(/\W+/).map(&:strip).all?(&:empty?)).to(eq(true))
336
+ expect(turkish_words.join(' ').scan(/\W+/).map(&:strip).all?(&:empty?)).to be true
321
337
  end
322
338
  end
323
339
 
@@ -325,6 +341,7 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
325
341
  context 'non-destructive version' do
326
342
  it 'does not affect the object' do
327
343
  word = 'ağapaşa ağa'
344
+
328
345
  expect { word.sub(/\w+/, 'bey') }.to_not(change { word })
329
346
  end
330
347
 
@@ -338,6 +355,7 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
338
355
  context 'destructive version' do
339
356
  it 'affects the object' do
340
357
  word = 'ağapaşa ağa'
358
+
341
359
  expect { word.sub!(/\w+/, 'bey') }.to(change { word }.from('ağapaşa ağa').to('bey ağa'))
342
360
  end
343
361
  end
@@ -347,6 +365,7 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
347
365
  context 'non-destructive version' do
348
366
  it 'does not affect the object' do
349
367
  word = 'ağapaşa ağa'
368
+
350
369
  expect { word.gsub(/\w+/, 'bey') }.to_not(change { word })
351
370
  end
352
371
 
@@ -360,11 +379,44 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
360
379
  context 'destructive version' do
361
380
  it 'affects the object' do
362
381
  word = 'ağapaşa ağa'
382
+
363
383
  expect { word.gsub!(/\w+/, 'bey') }.to(change { word }.from('ağapaşa ağa').to('bey bey'))
364
384
  end
365
385
  end
366
386
  end
367
387
 
388
+ describe '#>' do
389
+ it 'should compares turkish cars correctly' do
390
+ expect('d' > 'ç').to be true
391
+ expect('ağa' > 'aga').to be true
392
+ expect('ğ' > 'h').to be false
393
+ end
394
+ end
395
+
396
+ describe '#>=' do
397
+ it 'should compares turkish cars correctly' do
398
+ expect('d' >= 'ç').to be true
399
+ expect('aha' >= 'ağa').to be true
400
+ expect('ğ.' >= 'ğ').to be true
401
+ end
402
+ end
403
+
404
+ describe '#<' do
405
+ it 'should compares turkish cars correctly' do
406
+ expect('d' < 'ç').to be false
407
+ expect('ağa' < 'aga').to be false
408
+ expect('ğ' < 'h').to be true
409
+ end
410
+ end
411
+
412
+ describe '#<=' do
413
+ it 'should compares turkish cars correctly' do
414
+ expect('d' <= 'ç').to be false
415
+ expect('aha' <= 'ağa').to be false
416
+ expect('ğ.' <= 'ğ').to be false
417
+ end
418
+ end
419
+
368
420
  describe '#<=>' do
369
421
  let(:sorted_equal_length_strings) { %w[Cahit Çağla Ömer Sıtkı Şakir] }
370
422
  let(:sorted_different_length_strings) { %w[c ca falan om saki sıt] }
@@ -404,10 +456,10 @@ module TurkishSupport # rubocop:disable Metrics/ModuleLength
404
456
 
405
457
  context 'invalid comparisons' do
406
458
  it 'returns nil' do
407
- expect('a' <=> 3.5).to eq(nil)
408
- expect('a' <=> true).to eq(nil)
409
- expect('a' <=> Object.new).to eq(nil)
410
- expect('a' <=> 1).to eq(nil)
459
+ expect('a' <=> 3.5).to be nil
460
+ expect('a' <=> true).to be nil
461
+ expect('a' <=> Object.new).to be nil
462
+ expect('a' <=> 1).to be nil
411
463
  end
412
464
  end
413
465
  end