turkish_ranges 0.1.1 → 0.1.2
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 +4 -4
- data/CHANGELOG.md +12 -2
- data/Gemfile.lock +1 -1
- data/README.md +3 -0
- data/Rakefile +6 -0
- data/lib/turkish_ranges.rb +3 -3
- data/lib/turkish_ranges/tr_text.rb +44 -14
- data/lib/turkish_ranges/version.rb +1 -1
- data/spec/tr_text_spec.rb +3 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 386efc347ab40b587cc60ad3ca10f35fd9b5e04ceb8ad96603804d8bd3e69eca
|
4
|
+
data.tar.gz: 6dd8c9396b8b67c7782359839a6178d23acb232846b48c95d8c9cc4b3a6f8744
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95f5d95590fb60fb2b752dedb9a9924bc1f508f60dae4da0ed6d3eb7357bd8926900710fd501dbad46ed7d24729b4942dcf681ae28b49b9f54653eb9f8d1f723
|
7
|
+
data.tar.gz: e58b346c366cf4336fcc380220190796a5d665be7caa4db1f2124e9dc6b689d9c4a3cf85466c3f4aae9bf8d0215ef6004f2c09731da5399c0dacd11039f4d2b8
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,17 @@
|
|
1
|
-
|
1
|
+
# Changelog
|
2
|
+
## [Version 0.1.2](https://github.com/sbagdat/turkish_ranges/releases/tag/v0.1.1) (2020-11-24)
|
3
|
+
### Fixed
|
4
|
+
- Fix a bug related to string comparison [`e0a8754`](https://github.com/sbagdat/turkish_ranges/commit/e0a8754)
|
5
|
+
- Add an annotation to readme about current state of the project [`fbb69a4`](https://github.com/sbagdat/turkish_ranges/commit/fbb69a4)
|
6
|
+
### Removed
|
7
|
+
- Remove method: TrText#codepoints_sum - It was responsible for calculating total codepoints of each letter in the string [`e0a8754`](https://github.com/sbagdat/turkish_ranges/commit/e0a8754)
|
2
8
|
|
3
|
-
|
9
|
+
## [Version 0.1.1](https://github.com/sbagdat/turkish_ranges/releases/tag/v0.1.1) (2020-11-23)
|
10
|
+
### Fixed
|
11
|
+
- Fix paths in project's Gemfile [`001001f`](https://github.com/sbagdat/turkish_ranges/commit/001001f)
|
4
12
|
|
13
|
+
## [Version 0.1.0](https://github.com/sbagdat/turkish_ranges/releases/tag/v0.1.0) (2020-11-23)
|
14
|
+
### Added
|
5
15
|
- Capability to create ranges containing turkish characters [`f1f4c5b`](https://github.com/sbagdat/turkish_ranges/commit/f1f4c5b)
|
6
16
|
- Capability to compare string containing turkish characters [`f1f4c5b`](https://github.com/sbagdat/turkish_ranges/commit/f1f4c5b)
|
7
17
|
- Creating strings with TrText#new [`f1f4c5b`](https://github.com/sbagdat/turkish_ranges/CHANGELOG.md/commit/f1f4c5b)
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -7,6 +7,9 @@
|
|
7
7
|
|
8
8
|
Ranges and comparisons meet Turkish language.
|
9
9
|
|
10
|
+
**NOTICE:** This gem can create one-dimensional ranges like `a`..`z` and multi-dimensional ranges like `aa`..`az`. It can't
|
11
|
+
create complex ranges like `a`..`abc` right now. I have intended to add this feature in the near future.
|
12
|
+
|
10
13
|
## Installation
|
11
14
|
|
12
15
|
Add this line to your application's Gemfile:
|
data/Rakefile
CHANGED
data/lib/turkish_ranges.rb
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
require 'turkish_ranges/version'
|
4
4
|
require 'turkish_ranges/tr_text'
|
5
5
|
|
6
|
-
# Responsible for generating ranges
|
7
|
-
# like ş, ç, ğ,
|
6
|
+
# Responsible for generating ranges containing Turkish specific chars
|
7
|
+
# like ş, ç, ğ, etc and comparing strings, they're containing Turkish
|
8
|
+
# specific chars, too.
|
8
9
|
module TurkishRanges
|
9
10
|
end
|
10
|
-
|
@@ -7,9 +7,7 @@ module TurkishRanges
|
|
7
7
|
|
8
8
|
# Sets the letters for the `TrText`.
|
9
9
|
# @return [String] character sequence
|
10
|
-
attr_reader :letters
|
11
|
-
|
12
|
-
private :letters
|
10
|
+
attr_reader :letters, :letters_length
|
13
11
|
|
14
12
|
# Using for character mapping
|
15
13
|
MAP = 'DHJPTVdhiptvÈğıØşÝèĠIJøŠý'.chars.zip('ÇĞİÖŞÜçğıöşüDHJPTVdhiptv'.chars).to_h.freeze
|
@@ -24,14 +22,17 @@ module TurkishRanges
|
|
24
22
|
# @return [TrText]
|
25
23
|
def initialize(letters)
|
26
24
|
@letters = letters
|
25
|
+
@letters_length = letters.length
|
27
26
|
end
|
28
27
|
|
29
28
|
# Using for object comparison
|
30
29
|
#
|
31
30
|
# @param [TrText] other
|
32
|
-
#
|
31
|
+
# @return [Integer] 1, 0 or -1
|
33
32
|
def <=>(other)
|
34
|
-
|
33
|
+
return 0 if letters == other.letters
|
34
|
+
|
35
|
+
compare_chars(zip_chars_with(other))
|
35
36
|
end
|
36
37
|
|
37
38
|
# Calculates codepoint of a single characacter based on ASCII_ALPHABET
|
@@ -41,13 +42,6 @@ module TurkishRanges
|
|
41
42
|
ASCII_ALPHABET[letters] || letters&.ord.to_i
|
42
43
|
end
|
43
44
|
|
44
|
-
# Calculates the sum of codepoints in letters
|
45
|
-
#
|
46
|
-
# @return [Integer]
|
47
|
-
def codepoints_sum
|
48
|
-
letters.chars.map { TrText.new(_1) }.map(&:code).inject(:+)
|
49
|
-
end
|
50
|
-
|
51
45
|
# Calculates the successor string from `letters`
|
52
46
|
#
|
53
47
|
# @return [String]
|
@@ -78,7 +72,43 @@ module TurkishRanges
|
|
78
72
|
def inspect
|
79
73
|
letters
|
80
74
|
end
|
75
|
+
|
76
|
+
protected
|
77
|
+
|
78
|
+
# Creates a zipped array from letters
|
79
|
+
#
|
80
|
+
# @param [TrText] other
|
81
|
+
# @return [Array] contains char pairs of each letters
|
82
|
+
def zip_chars_with(other)
|
83
|
+
max_length = [letters_length, other.letters_length].max
|
84
|
+
left_side = letters.ljust(max_length).chars
|
85
|
+
right_side = other.letters.ljust(max_length).chars
|
86
|
+
left_side.zip(right_side)
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
# Compares left and right side of spaceship operator
|
92
|
+
# If left side is bigger than right side returns 1,
|
93
|
+
# otherwise returns -1
|
94
|
+
#
|
95
|
+
# @param [Array] zipped_chars
|
96
|
+
# @return [Integer] 1 or -1
|
97
|
+
def compare_chars(zipped_chars)
|
98
|
+
zipped_chars.each do |char_pairs|
|
99
|
+
left, right = char_pairs
|
100
|
+
next if left == right
|
101
|
+
|
102
|
+
return single_char(left).code > single_char(right).code ? 1 : -1
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Creates an instance of TrText
|
107
|
+
#
|
108
|
+
# @param [String] letter
|
109
|
+
# @return [TrText]
|
110
|
+
def single_char(letter)
|
111
|
+
self.class.new(letter)
|
112
|
+
end
|
81
113
|
end
|
82
114
|
end
|
83
|
-
|
84
|
-
(TurkishRanges::TrText.new("a")..TurkishRanges::TrText.new("z")).to_a
|
data/spec/tr_text_spec.rb
CHANGED
@@ -19,12 +19,6 @@ RSpec.describe 'TrLetterSpec' do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
context '#codepoints_sum' do
|
23
|
-
it 'returns total codepoints of letters' do
|
24
|
-
expect(TrText.new('ABCÇ').codepoints_sum).to eq 65 + 66 + 67 + 68
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
22
|
context 'when doing comparisons' do
|
29
23
|
it 'can compare two letters' do
|
30
24
|
expect(TrText.new('Ş') > TrText.new('Ğ')).to be true
|
@@ -60,9 +54,9 @@ RSpec.describe 'TrLetterSpec' do
|
|
60
54
|
expect(upper_case_range.to_a.join).to eq g_to_u_upper_case
|
61
55
|
end
|
62
56
|
|
63
|
-
it 'creates
|
64
|
-
z_to_ad_lower_case = '
|
65
|
-
z_to_ad_upper_case = '
|
57
|
+
it 'creates empty range if left side is bigger' do
|
58
|
+
z_to_ad_lower_case = ''
|
59
|
+
z_to_ad_upper_case = ''
|
66
60
|
lower_case_range = TrText.new('z')..TrText.new('ad')
|
67
61
|
upper_case_range = TrText.new('Z')..TrText.new('AD')
|
68
62
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turkish_ranges
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
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: 2020-11-
|
11
|
+
date: 2020-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Ranges and string comparisons meet Turkish language. You can use it anywhere
|
14
14
|
in your code, Range, Regexp, etc..
|