aoc_generator 0.1.6 → 0.1.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 224ddd170a1b90b1f49ec1b74ae9f866469dfe4613f7e79c74fe21bc7e50df6e
4
- data.tar.gz: ce15c6c8269ce2fbfcbb9a13c435c2ff05f3f87595ab073eec0452fbd261ec4c
3
+ metadata.gz: 53517b89d8f104b0cd5924d2f09eeb6607f735131b80b7b0d6dd694da1b0a842
4
+ data.tar.gz: cd46560f3dbd64457b37b5459bf13937474c41b97120b84ab0a2c57a36385579
5
5
  SHA512:
6
- metadata.gz: 39b6cb3425c18ce2f88628e4d44a603481578e3cdb49096e252c10ff2edc1994c748ba859be5f67c6b6f3360331dd0caf4bbaad608e573939b13f1875fb018fb
7
- data.tar.gz: 29e5215ba788af0c801933c96167f1872bd1c54f722257c9118fa981cd5a9b49b3821cc7f5f64a2bb1592121bd9a2c1cebc2ab651d7a79e0c840d4f409045767
6
+ metadata.gz: da3ec592eff238f75cd44853cdf7699f6ad4838a2b51796067f5e514743de03289a82201557d167ad7012958e8cb0715520d0e2fb090094ad0796a9662bb65bf
7
+ data.tar.gz: cc84976227d250848e62b1025ff3b4bb00ea474047e64f105144bbe2311b2fe3cbfa1e52ffca75e7db0c58f8f269e01d02686a340c00d38c4c72c75d6fbda967
data/CHANGELOG.md CHANGED
@@ -1,8 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.8] - 2024-12-02
4
+
5
+ - Use commented-out code in templates
6
+
7
+ ## [0.1.7] - 2024-12-01
8
+
9
+ - Change README.md to PUZZLE_DESCRIPTION.md
10
+ - Add more setup instructions to the README
11
+ - Allow generator to overwrite PUZZLE_DESCRIPTION.md
12
+ - Don't generate data.txt if there is no session key
13
+
3
14
  ## [0.1.6] - 2024-11-29
4
15
 
5
- - Handle <ul> and <ol> HTML elements
16
+ - Handle HTML list elements
6
17
 
7
18
  ## [0.1.5] - 2024-11-28
8
19
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- aoc_generator (0.1.6)
4
+ aoc_generator (0.1.8)
5
5
  fileutils (~> 1.7)
6
6
  nokogiri (~> 1.16)
7
7
  thor (~> 1.3)
data/README.md CHANGED
@@ -1,6 +1,35 @@
1
1
  # Advent of Code Generator
2
2
 
