nin 1.2.0 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 00b4da872337ca4ab8b11be39d559f398f029e617683437dde721bc61dd10517
4
- data.tar.gz: 9230fd0f962c4a3a3e6e3ce38059508e404e66deec956406c6147006642463ac
3
+ metadata.gz: 39f9e7a10bb0b9d4433ec8e048f0f98a86b69c446df00b87f60011ed51656be2
4
+ data.tar.gz: f531e76fab7c0dee8883f8f05bf4f5b4f2ce8ecd8322203dac43bb4ecb6dd72b
5
5
  SHA512:
6
- metadata.gz: 8e5591b0e4cd06c15e5248089b87c52d77f4483b033d97eab6c37be16b283314251e556059360a15c8df0cede4cf38757a964d28e49e77f2cdc73e88f80d5873
7
- data.tar.gz: 614a0cdd1365036d91019d086c128884fd789bbe4b685539f9e82ab16a142c0b4eea2fed45b8dbfe442efaa5ba526993444411226b502f4991ba09f33dd29069
6
+ metadata.gz: 36dd67aa3390451a0c127c3fcfa8c053ba8976ce7c24da2c4a822c243dfdb6b5b70a2639e222e0b6378ea4f4bd3e1696a0ebb98025808ec7ff0bf95274852c27
7
+ data.tar.gz: 56953c2a4da2d7eab114f35fc195a0e9415958737b1dc8133edf658cf1cbe9c4f26ba1f903223ca861457b9da7e3230a2f715c1faace7a4e7a4e2de23e988995
data/README.md CHANGED
@@ -41,12 +41,13 @@ COMMANDS:
41
41
  e | edit id desc Edit a todo. Prepend due date by a @. Prepend each tag by a \#
42
42
  p | prioritize id step Prioritize a todo by either a positive or negative step within its date group
43
43
  c | complete id(s) Un/complete todo(s)
44
- ac | archive id(s) Un/archive todo(s)
44
+ ac | archive id(s)|c Un/archive todo(s) or pass `c` to archive all completed items
45
45
  d | delete id(s) Delete todo(s)
46
46
  gc | garbage Delete all archived todos. Resets item ids as a side effect
47
47
  s | analyze Analyze tasks and print statistics
48
48
  i | repl Open nin in REPL mode
49
49
  o | open Open todo file in $EDITOR
