doing 1.0.40 → 1.0.45
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/doing +17 -2
- data/lib/doing/version.rb +1 -1
- data/lib/doing/wwid.rb +76 -8
- 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: 8449bbc0f6d6a8d059856d77abd2f4648544c3bda9e69c75a93a69fd8dffe851
|
4
|
+
data.tar.gz: 90c223b97441535bd6cda1563fcbc2dd97197901b9972ceb51989b1f4ad9599c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a42c67cf02151718f867e98d2a6571c88a7360b2a83c5e529378730364f4b812a4811c8bc03e990b08193fc4503b6f0e3f16b572a21cac1f45d15cb562333755
|
7
|
+
data.tar.gz: e0bac7d7dbd30808b9d438be3e4f887ddab05db294dff84467e55b3d3846e246e769b211dd37ff66f8e28c84c97262d23daca5af0445dd25ded03a7446707fef
|
data/bin/doing
CHANGED
@@ -488,6 +488,21 @@ command :finish do |c|
|
|
488
488
|
end
|
489
489
|
end
|
490
490
|
|
491
|
+
desc 'Repeat last entry as new entry'
|
492
|
+
arg_name 'section'
|
493
|
+
command [:again,:resume] do |c|
|
494
|
+
c.desc 'Section'
|
495
|
+
c.flag [:s, :section], :default_value => "All"
|
496
|
+
|
497
|
+
c.desc 'Note'
|
498
|
+
c.arg_name 'note_text'
|
499
|
+
c.flag [:n,:note]
|
500
|
+
|
501
|
+
c.action do |global_options, options, args|
|
502
|
+
wwid.restart_last({ section: options[:s], note: options[:n] })
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
491
506
|
desc 'Tag last entry'
|
492
507
|
arg_name 'tag1 [tag2...]'
|
493
508
|
command :tag do |c|
|
@@ -555,7 +570,7 @@ command :tag do |c|
|
|
555
570
|
end
|
556
571
|
|
557
572
|
desc 'Mark last entry as highlighted'
|
558
|
-
command :mark do |c|
|
573
|
+
command [:mark,:flag] do |c|
|
559
574
|
c.desc 'Section'
|
560
575
|
c.default_value wwid.current_section
|
561
576
|
c.flag [:s,:section], :default_value => wwid.current_section
|
@@ -1212,7 +1227,7 @@ post do |global,command,options,args|
|
|
1212
1227
|
if global[:stdout]
|
1213
1228
|
$stdout.print wwid.results.join("\n")
|
1214
1229
|
else
|
1215
|
-
|
1230
|
+
warn wwid.results.join("\n")
|
1216
1231
|
end
|
1217
1232
|
end
|
1218
1233
|
|
data/lib/doing/version.rb
CHANGED
data/lib/doing/wwid.rb
CHANGED
@@ -654,6 +654,62 @@ class WWID
|
|
654
654
|
end
|
655
655
|
end
|
656
656
|
|
657
|
+
##
|
658
|
+
## @brief Restart the last entry
|
659
|
+
##
|
660
|
+
## @param opt (Hash) Additional Options
|
661
|
+
##
|
662
|
+
def restart_last(opt = {})
|
663
|
+
opt[:section] ||= 'all'
|
664
|
+
opt[:note] ||= []
|
665
|
+
|
666
|
+
last = last_entry(opt)
|
667
|
+
if last.nil?
|
668
|
+
@results.push(%Q{No previous entry found})
|
669
|
+
return
|
670
|
+
end
|
671
|
+
# Remove @done tag
|
672
|
+
title = last['title'].sub(/\s*@done(\(.*?\))?/, '').chomp
|
673
|
+
add_item(title, last['section'], {:note => opt[:note], :back => opt[:date], :timed => true})
|
674
|
+
write(@doing_file)
|
675
|
+
end
|
676
|
+
|
677
|
+
##
|
678
|
+
## @brief Get the last entry
|
679
|
+
##
|
680
|
+
## @param opt (Hash) Additional Options
|
681
|
+
##
|
682
|
+
def last_entry(opt={})
|
683
|
+
opt[:section] ||= @current_section
|
684
|
+
|
685
|
+
sec_arr = []
|
686
|
+
|
687
|
+
if opt[:section].nil?
|
688
|
+
sec_arr = [@current_section]
|
689
|
+
elsif opt[:section].class == String
|
690
|
+
if opt[:section] =~ /^all$/i
|
691
|
+
combined = {'items' => []}
|
692
|
+
@content.each {|k,v|
|
693
|
+
combined['items'] += v['items']
|
694
|
+
}
|
695
|
+
items = combined['items'].dup.sort_by{|item| item['date'] }.reverse
|
696
|
+
sec_arr.push(items[0]['section'])
|
697
|
+
|
698
|
+
sec_arr = sections
|
699
|
+
else
|
700
|
+
sec_arr = [guess_section(opt[:section])]
|
701
|
+
end
|
702
|
+
end
|
703
|
+
|
704
|
+
|
705
|
+
all_items = []
|
706
|
+
sec_arr.each do |section|
|
707
|
+
all_items.concat(@content[section]['items'].dup) if @content.has_key?(section)
|
708
|
+
end
|
709
|
+
|
710
|
+
all_items.sort_by { |item| item['date'] }.last
|
711
|
+
end
|
712
|
+
|
657
713
|
##
|
658
714
|
## @brief Tag the last entry or X entries
|
659
715
|
##
|
@@ -903,14 +959,23 @@ class WWID
|
|
903
959
|
if file.nil?
|
904
960
|
$stdout.puts output
|
905
961
|
else
|
906
|
-
|
962
|
+
file = File.expand_path(file)
|
963
|
+
if File.exists?(file)
|
907
964
|
# Create a backup copy for the undo command
|
908
965
|
FileUtils.cp(file,file+"~")
|
909
966
|
|
910
|
-
File.open(
|
967
|
+
File.open(file,'w+') do |f|
|
911
968
|
f.puts output
|
912
969
|
end
|
913
970
|
end
|
971
|
+
|
972
|
+
if @config.key?('run_after')
|
973
|
+
script = File.expand_path(@config['run_after'])
|
974
|
+
if File.exist?(script)
|
975
|
+
# warn "Running #{script}"
|
976
|
+
`#{script}`
|
977
|
+
end
|
978
|
+
end
|
914
979
|
end
|
915
980
|
end
|
916
981
|
|
@@ -1125,7 +1190,6 @@ class WWID
|
|
1125
1190
|
}
|
1126
1191
|
out = output.join("")
|
1127
1192
|
elsif opt[:output] == "json" || opt[:output] == "timeline"
|
1128
|
-
|
1129
1193
|
items_out = []
|
1130
1194
|
max = items[-1]['date'].strftime('%F')
|
1131
1195
|
min = items[0]['date'].strftime('%F')
|
@@ -1137,7 +1201,6 @@ class WWID
|
|
1137
1201
|
title = i['title']
|
1138
1202
|
note = i['note'].map { |line| line.strip } if i['note']
|
1139
1203
|
end
|
1140
|
-
|
1141
1204
|
if i['title'] =~ /@done\((\d{4}-\d\d-\d\d \d\d:\d\d.*?)\)/ && opt[:times]
|
1142
1205
|
end_date = Time.parse($1)
|
1143
1206
|
interval = get_interval(i,false)
|
@@ -1152,14 +1215,16 @@ class WWID
|
|
1152
1215
|
tags.push(tag[0]) unless skip_tags.include?(tag[0])
|
1153
1216
|
}
|
1154
1217
|
if opt[:output] == "json"
|
1218
|
+
|
1155
1219
|
items_out << {
|
1156
1220
|
:date => i['date'],
|
1157
1221
|
:end_date => end_date,
|
1158
1222
|
:title => title.strip, #+ " #{note}"
|
1159
|
-
:note => note.class == Array ? note.join("\n") : note,
|
1223
|
+
:note => note.class == Array ? note.map(&:strip).join("\n") : note,
|
1160
1224
|
:time => "%02d:%02d:%02d" % fmt_time(interval),
|
1161
1225
|
:tags => tags
|
1162
1226
|
}
|
1227
|
+
|
1163
1228
|
elsif opt[:output] == "timeline"
|
1164
1229
|
new_item = {
|
1165
1230
|
'id' => index + 1,
|
@@ -1280,7 +1345,7 @@ EOTEMPLATE
|
|
1280
1345
|
end
|
1281
1346
|
|
1282
1347
|
if (item.has_key?('note') && !item['note'].empty?) && @config[:include_notes]
|
1283
|
-
note_lines = item['note'].delete_if{|line| line =~ /^\s*$/ }.map{|line| "\t" + line.sub(/^\t*/,'') + " " }
|
1348
|
+
note_lines = item['note'].delete_if{|line| line =~ /^\s*$/ }.map{|line| "\t\t" + line.sub(/^\t*/,'').sub(/^-/, '—') + " " }
|
1284
1349
|
if opt[:wrap_width] && opt[:wrap_width] > 0
|
1285
1350
|
width = opt[:wrap_width]
|
1286
1351
|
note_lines.map! {|line|
|
@@ -1607,7 +1672,6 @@ EOTEMPLATE
|
|
1607
1672
|
## @param format (String) return format (html, json, or text)
|
1608
1673
|
##
|
1609
1674
|
def tag_times(format="text", sort_by_name = false)
|
1610
|
-
|
1611
1675
|
return "" if @timers.empty?
|
1612
1676
|
|
1613
1677
|
max = @timers.keys.sort_by {|k| k.length }.reverse[0].length + 1
|
@@ -1722,7 +1786,7 @@ EOS
|
|
1722
1786
|
if m.kind_of?(Array)
|
1723
1787
|
index = 1
|
1724
1788
|
m.each {|v|
|
1725
|
-
new_tag = new_tag.
|
1789
|
+
new_tag = new_tag.gsub('\\' + index.to_s, v)
|
1726
1790
|
index = index + 1
|
1727
1791
|
}
|
1728
1792
|
end
|
@@ -1799,6 +1863,10 @@ EOS
|
|
1799
1863
|
if seconds.nil?
|
1800
1864
|
return [0, 0, 0]
|
1801
1865
|
end
|
1866
|
+
if seconds =~ /(\d+):(\d+):(\d+)/
|
1867
|
+
h, m, s = [$1, $2, $3]
|
1868
|
+
seconds = (h.to_i * 60 * 60) + (m.to_i * 60) + s.to_i
|
1869
|
+
end
|
1802
1870
|
minutes = (seconds / 60).to_i
|
1803
1871
|
hours = (minutes / 60).to_i
|
1804
1872
|
days = (hours / 24).to_i
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: doing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.45
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Terpstra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|