turkish_support 1.1.0 → 2.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.
@@ -1,4 +1,6 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'turkish_support/version'
4
6
 
@@ -18,8 +20,13 @@ Gem::Specification.new do |spec|
18
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
21
  spec.require_paths = ['lib']
20
22
 
21
- spec.required_ruby_version = '>= 2.0.0'
22
- spec.add_development_dependency 'bundler', '~> 1.5'
23
- spec.add_development_dependency 'rake'
24
- spec.add_development_dependency 'rspec'
23
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.7.0')
24
+ spec.add_runtime_dependency 'turkish_ranges', '~> 0.1'
25
+ spec.add_runtime_dependency 'turkish_regexps', '~> 0.1'
26
+
27
+ spec.add_development_dependency 'bundler', '~> 2.1'
28
+ spec.add_development_dependency 'rake', '~> 13.0'
29
+ spec.add_development_dependency 'rspec', '~> 3.10'
30
+ spec.add_development_dependency 'turkish_ranges', '~> 0.1'
31
+ spec.add_development_dependency 'turkish_regexps', '~> 0.1'
25
32
  end
metadata CHANGED
@@ -1,57 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turkish_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.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-12-22 00:00:00.000000000 Z
11
+ date: 2020-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: turkish_ranges
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: turkish_regexps
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.1'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement
16
44
  requirements:
17
45
  - - "~>"
18
46
  - !ruby/object:Gem::Version
19
- version: '1.5'
47
+ version: '2.1'
20
48
  type: :development
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
- version: '1.5'
54
+ version: '2.1'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rake
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
- - - ">="
59
+ - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: '0'
61
+ version: '13.0'
34
62
  type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
- - - ">="
66
+ - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: '0'
68
+ version: '13.0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rspec
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - ">="
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: turkish_ranges
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
46
88
  - !ruby/object:Gem::Version
47
- version: '0'
89
+ version: '0.1'
48
90
  type: :development
49
91
  prerelease: false
50
92
  version_requirements: !ruby/object:Gem::Requirement
51
93
  requirements:
52
- - - ">="
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: turkish_regexps
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.1'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
53
109
  - !ruby/object:Gem::Version
54
- version: '0'
110
+ version: '0.1'
55
111
  description: |-
56
112
  Turkish character support for core ruby methods
57
113
  like String#upcase, String#gsub, String#match, Array#sort, and etc...)
@@ -63,9 +119,12 @@ extra_rdoc_files: []
63
119
  files:
64
120
  - ".gitignore"
65
121
  - ".hound.yml"
122
+ - ".reek.yml"
66
123
  - ".rspec"
67
124
  - ".rubocop.yml"
68
125
  - ".travis.yml"
126
+ - CHANGELOG.md
127
+ - CODE_OF_CONDUCT.md
69
128
  - Gemfile
70
129
  - LICENSE.txt
71
130
  - README.md
@@ -73,11 +132,11 @@ files:
73
132
  - lib/turkish_support.rb
74
133
  - lib/turkish_support/array_methods.rb
75
134
  - lib/turkish_support/constants.rb
76
- - lib/turkish_support/helpers.rb
77
135
  - lib/turkish_support/string_methods.rb
78
136
  - lib/turkish_support/version.rb
79
- - spec/helpers_spec.rb
137
+ - spec/array_spec.rb
80
138
  - spec/spec_helper.rb
139
+ - spec/string_spec.rb
81
140
  - spec/turkish_support_spec.rb
82
141
  - turkish_support.gemspec
83
142
  homepage: https://github.com/sbagdat/turkish_support
@@ -92,19 +151,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
151
  requirements:
93
152
  - - ">="
94
153
  - !ruby/object:Gem::Version
95
- version: 2.0.0
154
+ version: 2.7.0
96
155
  required_rubygems_version: !ruby/object:Gem::Requirement
97
156
  requirements:
98
157
  - - ">="
99
158
  - !ruby/object:Gem::Version
100
159
  version: '0'
101
160
  requirements: []
102
- rubyforge_project:
103
- rubygems_version: 2.7.3
161
+ rubygems_version: 3.1.2
104
162
  signing_key:
105
163
  specification_version: 4
106
164
  summary: Turkish character support for core ruby methods.
107
165
  test_files:
108
- - spec/helpers_spec.rb
166
+ - spec/array_spec.rb
109
167
  - spec/spec_helper.rb
168
+ - spec/string_spec.rb
110
169
  - spec/turkish_support_spec.rb