50
+ v | version Print current version of nin
50
51
  ```
51
52
 
52
53
  - Print the usage instructions by calling `nin` without commands or arguments
@@ -80,6 +81,7 @@ COMMANDS:
80
81
  For Todoist integration, two environment variables must be set:
81
82
  - `NIN_INTEGRATION_CLIENT=todoist`
82
83
  - `NIN_INTEGRATION_CLIENT_TOKEN=token`. Token can be found in your [integration settings page](https://todoist.com/prefs/integrations)
84
+ - `NIN_INTEGRATION_TIMEOUT=interval_in_seconds`. A timeout interval for when the synchronization times out. Defaults to 60 seconds
83
85
 
84
86
  ## Development
85
87
 
@@ -102,8 +104,8 @@ my phone and I needed something more readable.
102
104
 
103
105
  ## Contribution
104
106
 
105
- Contributions are welcome. If you found a bug or want to add a new feature,
106
- open an issue or send a pull request.
107
+ Contributions are welcome. If you find a bug or want to add a new feature,
108
+ please open an issue or send a pull request.
107
109
 
108
110
  ## License
109
111
 
data/bin/nin CHANGED
@@ -3,8 +3,9 @@
3
3
  require_relative '../lib/nin'
4
4
 
5
5
  config = {
6
- integrated_client: ENV['NIN_INTEGRATION_CLIENT'],
7
- integrated_client_token: ENV['NIN_INTEGRATION_CLIENT_TOKEN']
6
+ integration_client: ENV['NIN_INTEGRATION_CLIENT'],
7
+ integration_client_token: ENV['NIN_INTEGRATION_CLIENT_TOKEN'],
8
+ integration_timeout_interval: ENV['NIN_INTEGRATION_TIMEOUT']
8
9
  }
9
10
 
10
11
  begin
@@ -37,6 +37,8 @@ module Nin
37
37
  run_interactive_mode
38
38
  when 'o', 'open'
39
39
  system("`echo $EDITOR` #{@todo.store.file}")
40
+ when 'v', 'version'
41
+ puts "nin #{Nin::VERSION}"
40
42
  else
41
43
  puts "NAME:\n\tnin - a simple, full-featured command line todo app"
42
44
  puts "\nUSAGE:\n\tnin COMMAND [arguments...]"
@@ -46,12 +48,13 @@ module Nin
46
48
  puts "\te | edit id desc Edit a todo. Prepend due date by a @. Prepend each tag by a \\#"
47
49
  puts "\tp | prioritize id step Prioritize a todo by either a positive or negative step within its date group"
48
50
  puts "\tc | complete id(s) Un/complete todo(s)"
49
- puts "\tac | archive id(s) Un/archive todo(s)"
51
+ puts "\tac | archive id(s)|c Un/archive todo(s) or pass `c` to archive all completed items"
50
52
  puts "\td | delete id(s) Delete todo(s)"
51
53
  puts "\tgc | garbage Delete all archived todos. Resets item ids as a side effect"
52
54
  puts "\ts | analyze Analyze tasks and print statistics"
53
55
  puts "\ti | repl Open nin in REPL mode"
54
56
  puts "\to | open Open todo file in $EDITOR"
57
+ puts "\tv | version Print current version of nin"
55
58
  end
56
59
  end
57
60
 
@@ -60,25 +63,28 @@ module Nin
60
63
  def collect_config
61
64
  config = { store: YamlStore.new }
62
65
 
63
- _client_name = @config.fetch(:integrated_client, nil)
64
- _client_credentials = @config.fetch(:integrated_client_token, nil)
66
+ _client_name = @config.fetch(:integration_client, nil)
67
+ _client_credentials = @config.fetch(:integration_client_token, nil)
68
+ _timeout_interval = @config.fetch(:integration_timeout_interval, 60)
65
69
  if _client_name && _client_credentials
66
70
  _client_klass = Object.const_get("Nin::Integration::#{_client_name.capitalize}::Client")
67
71
  _synchronizer_klass = Object.const_get("Nin::Integration::Synchronizer::#{_client_name.capitalize}")
68
72
 
69
- config[:integration_syncrhonizer] = _synchronizer_klass.new(_client_klass.new(_client_credentials))
73
+ config[:integration_syncrhonizer] = _synchronizer_klass.new(_client_klass.new(_client_credentials), _timeout_interval)
70
74
  end
71
75
 
72
76
  config
73
77
  end
74
78
 
75
79
  def collect_options
76
- options = { archived: false, local: false }
80
+ options = { archived: false, local: false, completed_only: false }
77
81
 
78
82
  if @command == 'l' && @args[0] == 'a'
79
83
  options[:archived] = true
80
84
  elsif @command == 'l' && @args[0] == 'l'
81
85
  options[:local] = true
86
+ elsif @command == 'ac' && @args[0] == 'c'
87
+ options[:completed_only] = true
82
88
  end
83
89
 
84
90
  options
@@ -1,8 +1,11 @@
1
1
  module Nin
2
2
  module Integration
3
3
  class Synchronizer
4
- def initialize(client)
5
- @client = client
4
+ attr_reader :timeout_interval
5
+
6
+ def initialize(client, timeout_interval = nil)
7
+ @client = client
8
+ @timeout_interval = timeout_interval
6
9
  end
7
10
  end
8
11
  end
@@ -2,7 +2,7 @@ module Nin
2
2
  module Presenter
3
3
  class ItemPresenter < ::SimpleDelegator
4
4
  def call(options = {})
5
- _id, _completed, _date, _desc, _tags = id, completed, date, desc, tags
5
+ _id, _completed, _date, _desc, _tags = id, decorate_completed, decorate_date, decorate_desc, decorate_tags
6
6
 
7
7
  separating_spaces = options.fetch(:separating_spaces, 2)
8
8
  id_spaces = options.fetch(:longest_id, 1) + separating_spaces
@@ -15,7 +15,7 @@ module Nin
15
15
 
16
16
  private
17
17
 
18
- def desc
18
+ def decorate_desc
19
19
  if self.archived?
20
20
  self.desc.yellow
21
21
  elsif self.completed?
@@ -25,7 +25,7 @@ module Nin
25
25
  end
26
26
  end
27
27
 
28
- def completed
28
+ def decorate_completed
29
29
  if self.completed?
30
30
  '[x]'.green
31
31
  else
@@ -33,7 +33,7 @@ module Nin
33
33
  end
34
34
  end
35
35
 
36
- def date
36
+ def decorate_date
37
37
  date_in_words = '@' << self.date.humanize
38
38
 
39
39
  if self.past?
@@ -45,7 +45,7 @@ module Nin
45
45
  end
46
46
  end
47
47
 
48
- def tags
48
+ def decorate_tags
49
49
  self.tags.map { |tag| tag.dup.prepend('#') }.join(' ').blue
50
50
  end
51
51
  end
@@ -1,3 +1,5 @@
1
+ require 'timeout'
2
+
1
3
  module Nin
2
4
  class Todo
3
5
  attr_accessor :items
@@ -71,9 +73,13 @@ module Nin
71
73
  end
72
74
 
73
75
  def archive(*ids)
74
- ids.each do |id|
75
- item = find_by_id(id.to_i)
76
- item.toggle_archived!
76
+ unless @options[:completed_only]
77
+ ids.each do |id|
78
+ item = find_by_id(id.to_i)
79
+ item.toggle_archived!
80
+ end
81
+ else
82
+ completed_unarchived_items.each(&:toggle_archived!)
77
83
  end
78
84
 
79
85
  @store.write(to_hash)
@@ -108,8 +114,15 @@ module Nin
108
114
  def sync(op, store_write = false, params = {})
109
115
  return unless @integration_syncrhonizer
110
116
 
111
- @integration_syncrhonizer.sync(op, params)
112
- reset_item_indices! if store_write
117
+ begin
118
+ Timeout::timeout(@integration_syncrhonizer.timeout_interval) {
119
+ @integration_syncrhonizer.sync(op, params)
120
+ reset_item_indices! if store_write
121
+ }
122
+ rescue Timeout::Error
123
+ puts 'Syncing timed out. Showing local items...'
124
+ puts
125
+ end
113
126
  end
114
127
 
115
128
  def fork_sync(op, store_write = false, params = {})
@@ -156,6 +169,10 @@ module Nin
156
169
  @items.where(:archived?, false)
157
170
  end
158
171
 
172
+ def completed_unarchived_items
173
+ unarchived_items.where(:completed, true)
174
+ end
175
+
159
176
  def find_by_id(id)
160
177
  found_item = @items.find_by(:id, id)
161
178
 
@@ -1,3 +1,3 @@
1
1
  module Nin
2
- VERSION='1.2.0'
2
+ VERSION='1.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmed Saleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-26 00:00:00.000000000 Z
11
+ date: 2020-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic
@@ -141,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
141
  - !ruby/object:Gem::Version
142
142
  version: '0'
143
143
  requirements: []
144
- rubygems_version: 3.0.3
144
+ rubygems_version: 3.1.2
145
145
  signing_key:
146
146
  specification_version: 4
147
147
  summary: A command line todo app that provides an easy to use CLI for everyday todo