aocli 1.4.4 → 1.5.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 +12 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +3 -3
- data/README.md +17 -0
- data/lib/aocli/advent_of_code/client.rb +1 -1
- data/lib/aocli/cli.rb +30 -9
- data/lib/aocli/commands/remove_cookie.rb +13 -0
- data/lib/aocli/commands/remove_template_path.rb +14 -0
- data/lib/aocli/commands/save_cookie.rb +1 -2
- data/lib/aocli/commands/set_template_path.rb +13 -0
- data/lib/aocli/commands/start_day.rb +12 -4
- data/lib/aocli/config.rb +28 -0
- data/lib/aocli/content/main.txt +3 -2
- data/lib/aocli/version.rb +1 -1
- data/lib/aocli.rb +4 -1
- metadata +18 -15
- data/lib/aocli/cookie_retriever.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 401260b3c2e7cdde374a92e0fb04dd8e22339d42b1c7b17b1fa493ff632fff47
|
4
|
+
data.tar.gz: 3ce43f2fa01ceb2d096f3463f3d74fb1dacbb109c395004bfd80de11e2f6b94d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74937e8ee1f6cbbd9739202196bbb6f310ab6215ece6054122fdabf4dbcfb3884f25ade07a515635fb70f59e8301f045f42a4a52bcfb71d36262a9224e955b0c
|
7
|
+
data.tar.gz: 050203b32f0b03893bfd4ca79d78f3c710e5367a41ae94312d000313de025636f011823d85cc31d0b3a16a9098b23e758b165a4cc6df821461d5ad12050a4f15
|
data/.rubocop.yml
CHANGED
@@ -11,3 +11,15 @@ Style/StringLiteralsInInterpolation:
|
|
11
11
|
|
12
12
|
Layout/LineLength:
|
13
13
|
Max: 120
|
14
|
+
|
15
|
+
Metrics/BlockLength:
|
16
|
+
Enabled: false
|
17
|
+
|
18
|
+
Metrics/MethodLength:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
Style/Documentation:
|
22
|
+
Enabled: false
|
23
|
+
|
24
|
+
Metrics/AbcSize:
|
25
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
aocli (1.
|
5
|
-
activesupport (~> 7.0)
|
4
|
+
aocli (1.5.0)
|
5
|
+
activesupport (~> 7.0.8)
|
6
6
|
faraday (~> 2.7)
|
7
7
|
nokogiri (~> 1.13)
|
8
8
|
tty-prompt (~> 0.23.1)
|
@@ -10,7 +10,7 @@ PATH
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
12
12
|
specs:
|
13
|
-
activesupport (7.0.
|
13
|
+
activesupport (7.0.8)
|
14
14
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
15
15
|
i18n (>= 1.6, < 2)
|
16
16
|
minitest (>= 5.1)
|
data/README.md
CHANGED
@@ -38,6 +38,23 @@ For the example shown, I viewed 2018 day 11 and can see the cookie inside the co
|
|
38
38
|
|
39
39
|

|
40
40
|
|
41
|
+
## Using your own template file
|
42
|
+
|
43
|
+
Don't like the default template you got for each challenge? It's just about as basic as it gets so I've made it easy for users
|
44
|
+
to create their own and have it be used. Simply create your own template, structured however your prefer
|
45
|
+
and optionally insert the two directives `__aocli_load_input__` and `__aocli_problem_description__`. You can leave either off if you
|
46
|
+
prefer to either not have the problem description shown or would like to load your input in another way.
|
47
|
+
|
48
|
+
`__aocli_problem_description__` Will be replaced with the given problems description as a comment
|
49
|
+
|
50
|
+
`__aocli_load_input__` Will be replaced by the line that loads your input as a string into the `input` variable.
|
51
|
+
|
52
|
+
Then run the `aocli` command and choose the "Set Template File" option, paste in the full path to your file and it'll be used
|
53
|
+
when generating the files for a given day.
|
54
|
+
|
55
|
+
Partial file path could be used if you expect to run aocli from the same location
|
56
|
+
all the time but I'd recommend using the full path just in case.
|
57
|
+
|
41
58
|
## Development
|
42
59
|
|
43
60
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/aocli/cli.rb
CHANGED
@@ -1,21 +1,25 @@
|
|
1
|
+
require "byebug"
|
1
2
|
|
2
|
-
require"byebug"
|
3
3
|
module Aocli
|
4
4
|
class Cli
|
5
5
|
def initialize
|
6
|
-
@options =
|
6
|
+
@options = Aocli::Config.load_config
|
7
7
|
@prompt = TTY::Prompt.new
|
8
8
|
end
|
9
9
|
|
10
10
|
def run
|
11
11
|
prompt_for_command
|
12
|
-
|
12
|
+
prompt_command_options
|
13
13
|
# Aocli::Commands::StartDay
|
14
14
|
# Aocli::Commands::SaveCookie
|
15
|
+
# Aocli::Commands::RemoveCookie
|
16
|
+
# Aocli::Commands::SetTemplatePath
|
17
|
+
# Aocli::Commands::RemoveTemplatePath
|
15
18
|
options[:command].constantize.run!(options)
|
16
19
|
end
|
17
20
|
|
18
21
|
private
|
22
|
+
|
19
23
|
attr_accessor :options, :prompt
|
20
24
|
attr_reader :cookie
|
21
25
|
|
@@ -23,12 +27,16 @@ module Aocli
|
|
23
27
|
options[:command] = prompt.select("What would you like to do?", command_options)
|
24
28
|
end
|
25
29
|
|
26
|
-
def
|
30
|
+
def prompt_command_options
|
27
31
|
case options[:command]
|
28
32
|
when "Aocli::Commands::StartDay"
|
29
33
|
set_start_day_options
|
30
34
|
when "Aocli::Commands::SaveCookie"
|
31
35
|
set_save_cookie_options
|
36
|
+
when "Aocli::Commands::SetTemplatePath"
|
37
|
+
set_template_path_options
|
38
|
+
when "Aocli::Commands::RemoveCookie", "Aocli::Commands::RemoveTemplatePath"
|
39
|
+
nil
|
32
40
|
when "Exit"
|
33
41
|
exit
|
34
42
|
else
|
@@ -38,16 +46,17 @@ module Aocli
|
|
38
46
|
|
39
47
|
def command_options
|
40
48
|
@command_options ||= [
|
49
|
+
requires_config(:cookie, {name: "Start day", value: "Aocli::Commands::StartDay"}),
|
41
50
|
{name: "Save Cookie", value: "Aocli::Commands::SaveCookie"},
|
42
|
-
|
51
|
+
requires_config(:cookie, {name: "Unset cookie", value: "Aocli::Commands::RemoveCookie"}),
|
52
|
+
{name: set_template_prompt, value: "Aocli::Commands::SetTemplatePath"},
|
53
|
+
requires_config(:template_path, {name: "Unset template file", value: "Aocli::Commands::RemoveTemplatePath"}),
|
43
54
|
{name: "Exit", value: "Exit"},
|
44
55
|
]
|
45
|
-
# TODO:
|
46
|
-
# requires_cookie({name: "Remove cookie file", value: "Aocli::Commands::RemoveCookieFile"}),
|
47
56
|
end
|
48
57
|
|
49
|
-
def
|
50
|
-
hash.merge(options[
|
58
|
+
def requires_config(required_config, hash)
|
59
|
+
hash.merge(options[required_config] ? {} : {disabled: "(No #{required_config} has been set yet)"})
|
51
60
|
end
|
52
61
|
|
53
62
|
def set_start_day_options
|
@@ -60,5 +69,17 @@ module Aocli
|
|
60
69
|
def set_save_cookie_options
|
61
70
|
options[:cookie] = prompt.ask("Paste your cookie and it will be saved:")
|
62
71
|
end
|
72
|
+
|
73
|
+
def set_template_path_options
|
74
|
+
options[:template_path] = prompt.ask("Paste the full file path to your template file:")
|
75
|
+
end
|
76
|
+
|
77
|
+
def set_template_prompt
|
78
|
+
base_prompt = "Set Template File"
|
79
|
+
if options[:template_path]
|
80
|
+
base_prompt += " -> Currently set to '#{options[:template_path]}'"
|
81
|
+
end
|
82
|
+
base_prompt
|
83
|
+
end
|
63
84
|
end
|
64
85
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Aocli
|
2
|
+
module Commands
|
3
|
+
module RemoveTemplatePath
|
4
|
+
def self.run!(_options = nil)
|
5
|
+
current_path = Aocli::Config.value_for(:template_path)
|
6
|
+
Aocli::Config.remove_config(:template_path)
|
7
|
+
|
8
|
+
puts <<~MSG
|
9
|
+
### '#{current_path} is no longer set as your template file ###
|
10
|
+
MSG
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -2,8 +2,7 @@ module Aocli
|
|
2
2
|
module Commands
|
3
3
|
module SaveCookie
|
4
4
|
def self.run!(options)
|
5
|
-
Aocli::
|
6
|
-
File.write(Aocli::Values::CONFIG_FILE_PATH, {cookie: options[:cookie]}.to_yaml)
|
5
|
+
Aocli::Config.add_config(key: :cookie, value: options[:cookie])
|
7
6
|
|
8
7
|
puts <<~MSG
|
9
8
|
### Cookie saved to #{Aocli::Values::CONFIG_FILE_PATH} ###
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Aocli
|
2
|
+
module Commands
|
3
|
+
module SetTemplatePath
|
4
|
+
def self.run!(options)
|
5
|
+
Aocli::Config.add_config(key: :template_path, value: options[:template_path])
|
6
|
+
|
7
|
+
puts <<~MSG
|
8
|
+
### The template at '#{options[:template_path]}' will now be used ###
|
9
|
+
MSG
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -23,6 +23,7 @@ module Aocli
|
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
26
|
+
|
26
27
|
attr_reader :date, :output_destination, :main_file_path, :input_file_path
|
27
28
|
|
28
29
|
def main_content
|
@@ -31,15 +32,22 @@ module Aocli
|
|
31
32
|
day: date.day,
|
32
33
|
)
|
33
34
|
|
34
|
-
|
35
|
+
problem_description = "Part One Description\n" + problem_description
|
36
|
+
|
37
|
+
template_file = Aocli::Config.value_for(:template_path) || File.join(__dir__, "../content/main.txt")
|
38
|
+
unless File.exist?(template_file)
|
39
|
+
template_file = File.join(__dir__, "../content/main.txt")
|
40
|
+
end
|
41
|
+
|
42
|
+
content = Aocli::FileUtils.replace_line(
|
43
|
+
File.read(template_file),
|
44
|
+
"__aocli_problem_description__",
|
35
45
|
Aocli::FileUtils.wrap_lines(problem_description).split("\n").map { _1 == "" ? "#" : "# #{_1}" },
|
36
|
-
into: File.read(File.join(__dir__, "../content/main.txt")),
|
37
|
-
after: "##### Part One Description #####",
|
38
46
|
)
|
39
47
|
|
40
48
|
Aocli::FileUtils.replace_line(
|
41
49
|
content,
|
42
|
-
"
|
50
|
+
"__aocli_load_input__",
|
43
51
|
'input = File.read(__FILE__.gsub("main.rb", "input.txt"))'
|
44
52
|
)
|
45
53
|
end
|
data/lib/aocli/config.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Aocli
|
2
|
+
module Config
|
3
|
+
module_function
|
4
|
+
|
5
|
+
def add_config(key:, value:)
|
6
|
+
config = load_config.merge({key => value})
|
7
|
+
File.write(Aocli::Values::CONFIG_FILE_PATH, config.to_yaml)
|
8
|
+
end
|
9
|
+
|
10
|
+
def value_for(key)
|
11
|
+
load_config[key]
|
12
|
+
end
|
13
|
+
|
14
|
+
def load_config
|
15
|
+
unless File.exist?(Aocli::Values::CONFIG_FILE_PATH)
|
16
|
+
Aocli::FileUtils.touch_file(Aocli::Values::CONFIG_FILE_PATH)
|
17
|
+
end
|
18
|
+
|
19
|
+
YAML.load_file(Aocli::Values::CONFIG_FILE_PATH, fallback: {})
|
20
|
+
end
|
21
|
+
|
22
|
+
def remove_config(key)
|
23
|
+
config = load_config
|
24
|
+
|
25
|
+
File.write(Aocli::Values::CONFIG_FILE_PATH, config.except(key).to_yaml)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/aocli/content/main.txt
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
__aocli_problem_description__
|
2
2
|
|
3
3
|
def self.parse_input(input)
|
4
4
|
# Parse input
|
@@ -13,6 +13,7 @@ def part_two(input)
|
|
13
13
|
# Solve part two
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
__aocli_load_input__
|
17
|
+
|
17
18
|
puts "Part One: #{part_one(parse_input(input))}"
|
18
19
|
puts "Part Two: #{part_two(parse_input(input))}"
|
data/lib/aocli/version.rb
CHANGED
data/lib/aocli.rb
CHANGED
@@ -2,11 +2,14 @@
|
|
2
2
|
|
3
3
|
require("aocli/advent_of_code")
|
4
4
|
require("aocli/cli")
|
5
|
+
require("aocli/config")
|
6
|
+
require("aocli/commands/set_template_path")
|
5
7
|
require("aocli/commands/save_cookie")
|
8
|
+
require("aocli/commands/remove_cookie")
|
9
|
+
require("aocli/commands/remove_template_path")
|
6
10
|
require("aocli/commands/start_day")
|
7
11
|
require("aocli/file_utils")
|
8
12
|
require("aocli/version")
|
9
|
-
require("aocli/cookie_retriever")
|
10
13
|
require("aocli/values")
|
11
14
|
|
12
15
|
require("fileutils")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aocli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Astley
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,56 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 7.0.8
|
20
20
|
type: :runtime
|
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: 7.0.8
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.7'
|
34
34
|
type: :runtime
|
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: '2.7'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: '1.13'
|
48
48
|
type: :runtime
|
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: '1.13'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: tty-prompt
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.23.1
|
62
62
|
type: :runtime
|
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:
|
68
|
+
version: 0.23.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: byebug
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -173,10 +173,13 @@ files:
|
|
173
173
|
- lib/aocli/advent_of_code.rb
|
174
174
|
- lib/aocli/advent_of_code/client.rb
|
175
175
|
- lib/aocli/cli.rb
|
176
|
+
- lib/aocli/commands/remove_cookie.rb
|
177
|
+
- lib/aocli/commands/remove_template_path.rb
|
176
178
|
- lib/aocli/commands/save_cookie.rb
|
179
|
+
- lib/aocli/commands/set_template_path.rb
|
177
180
|
- lib/aocli/commands/start_day.rb
|
181
|
+
- lib/aocli/config.rb
|
178
182
|
- lib/aocli/content/main.txt
|
179
|
-
- lib/aocli/cookie_retriever.rb
|
180
183
|
- lib/aocli/file_utils.rb
|
181
184
|
- lib/aocli/values.rb
|
182
185
|
- lib/aocli/version.rb
|
@@ -205,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
208
|
- !ruby/object:Gem::Version
|
206
209
|
version: '0'
|
207
210
|
requirements: []
|
208
|
-
rubygems_version: 3.
|
211
|
+
rubygems_version: 3.3.25
|
209
212
|
signing_key:
|
210
213
|
specification_version: 4
|
211
214
|
summary: Command line application to retrieve advent of code challenges
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require("yaml")
|
2
|
-
|
3
|
-
module Aocli
|
4
|
-
module CookieRetriever
|
5
|
-
module_function
|
6
|
-
|
7
|
-
def call
|
8
|
-
return unless file_exists?
|
9
|
-
|
10
|
-
config = YAML.load_file(Aocli::Values::CONFIG_FILE_PATH)
|
11
|
-
config[:cookie]
|
12
|
-
end
|
13
|
-
|
14
|
-
def file_exists?
|
15
|
-
File.file?(Aocli::Values::CONFIG_FILE_PATH)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|