omnifocus 2.5.0 → 2.6.0

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: 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