plansheet 0.26.0 → 0.27.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/plansheet/pool.rb +29 -6
- data/lib/plansheet/project/yaml.rb +16 -3
- data/lib/plansheet/project.rb +8 -0
- data/lib/plansheet/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e590a914b9d074b7ce833d04aac6e5320684c15a398c1c88d5774ae884cad297
|
4
|
+
data.tar.gz: 7e7d5004b022e6286e0e7792b9392b95c1536c398c7915a2534ead4dbf364080
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f03c2eaa802dd20a82180ab4a3ad2b23b2a3b69d6e7536f81a42305a3aab486175e18c767a9cb5b919a7c8d5d7e5a22032253e19b95d47d19c64a4583fd150f
|
7
|
+
data.tar.gz: 6a1923c54d08ba01d33dbfb8d0c76b813fb57b65edba8d79fd002db43b9c63299a301c763acb5084ab5d1e9a773af24be12b15d5f5c2d4fad3b009f820939cfa
|
data/Gemfile.lock
CHANGED
data/lib/plansheet/pool.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "pathname"
|
3
4
|
require "rgl/adjacency"
|
4
5
|
require "rgl/topsort"
|
5
6
|
|
@@ -23,7 +24,6 @@ module Plansheet
|
|
23
24
|
def initialize(config, debug: false)
|
24
25
|
@projects_dir = config[:projects_dir]
|
25
26
|
@sort_order = config[:sort_order]
|
26
|
-
# @completed_projects_dir = config(:completed_projects_dir)
|
27
27
|
|
28
28
|
# This bit of trickiness is because we don't know what the sort order is
|
29
29
|
# until runtime. I'm sure this design decision definitely won't bite me
|
@@ -77,6 +77,25 @@ module Plansheet
|
|
77
77
|
@projects.sort!
|
78
78
|
end
|
79
79
|
|
80
|
+
def archive_projects
|
81
|
+
archive_dir = "#{@projects_dir}/archive/"
|
82
|
+
Dir.mkdir archive_dir unless Dir.exist? archive_dir
|
83
|
+
|
84
|
+
# NOTE: It would save writes if we sorted and did all month/namespaces
|
85
|
+
# writes only once, but as the normal case only sees a few projects
|
86
|
+
# archived at a time, I'll leave that for someone else to implement ;-)
|
87
|
+
projects_to_archive = @projects.select(&:archivable?)
|
88
|
+
projects_to_archive.each do |project|
|
89
|
+
path = Pathname.new "#{archive_dir}/#{project.completed_on_month}/#{project.namespace}.yml"
|
90
|
+
Dir.mkdir path.dirname unless path.dirname.exist?
|
91
|
+
pyf = ProjectYAMLFile.new path
|
92
|
+
pyf.append_project project
|
93
|
+
end
|
94
|
+
|
95
|
+
# Now that the projects have been archived, remove them from the pool
|
96
|
+
@projects.reject!(&:archivable?)
|
97
|
+
end
|
98
|
+
|
80
99
|
def project_namespaces
|
81
100
|
@projects.collect(&:namespace).uniq.sort
|
82
101
|
end
|
@@ -86,12 +105,16 @@ module Plansheet
|
|
86
105
|
end
|
87
106
|
|
88
107
|
def write_projects
|
89
|
-
#
|
90
|
-
#
|
91
|
-
|
92
|
-
|
108
|
+
# Collect the namespaces *before* archiving is done, for the case where
|
109
|
+
# all active projects in a namespace have been completed and archived
|
110
|
+
namespaces_before_archiving = project_namespaces
|
111
|
+
|
112
|
+
archive_projects
|
113
|
+
|
114
|
+
namespaces_before_archiving.each do |ns|
|
115
|
+
projects = projects_in_namespace(ns)
|
93
116
|
pyf = ProjectYAMLFile.new "#{@projects_dir}/#{ns}.yml"
|
94
|
-
pyf.compare_and_write
|
117
|
+
pyf.compare_and_write projects
|
95
118
|
end
|
96
119
|
end
|
97
120
|
|
@@ -4,6 +4,7 @@ require "yaml"
|
|
4
4
|
require "date"
|
5
5
|
require "pathname"
|
6
6
|
|
7
|
+
require "diffy"
|
7
8
|
require "kwalify"
|
8
9
|
|
9
10
|
module Plansheet
|
@@ -152,7 +153,13 @@ module Plansheet
|
|
152
153
|
# TODO: this won't GC, inline validation instead?
|
153
154
|
end
|
154
155
|
|
156
|
+
def stub_file
|
157
|
+
File.write @path, YAML.dump([])
|
158
|
+
end
|
159
|
+
|
155
160
|
def load_file
|
161
|
+
stub_file unless File.exist? @path
|
162
|
+
|
156
163
|
# Handle pre-Ruby 3.1 psych versions (this is brittle)
|
157
164
|
@raw = if Psych::VERSION.split(".")[0].to_i >= 4
|
158
165
|
YAML.load_file(@path, permitted_classes: [Date])
|
@@ -189,16 +196,22 @@ module Plansheet
|
|
189
196
|
@projects.sort!
|
190
197
|
end
|
191
198
|
|
199
|
+
def append_project(project)
|
200
|
+
load_file
|
201
|
+
compare_and_write(@projects.append(project))
|
202
|
+
end
|
203
|
+
|
192
204
|
def compare_and_write(projects)
|
205
|
+
load_file
|
206
|
+
orig_string = yaml_dump(@projects)
|
193
207
|
updated_projects_string = yaml_dump(projects)
|
194
208
|
|
195
209
|
# Compare the existing file to the newly generated one - we only want a
|
196
210
|
# write if something has changed
|
197
|
-
return if updated_projects_string ==
|
211
|
+
return if updated_projects_string == orig_string
|
198
212
|
|
199
213
|
puts "#{@path} has changed, writing"
|
200
|
-
|
201
|
-
puts Diffy::Diff.new(yaml_dump(load_file), updated_projects_string).to_s(:color)
|
214
|
+
puts Diffy::Diff.new(orig_string, updated_projects_string).to_s(:color)
|
202
215
|
File.write @path, updated_projects_string
|
203
216
|
end
|
204
217
|
|
data/lib/plansheet/project.rb
CHANGED
@@ -155,6 +155,10 @@ module Plansheet
|
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
158
|
+
def completed_on_month
|
159
|
+
@completed_on&.strftime("%Y-%m")
|
160
|
+
end
|
161
|
+
|
158
162
|
def yearly_minutes_saved
|
159
163
|
if @daily_time_roi
|
160
164
|
Plansheet.parse_time_duration(@daily_time_roi) * 365
|
@@ -354,6 +358,10 @@ module Plansheet
|
|
354
358
|
status == "done"
|
355
359
|
end
|
356
360
|
|
361
|
+
def archivable?
|
362
|
+
!recurring? && @completed_on
|
363
|
+
end
|
364
|
+
|
357
365
|
def self.task_time_estimate(str)
|
358
366
|
Plansheet.parse_time_duration(Regexp.last_match(1)) if str.match(TIME_EST_REGEX)
|
359
367
|
end
|
data/lib/plansheet/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plansheet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.27.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Crosby
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-07-
|
11
|
+
date: 2022-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dc-kwalify
|