aoc_cli 0.1.3 → 0.2.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.
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