aoc_cli 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/aoc_cli/tools.rb CHANGED
@@ -28,7 +28,7 @@ module AocCli
28
28
  end
29
29
  private
30
30
  def cookie
31
- Files::Cookie.new(u:user).key
31
+ Files::Config::Cookie.key(user:user)
32
32
  end
33
33
  def url
34
34
  case page.to_sym
@@ -75,11 +75,8 @@ module AocCli
75
75
  end
76
76
  class Get < Convert
77
77
  def initialize(u:Metafile.get(:user),
78
- y:Metafile.get(:year),
79
- d:nil, p:)
80
- @input = Request
81
- .new(u:u, y:y, d:d, p:p)
82
- .get
78
+ y:Metafile.get(:year), d:nil, p:)
79
+ @input = Request.new(u:u, y:y, d:d, p:p).get
83
80
  end
84
81
  end
85
82
  class Post < Convert
@@ -92,5 +89,32 @@ module AocCli
92
89
  .post(data:data)
93
90
  end
94
91
  end
92
+ class Reddit
93
+ attr_reader :year, :day, :uniq, :browser
94
+ def initialize(y:Metafile.get(:year),
95
+ d:Metafile.get(:day),
96
+ b:Prefs.bool(key:"reddit_in_browser"))
97
+ @year = Validate.year(y)
98
+ @day = Validate.day(d)
99
+ @uniq = Database::Query
100
+ .new(path:Paths::Database.root("reddit"))
101
+ .select(t:"'#{year}'", where:{day:"'#{day}'"})
102
+ .flatten[1]
103
+ @browser = b
104
+ end
105
+ def open
106
+ system("#{browser ? "open" : cmd} #{link}")
107
+ end
108
+ def cmd
109
+ ["ttrv", "rtv"]
110
+ .map{|cli| cli unless `which #{cli}`.empty?}
111
+ .reject{|cmd| cmd.nil?}&.first || "open"
112
+ end
113
+ def link
114
+ "https://www.reddit.com/r/"\
115
+ "adventofcode/comments/#{uniq}/"\
116
+ "#{year}_day_#{day}_solutions"
117
+ end
118
+ end
95
119
  end
96
120
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module AocCli
4
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
5
3
  end
data/lib/aoc_cli/year.rb CHANGED
@@ -2,13 +2,13 @@ module AocCli
2
2
  module Year
3
3
  def self.refresh
4
4
  puts "- Updating calendar...".blue
5
- Year::Init.new.write
6
- Year::Stars.new.write.update_meta
5
+ Year::Meta.new.write
6
+ Year::Progress.new.write
7
7
  end
8
- class Init
8
+ class Meta
9
9
  attr_reader :user, :year, :paths
10
- def initialize(u:Files::Config.new.def_acc,
11
- y:Metafile.get(:year), dir:".")
10
+ def initialize(u:Prefs.default_alias,
11
+ y:Metafile.get(:year))
12
12
  @user = Validate.user(u)
13
13
  @year = Validate.year(y)
14
14
  @paths = Paths::Year.new(u:user, y:year)
@@ -18,37 +18,32 @@ module AocCli
18
18
  Metafile.year(u:user, y:year))
19
19
  end
20
20
  end
21
- class Stars < Init
22
- attr_reader :stats, :cal
23
- def initialize(u:Metafile.get(:user),
24
- y:Metafile.get(:year))
25
- super(u:u, y:y)
26
- @stats = Data::Stats.new(u:user, y:year)
27
- @cal = Data::Calendar.new(u:user, y:year)
21
+ class Progress < Meta
22
+ def stats
23
+ @stats ||= Requests::Stats.new(u:user, y:year)
24
+ end
25
+ def cal
26
+ @cal ||= Requests::Calendar.new(u:user, y:year)
28
27
  .fill(stars:stats.stars)
29
28
  end
29
+ def file
30
+ Files::Calendar.new(stats:stats, cal:cal).make
31
+ end
32
+ def write?
33
+ Prefs.bool(key:"calendar_file")
34
+ end
30
35
  def write