3
- A Ruby gem that generates daily puzzle templates for Advent of Code.
3
+ A Ruby gem that generates daily puzzle templates for Advent of Code with automatically scraped puzzle descriptions and input data.
4
+
5
+ ## Installation
6
+
7
+ ```sh
8
+ gem install advent_of_code_generator
9
+ ```
10
+
11
+ ### Prerequisites
12
+
13
+ - RSpec: This gem uses RSpec for testing. If you haven't installed it yet, run:
14
+
15
+ ```sh
16
+ gem install rspec
17
+ ```
18
+
19
+ - Or optionally, set it up as you would for a normal Ruby project by adding `rspec` to your `Gemfile` and running `bundle install`.
20
+
21
+ ### Setting up your session key
22
+
23
+ 1. Log in to [Advent of Code](https://adventofcode.com)
24
+ 2. In your browser's developer tools, find the `session` cookie value
25
+ - Chrome: DevTools (F12) > Application > Cookies > adventofcode.com
26
+ - Firefox: DevTools (F12) > Storage > Cookies
27
+ 3. Store the session key in your environment:
28
+
29
+ ```sh
30
+ # Add to your ~/.bashrc, ~/.zshrc, or equivalent
31
+ export AOC_SESSION='your_session_key_here'
32
+ ```
4
33
 
5
34
  ## Usage
6
35
 
@@ -34,5 +63,58 @@ adventofcode/
34
63
  ├── day_01.rb
35
64
  ├── day_01_spec.rb
36
65
  ├── data.txt
37
- └── README.md
66
+ └── PUZZLE_DESCRIPTION.md
38
67
  ```
68
+
69
+ ## Generated File Contents
70
+
71
+ The generator creates the following files with basic templates:
72
+
73
+ ### `day_XX.rb`
74
+
75
+ ```ruby
76
+ class DayXX
77
+ def part_one(input)
78
+ # Your solution for Part One
79
+ end
80
+
81
+ def part_two(input)
82
+ # Your solution for Part Two
83
+ end
84
+ end
85
+ ```
86
+
87
+ ### `day_XX_spec.rb`
88
+
89
+ ```ruby
90
+ RSpec.describe Cheddachedda::YearXXXX::DayXX do
91
+ it "solves Part One" do
92
+ input = <<~INPUT
93
+ 1abc2
94
+ pqr3stu8vwx
95
+ a1b2c3d4e5f
96
+ treb7uchet
97
+ INPUT
98
+
99
+ expect(described_class.part_one(input)).to eq(142)
100
+ end
101
+
102
+ # it "solves Part Two" do
103
+ # input = <<~INPUT
104
+ # two1nine
105
+ # eightwothree
106
+ # abcone2threexyz
107
+ # xtwone3four
108
+ # 4nineeightseven2
109
+ # zoneight234
110
+ # 7pqrstsixteen
111
+ # INPUT
112
+
113
+ # expect(described_class.part_two(input)).to eq(281)
114
+ # end
115
+ end
116
+ ```
117
+
118
+ ## Acknowledgments
119
+
120
+ - Thanks to [Eric Wastl](https://twitter.com/ericwastl) for creating [Advent of Code](https://adventofcode.com)
@@ -15,25 +15,24 @@ module AdventOfCodeGenerator
15
15
  # ├── day_01.rb
16
16
  # ├── day_01_spec.rb
17
17
  # ├── data.txt
18
- # └── README.md
18
+ # └── PUZZLE_DESCRIPTION.md
19
19
  #
20
20
  class Generator
21
- FileData = Struct.new(:path, :content)
21
+ FileData = Struct.new(:path, :content, :require_session, :allow_overwrite)
22
22
 
23
23
  def initialize(options, scraped_data)
24
24
  @year = options[:year].to_s
25
25
  @day = options[:day].to_s.rjust(2, "0") # Ensures day is two digits (e.g., "01" instead of "1")
26
26
  @username = options[:username].gsub(/[_\-\.\s]/, "")
27
+ @session = options[:session]
27
28
  @scraped_data = scraped_data
28
29
  end
29
30
 
30
31
  def call
31
32
  FileUtils.mkdir_p(daily_directory)
32
33
 
33
- [readme, data_file, main_file, spec_file].each do |file_data|
34
- next if File.exist?(file_data.path)
35
-
36
- File.write(file_data.path, file_data.content)
34
+ [puzzle_description, data_file, main_file, spec_file].each do |file_data|
35
+ generate_file(file_data)
37
36
  end
38
37
  end
39
38
 
@@ -43,18 +42,25 @@ module AdventOfCodeGenerator
43
42
  @daily_directory ||= "#{@username}/year_#{@year}/day_#{@day}"
44
43
  end
45
44
 
46
- def readme
47
- path = "#{daily_directory}/README.md"
45
+ def generate_file(file_data)
46
+ return if file_data.require_session && @session.nil?
47
+ return if File.exist?(file_data.path) && !file_data.allow_overwrite
48
+
49
+ File.write(file_data.path, file_data.content)
50
+ end
51
+
52
+ def puzzle_description
53
+ path = "#{daily_directory}/PUZZLE_DESCRIPTION.md"
48
54
  content = @scraped_data[:puzzle_description]
49
55
 
50
- FileData.new(path, content)
56
+ FileData.new(path, content, false, true)
51
57
  end
52
58
 
53
59
  def data_file
54
60
  path = "#{daily_directory}/data.txt"
55
61
  content = @scraped_data[:input_data]
56
62
 
57
- FileData.new(path, content)
63
+ FileData.new(path, content, true, false)
58
64
  end
59
65
 
60
66
  def main_file
@@ -66,18 +72,18 @@ module AdventOfCodeGenerator
66
72
  module Year#{@year}
67
73
  class Day#{@day}
68
74
  def self.part_one(input)
69
- raise NotImplementedError
75
+ # Your solution for Part One
70
76
  end
71
77
 
72
78
  def self.part_two(input)
73
- raise NotImplementedError
79
+ # Your solution for Part Two
74
80
  end
75
81
  end
76
82
  end
77
83
  end
78
84
  RUBY
79
85
 
80
- FileData.new(path, content)
86
+ FileData.new(path, content, false, false)
81
87
  end
82
88
 
83
89
  def spec_file
@@ -98,17 +104,17 @@ module AdventOfCodeGenerator
98
104
  expect(described_class.part_one(input)).to eq(#{expectations[0]})
99
105
  end
100
106
 
101
- it "solves Part Two", skip: "not implemented yet" do
102
- input = <<~INPUT
103
- #{input[1]&.gsub("\n", "\n ")}
104
- INPUT
107
+ # it "solves Part Two" do
108
+ # input = <<~INPUT
109
+ # #{input[1]&.gsub("\n", "\n # ")}
110
+ # INPUT
105
111
 
106
- expect(described_class.part_two(input)).to eq(#{expectations[1]})
107
- end
112
+ # expect(described_class.part_two(input)).to eq(#{expectations[1]})
113
+ # end
108
114
  end
109
115
  RUBY
110
116
 
111
- FileData.new(path, content)
117
+ FileData.new(path, content, false, false)
112
118
  end
113
119
  end
114
120
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AdventOfCodeGenerator
4
- VERSION = "0.1.6"
4
+ VERSION = "0.1.8"
5
5
 
6
6
  class Error < StandardError; end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aoc_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-28 00:00:00.000000000 Z
11
+ date: 2024-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fileutils