Something went wrong. Try again.
Code for the Advent of Code event
aoc advent-of-code
Something went wrong. Try again.
advent-of-code init.rb
1.9 kB · 67 lines
Ruby
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768#!/usr/bin/env ruby# frozen_string_literal: true
require 'bundler/setup'
require 'cgi'require 'date'require 'fileutils'require 'net/http'require 'optparse'
require 'aoc'
options = {}
begin OptionParser.new do |opts| opts.banner = "Usage: #{__FILE__} [options]" opts.on('-v', '--[no-]verbose', 'Verbose output') opts.on('--[no-]dry-run', 'Perform a dry run') opts.on('-yYEAR', '--year=YEAR', Integer, 'Year') opts.on('-dDAY', '--day=DAY', Integer, 'Day') opts.on('-sSESSION', '--session=SESSION', 'Session ID') end.parse! into: optionsrescue OptionParser::MissingArgument => e abort e.messageend
now = DateTime.nowverbose = options[:verbose]dry_run = options[:'dry-run']year = options[:year] || now.yearday = options[:day] || now.daysession_id = options[:session] || AoC::Config.load('.config/aoc.toml').sessionfilename = "data/aoc/#{year}/#{'%02d' % day}/input"linkname = "src/y#{year}/d#{'%02d' % day}/input"
AoC::Logging.level = verbose ? AoC::Logger::TRACE : AoC::Logger::INFO
log = AoC::Logging.logger_for 'main'
log.trace(options:)
abort 'Target file already exists' if File.exist? filenameabort 'Missing session token' unless session_id
log.trace(session_id:)
filedir = File.dirname filenameunless filedir == '.' || File.directory?(filedir) log.debug "Creating directory for output file (#{filedir})" FileUtils.mkdir_p filedirend
linkdir = File.dirname linknameunless File.directory?(linkdir) log.debug "Creating directory for link file (#{linkdir})" FileUtils.mkdir_p linkdirend
input_content = AoC::API.input(year, day, session_id, dry_run: dry_run)log.info('Writing response', filename:)open(filename, 'w') { |f| f.write input_content } # rubocop:disable Security/OpenFileUtils.ln_sr filename, linknamelog.info('Created link for input file', src: filename, dst: linkname)
puts 'OK' if verbose