greek_abc 0.4.4 → 2.0.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 +4 -4
- data/.rubocop.yml +2 -0
- data/.yardopts +3 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +74 -33
- data/README.md +35 -48
- data/Steepfile +4 -0
- data/greek_abc.gemspec +12 -17
- data/lib/greek_abc/alphabet.rb +33 -37
- data/lib/greek_abc/constants.rb +6 -5
- data/lib/greek_abc/errors.rb +19 -0
- data/lib/greek_abc/letter.rb +34 -3
- data/lib/greek_abc/letter_lookup.rb +55 -0
- data/lib/greek_abc/version.rb +3 -1
- data/lib/greek_abc.rb +4 -4
- data/sig/greek_abc.rbs +62 -0
- metadata +28 -21
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4a8d90028ace5d4eba870e2928c93d3451a4f3f815ddb64fe1f4660aa6c9026d
|
|
4
|
+
data.tar.gz: e35ab039f0086b309fbd09c80e7c70299e3b12866f6cd9cf32c8964821e5f3db
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7aaf58156345da497974c0440f7b8ce9f789ebe2e35e24d610ff4beaf8ae7998ee2e98f49471f8fe13fed2a2d2bd34e395ef3a7467dfdb75b9938388929a56a3
|
|
7
|
+
data.tar.gz: 53bc55871d72b93762821a878d0755577279a9119b599331cc90f2f622abd43b9649cfbd11526b244475577003c2f9a2e54921b08260efae7197792045ae7682
|
data/.rubocop.yml
ADDED
data/.yardopts
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,63 +1,83 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
greek_abc (0.
|
|
4
|
+
greek_abc (2.0.0)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
|
+
activesupport (7.0.4.2)
|
|
10
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
11
|
+
i18n (>= 1.6, < 2)
|
|
12
|
+
minitest (>= 5.1)
|
|
13
|
+
tzinfo (~> 2.0)
|
|
9
14
|
ast (2.4.2)
|
|
10
15
|
backport (1.2.0)
|
|
11
|
-
benchmark (0.2.
|
|
16
|
+
benchmark (0.2.1)
|
|
17
|
+
concurrent-ruby (1.2.0)
|
|
18
|
+
csv (3.2.6)
|
|
12
19
|
diff-lcs (1.5.0)
|
|
13
20
|
e2mmap (0.1.0)
|
|
21
|
+
ffi (1.15.5)
|
|
22
|
+
fileutils (1.7.0)
|
|
23
|
+
i18n (1.12.0)
|
|
24
|
+
concurrent-ruby (~> 1.0)
|
|
14
25
|
jaro_winkler (1.5.4)
|
|
15
|
-
json (2.6.
|
|
26
|
+
json (2.6.3)
|
|
16
27
|
kramdown (2.4.0)
|
|
17
28
|
rexml
|
|
18
29
|
kramdown-parser-gfm (1.1.0)
|
|
19
30
|
kramdown (~> 2.0)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
31
|
+
language_server-protocol (3.17.0.3)
|
|
32
|
+
listen (3.8.0)
|
|
33
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
|
34
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
|
35
|
+
logger (1.5.3)
|
|
36
|
+
minitest (5.17.0)
|
|
37
|
+
nokogiri (1.14.1-arm64-darwin)
|
|
23
38
|
racc (~> 1.4)
|
|
24
39
|
parallel (1.22.1)
|
|
25
|
-
parser (3.
|
|
40
|
+
parser (3.2.1.0)
|
|
26
41
|
ast (~> 2.4.1)
|
|
27
|
-
racc (1.6.
|
|
42
|
+
racc (1.6.2)
|
|
28
43
|
rainbow (3.1.1)
|
|
29
44
|
rake (13.0.6)
|
|
30
|
-
|
|
45
|
+
rb-fsevent (0.11.2)
|
|
46
|
+
rb-inotify (0.10.1)
|
|
47
|
+
ffi (~> 1.0)
|
|
48
|
+
rbs (2.8.4)
|
|
49
|
+
regexp_parser (2.7.0)
|
|
31
50
|
reverse_markdown (2.1.1)
|
|
32
51
|
nokogiri
|
|
33
52
|
rexml (3.2.5)
|
|
34
|
-
rspec (3.
|
|
35
|
-
rspec-core (~> 3.
|
|
36
|
-
rspec-expectations (~> 3.
|
|
37
|
-
rspec-mocks (~> 3.
|
|
38
|
-
rspec-core (3.
|
|
39
|
-
rspec-support (~> 3.
|
|
40
|
-
rspec-expectations (3.
|
|
53
|
+
rspec (3.12.0)
|
|
54
|
+
rspec-core (~> 3.12.0)
|
|
55
|
+
rspec-expectations (~> 3.12.0)
|
|
56
|
+
rspec-mocks (~> 3.12.0)
|
|
57
|
+
rspec-core (3.12.1)
|
|
58
|
+
rspec-support (~> 3.12.0)
|
|
59
|
+
rspec-expectations (3.12.2)
|
|
41
60
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
42
|
-
rspec-support (~> 3.
|
|
43
|
-
rspec-mocks (3.
|
|
61
|
+
rspec-support (~> 3.12.0)
|
|
62
|
+
rspec-mocks (3.12.3)
|
|
44
63
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
45
|
-
rspec-support (~> 3.
|
|
46
|
-
rspec-support (3.
|
|
47
|
-
rubocop (1.
|
|
64
|
+
rspec-support (~> 3.12.0)
|
|
65
|
+
rspec-support (3.12.0)
|
|
66
|
+
rubocop (1.45.1)
|
|
48
67
|
json (~> 2.3)
|
|
49
68
|
parallel (~> 1.10)
|
|
50
|
-
parser (>= 3.
|
|
69
|
+
parser (>= 3.2.0.0)
|
|
51
70
|
rainbow (>= 2.2.2, < 4.0)
|
|
52
71
|
regexp_parser (>= 1.8, < 3.0)
|
|
53
72
|
rexml (>= 3.2.5, < 4.0)
|
|
54
|
-
rubocop-ast (>= 1.
|
|
73
|
+
rubocop-ast (>= 1.24.1, < 2.0)
|
|
55
74
|
ruby-progressbar (~> 1.7)
|
|
56
|
-
unicode-display_width (>=
|
|
57
|
-
rubocop-ast (1.
|
|
75
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
76
|
+
rubocop-ast (1.24.1)
|
|
58
77
|
parser (>= 3.1.1.0)
|
|
59
78
|
ruby-progressbar (1.11.0)
|
|
60
|
-
|
|
79
|
+
securerandom (0.2.2)
|
|
80
|
+
solargraph (0.48.0)
|
|
61
81
|
backport (~> 1.2)
|
|
62
82
|
benchmark
|
|
63
83
|
bundler (>= 1.17.2)
|
|
@@ -72,22 +92,43 @@ GEM
|
|
|
72
92
|
thor (~> 1.0)
|
|
73
93
|
tilt (~> 2.0)
|
|
74
94
|
yard (~> 0.9, >= 0.9.24)
|
|
95
|
+
steep (1.3.0)
|
|
96
|
+
activesupport (>= 5.1)
|
|
97
|
+
csv (>= 3.0.9)
|
|
98
|
+
fileutils (>= 1.1.0)
|
|
99
|
+
json (>= 2.1.0)
|
|
100
|
+
language_server-protocol (>= 3.15, < 4.0)
|
|
101
|
+
listen (~> 3.0)
|
|
102
|
+
logger (>= 1.3.0)
|
|
103
|
+
parallel (>= 1.0.0)
|
|
104
|
+
parser (>= 3.1)
|
|
105
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
106
|
+
rbs (>= 2.8.0)
|
|
107
|
+
securerandom (>= 0.1)
|
|
108
|
+
strscan (>= 1.0.0)
|
|
109
|
+
terminal-table (>= 2, < 4)
|
|
110
|
+
strscan (3.0.6)
|
|
111
|
+
terminal-table (3.0.2)
|
|
112
|
+
unicode-display_width (>= 1.1.1, < 3)
|
|
75
113
|
thor (1.2.1)
|
|
76
114
|
tilt (2.0.11)
|
|
77
|
-
|
|
115
|
+
tzinfo (2.0.6)
|
|
116
|
+
concurrent-ruby (~> 1.0)
|
|
117
|
+
unicode-display_width (2.4.2)
|
|
78
118
|
webrick (1.7.0)
|
|
79
119
|
yard (0.9.28)
|
|
80
120
|
webrick (~> 1.7.0)
|
|
81
121
|
|
|
82
122
|
PLATFORMS
|
|
83
|
-
|
|
123
|
+
arm64-darwin-22
|
|
84
124
|
|
|
85
125
|
DEPENDENCIES
|
|
86
|
-
bundler
|
|
126
|
+
bundler
|
|
87
127
|
greek_abc!
|
|
88
|
-
rake
|
|
89
|
-
rspec
|
|
90
|
-
solargraph
|
|
128
|
+
rake
|
|
129
|
+
rspec
|
|
130
|
+
solargraph
|
|
131
|
+
steep (~> 1.3)
|
|
91
132
|
|
|
92
133
|
BUNDLED WITH
|
|
93
|
-
2.
|
|
134
|
+
2.4.6
|
data/README.md
CHANGED
|
@@ -4,14 +4,21 @@
|
|
|
4
4
|
|
|
5
5
|
<img src=".logo.png" width="200px" align="right">
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Greek alphabet as a gem, nothing extra.
|
|
8
|
+
|
|
9
|
+
Well [documented](https://rubydoc.info/github/vladyio/greek_abc/master), covered with [tests](/spec)
|
|
10
|
+
and [RBS](/sig).
|
|
8
11
|
|
|
9
12
|
## Installation
|
|
10
13
|
|
|
14
|
+
> [Legacy v0.4.4](https://github.com/vladyio/greek_abc/tree/v0.4.4)
|
|
15
|
+
|
|
16
|
+
> Ruby `>= 2.7` is recommended
|
|
17
|
+
|
|
11
18
|
Add this line to your application's Gemfile:
|
|
12
19
|
|
|
13
20
|
```ruby
|
|
14
|
-
gem 'greek_abc'
|
|
21
|
+
gem 'greek_abc', '~> 2.0.0'
|
|
15
22
|
```
|
|
16
23
|
|
|
17
24
|
And then execute:
|
|
@@ -24,77 +31,57 @@ Or install it yourself as:
|
|
|
24
31
|
|
|
25
32
|
## Usage
|
|
26
33
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
#### Single letters
|
|
34
|
+
**🔤 Get an array of all letters**
|
|
30
35
|
|
|
31
36
|
```ruby
|
|
32
|
-
GreekABC::Alphabet.
|
|
33
|
-
|
|
34
|
-
GreekABC::Alphabet.omega # => #<GreekABC::Letter:0x0000557ef0e37a78 @position=24, @name="Omega", @lower="ω", @upper="Ω">
|
|
37
|
+
GreekABC::Alphabet.new.letters
|
|
35
38
|
```
|
|
36
39
|
|
|
37
|
-
|
|
40
|
+
**🔎 Look up a letter by attributes**
|
|
38
41
|
|
|
39
42
|
```ruby
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
psi = abc.find_letter_by(name: 'Psi') # => <..@lower="ψ", @name="Psi", @position=23, @upper="Ψ">
|
|
43
|
-
eta = abc.find_letter_by(position: 7) # => <..@lower="η", @name="Eta", @position=7, @upper="Η">
|
|
44
|
-
|
|
45
|
-
puts psi # => Letter #23 'Psi', lowercase 'ψ', uppercase 'Ψ'
|
|
43
|
+
GreekABC::Alphabet.new.find_letter(name: 'lambda')
|
|
44
|
+
GreekABC::Alphabet.new.find_letter(position: 5)
|
|
46
45
|
```
|
|
47
46
|
|
|
48
|
-
|
|
47
|
+
**🫳🏻 Easily reach for the letter attributes**
|
|
49
48
|
|
|
50
49
|
```ruby
|
|
51
|
-
|
|
50
|
+
l = GreekABC::Alphabet.new.find_letter(name: 'lambda')
|
|
52
51
|
|
|
53
|
-
|
|
54
|
-
omega = abc.find_letter_by(name: 'Omega').upper # => "Ω"
|
|
55
|
-
omega = abc.find_letter_by(name: 'Omega').position # => 24
|
|
56
|
-
|
|
57
|
-
alpha = abc.find_letter_by(position: 1).name # => "Alpha"
|
|
52
|
+
puts [l.name, l.position, l.lower]
|
|
58
53
|
```
|
|
59
54
|
|
|
60
|
-
|
|
55
|
+
**#️⃣ Get the ABC as a hash:**
|
|
61
56
|
|
|
62
57
|
```ruby
|
|
63
58
|
abc = GreekABC::Alphabet.new
|
|
64
|
-
puts abc.
|
|
59
|
+
puts abc.to_h # => {"Alpha"=>{:position=>1, :lower=>"α", :upper=>"Α" ...
|
|
65
60
|
```
|
|
66
61
|
|
|
67
|
-
|
|
62
|
+
**🖨️ Print print print!**
|
|
68
63
|
|
|
69
64
|
```ruby
|
|
70
|
-
|
|
71
|
-
puts abc.to_h # => {"Alpha"=>{:position=>1, :lower=>"α", :upper=>"Α"}
|
|
72
|
-
```
|
|
65
|
+
puts GreekABC::Alphabet.new.letters
|
|
73
66
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
abc = GreekABC::ALPHABET # => {"Alpha"=>"α", "Beta"=>"β", ...}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
- Lowercase letters
|
|
83
|
-
|
|
84
|
-
```ruby
|
|
85
|
-
abc = GreekABC::LOWERS # => ["α", "β", ...]
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
- Uppercase letters
|
|
89
|
-
|
|
90
|
-
```ruby
|
|
91
|
-
abc = GreekABC::UPPERS # => ["Α", "Β", ...]
|
|
67
|
+
# ...
|
|
68
|
+
# Letter #16 'Pi', lowercase 'π', uppercase 'Π'
|
|
69
|
+
# Letter #17 'Rho', lowercase 'ρ', uppercase 'Ρ'
|
|
70
|
+
# Letter #18 'Sigma', lowercase 'σ / ς', uppercase 'Σ'
|
|
71
|
+
# ...
|
|
92
72
|
```
|
|
93
73
|
|
|
94
|
-
|
|
74
|
+
**✨Alternative✨ lowercase Sigma support**
|
|
95
75
|
|
|
96
76
|
```ruby
|
|
97
|
-
|
|
77
|
+
GreekABC::Alphabet.new.find_letter(name: :sigma)
|
|
78
|
+
|
|
79
|
+
# <GreekABC::Letter:0x00000001078e4c90
|
|
80
|
+
# @lower="σ",
|
|
81
|
+
# @lower_alt="ς", <== cool, right?
|
|
82
|
+
# @name="Sigma",
|
|
83
|
+
# @position=18,
|
|
84
|
+
# @upper="Σ">
|
|
98
85
|
```
|
|
99
86
|
|
|
100
87
|
## Development
|
data/Steepfile
ADDED
data/greek_abc.gemspec
CHANGED
|
@@ -12,30 +12,25 @@ Gem::Specification.new do |spec|
|
|
|
12
12
|
spec.homepage = 'https://github.com/vladyio/greek_abc'
|
|
13
13
|
spec.license = 'MIT'
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
spec.metadata['allowed_push_host'] = 'https://rubygems.org/'
|
|
16
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
|
17
|
+
spec.metadata['source_code_uri'] = 'https://github.com/vladyio/greek_abc'
|
|
18
|
+
spec.metadata['changelog_uri'] = 'https://github.com/vladyio/greek_abc/blob/master/CHANGELOG.md'
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
else
|
|
24
|
-
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
|
25
|
-
'public gem pushes.'
|
|
26
|
-
end
|
|
20
|
+
spec.metadata['steep_types'] = 'sig'
|
|
21
|
+
|
|
22
|
+
spec.required_ruby_version = '>= 2.7.0'
|
|
27
23
|
|
|
28
24
|
# Specify which files should be added to the gem when it is released.
|
|
29
25
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
30
26
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
31
27
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
32
28
|
end
|
|
33
|
-
spec.bindir = '
|
|
34
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
29
|
+
spec.bindir = 'bin'
|
|
35
30
|
spec.require_paths = ['lib']
|
|
36
31
|
|
|
37
|
-
spec.add_development_dependency 'bundler'
|
|
38
|
-
spec.add_development_dependency 'rake'
|
|
39
|
-
spec.add_development_dependency 'rspec'
|
|
40
|
-
spec.add_development_dependency 'solargraph'
|
|
32
|
+
spec.add_development_dependency 'bundler'
|
|
33
|
+
spec.add_development_dependency 'rake'
|
|
34
|
+
spec.add_development_dependency 'rspec'
|
|
35
|
+
spec.add_development_dependency 'solargraph'
|
|
41
36
|
end
|
data/lib/greek_abc/alphabet.rb
CHANGED
|
@@ -1,60 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module GreekABC
|
|
4
|
+
#
|
|
5
|
+
# Alphabet representation
|
|
6
|
+
#
|
|
7
|
+
# @!attribute [r] letters
|
|
8
|
+
# @return [Array<Letter>] an array of all letters of the alphabet
|
|
2
9
|
class Alphabet
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
ALPHABET.map.with_index(1) do |(name, letter), index|
|
|
6
|
-
define_singleton_method(:"#{name.downcase}") do
|
|
7
|
-
Letter.new(position: index, name: name, lower: letter,
|
|
8
|
-
upper: letter.upcase)
|
|
9
|
-
end
|
|
10
|
-
end
|
|
10
|
+
attr_reader :letters
|
|
11
11
|
|
|
12
|
+
# Initialize an Alphabet object, a collection of all letters
|
|
13
|
+
#
|
|
14
|
+
# @return [Array<Letter>]
|
|
12
15
|
def initialize
|
|
13
|
-
@letters = ALPHABET.map.with_index(1) do |(name,
|
|
16
|
+
@letters = ALPHABET.map.with_index(1) do |(name, letter_variant), index|
|
|
17
|
+
# @type var letter_variant: String | Array[untyped]
|
|
18
|
+
letter = letter_variant[0]
|
|
19
|
+
letter_alt = letter_variant[1]
|
|
20
|
+
|
|
14
21
|
Letter.new(position: index, name: name, lower: letter,
|
|
15
|
-
upper: letter.upcase)
|
|
22
|
+
lower_alt: letter_alt, upper: letter.upcase)
|
|
16
23
|
end
|
|
17
24
|
end
|
|
18
25
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
letter if letter.send(parameter).downcase == value.downcase
|
|
29
|
-
else
|
|
30
|
-
letter if letter.send(parameter) == value
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
raise LetterNotFoundError, "Letter with `#{parameter}: #{value}` not found" unless result
|
|
35
|
-
|
|
36
|
-
result
|
|
26
|
+
# Finds a letter by given lookup parameteres
|
|
27
|
+
# @example
|
|
28
|
+
# GreekABC::Alphabet.new.find_letter(name: 'Lambda') # => #<GreekABC::Letter:...
|
|
29
|
+
# @param [Hash{Symbol => String, Integer, nil}] lookup_params
|
|
30
|
+
# A hash, with some {Letter} attribute as a key and desired lookup value
|
|
31
|
+
# @return [Letter]
|
|
32
|
+
# @see LetterLookup#find_letter
|
|
33
|
+
def find_letter(**lookup_params)
|
|
34
|
+
LetterLookup.new(letters).find_letter(**lookup_params)
|
|
37
35
|
end
|
|
38
36
|
|
|
37
|
+
# Hash representation of an alphabet
|
|
38
|
+
# @return [Hash{String => String, Integer}]
|
|
39
39
|
def to_h
|
|
40
|
-
|
|
40
|
+
letters.each_with_object({}) do |letter, hash|
|
|
41
41
|
hash[letter.name.to_s] = {
|
|
42
42
|
position: letter.position,
|
|
43
43
|
lower: letter.lower,
|
|
44
|
+
lower_alt: letter.lower_alt,
|
|
44
45
|
upper: letter.upper
|
|
45
46
|
}
|
|
46
47
|
end
|
|
47
48
|
end
|
|
48
49
|
|
|
50
|
+
# String representation of an alphabet
|
|
51
|
+
# @return [String]
|
|
49
52
|
def to_s
|
|
50
|
-
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
private
|
|
54
|
-
|
|
55
|
-
def letter_parameter?(parameter)
|
|
56
|
-
parameters = %i[name position lower upper]
|
|
57
|
-
parameters.include?(parameter)
|
|
53
|
+
letters
|
|
58
54
|
end
|
|
59
55
|
end
|
|
60
56
|
end
|
data/lib/greek_abc/constants.rb
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module GreekABC
|
|
4
|
+
#
|
|
5
|
+
# Hash of full letter names and their lowercase representation variant(s)
|
|
6
|
+
#
|
|
2
7
|
ALPHABET = {
|
|
3
8
|
'Alpha' => 'α',
|
|
4
9
|
'Beta' => 'β',
|
|
@@ -17,7 +22,7 @@ module GreekABC
|
|
|
17
22
|
'Omicron' => 'ο',
|
|
18
23
|
'Pi' => 'π',
|
|
19
24
|
'Rho' => 'ρ',
|
|
20
|
-
'Sigma' =>
|
|
25
|
+
'Sigma' => %w[σ ς],
|
|
21
26
|
'Tau' => 'τ',
|
|
22
27
|
'Upsilon' => 'υ',
|
|
23
28
|
'Phi' => 'φ',
|
|
@@ -25,8 +30,4 @@ module GreekABC
|
|
|
25
30
|
'Psi' => 'ψ',
|
|
26
31
|
'Omega' => 'ω'
|
|
27
32
|
}.freeze
|
|
28
|
-
|
|
29
|
-
LOWERS = ALPHABET.values.freeze
|
|
30
|
-
UPPERS = LOWERS.map(&:upcase).freeze
|
|
31
|
-
LOWERS_AND_UPPERS = (LOWERS + UPPERS).freeze
|
|
32
33
|
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module GreekABC
|
|
4
|
+
class GreekABCError < StandardError; end
|
|
5
|
+
|
|
6
|
+
# Raised when the lookup parameter is not a valid {Letter} attribute
|
|
7
|
+
class LetterLookupParamsError < GreekABCError
|
|
8
|
+
def initialize(wrong_parameter)
|
|
9
|
+
super("`#{wrong_parameter}` is not an existing letter attribute")
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Raised when the passed parameter and value didn't match any {Letter}
|
|
14
|
+
class LetterNotFoundError < GreekABCError
|
|
15
|
+
def initialize(parameter, value)
|
|
16
|
+
super("Letter with `#{parameter}: #{value}` was not found")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/greek_abc/letter.rb
CHANGED
|
@@ -1,16 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module GreekABC
|
|
4
|
+
#
|
|
5
|
+
# Represents a letter object
|
|
6
|
+
#
|
|
7
|
+
# @!attribute [r] position
|
|
8
|
+
# @return [Integer] letter position in the alphabet
|
|
9
|
+
# @!attribute [r] name
|
|
10
|
+
# @return [String] letter name
|
|
11
|
+
# @!attribute [r] lower
|
|
12
|
+
# @return [String] lowercase representation
|
|
13
|
+
# @!attribute [r] lower_alt
|
|
14
|
+
# @return [String, nil] lowercase alternative represenation, if exists
|
|
15
|
+
# @!attribute [r] upper
|
|
16
|
+
# @return [String] uppercase representation
|
|
2
17
|
class Letter
|
|
3
|
-
attr_reader :position, :name, :lower, :upper
|
|
18
|
+
attr_reader :position, :name, :lower, :lower_alt, :upper
|
|
4
19
|
|
|
5
|
-
|
|
20
|
+
# Initialize a new letter
|
|
21
|
+
#
|
|
22
|
+
# @param [Integer] position (see {position})
|
|
23
|
+
# @param [String] name (see {name})
|
|
24
|
+
# @param [String] lower (see {lower})
|
|
25
|
+
# @param [String] upper (see {upper})
|
|
26
|
+
# @param [String, nil] lower_alt (see {lower_alt})
|
|
27
|
+
# @return [Letter]
|
|
28
|
+
#
|
|
29
|
+
def initialize(position:, name:, lower:, upper:, lower_alt: nil)
|
|
6
30
|
@position = position
|
|
7
31
|
@name = name
|
|
8
32
|
@lower = lower
|
|
33
|
+
@lower_alt = lower_alt
|
|
9
34
|
@upper = upper
|
|
10
35
|
end
|
|
11
36
|
|
|
37
|
+
#
|
|
38
|
+
# String representation of a {Letter} object
|
|
39
|
+
# @return [String]
|
|
12
40
|
def to_s
|
|
13
|
-
|
|
41
|
+
lower_alt = " / #{@lower_alt}" if @lower_alt
|
|
42
|
+
|
|
43
|
+
"Letter ##{@position} '#{@name}', lowercase '#{@lower}" \
|
|
44
|
+
"#{lower_alt}', uppercase '#{@upper}'"
|
|
14
45
|
end
|
|
15
46
|
end
|
|
16
47
|
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module GreekABC
|
|
4
|
+
#
|
|
5
|
+
# Letter lookup utility class
|
|
6
|
+
# @!attribute [r] letters
|
|
7
|
+
# @return [Array<Letter>]
|
|
8
|
+
class LetterLookup
|
|
9
|
+
# @dynamic letters
|
|
10
|
+
attr_reader :letters
|
|
11
|
+
|
|
12
|
+
# All available letter attributes.
|
|
13
|
+
# @see #letter_parameter?
|
|
14
|
+
LOOKUP_PARAMETERS = %i[name position lower lower_alt upper].freeze
|
|
15
|
+
|
|
16
|
+
# @param [Array<Letters>] letters
|
|
17
|
+
# An array of letters generated by GreekABC::Alphabet.new.letters
|
|
18
|
+
def initialize(letters)
|
|
19
|
+
@letters = letters
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Finds a letter by given lookup parameteres
|
|
23
|
+
# @example
|
|
24
|
+
# letters = GreekABC::Alphabet.new.letters
|
|
25
|
+
# GreekABC::LetterLookup.new(letters).find_letter(name: 'Lambda') # => #<GreekABC::Letter:...
|
|
26
|
+
# @param [Hash{Symbol => String, Integer}] lookup_params
|
|
27
|
+
# A hash, with some {Letter} attribute as a key and desired lookup value
|
|
28
|
+
# @return [Letter]
|
|
29
|
+
# @raise [LetterLookupParamsError] if passed parameter is not an existing
|
|
30
|
+
# letter attribute
|
|
31
|
+
# @raise [LetterNotFoundError] if a letter with given parameters does not exist
|
|
32
|
+
# @see Alphabet#find_letter
|
|
33
|
+
def find_letter(**lookup_params) # rubocop:disable Metrics/AbcSize
|
|
34
|
+
# @type var lookup_params: Hash[Symbol | untyped, String | Integer | nil]
|
|
35
|
+
parameter = lookup_params.keys.first.to_sym
|
|
36
|
+
value = lookup_params.values.first
|
|
37
|
+
|
|
38
|
+
raise LetterLookupParamsError, parameter unless letter_parameter?(parameter)
|
|
39
|
+
|
|
40
|
+
result = letters.find do |letter|
|
|
41
|
+
letter if letter.send(parameter).to_s.downcase == value.to_s.downcase
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
raise LetterNotFoundError.new(parameter, value) unless result
|
|
45
|
+
|
|
46
|
+
result
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def letter_parameter?(parameter)
|
|
52
|
+
LOOKUP_PARAMETERS.include?(parameter)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
data/lib/greek_abc/version.rb
CHANGED
data/lib/greek_abc.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'greek_abc/version'
|
|
3
4
|
require 'greek_abc/constants'
|
|
5
|
+
require 'greek_abc/errors'
|
|
4
6
|
require 'greek_abc/letter'
|
|
7
|
+
require 'greek_abc/letter_lookup'
|
|
5
8
|
require 'greek_abc/alphabet'
|
|
6
9
|
|
|
7
10
|
module GreekABC
|
|
8
|
-
class GreekABCError < StandardError; end
|
|
9
|
-
class LetterLookupError < GreekABCError; end
|
|
10
|
-
class LetterNotFoundError < GreekABCError; end
|
|
11
11
|
end
|
data/sig/greek_abc.rbs
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module GreekABC
|
|
2
|
+
ALPHABET: Hash[String, String | Array[String]]
|
|
3
|
+
|
|
4
|
+
VERSION: String
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
module GreekABC
|
|
8
|
+
class Alphabet
|
|
9
|
+
attr_accessor letters: Array[GreekABC::Letter]
|
|
10
|
+
|
|
11
|
+
def initialize: () -> void
|
|
12
|
+
|
|
13
|
+
def find_letter: (**untyped lookup_params) -> GreekABC::Letter
|
|
14
|
+
|
|
15
|
+
def to_h: () -> Hash[String, String | Integer]
|
|
16
|
+
def to_s: () -> untyped
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module GreekABC
|
|
21
|
+
class GreekABCError < StandardError
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class LetterLookupParamsError < GreekABCError
|
|
25
|
+
def initialize: (Symbol wrong_parameter) -> void
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class LetterNotFoundError < GreekABCError
|
|
29
|
+
def initialize: (Symbol parameter, String | Integer | nil value) -> void
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
module GreekABC
|
|
34
|
+
class Letter
|
|
35
|
+
attr_reader position: Integer
|
|
36
|
+
attr_reader name: String
|
|
37
|
+
attr_reader lower: String
|
|
38
|
+
attr_reader lower_alt: String?
|
|
39
|
+
attr_reader upper: String
|
|
40
|
+
|
|
41
|
+
def initialize: (position: Integer, name: String, lower: String,
|
|
42
|
+
upper: String, ?lower_alt: String?) -> void
|
|
43
|
+
|
|
44
|
+
def to_s: () -> String
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
module GreekABC
|
|
49
|
+
class LetterLookup
|
|
50
|
+
attr_reader letters: Array[GreekABC::Letter]
|
|
51
|
+
|
|
52
|
+
LOOKUP_PARAMETERS: Array[Symbol]
|
|
53
|
+
|
|
54
|
+
def initialize: (Array[GreekABC::Letter] letters) -> untyped
|
|
55
|
+
|
|
56
|
+
def find_letter: (**untyped lookup_params) -> GreekABC::Letter
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
def letter_parameter?: (Symbol parameter) -> bool
|
|
61
|
+
end
|
|
62
|
+
end
|
metadata
CHANGED
|
@@ -1,71 +1,71 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: greek_abc
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vladislav Andreev
|
|
8
8
|
autorequire:
|
|
9
|
-
bindir:
|
|
9
|
+
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-02-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '0'
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - "
|
|
24
|
+
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
26
|
+
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - "
|
|
38
|
+
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
40
|
+
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rspec
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
54
|
+
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: solargraph
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 0
|
|
61
|
+
version: '0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - "
|
|
66
|
+
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0
|
|
68
|
+
version: '0'
|
|
69
69
|
description:
|
|
70
70
|
email:
|
|
71
71
|
- andreev@vlad.social
|
|
@@ -76,20 +76,26 @@ files:
|
|
|
76
76
|
- ".gitignore"
|
|
77
77
|
- ".logo.png"
|
|
78
78
|
- ".rspec"
|
|
79
|
+
- ".rubocop.yml"
|
|
80
|
+
- ".yardopts"
|
|
79
81
|
- CHANGELOG.md
|
|
80
82
|
- Gemfile
|
|
81
83
|
- Gemfile.lock
|
|
82
84
|
- LICENSE.txt
|
|
83
85
|
- README.md
|
|
84
86
|
- Rakefile
|
|
87
|
+
- Steepfile
|
|
85
88
|
- bin/console
|
|
86
89
|
- bin/setup
|
|
87
90
|
- greek_abc.gemspec
|
|
88
91
|
- lib/greek_abc.rb
|
|
89
92
|
- lib/greek_abc/alphabet.rb
|
|
90
93
|
- lib/greek_abc/constants.rb
|
|
94
|
+
- lib/greek_abc/errors.rb
|
|
91
95
|
- lib/greek_abc/letter.rb
|
|
96
|
+
- lib/greek_abc/letter_lookup.rb
|
|
92
97
|
- lib/greek_abc/version.rb
|
|
98
|
+
- sig/greek_abc.rbs
|
|
93
99
|
homepage: https://github.com/vladyio/greek_abc
|
|
94
100
|
licenses:
|
|
95
101
|
- MIT
|
|
@@ -98,6 +104,7 @@ metadata:
|
|
|
98
104
|
homepage_uri: https://github.com/vladyio/greek_abc
|
|
99
105
|
source_code_uri: https://github.com/vladyio/greek_abc
|
|
100
106
|
changelog_uri: https://github.com/vladyio/greek_abc/blob/master/CHANGELOG.md
|
|
107
|
+
steep_types: sig
|
|
101
108
|
post_install_message:
|
|
102
109
|
rdoc_options: []
|
|
103
110
|
require_paths:
|
|
@@ -106,14 +113,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
106
113
|
requirements:
|
|
107
114
|
- - ">="
|
|
108
115
|
- !ruby/object:Gem::Version
|
|
109
|
-
version:
|
|
116
|
+
version: 2.7.0
|
|
110
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
118
|
requirements:
|
|
112
119
|
- - ">="
|
|
113
120
|
- !ruby/object:Gem::Version
|
|
114
121
|
version: '0'
|
|
115
122
|
requirements: []
|
|
116
|
-
rubygems_version: 3.
|
|
123
|
+
rubygems_version: 3.4.6
|
|
117
124
|
signing_key:
|
|
118
125
|
specification_version: 4
|
|
119
126
|
summary: Greek alphabet manipulation gem
|