doing 1.0.84 → 1.0.85

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c11e6c75768b8dc2db3a36c5cdd572ad03eb884e118848ebbe413df2988a53df
4
- data.tar.gz: a3f45b396e4c6b06bab65d24007f0437e72687c6811f559ece8f6c5ca2e7bbba
3
+ metadata.gz: f11196376a7860f14164c80a107ce4151b18399f785cd607ba4f3a27205828fb
4
+ data.tar.gz: 1033e528416e1e3660db44ae55973009aa9b766f2566c0ff6e4bb942fdce4c05
5
5
  SHA512:
6
- metadata.gz: 7be6844f9f6caa072014afeded310cbaddf2a15380fde5498aea0f980dd5e8448ca44f5c5d9692a2075818f632bbbd19cce93e0db338c621a487abed8259f555
7
- data.tar.gz: d0af857fee4113e2055af031059901b56e2ff94e849f9d3a0d167d8edde0519e4d6a6ebdeef55050ee313ed628ba6fa2fbd17e73cfc66143e57e7a2c42f93c8f
6
+ metadata.gz: db7dc195eedf329ec7aad7e29830cf0d42c57178570a4675ce607e29761f733d2371b390f8c8ea73425a86240a28a91f7e05842ad9b49dd89257affbca12e5e6
7
+ data.tar.gz: 2b992ffea5a41c6f81ab7b5b1fb9b244197cca7eb1d7bbbae1eb6f9911db6ee16293b19e32c8c0b31cd03a3e181c4df9f8e1de893cc37c479fa2bdfd4accf6c4
data/README.md CHANGED
@@ -27,7 +27,7 @@ If there's something I want to look at later but doesn't need to be added to a t
27
27
 
28
28
  ## Installation
29
29
 
30
- The current version of `doing` is <!--VER-->1.0.83<!--END VER-->.
30
+ The current version of `doing` is <!--VER-->1.0.84<!--END VER-->.
31
31
 
32
32
  $ [sudo] gem install doing
33
33
 
data/bin/doing CHANGED
@@ -333,10 +333,6 @@ command :later do |c|
333
333
  c.desc "Edit entry with #{ENV['EDITOR']}"
334
334
  c.switch %i[e editor], negatable: false, default_value: false
335
335
 
336
- c.desc 'Edit entry with specified app'
337
- c.arg_name 'APP'
338
- c.flag %i[a app]
339
-
340
336
  c.desc 'Backdate start time to date string [4pm|20m|2h|yesterday noon]'
341
337
  c.arg_name 'DATE_STRING'
342
338
  c.flag %i[b back]
@@ -353,7 +349,7 @@ command :later do |c|
353
349
  date = Time.now
354
350
  end
355
351
 
356
- if options[:e] || (args.empty? && $stdin.stat.size.zero?)
352
+ if options[:editor] || (args.empty? && $stdin.stat.size.zero?)
357
353
  exit_now! 'No EDITOR variable defined in environment' if ENV['EDITOR'].nil?
358
354
 
359
355
  input = args.empty? ? '' : args.join(' ')
@@ -456,7 +452,7 @@ command %i[done did] do |c|
456
452
  section = wwid.config['current_section']
457
453
  end
458
454
 
459
- if options[:e]
455
+ if options[:editor]
460
456
  exit_now! 'No EDITOR variable defined in environment' if ENV['EDITOR'].nil?
461
457
 
462
458
  input = ''
@@ -1321,7 +1317,7 @@ command :last do |c|
1321
1317
 
1322
1318
  end
1323
1319
 
1324
- if options[:e]
1320
+ if options[:editor]
1325
1321
  wwid.edit_last(section: options[:s], options: { search: options[:search], tag: tags, tag_bool: options[:bool] })
1326
1322
  else