31
- File.write(paths.local(f:"Stars"), file)
36
+ File.write(paths.local(f:"Stars"), file) if write?
32
37
  self
33
38
  end
34
- def update_meta
35
- Metafile.add(path:paths.local(f:"meta"), hash:{
36
- stars:stats.stars.to_json,
37
- total:stats.total_stars})
38
- end
39
- private
40
- def file
41
- text = <<~file
42
- Year #{year}: #{stats.total_stars}/50 *
43
- #{"-" * (cal.data[0].to_s.length + 2)}
44
- #{cal.data.join("\n")}\n
45
- file
46
- text += stats.data.join("\n") if stats.total_stars > 0
47
- text
39
+ def init_calendar_db
40
+ Database::Calendar::Init
41
+ .new(u:user, y:year, stars:stats.stars)
42
+ .insert
48
43
  end
49
44
  end
50
- module Data
51
- class YearObject < Init
45
+ module Requests
46
+ class Request < Meta
52
47
  attr_reader :data
53
48
  def initialize(u:Metafile.get(:user),
54
49
  y:Metafile.get(:year))
@@ -57,10 +52,11 @@ module AocCli
57
52
  end
58
53
  private
59
54
  def fetch
60
- Tools::Get.new(u:user, y:year, p:page).plain.split("\n")
55
+ Tools::Get.new(u:user, y:year, p:page)
56
+ .plain.split("\n")
61
57
  end
62
58
  end
63
- class Calendar < YearObject
59
+ class Calendar < Request
64
60
  def page
65
61
  :Calendar
66
62
  end
@@ -74,7 +70,7 @@ module AocCli
74
70
  self
75
71
  end
76
72
  end
77
- class Stats < YearObject
73
+ class Stats < Request
78
74
  def page
79
75
  :Stats
80
76
  end
@@ -94,5 +90,26 @@ module AocCli
94
90
  end
95
91
  end
96
92
  end
93
+ class GitWrap
94
+ require 'git'
95
+ attr_reader :git
96
+ def initialize
97
+ @git = Git.init
98
+ File.write(".gitignore", ignore)
99
+ git.add(".gitignore")
100
+ end
101
+ def ignore_md?
102
+ Prefs.bool(key:"ignore_md_files")
103
+ end
104
+ def ignore_meta?
105
+ Prefs.bool(key:"ignore_meta_files")
106
+ end
107
+ def ignore
108
+ <<~ignore
109
+ #{".meta\n**/.meta" if ignore_meta?}#{
110
+ "\n*.md\n**/*.md" if ignore_md?}
111
+ ignore
112
+ end
113
+ end
97
114
  end
98
115
  end
data/sample/aoc.rc ADDED
@@ -0,0 +1,21 @@
1
+ //aoc-cli example config
2
+ //See the github repo for more information on configuring aoc-cli
3
+ //https://github.com/apexatoll/aoc-cli
4
+
5
+ [General]
6
+ //Print table in unicode rather than ascii
7
+ unicode_tables=>true
8
+ //Open Reddit in browser rather than use a Reddit CLI
9
+ reddit_in_browser=>false
10
+
11
+ [Initialise Year]
12
+ //Create a calendar file
13
+ calendar_file=>true
14
+ //Initialise git repo on year initialisation
15
+ init_git=>false
16
+ //Add calendar and puzzle files to gitignore
17
+ ignore_md_files=>true
18
+ //Add .meta files to gitignore
19
+ ignore_meta_files=>true
20
+ //Include leaderboard stats in calendar file
21
+ lb_in_calendar=>true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aoc_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Welham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-17 00:00:00.000000000 Z
11
+ date: 2021-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: json
42
+ name: git
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -129,7 +129,7 @@ files:
129
129
  - lib/aoc_cli/tools.rb
130
130
  - lib/aoc_cli/version.rb
131
131
  - lib/aoc_cli/year.rb
132
- - pkg/aoc_cli-0.1.2.gem
132
+ - sample/aoc.rc
133
133
  homepage: https://github.com/apexatoll/aoc-cli
134
134
  licenses:
135
135
  - MIT
Binary file