omnifocus 2.5.0 → 2.6.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: 3469a0eb4e6804a2821904b2a3caeb7c17969eb0d4ad4599e5735e1818189f4e
4
- data.tar.gz: 14156e5f8b81b9d776bb596dccfbc3656fa0c682ac110b1c3fddfd7270cb9b66
3
+ metadata.gz: 736efe96b1222812da98464175ed830369fa7b935426516d2bc408f79a823fd5
4
+ data.tar.gz: 5c607620f41f6bab752ea0566bc1fbaec1ff624d0ceca6b6829acc3772795024
5
5
  SHA512:
6
- metadata.gz: 359141e95a1ef11921321333d58c05f347a1b9febb677d9cae0ba4d06b8979c58da5e7db1e75afb5333401a86ef6cf4f429a049865d4171aca4bac70538fa01f
7
- data.tar.gz: 93e91a7d9e23b10591e8c42a5aac207cd99550a977c922eb276ceb6f68bad3ea77447df2caea181ad4a0b8fca23d8c9ed8e5d3dfd0b0f65836ab6fd50542d33e
6
+ metadata.gz: 30021137f84365e0e9b18b36931c592473bc4c41acfab1d10ee4b7fb4dbd88c96541be49555bbe4887a8e97e3e3f850e22b3309eb9a8d1dcc7068a1b439967c8
7
+ data.tar.gz: 4b28845beb951219077f85ad0e2491739e0584125560f49a35105473f4c5c494f89603c38e3e41eedd04a5bdf5c34d8b5b9902c245a982cc0edad2344caa868b
@@ -1,2 +1,2 @@
1
- ��結�N?H,�q���e(�>z��-`�" 鵙kE��ukt-�7�i�������PvbK&� 9���)�
2
- �&t[uq������x��Һ��y%o��?���tRM(��Q������D��3������E�T�w��`���٫�^��@Ԧ�wJqHD"G������K��_pt��<{V�X1�-vp2�h������ t_�Lˑ/"���,��!a����LJ4m��TMJ�qf�
1
+ Ty�����LY1����J����Y ��'&-7��z-i+T`��=����Q.qEUq��_^A$|�I:l�~�^hT�&�Pk��|�!��7S�?��;� I\z��$�,B\{
2
+ IzE���b�bg��jj�֢�T�A�,��L!�'r���X�V� 幘bP���t��e����m�����cmG�ܣ�s���7Gi��A,&~$!q�b[Β���H(O����饗�IJ���F7��9Q�
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,12 @@
1
+ === 2.6.0 / 2020-02-12
2
+
3
+ * 4 minor enhancements:
4
+
5
+ * Added `of version` subcommand to print out versions for omnifocus and plugins.
6
+ * Added config file (~/.omnifocus.yml) to exclude syncing named projects.
7
+ * Added debug ivar to OmniFocus instead of ruby's $DEBUG (noisy!).
8
+ * Extended `of help` subcommand to print out all known subcommands with descriptions.
9
+
1
10
  === 2.5.0 / 2019-10-08
2
11
 
3
12
  * 5 minor enhancements:
data/Rakefile CHANGED
@@ -13,8 +13,8 @@ Hoe.spec "omnifocus" do
13
13
  license "MIT"
14
14
 
15
15
  dependency "rb-scpt", "~> 1.0"
16
- dependency "mechanize", "~> 2.0"
17
- dependency "octokit", "~> 2.0", :development if ENV["TEST"]
16
+ dependency "mechanize", "~> 2.0"
17
+ dependency "octokit", "~> 4.14", :development if ENV["TEST"]
18
18
 
19
19
  pluggable!
20
20
  end
@@ -22,7 +22,7 @@ end
22
22
  def omnifocus cmd, options = nil
23
23
  inc = "-Ilib:../../omnifocus-github/dev/lib:../../omnifocus-redmine/dev/lib"
24
24
 
25
- ruby "#{options} #{inc} bin/of #{cmd}"
25
+ ruby "#{inc} bin/of #{cmd} #{options}"
26
26
  end
27
27
 
28
28
  task :sync => :isolate do
@@ -29,7 +29,24 @@ include Appscript
29
29
  # bts_id: a string uniquely identifying a task: SYSTEM(-projectname)?#id
30
30
 
31
31
  class OmniFocus
32
- VERSION = "2.5.0"
32
+ VERSION = "2.6.0"
33
+
34
+ class << self
35
+ attr_accessor :description, :current_desc
36
+ end
37
+
38
+ self.current_desc = nil
39
+ self.description = {}
40
+
41
+ def self.method_added name
42
+ return unless name =~ /^cmd_/
43
+ description[name] = current_desc || "UNKNOWN"
44
+ self.current_desc = nil
45
+ end
46
+
47
+ def self.desc str
48
+ @current_desc = str
49
+ end
33
50
 
34
51
  ##
35
52
  # bug_db = {
@@ -49,6 +66,10 @@ class OmniFocus
49
66
 
50
67
  attr_reader :existing
51
68
 
69
+ attr_accessor :debug
70
+
71
+ attr_accessor :config
72
+
52
73
  ##
53
74
  # Load any file matching "omnifocus/*.rb"
54
75
 
@@ -71,6 +92,30 @@ class OmniFocus
71
92
  def initialize
72
93
  @bug_db = Hash.new { |h,k| h[k] = {} }
73
94
  @existing = {}
95
+ self.debug = false
96
+ self.config = load_or_create_config
97
+ end
98
+
99
+ def load_or_create_config
100
+ require "yaml"
101
+
102
+ path = File.expand_path "~/.omnifocus.yml"
103
+
104
+ unless File.exist? path then
105
+ config = { :exclude => %w[proj_a proj_b proj_c] }
106
+
107
+ File.open path, "w" do |f|
108
+ YAML.dump config, f
109
+ end
110
+
111
+ abort "Created default config in #{path}. Go fill it out."
112
+ end
113
+
114
+ YAML.load File.read path
115
+ end
116
+
117
+ def excluded_projects
118
+ config[:exclude]
74
119
  end
75
120
 
76
121
  def its # :nodoc:
@@ -160,7 +205,7 @@ class OmniFocus
160
205
  def create_missing_projects
161
206
  (bug_db.keys - nerd_projects.projects.name.get).each do |name|
162
207
  warn "creating project #{name}"
163
- next if $DEBUG
208
+ next if debug
164
209
  make nerd_projects, :project, name
165
210
  end
166
211
  end
@@ -180,7 +225,7 @@ class OmniFocus
180
225
  project.tasks[its.name.contains(bts_id)].get.each do |task|
181
226
  if task.completed.get
182
227
  puts "Re-opening #{name} # #{bts_id}"
183
- next if $DEBUG
228
+ next if debug
184
229
 
185
230
  begin
186
231
  task.completed.set false
@@ -193,7 +238,7 @@ class OmniFocus
193
238
  project.tasks[its.name.contains(bts_id)].get.each do |task|
194
239
  next if task.completed.get
195
240
  puts "Removing #{name} # #{bts_id}"
196
- next if $DEBUG
241
+ next if debug
197
242
 
198
243
  begin
199
244
  task.completed.set true
@@ -203,12 +248,12 @@ class OmniFocus
203
248
  end
204
249
  when Array
205
250
  puts "Adding #{name} # #{bts_id}"
206
- next if $DEBUG
251
+ next if debug
207
252
  title, url = *value
208
253
  make project, :task, title, :note => url
209
254
  when Hash
210
255
  puts "Adding Detail #{name} # #{bts_id}"
211
- next if $DEBUG
256
+ next if debug
212
257
  properties = value.clone
213
258
  title = properties.delete(:title)
214
259
  make project, :task, title, properties
@@ -231,21 +276,25 @@ class OmniFocus
231
276
  reject { |mod| Class === mod }
232
277
  end
233
278
 
279
+ desc "Synchronize tasks with all known BTS plugins"
234
280
  def cmd_sync args
281
+ self.debug = args.delete("-d")
282
+ plugins = self.class._plugins
283
+
235
284
  # do this all up front so we can REALLY fuck shit up with plugins
236
- self.class._plugins.each do |plugin|
285
+ plugins.each do |plugin|
237
286
  extend plugin
238
287
  end
239
288
 
240
289
  prepopulate_existing_tasks
241
290
 
242
- self.class._plugins.each do |plugin|
291
+ plugins.each do |plugin|
243
292
  name = plugin.name.split(/::/).last.downcase
244
293
  warn "scanning #{name}"
245
294
  send "populate_#{name}_tasks"
246
295
  end
247
296
 
248
- if $DEBUG then
297
+ if debug then
249
298
  require 'pp'
250
299
  p :existing
251
300
  pp existing
@@ -276,6 +325,7 @@ class OmniFocus
276
325
  }
