aoc_cli 0.2.3 → 1.0.1
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/.rspec +1 -0
- data/.rubocop.yml +88 -0
- data/.ruby-version +1 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +187 -0
- data/README.md +88 -282
- data/Rakefile +9 -2
- data/Steepfile +13 -0
- data/aoc_cli.gemspec +36 -26
- data/db/migrate/1_create_events.rb +14 -0
- data/db/migrate/2_create_puzzles.rb +21 -0
- data/db/migrate/3_create_stats.rb +19 -0
- data/db/migrate/4_create_attempts.rb +19 -0
- data/db/migrate/5_create_locations.rb +17 -0
- data/db/migrate/6_create_puzzle_dir_sync_logs.rb +18 -0
- data/db/migrate/7_create_progresses.rb +17 -0
- data/db/migrate/8_remove_legacy_timestamps.rb +8 -0
- data/exe/aoc +5 -0
- data/lib/aoc_cli/components/attempts_table.erb +5 -0
- data/lib/aoc_cli/components/attempts_table.rb +58 -0
- data/lib/aoc_cli/components/docs_component.erb +19 -0
- data/lib/aoc_cli/components/docs_component.rb +41 -0
- data/lib/aoc_cli/components/errors_component.erb +8 -0
- data/lib/aoc_cli/components/errors_component.rb +36 -0
- data/lib/aoc_cli/components/progress_table.erb +1 -0
- data/lib/aoc_cli/components/progress_table.rb +43 -0
- data/lib/aoc_cli/components/puzzle_sync_component.erb +2 -0
- data/lib/aoc_cli/components/puzzle_sync_component.rb +26 -0
- data/lib/aoc_cli/configurators/session_configurator.rb +7 -0
- data/lib/aoc_cli/controllers/application_controller.rb +27 -0
- data/lib/aoc_cli/controllers/concerns/error_concern.rb +17 -0
- data/lib/aoc_cli/controllers/concerns/location_concern.rb +79 -0
- data/lib/aoc_cli/controllers/default_controller.rb +9 -0
- data/lib/aoc_cli/controllers/event_controller.rb +35 -0
- data/lib/aoc_cli/controllers/help/event_controller.rb +11 -0
- data/lib/aoc_cli/controllers/help/puzzle_controller.rb +13 -0
- data/lib/aoc_cli/controllers/puzzle_controller.rb +39 -0
- data/lib/aoc_cli/core/attempt_parser.rb +69 -0
- data/lib/aoc_cli/core/processor.rb +32 -0
- data/lib/aoc_cli/core/repository.rb +74 -0
- data/lib/aoc_cli/core/request.rb +37 -0
- data/lib/aoc_cli/core/resource.rb +39 -0
- data/lib/aoc_cli/core/stats_parser.rb +43 -0
- data/lib/aoc_cli/helpers/table_generator.rb +64 -0
- data/lib/aoc_cli/helpers/view_helper.rb +35 -0
- data/lib/aoc_cli/models/attempt.rb +67 -0
- data/lib/aoc_cli/models/event.rb +9 -0
- data/lib/aoc_cli/models/location.rb +24 -0
- data/lib/aoc_cli/models/progress.rb +33 -0
- data/lib/aoc_cli/models/puzzle.rb +28 -0
- data/lib/aoc_cli/models/puzzle_dir_sync_log.rb +14 -0
- data/lib/aoc_cli/models/stats.rb +43 -0
- data/lib/aoc_cli/presenters/attempt_presenter.rb +29 -0
- data/lib/aoc_cli/presenters/puzzle_presenter.rb +29 -0
- data/lib/aoc_cli/presenters/stats_presenter.rb +32 -0
- data/lib/aoc_cli/processors/event_initialiser.rb +64 -0
- data/lib/aoc_cli/processors/progress_syncer.rb +48 -0
- data/lib/aoc_cli/processors/puzzle_dir_synchroniser.rb +80 -0
- data/lib/aoc_cli/processors/puzzle_initialiser.rb +106 -0
- data/lib/aoc_cli/processors/puzzle_refresher.rb +27 -0
- data/lib/aoc_cli/processors/resource_attacher.rb +22 -0
- data/lib/aoc_cli/processors/solution_poster.rb +72 -0
- data/lib/aoc_cli/processors/stats_initialiser.rb +36 -0
- data/lib/aoc_cli/processors/stats_refresher.rb +23 -0
- data/lib/aoc_cli/validators/collection_type_validator.rb +57 -0
- data/lib/aoc_cli/validators/event_year_validator.rb +42 -0
- data/lib/aoc_cli/validators/included_validator.rb +21 -0
- data/lib/aoc_cli/validators/integer_validator.rb +32 -0
- data/lib/aoc_cli/validators/path_validator.rb +39 -0
- data/lib/aoc_cli/validators/type_validator.rb +54 -0
- data/lib/aoc_cli/version.rb +1 -1
- data/lib/aoc_cli/views/event/attach.erb +3 -0
- data/lib/aoc_cli/views/event/init.erb +3 -0
- data/lib/aoc_cli/views/help/event/attach.erb +32 -0
- data/lib/aoc_cli/views/help/event/init.erb +38 -0
- data/lib/aoc_cli/views/help/event/progress.erb +12 -0
- data/lib/aoc_cli/views/help/puzzle/attempts.erb +12 -0
- data/lib/aoc_cli/views/help/puzzle/init.erb +31 -0
- data/lib/aoc_cli/views/help/puzzle/solve.erb +33 -0
- data/lib/aoc_cli/views/help/puzzle/sync.erb +32 -0
- data/lib/aoc_cli/views/puzzle/init.erb +3 -0
- data/lib/aoc_cli/views/puzzle/solve.erb +10 -0
- data/lib/aoc_cli.rb +36 -16
- data/rbs_collection.lock.yaml +168 -0
- data/rbs_collection.yaml +28 -0
- data/sig/aoc_cli/components/attempts_table.rbs +29 -0
- data/sig/aoc_cli/components/docs_component.rbs +15 -0
- data/sig/aoc_cli/components/errors_component.rbs +19 -0
- data/sig/aoc_cli/components/progress_table.rbs +28 -0
- data/sig/aoc_cli/components/puzzle_sync_component.rbs +19 -0
- data/sig/aoc_cli/configurators/session_configurator.rbs +7 -0
- data/sig/aoc_cli/controllers/application_controller.rbs +12 -0
- data/sig/aoc_cli/controllers/concerns/error_concern.rbs +9 -0
- data/sig/aoc_cli/controllers/concerns/location_concern.rbs +35 -0
- data/sig/aoc_cli/controllers/default_controller.rbs +7 -0
- data/sig/aoc_cli/controllers/event_controller.rbs +18 -0
- data/sig/aoc_cli/controllers/help/event_controller.rbs +11 -0
- data/sig/aoc_cli/controllers/help/puzzle_controller.rbs +13 -0
- data/sig/aoc_cli/controllers/puzzle_controller.rbs +15 -0
- data/sig/aoc_cli/core/attempt_parser.rbs +41 -0
- data/sig/aoc_cli/core/processor.rbs +25 -0
- data/sig/aoc_cli/core/repository.rbs +25 -0
- data/sig/aoc_cli/core/request.rbs +29 -0
- data/sig/aoc_cli/core/resource.rbs +25 -0
- data/sig/aoc_cli/core/stats_parser.rbs +23 -0
- data/sig/aoc_cli/helpers/table_generator.rbs +36 -0
- data/sig/aoc_cli/helpers/view_helper.rbs +15 -0
- data/sig/aoc_cli/models/attempt.rbs +35 -0
- data/sig/aoc_cli/models/event.rbs +17 -0
- data/sig/aoc_cli/models/location.rbs +19 -0
- data/sig/aoc_cli/models/progress.rbs +21 -0
- data/sig/aoc_cli/models/puzzle.rbs +27 -0
- data/sig/aoc_cli/models/puzzle_dir_sync_log.rbs +11 -0
- data/sig/aoc_cli/models/stats.rbs +53 -0
- data/sig/aoc_cli/presenters/attempt_presenter.rbs +13 -0
- data/sig/aoc_cli/presenters/puzzle_presenter.rbs +19 -0
- data/sig/aoc_cli/presenters/stats_presenter.rbs +19 -0
- data/sig/aoc_cli/processors/event_initialiser.rbs +26 -0
- data/sig/aoc_cli/processors/progress_syncer.rbs +29 -0
- data/sig/aoc_cli/processors/puzzle_dir_synchroniser.rbs +40 -0
- data/sig/aoc_cli/processors/puzzle_initialiser.rbs +41 -0
- data/sig/aoc_cli/processors/puzzle_refresher.rbs +21 -0
- data/sig/aoc_cli/processors/resource_attacher.rbs +16 -0
- data/sig/aoc_cli/processors/solution_poster.rbs +34 -0
- data/sig/aoc_cli/processors/stats_initialiser.rbs +15 -0
- data/sig/aoc_cli/processors/stats_refresher.rbs +19 -0
- data/sig/aoc_cli/validators/collection_type_validator.rbs +24 -0
- data/sig/aoc_cli/validators/event_year_validator.rbs +19 -0
- data/sig/aoc_cli/validators/included_validator.rbs +11 -0
- data/sig/aoc_cli/validators/integer_validator.rbs +15 -0
- data/sig/aoc_cli/validators/path_validator.rbs +17 -0
- data/sig/aoc_cli/validators/type_validator.rbs +22 -0
- data/sig/aoc_cli.rbs +6 -0
- data/sig/http.rbs +3 -0
- data/sig/kangaru.rbs +5 -0
- data/sig/nokogiri.rbs +3 -0
- data/sig/reverse_markdown.rbs +3 -0
- metadata +149 -34
- data/.gitignore +0 -5
- data/bin/aoc +0 -4
- data/bin/console +0 -15
- data/bin/setup +0 -7
- data/lib/aoc_cli/commands.rb +0 -232
- data/lib/aoc_cli/database.rb +0 -224
- data/lib/aoc_cli/day.rb +0 -124
- data/lib/aoc_cli/db/reddit.db +0 -0
- data/lib/aoc_cli/errors.rb +0 -275
- data/lib/aoc_cli/files.rb +0 -163
- data/lib/aoc_cli/help.rb +0 -77
- data/lib/aoc_cli/interface.rb +0 -81
- data/lib/aoc_cli/paths.rb +0 -101
- data/lib/aoc_cli/solve.rb +0 -104
- data/lib/aoc_cli/tables.rb +0 -138
- data/lib/aoc_cli/tools.rb +0 -120
- data/lib/aoc_cli/year.rb +0 -116
- data/sample/aoc.rc +0 -21
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
aoc event attach
|
|
2
|
+
|
|
3
|
+
Description:
|
|
4
|
+
|
|
5
|
+
Attaches an existing event to the specified directory (defaults to current
|
|
6
|
+
directory). This may be useful if the original directories have been moved
|
|
7
|
+
or deleted.
|
|
8
|
+
|
|
9
|
+
This command cannot be executed from, or target, a directory that is already
|
|
10
|
+
managed by aoc (i.e., existing event and puzzle directories).
|
|
11
|
+
|
|
12
|
+
The command will fail if the event has not already been initialized. To
|
|
13
|
+
create a new event, see the event init command.
|
|
14
|
+
|
|
15
|
+
Usage:
|
|
16
|
+
|
|
17
|
+
aoc event attach <year> [--dir=<dir>]
|
|
18
|
+
|
|
19
|
+
* <year>: Year of the event to relocate.
|
|
20
|
+
* <dir>: The new event directory (default ".").
|
|
21
|
+
|
|
22
|
+
Examples:
|
|
23
|
+
|
|
24
|
+
aoc event attach 2023 (in a non-AoC directory)
|
|
25
|
+
|
|
26
|
+
Relocates the 2023 event directory to the current directory
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
aoc event attach 2023 --dir /foo/bar/aoc
|
|
30
|
+
|
|
31
|
+
Relocates the 2023 event directory to the specified directory.
|
|
32
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
aoc event init
|
|
2
|
+
|
|
3
|
+
Description:
|
|
4
|
+
|
|
5
|
+
Initializes the event for the specified year by fetching event stats and
|
|
6
|
+
creating an event directory in the target directory. The target directory
|
|
7
|
+
defaults to the current directory but can be explicitly specified with the
|
|
8
|
+
optional --dir String argument.
|
|
9
|
+
|
|
10
|
+
The event directory serves as the location of event puzzle directories. For
|
|
11
|
+
more information, refer to puzzle init. The name of the created event
|
|
12
|
+
directory defaults to the event year.
|
|
13
|
+
|
|
14
|
+
This command cannot be executed from, or target, a directory that is already
|
|
15
|
+
managed by aoc (i.e., existing event and puzzle directories).
|
|
16
|
+
|
|
17
|
+
The command will fail if the event has already been initialized elsewhere. To
|
|
18
|
+
move an existing event's location, see the event attach command.
|
|
19
|
+
|
|
20
|
+
Usage:
|
|
21
|
+
|
|
22
|
+
aoc event init <year> [--dir=<dir>]
|
|
23
|
+
|
|
24
|
+
* <year>: Year of the event to initialize.
|
|
25
|
+
* <dir>: Base directory to initialize the event within (default ".").
|
|
26
|
+
|
|
27
|
+
Examples:
|
|
28
|
+
|
|
29
|
+
aoc event init 2023 (in a non-AoC directory)
|
|
30
|
+
|
|
31
|
+
Initializes the 2023 event and creates the 2023 event directory inside the
|
|
32
|
+
current directory.
|
|
33
|
+
|
|
34
|
+
aoc event init 2023 --dir /foo/bar/aoc
|
|
35
|
+
|
|
36
|
+
Initializes the 2023 event and creates the 2023 event directory in the
|
|
37
|
+
specified directory.
|
|
38
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
aoc puzzle init
|
|
2
|
+
|
|
3
|
+
Description:
|
|
4
|
+
|
|
5
|
+
This command can only be run from an event directory (see event init).
|
|
6
|
+
|
|
7
|
+
Initialises the given day's puzzle for the current event. This fetches
|
|
8
|
+
the puzzle prompt and input from Advent of Code, creates a puzzle directory,
|
|
9
|
+
and writes the puzzle files to it.
|
|
10
|
+
|
|
11
|
+
Once initialised, the new puzzle directory contains two files:
|
|
12
|
+
* Markdown puzzle prompt (format "day_<day>.md")
|
|
13
|
+
* Plain text puzzle input (format "input")
|
|
14
|
+
|
|
15
|
+
These files can be restored at any time using puzzle sync.
|
|
16
|
+
|
|
17
|
+
The puzzle directory is a good place to write puzzle solution code and review
|
|
18
|
+
previous solution attempts. See puzzle solve and puzzle attempts respectively
|
|
19
|
+
|
|
20
|
+
Usage:
|
|
21
|
+
|
|
22
|
+
aoc puzzle init <day>
|
|
23
|
+
|
|
24
|
+
* <day>: Day of puzzle to initialise (1-25).
|
|
25
|
+
|
|
26
|
+
Examples:
|
|
27
|
+
|
|
28
|
+
aoc puzzle init 20 (in an event directory)
|
|
29
|
+
|
|
30
|
+
Initializes the day 20 puzzle and creates puzzle directory
|
|
31
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
aoc puzzle solve
|
|
2
|
+
|
|
3
|
+
Description:
|
|
4
|
+
|
|
5
|
+
This command can only be run from a puzzle directory (see puzzle init).
|
|
6
|
+
|
|
7
|
+
Posts the given answer to Advent of Code for the current puzzle. The response
|
|
8
|
+
will have one of three possible states:
|
|
9
|
+
|
|
10
|
+
1. Correct
|
|
11
|
+
2. Incorrect
|
|
12
|
+
3. Rate-limited
|
|
13
|
+
|
|
14
|
+
If the attempt was correct, relevant stats are updated and the puzzle files
|
|
15
|
+
are refreshed to include any new puzzle information.
|
|
16
|
+
|
|
17
|
+
If the attempt was incorrect or rate-limited, the required wait time will be
|
|
18
|
+
indicated to the nearest minute.
|
|
19
|
+
|
|
20
|
+
Previous attempt data can be reviewed with the puzzle attempts command.
|
|
21
|
+
|
|
22
|
+
Usage:
|
|
23
|
+
|
|
24
|
+
aoc puzzle solve --answer=<answer>
|
|
25
|
+
|
|
26
|
+
* <answer>: The puzzle solution to attempt
|
|
27
|
+
|
|
28
|
+
Examples:
|
|
29
|
+
|
|
30
|
+
aoc puzzle solve --answer abcdef (in a puzzle directory)
|
|
31
|
+
|
|
32
|
+
Initializes the day 20 puzzle and creates puzzle directory
|
|
33
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
aoc puzzle sync
|
|
2
|
+
|
|
3
|
+
Description:
|
|
4
|
+
|
|
5
|
+
This command can only be run from a puzzle directory (see puzzle init).
|
|
6
|
+
|
|
7
|
+
Restores puzzle dir files (puzzle and input) to their cached state.
|
|
8
|
+
|
|
9
|
+
Puzzle data is cached when puzzles are initialised and correctly solved in
|
|
10
|
+
order to decrease load on Advent of Code and increase performance. However
|
|
11
|
+
there may be situations where the cache is outdated: for example if puzzles
|
|
12
|
+
have been solved from the browser.
|
|
13
|
+
|
|
14
|
+
To fetch and write the latest puzzle data, pass the --skip-cache flag.
|
|
15
|
+
|
|
16
|
+
Usage:
|
|
17
|
+
|
|
18
|
+
aoc puzzle sync [--skip-cache]
|
|
19
|
+
|
|
20
|
+
* <skip-cache>: Whether to ignore puzzle file cache (default false)
|
|
21
|
+
|
|
22
|
+
Examples:
|
|
23
|
+
|
|
24
|
+
aoc puzzle sync (in a puzzle directory)
|
|
25
|
+
|
|
26
|
+
Restores (writes or updates) puzzle files to cached state.
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
aoc puzzle sync --skip-cache (in a puzzle directory)
|
|
30
|
+
|
|
31
|
+
Puzzle data is refreshed before writing the puzzle files.
|
|
32
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<% if @attempt.rate_limited? -%>
|
|
2
|
+
<%= "Rate limited".yellow.bold %>: please wait <%= @attempt.wait_time %> minutes.
|
|
3
|
+
<% elsif @attempt.incorrect? -%>
|
|
4
|
+
<%= "Incorrect".red.bold %>: please wait <%= @attempt.wait_time %> minutes.
|
|
5
|
+
<% unless @attempt.hint.nil? -%>
|
|
6
|
+
Hint: your answer is <%= @attempt.presenter.hint.downcase %>
|
|
7
|
+
<% end -%>
|
|
8
|
+
<% elsif @attempt.correct? -%>
|
|
9
|
+
<%= "Correct".green.bold %>: part <%= @attempt.level %> complete.
|
|
10
|
+
<% end -%>
|
data/lib/aoc_cli.rb
CHANGED
|
@@ -1,19 +1,39 @@
|
|
|
1
|
-
require
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
require_relative 'aoc_cli/tools'
|
|
9
|
-
require_relative 'aoc_cli/year'
|
|
10
|
-
require_relative 'aoc_cli/day'
|
|
11
|
-
require_relative 'aoc_cli/solve'
|
|
12
|
-
require_relative 'aoc_cli/database'
|
|
13
|
-
require_relative 'aoc_cli/paths'
|
|
14
|
-
require_relative 'aoc_cli/tables'
|
|
1
|
+
require "fileutils"
|
|
2
|
+
require "forwardable"
|
|
3
|
+
require "http"
|
|
4
|
+
require "kangaru"
|
|
5
|
+
require "nokogiri"
|
|
6
|
+
require "reverse_markdown"
|
|
7
|
+
require "terminal-table"
|
|
15
8
|
|
|
16
9
|
module AocCli
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
extend Kangaru::Initialiser
|
|
11
|
+
|
|
12
|
+
config_path File.expand_path("~/.config/aoc_cli/config.yml")
|
|
13
|
+
|
|
14
|
+
config_path "spec/aoc.yml", env: :test
|
|
15
|
+
|
|
16
|
+
configure do |config|
|
|
17
|
+
migration_path = File.join(
|
|
18
|
+
File.expand_path(__dir__ || raise), "../db/migrate"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
config.database.adaptor = :sqlite
|
|
22
|
+
config.database.path = File.expand_path("~/.local/share/aoc/aoc.sqlite3")
|
|
23
|
+
config.database.migration_path = migration_path
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
configure env: :test do |config|
|
|
27
|
+
config.database.path = "db/test.sqlite3"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
apply_config!
|
|
31
|
+
|
|
32
|
+
Sequel::Model.plugin(:polymorphic)
|
|
33
|
+
Sequel::Model.plugin(:enum)
|
|
34
|
+
|
|
35
|
+
Terminal::Table::Style.defaults = {
|
|
36
|
+
border: :unicode,
|
|
37
|
+
alignment: :center
|
|
38
|
+
}
|
|
19
39
|
end
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
path: ".gems"
|
|
3
|
+
gems:
|
|
4
|
+
- name: activesupport
|
|
5
|
+
version: '7.0'
|
|
6
|
+
source:
|
|
7
|
+
type: git
|
|
8
|
+
name: ruby/gem_rbs_collection
|
|
9
|
+
revision: ec140aff951e3af39846eed4525ba5d040d294fa
|
|
10
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
11
|
+
repo_dir: gems
|
|
12
|
+
- name: addressable
|
|
13
|
+
version: '2.8'
|
|
14
|
+
source:
|
|
15
|
+
type: git
|
|
16
|
+
name: ruby/gem_rbs_collection
|
|
17
|
+
revision: ec140aff951e3af39846eed4525ba5d040d294fa
|
|
18
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
19
|
+
repo_dir: gems
|
|
20
|
+
- name: base64
|
|
21
|
+
version: '0'
|
|
22
|
+
source:
|
|
23
|
+
type: stdlib
|
|
24
|
+
- name: bigdecimal
|
|
25
|
+
version: '0'
|
|
26
|
+
source:
|
|
27
|
+
type: stdlib
|
|
28
|
+
- name: cgi
|
|
29
|
+
version: '0'
|
|
30
|
+
source:
|
|
31
|
+
type: stdlib
|
|
32
|
+
- name: colorize
|
|
33
|
+
version: '1.1'
|
|
34
|
+
source:
|
|
35
|
+
type: git
|
|
36
|
+
name: apexatoll/gem_signatures
|
|
37
|
+
revision: aad38d45071ab6a1389c58052d06604f0ef71591
|
|
38
|
+
remote: https://github.com/apexatoll/gem_signatures
|
|
39
|
+
repo_dir: sig
|
|
40
|
+
- name: concurrent-ruby
|
|
41
|
+
version: '1.1'
|
|
42
|
+
source:
|
|
43
|
+
type: git
|
|
44
|
+
name: ruby/gem_rbs_collection
|
|
45
|
+
revision: ec140aff951e3af39846eed4525ba5d040d294fa
|
|
46
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
47
|
+
repo_dir: gems
|
|
48
|
+
- name: connection_pool
|
|
49
|
+
version: '2.4'
|
|
50
|
+
source:
|
|
51
|
+
type: git
|
|
52
|
+
name: ruby/gem_rbs_collection
|
|
53
|
+
revision: ec140aff951e3af39846eed4525ba5d040d294fa
|
|
54
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
55
|
+
repo_dir: gems
|
|
56
|
+
- name: date
|
|
57
|
+
version: '0'
|
|
58
|
+
source:
|
|
59
|
+
type: stdlib
|
|
60
|
+
- name: erb
|
|
61
|
+
version: '0'
|
|
62
|
+
source:
|
|
63
|
+
type: stdlib
|
|
64
|
+
- name: fileutils
|
|
65
|
+
version: '0'
|
|
66
|
+
source:
|
|
67
|
+
type: stdlib
|
|
68
|
+
- name: forwardable
|
|
69
|
+
version: '0'
|
|
70
|
+
source:
|
|
71
|
+
type: stdlib
|
|
72
|
+
- name: http
|
|
73
|
+
version: '5.1'
|
|
74
|
+
source:
|
|
75
|
+
type: git
|
|
76
|
+
name: ruby/gem_rbs_collection
|
|
77
|
+
revision: ec140aff951e3af39846eed4525ba5d040d294fa
|
|
78
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
79
|
+
repo_dir: gems
|
|
80
|
+
- name: i18n
|
|
81
|
+
version: '1.10'
|
|
82
|
+
source:
|
|
83
|
+
type: git
|
|
84
|
+
name: ruby/gem_rbs_collection
|
|
85
|
+
revision: ec140aff951e3af39846eed4525ba5d040d294fa
|
|
86
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
87
|
+
repo_dir: gems
|
|
88
|
+
- name: kangaru
|
|
89
|
+
version: '0.2'
|
|
90
|
+
source:
|
|
91
|
+
type: git
|
|
92
|
+
name: apexatoll/gem_signatures
|
|
93
|
+
revision: aad38d45071ab6a1389c58052d06604f0ef71591
|
|
94
|
+
remote: https://github.com/apexatoll/gem_signatures
|
|
95
|
+
repo_dir: sig
|
|
96
|
+
- name: logger
|
|
97
|
+
version: '0'
|
|
98
|
+
source:
|
|
99
|
+
type: stdlib
|
|
100
|
+
- name: minitest
|
|
101
|
+
version: '0'
|
|
102
|
+
source:
|
|
103
|
+
type: stdlib
|
|
104
|
+
- name: monitor
|
|
105
|
+
version: '0'
|
|
106
|
+
source:
|
|
107
|
+
type: stdlib
|
|
108
|
+
- name: mutex_m
|
|
109
|
+
version: '0'
|
|
110
|
+
source:
|
|
111
|
+
type: stdlib
|
|
112
|
+
- name: nokogiri
|
|
113
|
+
version: '1.11'
|
|
114
|
+
source:
|
|
115
|
+
type: git
|
|
116
|
+
name: ruby/gem_rbs_collection
|
|
117
|
+
revision: ec140aff951e3af39846eed4525ba5d040d294fa
|
|
118
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
119
|
+
repo_dir: gems
|
|
120
|
+
- name: pathname
|
|
121
|
+
version: '0'
|
|
122
|
+
source:
|
|
123
|
+
type: stdlib
|
|
124
|
+
- name: securerandom
|
|
125
|
+
version: '0'
|
|
126
|
+
source:
|
|
127
|
+
type: stdlib
|
|
128
|
+
- name: sequel
|
|
129
|
+
version: '5.72'
|
|
130
|
+
source:
|
|
131
|
+
type: git
|
|
132
|
+
name: apexatoll/gem_signatures
|
|
133
|
+
revision: aad38d45071ab6a1389c58052d06604f0ef71591
|
|
134
|
+
remote: https://github.com/apexatoll/gem_signatures
|
|
135
|
+
repo_dir: sig
|
|
136
|
+
- name: singleton
|
|
137
|
+
version: '0'
|
|
138
|
+
source:
|
|
139
|
+
type: stdlib
|
|
140
|
+
- name: tempfile
|
|
141
|
+
version: '0'
|
|
142
|
+
source:
|
|
143
|
+
type: stdlib
|
|
144
|
+
- name: terminal-table
|
|
145
|
+
version: '3.0'
|
|
146
|
+
source:
|
|
147
|
+
type: git
|
|
148
|
+
name: apexatoll/gem_signatures
|
|
149
|
+
revision: aad38d45071ab6a1389c58052d06604f0ef71591
|
|
150
|
+
remote: https://github.com/apexatoll/gem_signatures
|
|
151
|
+
repo_dir: sig
|
|
152
|
+
- name: time
|
|
153
|
+
version: '0'
|
|
154
|
+
source:
|
|
155
|
+
type: stdlib
|
|
156
|
+
- name: timeout
|
|
157
|
+
version: '0'
|
|
158
|
+
source:
|
|
159
|
+
type: stdlib
|
|
160
|
+
- name: zeitwerk
|
|
161
|
+
version: '2.6'
|
|
162
|
+
source:
|
|
163
|
+
type: git
|
|
164
|
+
name: apexatoll/gem_signatures
|
|
165
|
+
revision: aad38d45071ab6a1389c58052d06604f0ef71591
|
|
166
|
+
remote: https://github.com/apexatoll/gem_signatures
|
|
167
|
+
repo_dir: sig
|
|
168
|
+
gemfile_lock_path: Gemfile.lock
|
data/rbs_collection.yaml
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
sources:
|
|
2
|
+
- type: git
|
|
3
|
+
name: ruby/gem_rbs_collection
|
|
4
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
5
|
+
revision: main
|
|
6
|
+
repo_dir: gems
|
|
7
|
+
|
|
8
|
+
- type: git
|
|
9
|
+
name: apexatoll/gem_signatures
|
|
10
|
+
remote: https://github.com/apexatoll/gem_signatures
|
|
11
|
+
revision: main
|
|
12
|
+
repo_dir: sig
|
|
13
|
+
|
|
14
|
+
path: .gems
|
|
15
|
+
|
|
16
|
+
gems:
|
|
17
|
+
- name: date
|
|
18
|
+
- name: fileutils
|
|
19
|
+
- name: forwardable
|
|
20
|
+
- name: pathname
|
|
21
|
+
- name: rake
|
|
22
|
+
ignore: true
|
|
23
|
+
- name: rspec
|
|
24
|
+
ignore: true
|
|
25
|
+
- name: rubocop
|
|
26
|
+
ignore: true
|
|
27
|
+
- name: steep
|
|
28
|
+
ignore: true
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module AocCli
|
|
2
|
+
module Components
|
|
3
|
+
class AttemptsTable < Kangaru::Component
|
|
4
|
+
attr_reader puzzle: Puzzle
|
|
5
|
+
|
|
6
|
+
def initialize: (puzzle: Puzzle) -> void
|
|
7
|
+
|
|
8
|
+
def title: -> String
|
|
9
|
+
|
|
10
|
+
def headings: -> Array[String]
|
|
11
|
+
|
|
12
|
+
def rows: -> Array[Array[untyped] | Symbol]
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
attr_reader level_one_rows: Array[Array[untyped]]
|
|
17
|
+
|
|
18
|
+
attr_reader level_two_rows: Array[Array[untyped]]
|
|
19
|
+
|
|
20
|
+
def separator: -> Symbol?
|
|
21
|
+
|
|
22
|
+
def level_one_attempts: -> Array[Attempt]
|
|
23
|
+
|
|
24
|
+
def level_two_attempts: -> Array[Attempt]
|
|
25
|
+
|
|
26
|
+
def rows_for: (Array[Attempt]) -> Array[Array[untyped]]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module AocCli
|
|
2
|
+
module Components
|
|
3
|
+
class DocsComponent < Kangaru::Component
|
|
4
|
+
include Helpers::ViewHelper
|
|
5
|
+
|
|
6
|
+
ENDPOINTS: Hash[Symbol, untyped]
|
|
7
|
+
|
|
8
|
+
def endpoints: -> Hash[Symbol, untyped]
|
|
9
|
+
|
|
10
|
+
def title: -> String
|
|
11
|
+
|
|
12
|
+
def commands_table: (Hash[Symbol, String], ?indent: Integer) -> String
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module AocCli
|
|
2
|
+
module Components
|
|
3
|
+
class ErrorsComponent < Kangaru::Component
|
|
4
|
+
attr_reader messages: Array[String]
|
|
5
|
+
|
|
6
|
+
def initialize: (*String) -> void
|
|
7
|
+
|
|
8
|
+
def render: -> void
|
|
9
|
+
|
|
10
|
+
def self.from_model: (untyped) -> ErrorsComponent
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def render?: -> bool
|
|
15
|
+
|
|
16
|
+
def title: -> String
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module AocCli
|
|
2
|
+
module Components
|
|
3
|
+
class ProgressTable < Kangaru::Component
|
|
4
|
+
attr_reader event: Event
|
|
5
|
+
|
|
6
|
+
def initialize: (event: Event) -> void
|
|
7
|
+
|
|
8
|
+
private
|
|
9
|
+
|
|
10
|
+
type row = [String, String]
|
|
11
|
+
|
|
12
|
+
TITLE: String
|
|
13
|
+
HEADINGS: Array[String]
|
|
14
|
+
PROGRESS: String
|
|
15
|
+
TOTAL: String
|
|
16
|
+
|
|
17
|
+
def title: -> String
|
|
18
|
+
|
|
19
|
+
def headings: -> Array[String]
|
|
20
|
+
|
|
21
|
+
def rows: -> Array[row | Symbol]
|
|
22
|
+
|
|
23
|
+
def progress_rows: -> Array[row]
|
|
24
|
+
|
|
25
|
+
def total_row: -> row
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module AocCli
|
|
2
|
+
module Components
|
|
3
|
+
class PuzzleSyncComponent < Kangaru::Component
|
|
4
|
+
extend Forwardable
|
|
5
|
+
|
|
6
|
+
include Helpers::ViewHelper
|
|
7
|
+
|
|
8
|
+
attr_reader log: PuzzleDirSyncLog
|
|
9
|
+
|
|
10
|
+
def puzzle: -> Puzzle
|
|
11
|
+
|
|
12
|
+
def initialize: (log: PuzzleDirSyncLog) -> void
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def status_rows: -> Array[[untyped, untyped]]
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module AocCli
|
|
2
|
+
module Concerns
|
|
3
|
+
module LocationConcern
|
|
4
|
+
include ErrorConcern
|
|
5
|
+
|
|
6
|
+
def current_path: -> String
|
|
7
|
+
|
|
8
|
+
def current_location: -> Location?
|
|
9
|
+
|
|
10
|
+
def current_event: -> Event?
|
|
11
|
+
|
|
12
|
+
def current_puzzle: -> Puzzle?
|
|
13
|
+
|
|
14
|
+
def ensure_in_event_dir!: -> bool
|
|
15
|
+
|
|
16
|
+
def ensure_in_puzzle_dir!: -> bool
|
|
17
|
+
|
|
18
|
+
def ensure_in_aoc_dir!: -> bool
|
|
19
|
+
|
|
20
|
+
def ensure_not_in_aoc_dir!: -> bool
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
ERRORS: Hash[Symbol, String]
|
|
25
|
+
|
|
26
|
+
def current_resource: -> untyped
|
|
27
|
+
|
|
28
|
+
def in_event_dir?: -> bool
|
|
29
|
+
|
|
30
|
+
def in_puzzle_dir?: -> bool
|
|
31
|
+
|
|
32
|
+
def in_aoc_dir?: -> bool
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module AocCli
|
|
2
|
+
class EventController < ApplicationController
|
|
3
|
+
@event: Event
|
|
4
|
+
|
|
5
|
+
def init: -> void
|
|
6
|
+
|
|
7
|
+
@source: String
|
|
8
|
+
@target: String
|
|
9
|
+
|
|
10
|
+
def attach: -> void
|
|
11
|
+
|
|
12
|
+
def progress: -> void
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
attr_reader queried_event: Event?
|
|
17
|
+
end
|
|
18
|
+
end
|