plansheet 0.23.1 → 0.25.1
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/.rubocop.yml +3 -0
- data/Gemfile.lock +3 -1
- data/exe/plansheet +11 -0
- data/lib/plansheet/pool.rb +3 -2
- data/lib/plansheet/project/yaml.rb +21 -4
- data/lib/plansheet/project.rb +27 -8
- data/lib/plansheet/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d6783f3c90e7d781de642be7c98e2a8469e48d8576405a5554cf92282632f2e
|
4
|
+
data.tar.gz: 39de90d2ad1d6c371c1626b56ffba32d79e293b9adaa0c01bb3d8113cc16225d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d30350f829b3db7e0b6d1163d55b835c55bef408c1c34ffc16a209837b9f4f1573b2d51d46fe294c4e48eeb1018a11a04701b100edce353c68c39becff5c9cca
|
7
|
+
data.tar.gz: fac00b40c31909b7d785e8938f49f877f02872875d72246bc8413dd84d34b857a0a3840605d0e22ac60a288091a6d28629eb915bb3ece4b2930c5e1ea8fbf841
|
data/.rubocop.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
plansheet (0.
|
4
|
+
plansheet (0.25.1)
|
5
5
|
dc-kwalify (~> 1.0)
|
6
|
+
diffy (= 3.4.2)
|
6
7
|
rgl (= 0.5.8)
|
7
8
|
|
8
9
|
GEM
|
@@ -11,6 +12,7 @@ GEM
|
|
11
12
|
ast (2.4.2)
|
12
13
|
coderay (1.1.3)
|
13
14
|
dc-kwalify (1.0.0)
|
15
|
+
diffy (3.4.2)
|
14
16
|
ffi (1.15.5)
|
15
17
|
formatador (1.1.0)
|
16
18
|
generator (0.0.1)
|
data/exe/plansheet
CHANGED
@@ -25,6 +25,10 @@ parser.on(
|
|
25
25
|
"--stats",
|
26
26
|
"Various stats (WIP)"
|
27
27
|
)
|
28
|
+
parser.on(
|
29
|
+
"--time-roi",
|
30
|
+
"Show projects with a time return-on-investment"
|
31
|
+
)
|
28
32
|
parser.on(
|
29
33
|
"--calendar",
|
30
34
|
"List of projects ordered by due date"
|
@@ -54,6 +58,13 @@ elsif options[:stats]
|
|
54
58
|
elsif options[:sort]
|
55
59
|
# Pool sorts projects, this now just matches old behaviour
|
56
60
|
pool.write_projects
|
61
|
+
elsif options[:"time-roi"]
|
62
|
+
project_arr = pool.projects.select { |x| x.time_roi_payoff != 0 && !x.dropped_or_done? }.sort
|
63
|
+
project_arr.each do |proj|
|
64
|
+
puts proj
|
65
|
+
puts "time ROI payoff: #{proj.time_roi_payoff}"
|
66
|
+
puts "\n"
|
67
|
+
end
|
57
68
|
elsif options[:calendar]
|
58
69
|
# TODO: add a project filter method
|
59
70
|
project_arr = pool.projects
|
data/lib/plansheet/pool.rb
CHANGED
@@ -10,12 +10,14 @@ module Plansheet
|
|
10
10
|
|
11
11
|
DEFAULT_COMPARISON_ORDER = %w[
|
12
12
|
completeness
|
13
|
+
completed_on
|
13
14
|
dependency
|
14
15
|
priority
|
15
16
|
defer
|
16
17
|
due
|
17
18
|
time_roi
|
18
19
|
status
|
20
|
+
name
|
19
21
|
].freeze
|
20
22
|
|
21
23
|
def initialize(config, debug: false)
|
@@ -89,8 +91,7 @@ module Plansheet
|
|
89
91
|
# to keep a list of project files to delete
|
90
92
|
project_namespaces.each do |ns|
|
91
93
|
pyf = ProjectYAMLFile.new "#{@projects_dir}/#{ns}.yml"
|
92
|
-
pyf.
|
93
|
-
pyf.write
|
94
|
+
pyf.compare_and_write projects_in_namespace(ns)
|
94
95
|
end
|
95
96
|
end
|
96
97
|
|
@@ -189,12 +189,29 @@ module Plansheet
|
|
189
189
|
@projects.sort!
|
190
190
|
end
|
191
191
|
|
192
|
-
def
|
193
|
-
|
192
|
+
def compare_and_write(projects)
|
193
|
+
updated_projects_string = yaml_dump(projects)
|
194
|
+
|
195
|
+
# Compare the existing file to the newly generated one - we only want a
|
196
|
+
# write if something has changed
|
197
|
+
return if updated_projects_string == yaml_dump(load_file)
|
198
|
+
|
199
|
+
puts "#{@path} has changed, writing"
|
200
|
+
require "diffy"
|
201
|
+
puts Diffy::Diff.new(yaml_dump(load_file), updated_projects_string).to_s(:color)
|
202
|
+
File.write @path, updated_projects_string
|
194
203
|
end
|
195
204
|
|
196
|
-
def yaml_dump
|
197
|
-
|
205
|
+
def yaml_dump(projects)
|
206
|
+
# binding.irb if projects.nil?
|
207
|
+
YAML.dump(projects.map do |x|
|
208
|
+
x.to_h.delete_if do |k, v|
|
209
|
+
# Remove low-value default noise from projects
|
210
|
+
k == "namespace" ||
|
211
|
+
(k == "priority" && v == "low") ||
|
212
|
+
(k == "status" && v == "idea")
|
213
|
+
end
|
214
|
+
end)
|
198
215
|
end
|
199
216
|
end
|
200
217
|
end
|
data/lib/plansheet/project.rb
CHANGED
@@ -138,13 +138,21 @@ module Plansheet
|
|
138
138
|
# Convert the field to minutes
|
139
139
|
@time_estimate_minutes = Plansheet.parse_time_duration(@time_estimate)
|
140
140
|
end
|
141
|
-
if @time_estimate_minutes
|
141
|
+
if @time_estimate_minutes
|
142
142
|
# Rewrite time_estimate field
|
143
143
|
@time_estimate = Plansheet.build_time_duration(@time_estimate_minutes)
|
144
144
|
|
145
145
|
yms = yearly_minutes_saved
|
146
146
|
@time_roi_payoff = yms.to_f / @time_estimate_minutes if yms
|
147
147
|
end
|
148
|
+
|
149
|
+
if done?
|
150
|
+
@completed_on ||= Date.today unless recurring?
|
151
|
+
remove_instance_variable("@status") if @status
|
152
|
+
remove_instance_variable("@time_estimate") if @time_estimate
|
153
|
+
remove_instance_variable("@time_estimate_minutes") if @time_estimate
|
154
|
+
remove_instance_variable("@time_roi_payoff") if @time_roi_payoff
|
155
|
+
end
|
148
156
|
end
|
149
157
|
|
150
158
|
def yearly_minutes_saved
|
@@ -182,6 +190,20 @@ module Plansheet
|
|
182
190
|
PROJECT_STATUS_PRIORITY[status] <=> PROJECT_STATUS_PRIORITY[other.status]
|
183
191
|
end
|
184
192
|
|
193
|
+
# This seems silly at first glance, but it's to keep projects from flipping
|
194
|
+
# around on each sort when they are equal in all other respects
|
195
|
+
def compare_name(other)
|
196
|
+
@name <=> other.name
|
197
|
+
end
|
198
|
+
|
199
|
+
def compare_completed_on(other)
|
200
|
+
retval = 0
|
201
|
+
retval += 1 if @completed_on
|
202
|
+
retval -= 1 if other.completed_on
|
203
|
+
retval = (other.completed_on <=> @completed_on) if retval.zero?
|
204
|
+
retval
|
205
|
+
end
|
206
|
+
|
185
207
|
def compare_due(other)
|
186
208
|
# -1 is receiving object being older
|
187
209
|
|
@@ -273,11 +295,6 @@ module Plansheet
|
|
273
295
|
task_based_status
|
274
296
|
end
|
275
297
|
|
276
|
-
def process_recurring
|
277
|
-
# TODO: Tasks will be moved from done->tasks if recurring project is
|
278
|
-
# starting again
|
279
|
-
end
|
280
|
-
|
281
298
|
# Due date either explicit or recurring
|
282
299
|
def due
|
283
300
|
return @due if @due
|
@@ -331,6 +348,10 @@ module Plansheet
|
|
331
348
|
status == "dropped" || status == "done"
|
332
349
|
end
|
333
350
|
|
351
|
+
def done?
|
352
|
+
status == "done"
|
353
|
+
end
|
354
|
+
|
334
355
|
def self.task_time_estimate(str)
|
335
356
|
Plansheet.parse_time_duration(Regexp.last_match(1)) if str.match(TIME_EST_REGEX)
|
336
357
|
end
|
@@ -340,8 +361,6 @@ module Plansheet
|
|
340
361
|
ALL_PROPERTIES.each do |prop|
|
341
362
|
h[prop] = instance_variable_get("@#{prop}") if instance_variable_defined?("@#{prop}")
|
342
363
|
end
|
343
|
-
h.delete "priority" if h.key?("priority") && h["priority"] == "low"
|
344
|
-
h.delete "status" if h.key?("status") && h["status"] == "idea"
|
345
364
|
h
|
346
365
|
end
|
347
366
|
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.25.1
|
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-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dc-kwalify
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: diffy
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.4.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.4.2
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rgl
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|