277
326
  end
278
327
 
328
+ desc "Create a new project or task"
279
329
  def cmd_neww args
280
330
  project_name = args.shift
281
331
  title = ($stdin.tty? ? args.join(" ") : $stdin.read).strip
@@ -323,10 +373,12 @@ class OmniFocus
323
373
  midnight + (n * 3600).to_i
324
374
  end
325
375
 
376
+ desc "Print out all active projects"
326
377
  def cmd_projects args
327
378
  h = Hash.new 0
328
379
  n = 0
329
380
 
381
+ # FIX: this seems broken
330
382
  self.active_projects.each do |project|
331
383
  name = project.name
332
384
  count = project.unscheduled_tasks.size
@@ -371,17 +423,37 @@ class OmniFocus
371
423
  end
372
424
  end
373
425
 
426
+ desc "Print out versions for omnifocus and plugins"
427
+ def cmd_version args
428
+ plugins = self.class._plugins
429
+
430
+ width = plugins.map(&:name).map(&:length).max
431
+ fmt = " %-#{width}s = v%s"
432
+
433
+ puts "Versions:"
434
+ puts
435
+
436
+ puts fmt % ["Omnifocus", VERSION]
437
+ plugins.each do |klass|
438
+ puts fmt % [klass, klass::VERSION]
439
+ end
440
+ end
441
+
442
+ desc "Print out descriptions for all known subcommands"
374
443
  def cmd_help args