1327
1323
  puts wwid.last(times: true, section: options[:s],
@@ -1554,6 +1550,11 @@ command :archive do |c|
1554
1550
  c.arg_name 'QUERY'
1555
1551
  c.flag [:search]
1556
1552
 
1553
+ c.desc 'Archive entries older than date
1554
+ (Flexible date format, e.g. 1/27/2021, 2020-07-19, or Monday 3pm)'
1555
+ c.arg_name 'DATE_STRING'
1556
+ c.flag [:before]
1557
+
1557
1558
  c.action do |_global_options, options, args|
1558
1559
  if args.empty?
1559
1560
  section = wwid.current_section
@@ -1583,6 +1584,7 @@ command :archive do |c|
1583
1584
  'AND'
1584
1585
  end
1585
1586
  opts = {
1587
+ before: options[:before],
1586
1588
  bool: options[:bool],
1587
1589
  destination: options[:to],
1588
1590
  keep: options[:keep],
@@ -1615,6 +1617,11 @@ command :rotate do |c|
1615
1617
  c.arg_name 'QUERY'
1616
1618
  c.flag [:search]
1617
1619
 
1620
+ c.desc 'Rotate entries older than date
1621
+ (Flexible date format, e.g. 1/27/2021, 2020-07-19, or Monday 3pm)'
1622
+ c.arg_name 'DATE_STRING'
1623
+ c.flag [:before]
1624
+
1618
1625
  c.action do |_global_options, options, args|
1619
1626
  if options[:section] && options[:section] !~ /^all$/i
1620
1627
  options[:section] = wwid.guess_section(options[:section])
@@ -1641,11 +1648,11 @@ command :open do |c|
1641
1648
  if `uname` =~ /Darwin/
1642
1649
  c.desc 'Open with app name'
1643
1650
  c.arg_name 'APP_NAME'
1644
- c.flag [:a]
1651
+ c.flag %i[a app]
1645
1652
 
1646
1653
  c.desc 'Open with app bundle id'
1647
1654
  c.arg_name 'BUNDLE_ID'
1648
- c.flag [:b]
1655
+ c.flag %i[b bundle_id]
1649
1656
  end
1650
1657
  c.desc "Open with $EDITOR (#{ENV['EDITOR']})"
1651
1658
  c.switch %i[e editor], negatable: false, default_value: false
@@ -1656,11 +1663,11 @@ command :open do |c|
1656
1663
  k.instance_of?(String) || v.nil? || v == false
1657
1664
  end
1658
1665
  if `uname` =~ /Darwin/
1659
- if options[:a]
1666
+ if options[:app]
1660
1667
  system %(open -a "#{options[:a]}" "#{File.expand_path(wwid.doing_file)}")
1661
- elsif options[:b]
1668
+ elsif options[:bundle_id]
1662
1669
  system %(open -b "#{options[:b]}" "#{File.expand_path(wwid.doing_file)}")
1663
- elsif options[:e]
1670
+ elsif options[:editor]
1664
1671
  exit_now! 'No EDITOR variable defined in environment' if ENV['EDITOR'].nil?
1665
1672
 
1666
1673
  system %($EDITOR "#{File.expand_path(wwid.doing_file)}")
data/lib/doing/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Doing
2
- VERSION = '1.0.84'
2
+ VERSION = '1.0.85'
3
3
  end
data/lib/doing/wwid.rb CHANGED
@@ -1100,7 +1100,6 @@ class WWID
1100
1100
  items = @content[section]['items'].dup.sort_by { |item| item['date'] }.reverse
1101
1101
  idx = 0
1102
1102
  done_date = Time.now
1103
- next_start = Time.now
1104
1103
  count = (opt[:count]).zero? ? items.length : opt[:count]
1105
1104
  items.map! do |item|
1106
1105
  break if idx == count
@@ -1119,8 +1118,8 @@ class WWID
1119
1118
  end
1120
1119
  else
1121
1120
  if opt[:sequential]
1122
- done_date = next_start - 1
1123
- next_start = item['date']
1121
+ next_entry = next_item(item)
1122
+ done_date = next_entry['date'] - 60 if next_entry
1124
1123
  elsif opt[:took]
1125
1124
  if item['date'] + opt[:took] > Time.now
1126
1125
  item['date'] = Time.now - opt[:took]
@@ -1209,6 +1208,24 @@ class WWID
1209
1208
  return new_item
1210
1209
  end
1211
1210
 
1211
+ ##
1212
+ ## @brief Get next item in the index
1213
+ ##
1214
+ ## @param old_item
1215
+ ##
1216
+ def next_item(old_item)
1217
+ section = old_item['section']
1218
+
1219
+ section_items = @content[section]['items'].sort_by { |entry| entry['date'] }
1220
+ idx = section_items.index(old_item)
1221
+
1222
+ if section_items.size > idx
1223
+ section_items[idx + 1]
1224
+ else
1225
+ nil
1226
+ end
1227
+ end
1228
+
1212
1229
  ##
1213
1230
  ## @brief Delete an item from the index
1214
1231
  ##
@@ -1478,7 +1495,7 @@ class WWID
1478
1495
  ##
1479
1496
  ## @param file (String) The filepath to write to
1480
1497
  ##
1481
- def write(file = nil)
1498
+ def write(file = nil, backup: true)
1482
1499
  output = @other_content_top ? "#{@other_content_top.join("\n")}\n" : ''
1483
1500
 
1484
1501
  @content.each do |title, section|
@@ -1490,7 +1507,7 @@ class WWID
1490
1507
  $stdout.puts output
1491
1508
  else
1492
1509
  file = File.expand_path(file)
1493
- if File.exist?(file)
1510
+ if File.exist?(file) && backup
1494
1511
  # Create a backup copy for the undo command
1495
1512
  FileUtils.cp(file, "#{file}~")
1496
1513
  end
@@ -1549,9 +1566,15 @@ class WWID
1549
1566
  new_content[section]['items'] = []
1550
1567
 
1551
1568
  moved_items = []
1552
- if !tags.empty? || opt[:search]
1569
+ if !tags.empty? || opt[:search] || opt[:before]
1570
+ if opt[:before]
1571
+ time_string = opt[:before]
1572
+ time_string += ' 12am' if time_string !~ /(\d+:\d+|\d+[ap])/
1573
+ cutoff = chronify(time_string)
1574
+ end
1575
+
1553
1576
  items.delete_if do |item|
1554
- if ((!tags.empty? && item.has_tags?(tags, bool)) || (opt[:search] && item.matches_search?(opt[:search].to_s)))
1577
+ if ((!tags.empty? && item.has_tags?(tags, bool)) || (opt[:search] && item.matches_search?(opt[:search].to_s)) || (opt[:before] && item['date'] < cutoff))
1555
1578
  moved_items.push(item)
1556
1579
  counter += 1
1557
1580
  true
@@ -1587,10 +1610,15 @@ class WWID
1587
1610
 
1588
1611
  write(@doing_file)
1589
1612
 
1590
- file = @doing_file.sub(/(\.\w+)$/, "_#{Time.now.strftime('%Y-%m-%d%H:%M')}\\1")
1591
- @content = new_content
1613
+ file = @doing_file.sub(/(\.\w+)$/, "_#{Time.now.strftime('%Y-%m-%d')}\\1")
1614
+ if File.exist?(file)
1615
+ init_doing_file(file)
1616
+ @content.deep_merge(new_content)
1617
+ else
1618
+ @content = new_content
1619
+ end
1592
1620
 
1593
- write(file)
1621
+ write(file, backup: false)
1594
1622
  end
1595
1623
 
1596
1624
  ##
@@ -2012,7 +2040,7 @@ class WWID
2012
2040
  destination = guess_section(destination)
2013
2041
 
2014
2042
  if sections.include?(destination) && (sections.include?(section) || archive_all)
2015
- do_archive(section, destination, { count: count, tags: tags, bool: bool, search: options[:search], label: options[:label] })
2043
+ do_archive(section, destination, { count: count, tags: tags, bool: bool, search: options[:search], label: options[:label], before: options[:before] })
2016
2044
  write(doing_file)
2017
2045
  else
2018
2046
  exit_now! 'Either source or destination does not exist'
@@ -2045,9 +2073,15 @@ class WWID
2045
2073
  items = @content[section]['items'].dup
2046
2074
 
2047
2075
  moved_items = []
2048
- if !tags.empty? || opt[:search]
2076
+ if !tags.empty? || opt[:search] || opt[:before]
2077
+ if opt[:before]
2078
+ time_string = opt[:before]
2079
+ time_string += ' 12am' if time_string !~ /(\d+:\d+|\d+[ap])/
2080
+ cutoff = chronify(time_string)
2081
+ end
2082
+
2049
2083
  items.delete_if do |item|
2050
- if (!tags.empty? && item.has_tags?(tags, bool) || (opt[:search] && item.matches_search?(opt[:search].to_s)))
2084
+ if ((!tags.empty? && item.has_tags?(tags, bool)) || (opt[:search] && item.matches_search?(opt[:search].to_s)) || (opt[:before] && item['date'] < cutoff))
2051
2085
  moved_items.push(item)
2052
2086
  counter += 1
2053
2087
  true
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doing
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.84
4
+ version: 1.0.85
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra