adding gem file executable

main
Guido Schweizer 2022-12-02 19:42:16 +01:00
parent cee9087661
commit 13851a980c
15 changed files with 138 additions and 22 deletions

View File

@ -4,4 +4,3 @@ source "https://rubygems.org"
gem 'tty-prompt'
gem 'tty-file'
gem "colorize", "~> 0.8.1"

View File

@ -1,7 +1,6 @@
GEM
remote: https://rubygems.org/
specs:
colorize (0.8.1)
diff-lcs (1.5.0)
pastel (0.8.0)
tty-color (~> 0.5)
@ -25,7 +24,6 @@ PLATFORMS
arm64-darwin-21
DEPENDENCIES
colorize (~> 0.8.1)
tty-file
tty-prompt

BIN
aoc-helper-0.1.0.gem Normal file

Binary file not shown.

27
aoc.gemspec Normal file
View File

@ -0,0 +1,27 @@
# frozen_string_literal: true
Gem::Specification.new do |spec|
spec.name = "aoc-helper"
spec.platform = Gem::Platform::RUBY
spec.version = "0.1.0"
spec.authors = ["Guido Schweizer"]
spec.email = ["guido.schweizer@posteo.de"]
spec.description = %q{helps to create basic folders for aoc}
spec.summary = %q{run aoc and follow instructions}
spec.homepage = "https://aoc.sgui.de"
spec.license = "MIT"
spec.metadata["allowed_push_host"] = "https://rubygems.org"
spec.metadata["homepage_uri"] = spec.homepage
spec.metadata["source_code_uri"] = "https://github.com/guidocodes/aoc-helper"
spec.files = Dir.glob("lib/**/*", File::FNM_DOTMATCH)
spec.extra_rdoc_files = ["readme.md", "license.txt"]
spec.bindir = "exe"
spec.executables = ["aoc"]
spec.require_paths = ["lib"]
spec.required_ruby_version = ">= 3.0.0"
spec.add_dependency "tty-file", "~> 0.10"
spec.add_dependency "tty-prompt", "~> 0.23"
end

View File

@ -1,16 +0,0 @@
require "tty-prompt"
require_relative "tasks/new_day"
require_relative "tasks/part_two"
prompt = TTY::Prompt.new
day = prompt.ask("Name the day (1-24)") do |q|
q.in("1-24")
end
selected = prompt.select("What do you want to do", "New day":0, "Add part 2 to a day":1)
if selected == 0
new_day(prompt, day)
elsif selected == 1
part_two(prompt, day)
end

14
exe/aoc Executable file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
lib_path = File.expand_path('../lib', __dir__)
$:.unshift(lib_path) if !$:.include?(lib_path)
require("aoc")
begin
AOC.run
rescue StandardError => err
puts "ERROR: #{err.message}"
exit 1 #err.status
end

20
lib/aoc.rb Normal file
View File

@ -0,0 +1,20 @@
require "tty-prompt"
require_relative "tasks/new_day"
require_relative "tasks/part_two"
class AOC
def self.run
prompt = TTY::Prompt.new
day = prompt.ask("Name the day (1-24)") do |q|
q.in("1-24")
end
selected = prompt.select("What do you want to do", "New day":0, "Add part 2 to a day":1)
if selected == 0
new_day(prompt, day)
elsif selected == 1
part_two(prompt, day)
end
end
end

View File

@ -2,14 +2,20 @@ require "tty-prompt"
require "tty-file"
require "ostruct"
require_relative("templates")
def new_day(prompt, day)
input = prompt.multiline("Example input").join("")
print input
result = prompt.ask("Example result")
day_name = "day_#{day}"
TTY::File.copy_directory("app/templates","#{day_name}")
TTY::File.create_dir(day_name)
TTY::File.create_file("#{day_name}/data")
TTY::File.create_file("#{day_name}/impl.rb", IMPL_RB)
TTY::File.create_file("#{day_name}/run.rb", RUN_RB)
TTY::File.create_file("#{day_name}/test.rb", TEST_RB)
TTY::File.replace_in_file "#{day_name}/run.rb", /%day_name%/, day_name
TTY::File.replace_in_file "#{day_name}/test.rb", /%day_name%/, day_name
@ -18,4 +24,4 @@ def new_day(prompt, day)
puts "Done - run with:"
puts "ruby #{day_name}/test.rb"
end
end

67
lib/tasks/templates.rb Normal file
View File

@ -0,0 +1,67 @@
TEST_RB = <<~'TEST'
require_relative "impl"
INPUT = <<~IN
%example_input%
IN
RESULT = %example_result%
def test_example
parsed = parse(INPUT)
result = calculate(parsed)
if result == RESULT
puts "Test successful. Now run with real input"
puts "ruby %day_name%/run.rb"
else
puts "Test failed"
puts "expected \"#{RESULT}\" got \"#{result}\""
end
end
test_example
TEST
RUN_RB = <<~'RUN'
require_relative "impl"
def print(result)
if result.is_a? Array
result.map! {|l| "#{l}\n" }
end
puts result
end
def run
puts "running your implementation"
input = File.new("%day_name%/data").read
data = parse(input)
result = calculate(data)
print(result)
end
run
RUN
IMPL_RB = <<~'IMPL'
#prepare the input which is a string containing new lines
def parse(input)
data = []
input.each_line do |line|
data << line
end
data
end
# result should a single string or integer
def calculate(data)
result = ""
data.each do |d|
result = d
end
result
end
IMPL

1
license.txt Normal file
View File

@ -0,0 +1 @@
MIT