375
444
  methods = OmniFocus.public_instance_methods(false).grep(/^cmd_/)
376
445
  methods.map! { |s| s[4..-1] }
446
+ width = methods.map(&:length).max
377
447
 
378
448
  puts "Available subcommands:"
379
449
 
380
450
  methods.sort.each do |m|
381
- puts " #{m}"
451
+ desc = self.class.description["cmd_#{m}".to_sym]
452
+ puts " %-#{width}s : %s." % [m, desc]
382
453
  end
383
454
  end
384
455
 
456
+ desc "Print out a schedule for a project or context."
385
457
  def cmd_schedule args
386
458
  name = args.shift or abort "need a context or project name"
387
459
 
@@ -392,6 +464,7 @@ class OmniFocus
392
464
  print_aggregate_report cp.tasks, :long
393
465
  end
394
466
 
467
+ desc "Fix review dates. Use -n to no-op."
395
468
  def cmd_fix_review_dates args # TODO: merge into reschedule
396
469
  skip = ARGV.first == "-n"
397
470
 
@@ -657,6 +730,7 @@ class OmniFocus
657
730
  end
658
731
  end
659
732
 
733
+ desc "Reschedule reviews & releases, and fix missing tasks. -n to no-op."
660
734
  def cmd_reschedule args
661
735
  skip = ARGV.first == "-n"
662
736
 
@@ -677,6 +751,7 @@ class OmniFocus
677
751
  end
678
752
  end
679
753
 
754
+ desc "Calculate the amount of estimated time across all tasks. Depressing."
680
755
  def cmd_time args
681
756
  m = 0
682
757
 
@@ -690,6 +765,7 @@ class OmniFocus
690
765
  puts " = %.2f hours" % (m / 60.0)
691
766
  end
692
767
 
768
+ desc "Print out an aggregate report for all live projects."
693
769
  def cmd_review args
694
770
  print_aggregate_report live_projects
695
771
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnifocus
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -11,9 +11,9 @@ bindir: bin
11
11
  cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