@@ -1,113 +0,0 @@
1
- module TurkishSupportHelpers
2
- def translate_regexp(pattern) # rubocop:disable Metrics/AbcSize
3
- Regexp.new(pattern) unless pattern.is_a? Regexp
4
- re = pattern.source
5
- options = pattern.options
6
-
7
- while re.match(RANGE_REGEXP)
8
- re.scan(RANGE_REGEXP).flatten.compact.each do |matching|
9
- re.gsub! matching, translate_range(matching, pattern.casefold?)
10
- end
11
- end
12
-
13
- META_CHARS.each { |k, v| re.gsub!(k, v) }
14
- Regexp.new(re.force_encoding('UTF-8'), Regexp::FIXEDENCODING | options)
15
- end
16
-
17
- def translate_range(range_as_string, casefold = false)
18
- return '' unless range_as_string
19
-
20
- range_as_string.gsub!(/\[\]/, '')
21
- first, last = range_as_string.split('-')
22
-
23
- expand_range(first, last, casefold)
24
- end
25
-
26
- def prepare_for(meth, string)
27
- valid_meths = %i[upcase downcase capitalize]
28
- unless valid_meths.include?(meth) && string.is_a?(String)
29
- raise ArgumentError, 'Invalid arguments for method `prepare_for`!'
30
- end
31
-
32
- method("prepare_for_#{meth}").call(string)
33
- end
34
-
35
- def tr_char?(ch)
36
- tr_lower?(ch) || tr_upper?(ch)
37
- end
38
-
39
- def tr_lower?(ch)
40
- ALPHA[:tr_lower].include? ch
41
- end
42
-
43
- def tr_upper?(ch)
44
- ALPHA[:tr_upper].include? ch
45
- end
46
-
47
- def conjuction?(string)
48
- CONJUCTIONS.include? string
49
- end
50
-
51
- def start_with_a_special_char?(string)
52
- string =~ /^[#{SPECIAL_CHARS}]/
53
- end
54
-
55
- private
56
-
57
- def prepare_for_upcase(string)
58
- string.tr(ALPHA[:tr_lower], ALPHA[:tr_upper])
59
- end
60
-
61
- def prepare_for_downcase(string)
62
- string.tr(ALPHA[:tr_upper], ALPHA[:tr_lower])
63
- end
64
-
65
- def prepare_for_capitalize(string)
66
- [
67
- prepare_for(:upcase, string.chr).upcase,
68
- prepare_for(:downcase, self[1..-1]).downcase
69
- ].join
70
- end
71
-
72
- def expand_range(first, last, casefold)
73
- if lower.include?(first) && lower.include?(last)
74
- downcase_range(first, last, casefold)
75
- elsif upper.include?(first) && upper.include?(last)
76
- upcase_range(first, last, casefold)
77
- else
78
- raise ArgumentError, 'Invalid regexp range arguments!'
79
- end
80
- end
81
-
82
- def downcase_range(first, last, casefold)
83
- lower(first, last) +
84
- (lower_opposite(first, last) if casefold).to_s
85
- end
86
-
87
- def upcase_range(first, last, casefold)
88
- upper(first, last) +
89
- (upper_opposite(first, last) if casefold).to_s
90
- end
91
-
92
- def lower(first = nil, last = nil)
93
- return ALPHA[:lower] if first.nil? || last.nil?
94
- ALPHA[:lower][ALPHA[:lower].index(first)..ALPHA[:lower].index(last)]
95
- end
96
-
97
- def lower_opposite(first, last)
98
- upper[lower.index(first)..lower.index(last)].delete("^#{ALPHA[:tr_upper]}")
99
- end
100
-
101
- def upper(first = nil, last = nil)
102
- return ALPHA[:upper] if first.nil? || last.nil?
103
- ALPHA[:upper][ALPHA[:upper].index(first)..ALPHA[:upper].index(last)]
104
- end
105
-
106
- def upper_opposite(first, last)
107
- lower[upper.index(first)..upper.index(last)].delete("^#{ALPHA[:tr_lower]}")
108
- end
109
- end
110
-
111
- module TurkishSupport
112
- include TurkishSupportHelpers
113
- end
@@ -1,262 +0,0 @@
1
- require 'spec_helper'
2
- require 'turkish_support/helpers'
3
-
4
- RSpec.configure do |config|
5
- config.include TurkishSupportHelpers
6
- using TurkishSupport
7
- end
8
-
9
- describe 'TurkishSupportHelpers' do
10
- let(:downcased_alphabet) { 'abcçdefgğhıijklmnoöpqrsştuüvwxyz' }
11
- let(:upcased_alphabet) { 'ABCÇDEFGĞHIİJKLMNOÖPQRSŞTUÜVWXYZ' }
12
- let(:alphabet) { downcased_alphabet + upcased_alphabet }
13
- let(:tr_specific_lower) { 'çğıiöşü' }
14
- let(:tr_specific_upper) { 'ÇĞIİÖŞÜ' }
15
- let(:tr_all) { tr_specific_upper + tr_specific_lower }
16
- let(:conjuctions) { %w(ve ile veya) }
17
- let(:turkish_words) { %w(çamur ıhlamur insan ördek şahika ümraniye) }
18
- let(:special_chars) { %w{ ( " ' } }
19
-
20
- describe '#prepare_for' do
21
- context ':upcase' do
22
- it "replaces unsupported lower case letters with their upper cases'" do
23
- expect(prepare_for(:upcase, 'çğıiöşü'))
24
- .to eq('ÇĞIİÖŞÜ')
25
- end
26
- end
27
-
28
- context ':downcase' do
29
- it "replaces unsupported upper case letters with their lower cases'" do
30
- expect(prepare_for(:downcase, 'ÇĞIİÖŞÜ'))
31
- .to eq('çğıiöşü')
32
- end
33
- end
34
-
35
- context ':capitalize' do
36
- it 'replaces unsupported upper case and lower case letters' do
37
- dbl = double
38
- allow(dbl)
39
- .to receive(:prepare_for)
40
- .with(:capitalize, 'çaĞLAyan')
41
- .and_return('Çağlayan')
42
-
43
- expect(dbl.prepare_for(:capitalize, 'çaĞLAyan'))
44
- .to eq('Çağlayan')
45
- end
46
- end
47
-
48
- context 'with invalid parameters' do
49
- it 'raises an error if any parameter is not valid' do
50
- expect { prepare_for(:not_valid, :not_valid) }
51
- .to raise_error ArgumentError,
52
- 'Invalid arguments for method `prepare_for`!'
53
- expect { prepare_for(:swapcase, 'ÇĞ') }
54
- .to raise_error ArgumentError,
55
- 'Invalid arguments for method `prepare_for`!'
56
- expect { prepare_for(:upcase, 123) }
57
- .to raise_error ArgumentError,
58
- 'Invalid arguments for method `prepare_for`!'
59
- end
60
- end
61
- end
62
-
63
- describe '#tr_lower?' do
64
- it 'returns true for any Turkish specific lower case character' do
65
- expect(tr_specific_lower
66
- .chars
67
- .all? { |ch| tr_lower?(ch) })
68
- .to eq(true)
69
- end
70
-
71
- context 'returns false' do
72
- it 'for non-Turkish specific lower case characters' do
73
- expect(downcased_alphabet
74
- .delete(tr_specific_lower)
75
- .chars
76
- .any? { |ch| tr_lower?(ch) }
77
- ).to eq(false)
78
- end
79
-
80
- it 'for any upper case characters' do
81
- expect(upcased_alphabet
82
- .chars
83
- .any? { |ch| tr_lower?(ch) }
84
- ).to eq(false)
85
- end
86
-
87
- it 'for non-letter characters' do
88
- expect("\"é1!2'3^+4.,-_"
89
- .chars
90
- .any? { |ch| tr_lower?(ch) }
91
- ).to eq(false)
92
- end
93
- end
94
- end
95
-
96
- describe '#tr_upper?' do
97
- it 'returns true for any Turkish specific upper case character' do
98
- expect(tr_specific_upper
99
- .chars
100
- .all? { |ch| tr_upper?(ch) }
101
- ).to eq(true)
102
- end
103
-
104
- context 'returns false' do
105
- it 'for non-Turkish specific upper case characters' do
106
- expect(upcased_alphabet
107
- .delete(tr_specific_upper)
108
- .chars
109
- .any? { |ch| tr_upper?(ch) }
110
- ).to eq(false)
111
- end
112
-
113
- it 'for any lower case characters' do
114
- expect(downcased_alphabet
115
- .chars
116
- .any? { |ch| tr_upper?(ch) }
117
- ).to eq(false)
118
- end
119
-
120
- it 'for non-letter characters' do
121
- expect("\"é1!2'3^+4.,-_"
122
- .chars
123
- .any? { |ch| tr_upper?(ch) }
124
- ).to eq(false)
125
- end
126
- end
127
- end
128
-
129
- describe '#tr_char?' do
130
- it 'returns true for any Turkish specific character' do
131
- expect(tr_all
132
- .chars
133
- .all? { |ch| tr_char?(ch) }
134
- ).to eq(true)
135
- end
136
-
137
- context 'returns false' do
138
- it 'for non-Turkish specific characters' do
139
- expect(alphabet.delete(tr_all)
140
- .chars
141
- .any? { |ch| tr_char?(ch) }
142
- ).to eq(false)
143
- end
144
-
145
- it 'for non-letter characters' do
146
- expect("\"é1!2'3^+4.,-_"
147
- .chars
148
- .any? { |ch| tr_char?(ch) }
149
- ).to eq(false)
150
- end
151
- end
152
- end
153
-
154
- describe '#conjuction?' do
155
- it 'returns true for any conjuction' do
156
- expect(conjuctions
157
- .all? { |c| conjuction?(c) }
158
- ).to eq(true)
159
- end
160
-
161
- it 'returns false for any word contains conjuction' do
162
- expect(%w(veda aile veyahut)
163
- .any? { |c| conjuction?(c) }
164
- ).to eq(false)
165
- end
166
- end
167
-
168
- describe '#start_with_a_special_char?' do
169
- it 'returns true for all words starts with a special char' do
170
- special_words = turkish_words.map { |w| special_chars.sample + w }
171
- expect(special_words
172
- .all? { |word| start_with_a_special_char?(word) }
173
- ).to eq(true)
174
- end
175
-
176
- it 'returns false any words not starts with a special char' do
177
- expect(turkish_words
178
- .any? { |word| start_with_a_special_char?(word) }
179
- ).to eq(false)
180
- end
181
- end
182
-
183
- describe '#translate_range' do
184
- it 'translates a complete lower-case range correctly' do
185
- expect(translate_range('a-z')).to eq(downcased_alphabet)
186
- end
187
-
188
- it 'translates a complete upper-case range correctly' do
189
- expect(translate_range('A-Z')).to eq(upcased_alphabet)
190
- end
191
-
192
- it 'raises an error if any arguments not a letter' do
193
- invalid_arguments = %w(1-Z A-9 1-9 a-])
194
- expect(invalid_arguments
195
- .all? do |arg|
196
- expect { translate_range(arg) }
197
- .to raise_error ArgumentError,
198
- 'Invalid regexp range arguments!'
199
- end
200
- ).to eq(true)
201
- end
202
-
203
- it 'raises an error if arguments are not in same case' do
204
- expect { translate_range('a-Z') }
205
- .to raise_error ArgumentError,
206
- 'Invalid regexp range arguments!'
207
- end
208
-
209
- it 'translates a partial range correctly' do
210
- expect(translate_range('d-t'))
211
- .to eq('defgğhıijklmnoöpqrsşt')
212
- expect(translate_range('Ç-Ü'))
213
- .to eq('ÇDEFGĞHIİJKLMNOÖPQRSŞTUÜ')
214
- end
215
-
216
- it 'translates a range correctly when casefold option is true' do
217
- expect(translate_range('d-t', true))
218
- .to eq('defgğhıijklmnoöpqrsştĞIİÖŞ')
219
- expect(translate_range('C-U', true))
220
- .to eq('CÇDEFGĞHIİJKLMNOÖPQRSŞTUçğıiöş')
221
- end
222
-
223
- it 'translates ranges created using Turkish characters' do
224
- expect(translate_range('Ç-Ü', true))
225
- .to eq('ÇDEFGĞHIİJKLMNOÖPQRSŞTUÜçğıiöşü')
226
- expect(translate_range('ç-ü', true))
227
- .to eq('çdefgğhıijklmnoöpqrsştuüÇĞIİÖŞÜ')
228
- end
229
- end
230
-
231
- describe '#translate_regexp' do
232
- it 'translates simple regexp to include Turkish characters' do
233
- expect(translate_regexp(/\w+\s[a-h]/))
234
- .to eq(/[\p{Latin}\d_]+\s[abcçdefgğh]/)
235
- end
236
-
237
- it 'translates simple regexp range created with Turkish characters' do
238
- expect(translate_regexp(/[ç-ş]/))
239
- .to eq(/[çdefgğhıijklmnoöpqrsş]/)
240
- end
241
-
242
- it 'preserves flags' do
243
- expect(translate_regexp(/\w+/mixu))
244
- .to eq(/[\p{Latin}\d_]+/mixu)
245
- end
246
-
247
- it 'translates many range inside a character class' do
248
- expect(translate_regexp(/[a-ht-üy-z]/))
249
- .to eq(/[abcçdefgğhtuüyz]/)
250
- end
251
-
252
- it 'translates many range inside different character class' do
253
- expect(translate_regexp(/[a-ht-üy-z]\s[a-dr-z]/))
254
- .to eq(/[abcçdefgğhtuüyz]\s[abcçdrsştuüvwxyz]/)
255
- end
256
-
257
- it 'does not translate ranges outside character class' do
258
- expect(translate_regexp(/[a-h]+\se-h[ç-ş]afse-h+/))
259
- .to eq(/[abcçdefgğh]+\se-h[çdefgğhıijklmnoöpqrsş]afse-h+/)
260
- end
261
- end
262
- end