genius-api 0.3.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.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
  3. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
  5. data/.github/PULL_REQUEST_TEMPLATE.md +23 -0
  6. data/.github/workflows/check-source-branch.yml +8 -0
  7. data/.github/workflows/ci.yml +38 -0
  8. data/.gitignore +15 -0
  9. data/.rspec +3 -0
  10. data/.rubocop.yml +20 -0
  11. data/.ruby-version +1 -0
  12. data/CHANGELOG.md +37 -0
  13. data/CODE_OF_CONDUCT.md +106 -0
  14. data/CONTRIBUTING.md +368 -0
  15. data/Gemfile +7 -0
  16. data/Gemfile.lock +174 -0
  17. data/LICENSE.txt +674 -0
  18. data/README.md +288 -0
  19. data/SECURITY.md +14 -0
  20. data/Steepfile +13 -0
  21. data/bin/console +15 -0
  22. data/bin/release +5 -0
  23. data/bin/setup +21 -0
  24. data/docscribe.yml +9 -0
  25. data/exe/genius-api +4 -0
  26. data/genius-api.gemspec +47 -0
  27. data/lib/extensions/deep_find.rb +36 -0
  28. data/lib/extensions/extensions.rb +12 -0
  29. data/lib/extensions/options_helper.rb +17 -0
  30. data/lib/extensions/token_ext.rb +12 -0
  31. data/lib/extensions/unescape.rb +13 -0
  32. data/lib/genius/api/account.rb +35 -0
  33. data/lib/genius/api/annotations.rb +90 -0
  34. data/lib/genius/api/artists.rb +82 -0
  35. data/lib/genius/api/authorization.rb +47 -0
  36. data/lib/genius/api/errors.rb +211 -0
  37. data/lib/genius/api/referents.rb +38 -0
  38. data/lib/genius/api/search.rb +26 -0
  39. data/lib/genius/api/songs.rb +84 -0
  40. data/lib/genius/api/version.rb +8 -0
  41. data/lib/genius/api/web_pages.rb +26 -0
  42. data/lib/genius/api.rb +23 -0
  43. data/rbs_collection.lock.yaml +232 -0
  44. data/rbs_collection.yaml +14 -0
  45. data/sig/lib/extensions/deep_find.rbs +30 -0
  46. data/sig/lib/extensions/options_helper.rbs +3 -0
  47. data/sig/lib/extensions/token_ext.rbs +3 -0
  48. data/sig/lib/extensions/unescape.rbs +3 -0
  49. data/sig/lib/genius/api/account.rbs +23 -0
  50. data/sig/lib/genius/api/annotations.rbs +13 -0
  51. data/sig/lib/genius/api/artists.rbs +15 -0
  52. data/sig/lib/genius/api/authorization.rbs +11 -0
  53. data/sig/lib/genius/api/errors.rbs +46 -0
  54. data/sig/lib/genius/api/referents.rbs +7 -0
  55. data/sig/lib/genius/api/search.rbs +5 -0
  56. data/sig/lib/genius/api/songs.rbs +15 -0
  57. data/sig/lib/genius/api/version.rbs +5 -0
  58. data/sig/lib/genius/api/web_pages.rbs +5 -0
  59. data/sig/lib/genius/api.rbs +9 -0
  60. metadata +313 -0
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,368 @@
1
+ # Project code style
2
+
3
+ This file includes code style references which can help when contributing to project.
4
+
5
+ ## Documentation content
6
+
7
+ 1. [Overview][1]
8
+ 2. [Project structure][2]
9
+ 1. [Outer layer][2.1]
10
+ 2. [Inner layer][2.2]
11
+ 3. [Extensions][2.3]
12
+ 4. [Rakelib][2.4]
13
+ 3. [Naming convention][3]
14
+ 1. [File naming][3.1]
15
+ 2. [Module naming][3.2]
16
+ 3. [Class naming][3.3]
17
+ 4. [Parameters naming][3.4]
18
+ 5. [Variables naming][3.5]
19
+ 4. [Code semantics][4]
20
+ 1. [Define modules][4.1]
21
+ 2. [Define classes][4.2]
22
+ 3. [Define methods][4.3]
23
+ 5. [Contributing][5]
24
+ 1. [Git commits][5.1]
25
+ 2. [RuboCop][5.2]
26
+ 3. [RSpec][5.3]
27
+ 4. [Docscribe][5.4]
28
+ 5. [RBS][5.5]
29
+ 6. [Steep][5.6]
30
+ 6. [TODO][6]
31
+ 7. [License][7]
32
+
33
+ ## Overview
34
+
35
+ This project will show patterns and tips to contribute in this project. Feel free to contribute there!
36
+
37
+ ## Project structure
38
+
39
+ The project tree consists of several directories. Some of them are described at
40
+ RubyGems [documentation](https://guides.rubygems.org/make-your-own-gem/). See it for clearance.
41
+
42
+ Folder structure in the `lib` directory deserves special attention. There are two other folders there — `lib/extensions`
43
+ and `lib/genius`, the last of which is divided into two more layers - outer and inner. The `api.rb` file (referred as
44
+ the main file) acts as the outer layer, into which the entire interface is imported which is defined in inner layer
45
+ referred as `lib/genius/api` folder.
46
+
47
+ ### Outer layer
48
+
49
+ As mentioned above, the outer layer consists of only one main file where other files are included. The file consists of
50
+ a main module and its submodule to preserve the structure of the project tree, as indicated in the
51
+ RubyGems [documentation](https://guides.rubygems.org/patterns/#consistent-naming). The other files act as a category for
52
+ the main module which is called `Genius`. Outer layer is stored in `lib/genius`
53
+
54
+ ### Inner layer
55
+
56
+ The inner layer is a kind of bunch of interfaces and extensions (categories) for the main module. Each of the interface
57
+ is named after the resource in [Genius API documentation](https://docs.genius.com). Inner layer is stored
58
+ in `lib/genius/api`.
59
+
60
+ ### Extensions
61
+
62
+ Extensions are the files which represents the methods which are used in a bunch of other methods in the inner layer.
63
+ This kind of interfaces were bundled in a separate folder for multiple reuse in other methods. They are not a part of
64
+ the `Genius` module interface, so it means that they are a category to other structures (`Hash`, `Object` or `String`
65
+ classes). Extensions are stored in `lib/extensions`.
66
+
67
+ ### Rakelib
68
+
69
+ Rakelib is another sort of extensions but it is used for generating the documentation. Note that the files in this
70
+ directory are distributed under the BSD license!
71
+
72
+ ## Naming convention
73
+
74
+ This paragraph will show the main conventions in naming of some structures or objects, such as files, classes, variables
75
+ to represent their semantics more clear.
76
+
77
+ ### File naming
78
+
79
+ The files are named after the resource from the [Genius API documentation](https://docs.genius.com). File names should
80
+ not contain uppercase letters or contain non-letter characters except for the underscore. All files should be stored in
81
+ the [inner layer](https://github.com/unurgunite/genius-api/CODESTYLE.md#inner-layer).
82
+
83
+ ### Module naming
84
+
85
+ Modules should be defined inside the `Genius` module — a top-level project module — and they should be named after the
86
+ filename where they defined.
87
+
88
+ ### Class naming
89
+
90
+ For the most part, classes are used to represent errors and they are stored in the inner layers file — `api/errors.rb`.
91
+ Each of this classes must end with the word `Error`.
92
+
93
+ ### Parameters naming
94
+
95
+ Parameters should be named as a keyword arguments. This rule does not apply to private methods.
96
+ See: [Style/OptionHash](https://www.rubydoc.info/github/bbatsov/RuboCop/RuboCop/Cop/Style/OptionHash)
97
+
98
+ ### Variables naming
99
+
100
+ Variables should be named as in a style guide of the RuboCop.
101
+ See: [Naming/VariableName](https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Naming/VariableName)
102
+
103
+ ## Code semantics
104
+
105
+ This paragraph will show some of the style guides for defining some sorts of the structures.
106
+
107
+ ### Define modules
108
+
109
+ All of the modules defined as a category for the main module `Genius`. For e.g., `Genius::Account`
110
+
111
+ ```ruby
112
+ # lib/genius/api/account.rb
113
+ module Genius # :nodoc:
114
+ module Account # :nodoc:
115
+ # some interface
116
+ end
117
+ end
118
+ ```
119
+
120
+ Among other things, modules must have documentation on the top of them. Documentation should consist of a brief
121
+ description of the module, its semantics and the semantics of its interface - objects that the module uses, extensions,
122
+ etc. For e.g.,
123
+
124
+ ```ruby
125
+ # This module reflects the structure of our world, consisting of a class of people and a class of animals.
126
+ module World
127
+ class Animal # :nodoc:
128
+ # some interface
129
+ end
130
+
131
+ class Human # :nodoc:
132
+ # some interface
133
+ end
134
+ end
135
+ ```
136
+
137
+ If no documentation is attached to the module, then a special tag in the form of a comment should be placed next to its
138
+ name, indicating this — `# :nodoc:`. In instance,
139
+
140
+ ```ruby
141
+
142
+ module A # :nodoc:
143
+ # some interface
144
+ end
145
+ ```
146
+
147
+ ### Define classes
148
+
149
+ As mentioned above, classes are usually represents error objects. This classes should be stored in a separate file
150
+ — `lib/genius/errors.rb`, they must be inherited from the `Genius::Errors::GeniusExceptionSuperClass` which in turn is
151
+ inherited from `StandardError` and they must have at least two readable attributes — `:msg` and `:exception_type`.
152
+ Moreover, this constructor must invoke method `super(message)`. Declaration of more arguments for debugging or
153
+ additional info to represent while error raised is optional. An example interface logic for such a class would be as
154
+ follows:
155
+
156
+ ```ruby
157
+
158
+ class SomeError < GeniusExceptionSuperClass # :nodoc:
159
+ attr_reader :msg, :exception_type, :some_useful_argument
160
+
161
+ # @param [String (frozen)] msg Exception message.
162
+ # @param [String (frozen)] exception_type Exception type.
163
+ # @param [String (frozen)] some_useful_argument Some useful stuff for debugging.
164
+ # @return [String (frozen)]
165
+ def initialize(msg: "Some error message.", exception_type: "some_exception_error", some_useful_argument: nil)
166
+ super(message)
167
+ @msg = msg + some_useful_argument
168
+ @exception_type = exception_type
169
+ end
170
+ end
171
+ ```
172
+
173
+ As modules, classes must have documentation on top of them and if there is no documentation was attached (in instance,
174
+ if there is a category for built-in objects as `Hash` or `String` classes) there should be a special tag inside a
175
+ comment which should be placed next to the class name — `# :nodoc:`.
176
+
177
+ ### Define methods
178
+
179
+ Methods, among other structures, must have at least some documentation, consisting of at least its signature, as well as
180
+ the arguments that the method takes. The documentation must be written in a specific syntax, according to
181
+ the [YARD documentation](https://www.rubydoc.info/gems/yard/file/docs/Tags.md). This rule is specific for methods inside
182
+ classes interface if they are object constructors, because they always point to the instance declaration, so they do not
183
+ require explicit specification of their signature at the top of the comments section. For this sort of methods the
184
+ return type can be omitted.
185
+
186
+ Required YARD tags to indicate and theirs abstract syntax:
187
+
188
+ - `@param [Class] param_name documentation.`
189
+ - `@raise [ExceptionClass] if something went wrong.`
190
+ - `@return [Class]`
191
+
192
+ Required YARD tags to indicate and theirs abstract syntax:
193
+
194
+ - `@private`
195
+ - `@example Example usage`
196
+ - `@option variable_name [Class] :option documentation.`
197
+ - `@see #method_name`
198
+
199
+ Example for regular singleton methods (inside modules)
200
+
201
+ ```ruby
202
+
203
+ module M # :nodoc:
204
+ module A # :nodoc:
205
+ class << self
206
+ # +M::A.foo+ -> Integer
207
+ #
208
+ # Method documenation.
209
+ #
210
+ # @param [Integer] arg1 First integer argument.
211
+ # @param [Integer] arg2 Second integer argument.
212
+ # @raise [RuntimeError] if one of the argument is not an integer.
213
+ # @return [Integer]
214
+ def foo(arg1: nil, arg2: nil)
215
+ unless arg1.is_a?(Integer) || arg2.is_a?(Integer)
216
+ raise RuntimeError, 'Some error was raised'
217
+ end
218
+ arg1 + arg2
219
+ rescue RuntimeError => e
220
+ e.message
221
+ end
222
+ end
223
+ end
224
+ end
225
+ ```
226
+
227
+ Example for regular constructors.
228
+
229
+ ```ruby
230
+
231
+ class SomeError < GeniusExceptionSuperClass # :nodoc:
232
+ attr_reader :msg, :exception_type, :some_useful_argument
233
+
234
+ # @param [String (frozen)] msg Exception message.
235
+ # @param [String (frozen)] exception_type Exception type.
236
+ # @param [String (frozen)] some_useful_argument Some useful stuff for debugging.
237
+ # @return [String (frozen)]
238
+ def initialize(msg: "Some error message.", exception_type: "some_exception_error", some_useful_argument: nil)
239
+ super(message)
240
+ @msg = msg + some_useful_argument
241
+ @exception_type = exception_type
242
+ end
243
+ end
244
+ ```
245
+
246
+ ## Contributing
247
+
248
+ This section will demonstrate the rules for contributing in project
249
+
250
+ ### Git commits
251
+
252
+ Git commits should clearly describe the purpose of your commit. For example, commits as _"Do smth"_ or _"Refactored some
253
+ files"_ do not actually represent theirs content. Commits as _"Refactored `README.md`"_ reflects theirs content, so it
254
+ will be unused to delve into the purpose of the commit most of the time.
255
+
256
+ ### RuboCop
257
+
258
+ See: [RuboCop documentation](https://docs.rubocop.org/rubocop/index.html)
259
+
260
+ Before pushing, you must be sure that the code you write is correct, so it should always be formatted through a static
261
+ analyzer. Look towards the `rubocop -D` and `rubocop -A` commands.
262
+
263
+ ### RSpec
264
+
265
+ Before pushing, run the test suite to ensure nothing is broken:
266
+
267
+ ```shell
268
+ bundle exec rspec
269
+ ```
270
+
271
+ The test suite currently has 84 examples with 0 failures.
272
+
273
+ ### Docscribe
274
+
275
+ Docscribe keeps YARD annotations in sync with the codebase. After making changes to method signatures, run:
276
+
277
+ ```shell
278
+ bundle exec docscribe lib
279
+ ```
280
+
281
+ This will check for missing or outdated documentation. To regenerate annotations automatically:
282
+
283
+ ```shell
284
+ bundle exec docscribe -A --rbs-collection lib
285
+ ```
286
+
287
+ The project's docscribe configuration is in `docscribe.yml` at the project root.
288
+
289
+ ### RBS
290
+
291
+ RBS type signatures are located in `sig/` directory. After adding or changing methods, update the corresponding `.rbs`
292
+ files. Validate signatures with:
293
+
294
+ ```shell
295
+ bundle exec rbs validate
296
+ ```
297
+
298
+ ### Steep
299
+
300
+ Steep performs static type checking using RBS signatures. Run the type checker:
301
+
302
+ ```shell
303
+ bundle exec steep check
304
+ ```
305
+
306
+ All type errors must be resolved before committing.
307
+
308
+ ## TODO
309
+
310
+ - [ ] Look at the documentation with fresh eyes
311
+ - [ ] Check the file for all sorts of errors
312
+
313
+ ## License
314
+
315
+ The documentation is available as open source under the terms of
316
+ the [CC BY-SA 4.0 License](https://creativecommons.org/licenses/by-sa/4.0/)
317
+
318
+ ![CC BY-SA 4.0](https://mirrors.creativecommons.org/presskit/buttons/88x31/svg/by-nc.svg)
319
+
320
+ [1]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#overview
321
+
322
+ [2]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#project-structure
323
+
324
+ [2.1]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#outer-layer
325
+
326
+ [2.2]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#inner-layer
327
+
328
+ [2.3]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#extensions
329
+
330
+ [2.4]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#rakelib
331
+
332
+ [3]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#naming-convention
333
+
334
+ [3.1]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#file-naming
335
+
336
+ [3.2]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#module-naming
337
+
338
+ [3.3]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#class-naming
339
+
340
+ [3.4]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#parameters-naming
341
+
342
+ [3.5]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#variables-naming
343
+
344
+ [4]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#code-semantics
345
+
346
+ [4.1]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#define-modules
347
+
348
+ [4.2]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#define-classes
349
+
350
+ [4.3]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#define-methods
351
+
352
+ [5]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#contributing
353
+
354
+ [5.1]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#git-commits
355
+
356
+ [5.2]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#rubocop
357
+
358
+ [5.3]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#rspec
359
+
360
+ [5.4]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#docscribe
361
+
362
+ [5.5]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#rbs
363
+
364
+ [5.6]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#steep
365
+
366
+ [6]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#todo
367
+
368
+ [7]:https://github.com/unurgunite/genius-api/blob/master/CONTRIBUTING.md#license
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
6
+
7
+ gem 'parallel', '< 2.0' # 2.0+ requires Ruby >= 3.3
data/Gemfile.lock ADDED
@@ -0,0 +1,174 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ genius-api (0.3.0)
5
+ httparty (~> 0.21)
6
+ nokogiri
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ ast (2.4.3)
12
+ bigdecimal (4.1.2)
13
+ coderay (1.1.3)
14
+ concurrent-ruby (1.3.6)
15
+ csv (3.3.5)
16
+ diff-lcs (1.6.2)
17
+ docscribe (1.4.1)
18
+ parser (>= 3.3)
19
+ prism (~> 1.8)
20
+ dotenv (2.7.6)
21
+ ffi (1.17.4-aarch64-linux-gnu)
22
+ ffi (1.17.4-aarch64-linux-musl)
23
+ ffi (1.17.4-arm-linux-gnu)
24
+ ffi (1.17.4-arm-linux-musl)
25
+ ffi (1.17.4-arm64-darwin)
26
+ ffi (1.17.4-x86_64-darwin)
27
+ ffi (1.17.4-x86_64-linux-gnu)
28
+ ffi (1.17.4-x86_64-linux-musl)
29
+ fileutils (1.8.0)
30
+ httparty (0.24.2)
31
+ csv
32
+ mini_mime (>= 1.0.0)
33
+ multi_xml (>= 0.5.2)
34
+ json (2.19.9)
35
+ language_server-protocol (3.17.0.5)
36
+ lint_roller (1.1.0)
37
+ listen (3.10.0)
38
+ logger
39
+ rb-fsevent (~> 0.10, >= 0.10.3)
40
+ rb-inotify (~> 0.9, >= 0.9.10)
41
+ logger (1.7.0)
42
+ mini_mime (1.1.5)
43
+ multi_xml (0.9.1)
44
+ bigdecimal (>= 3.1, < 5)
45
+ nokogiri (1.19.3-aarch64-linux-gnu)
46
+ racc (~> 1.4)
47
+ nokogiri (1.19.3-aarch64-linux-musl)
48
+ racc (~> 1.4)
49
+ nokogiri (1.19.3-arm-linux-gnu)
50
+ racc (~> 1.4)
51
+ nokogiri (1.19.3-arm-linux-musl)
52
+ racc (~> 1.4)
53
+ nokogiri (1.19.3-arm64-darwin)
54
+ racc (~> 1.4)
55
+ nokogiri (1.19.3-x86_64-darwin)
56
+ racc (~> 1.4)
57
+ nokogiri (1.19.3-x86_64-linux-gnu)
58
+ racc (~> 1.4)
59
+ nokogiri (1.19.3-x86_64-linux-musl)
60
+ racc (~> 1.4)
61
+ parallel (1.28.0)
62
+ parser (3.3.11.1)
63
+ ast (~> 2.4.1)
64
+ racc
65
+ prism (1.9.0)
66
+ racc (1.8.1)
67
+ rainbow (3.1.1)
68
+ rake (13.4.2)
69
+ rb-fsevent (0.11.2)
70
+ rb-inotify (0.11.1)
71
+ ffi (~> 1.0)
72
+ rbs (4.0.2)
73
+ logger
74
+ prism (>= 1.6.0)
75
+ tsort
76
+ regexp_parser (2.12.0)
77
+ rspec (3.13.2)
78
+ rspec-core (~> 3.13.0)
79
+ rspec-expectations (~> 3.13.0)
80
+ rspec-mocks (~> 3.13.0)
81
+ rspec-core (3.13.6)
82
+ rspec-support (~> 3.13.0)
83
+ rspec-expectations (3.13.5)
84
+ diff-lcs (>= 1.2.0, < 2.0)
85
+ rspec-support (~> 3.13.0)
86
+ rspec-mocks (3.13.8)
87
+ diff-lcs (>= 1.2.0, < 2.0)
88
+ rspec-support (~> 3.13.0)
89
+ rspec-support (3.13.7)
90
+ rubocop (1.87.0)
91
+ json (~> 2.3)
92
+ language_server-protocol (~> 3.17.0.2)
93
+ lint_roller (~> 1.1.0)
94
+ parallel (>= 1.10)
95
+ parser (>= 3.3.0.2)
96
+ rainbow (>= 2.2.2, < 4.0)
97
+ regexp_parser (>= 2.9.3, < 3.0)
98
+ rubocop-ast (>= 1.49.0, < 2.0)
99
+ ruby-progressbar (~> 1.7)
100
+ unicode-display_width (>= 2.4.0, < 4.0)
101
+ rubocop-ast (1.49.1)
102
+ parser (>= 3.3.7.2)
103
+ prism (~> 1.7)
104
+ rubocop-performance (1.26.1)
105
+ lint_roller (~> 1.1)
106
+ rubocop (>= 1.75.0, < 2.0)
107
+ rubocop-ast (>= 1.47.1, < 2.0)
108
+ rubocop-rake (0.7.1)
109
+ lint_roller (~> 1.1)
110
+ rubocop (>= 1.72.1)
111
+ rubocop-rspec (3.10.2)
112
+ lint_roller (~> 1.1)
113
+ regexp_parser (>= 2.0)
114
+ rubocop (~> 1.86, >= 1.86.2)
115
+ rubocop-sorted_methods_by_call (1.2.3)
116
+ lint_roller
117
+ rubocop (>= 1.72.0)
118
+ ruby-progressbar (1.13.0)
119
+ securerandom (0.4.1)
120
+ steep (2.0.0)
121
+ concurrent-ruby (>= 1.1.10)
122
+ csv (>= 3.0.9)
123
+ fileutils (>= 1.1.0)
124
+ json (>= 2.1.0)
125
+ language_server-protocol (>= 3.17.0.4, < 4.0)
126
+ listen (~> 3.0)
127
+ logger (>= 1.3.0)
128
+ parser (>= 3.2)
129
+ prism (>= 0.25.0)
130
+ rainbow (>= 2.2.2, < 4.0)
131
+ rbs (~> 4.0)
132
+ securerandom (>= 0.1)
133
+ strscan (>= 1.0.0)
134
+ terminal-table (>= 2, < 5)
135
+ uri (>= 0.12.0)
136
+ strscan (3.1.8)
137
+ terminal-table (4.0.0)
138
+ unicode-display_width (>= 1.1.1, < 4)
139
+ tsort (0.2.0)
140
+ unicode-display_width (3.2.0)
141
+ unicode-emoji (~> 4.1)
142
+ unicode-emoji (4.2.0)
143
+ uri (1.1.1)
144
+ yard (0.9.44)
145
+
146
+ PLATFORMS
147
+ aarch64-linux-gnu
148
+ aarch64-linux-musl
149
+ arm-linux-gnu
150
+ arm-linux-musl
151
+ arm64-darwin
152
+ x86_64-darwin
153
+ x86_64-linux-gnu
154
+ x86_64-linux-musl
155
+
156
+ DEPENDENCIES
157
+ coderay
158
+ docscribe
159
+ dotenv (~> 2.7.6)
160
+ genius-api!
161
+ parallel (< 2.0)
162
+ rake (~> 13.0)
163
+ rbs
164
+ rspec (~> 3.4)
165
+ rubocop
166
+ rubocop-performance
167
+ rubocop-rake
168
+ rubocop-rspec
169
+ rubocop-sorted_methods_by_call
170
+ steep
171
+ yard
172
+
173
+ BUNDLED WITH
174
+ 4.0.14