- MIIDPjCCAiagAwIBAgIBAzANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
14
+ MIIDPjCCAiagAwIBAgIBBDANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
15
15
  ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
16
- GRYDY29tMB4XDTE4MTIwNDIxMzAxNFoXDTE5MTIwNDIxMzAxNFowRTETMBEGA1UE
16
+ GRYDY29tMB4XDTE5MTIxMzAwMDIwNFoXDTIwMTIxMjAwMDIwNFowRTETMBEGA1UE
17
17
  AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
18
18
  JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
19
19
  b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
@@ -23,14 +23,14 @@ cert_chain:
23
23
  qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
24
24
  gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
25
25
  HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB
26
- AQCbJwLmpJR2PomLU+Zzw3KRzH/hbyUWc/ftru71AopZ1fy4iY9J/BW5QYKVYwbP
27
- V0FSBWtvfI/RdwfKGtuGhPKECZgmLieGuZ3XCc09qPu1bdg7i/tu1p0t0c6163ku
28
- nDMDIC/t/DAFK0TY9I3HswuyZGbLW7rgF0DmiuZdN/RPhHq2pOLMLXJmFclCb/im
29
- 9yToml/06TJdUJ5p64mkBs0TzaK66DIB1Smd3PdtfZqoRV+EwaXMdx0Hb3zdR1JR
30
- Em82dBUFsipwMLCYj39kcyHWAxyl6Ae1Cn9r/ItVBCxoeFdrHjfavnrIEoXUt4bU
31
- UfBugfLD19bu3nvL+zTAGx/U
26
+ AQCkkcHqAa6IKLYGl93rn78J3L+LnqyxaA059n4IGMHWN5bv9KBQnIjOrpLadtYZ
27
+ vhWkunWDKdfVapBEq5+T4HzqnsEXC3aCv6JEKJY6Zw7iSzl0M8hozuzRr+w46wvT
28
+ fV2yTN6QTVxqbMsJJyjosks4ZdQYov2zdvQpt1HsLi+Qmckmg8SPZsd+T8uiiBCf
29
+ b+1ORSM5eEfBQenPXy83LZcoQz8i6zVB4aAfTGGdhxjoMGUEmSZ6xpkOzmnGa9QK
30
+ m5x9IDiApM+vCELNwDXXGNFEnQBBK+wAe4Pek8o1V1TTOxL1kGPewVOitX1p3xoN
31
+ h7iEjga8iM1LbZUfiISZ+WrB
32
32
  -----END CERTIFICATE-----
33
- date: 2019-10-09 00:00:00.000000000 Z
33
+ date: 2020-02-13 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: rb-scpt
@@ -60,20 +60,6 @@ dependencies:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
62
  version: '2.0'
63
- - !ruby/object:Gem::Dependency
64
- name: octokit
65
- requirement: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '2.0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "~>"
75
- - !ruby/object:Gem::Version
76
- version: '2.0'
77
63
  - !ruby/object:Gem::Dependency
78
64
  name: rdoc
79
65
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +86,14 @@ dependencies:
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '3.18'
89
+ version: '3.22'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '3.18'
96
+ version: '3.22'
111
97
  description: Synchronizes bug tracking systems to omnifocus.
112
98
  email:
113
99
  - ryand-ruby@zenspider.com
@@ -134,7 +120,8 @@ files:
134
120
  homepage: https://github.com/seattlerb/omnifocus
135
121
  licenses:
136
122
  - MIT
137
- metadata: {}
123
+ metadata:
124
+ homepage_uri: https://github.com/seattlerb/omnifocus
138
125
  post_install_message:
139
126
  rdoc_options:
140
127
  - "--main"
@@ -152,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
139
  - !ruby/object:Gem::Version
153
140
  version: 1.3.1
154
141
  requirements: []
155
- rubygems_version: 3.0.6
142
+ rubygems_version: 3.0.3
156
143
  signing_key:
157
144
  specification_version: 4
158
145
  summary: Synchronizes bug tracking systems to omnifocus.
metadata.gz.sig CHANGED
Binary file