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 +4 -4
- checksums.yaml.gz.sig +2 -2
- data.tar.gz.sig +0 -0
- data/History.rdoc +9 -0
- data/Rakefile +3 -3
- data/lib/omnifocus.rb +86 -10
- metadata +15 -28
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 736efe96b1222812da98464175ed830369fa7b935426516d2bc408f79a823fd5
|
4
|
+
data.tar.gz: 5c607620f41f6bab752ea0566bc1fbaec1ff624d0ceca6b6829acc3772795024
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30021137f84365e0e9b18b36931c592473bc4c41acfab1d10ee4b7fb4dbd88c96541be49555bbe4887a8e97e3e3f850e22b3309eb9a8d1dcc7068a1b439967c8
|
7
|
+
data.tar.gz: 4b28845beb951219077f85ad0e2491739e0584125560f49a35105473f4c5c494f89603c38e3e41eedd04a5bdf5c34d8b5b9902c245a982cc0edad2344caa868b
|
checksums.yaml.gz.sig
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
Ty�����LY�1����J����Y ��'&-7��z-i+T`��=����Q.qEUq��_^A$|�I:l�~�^hT�&�Pk��|�!��7S�?��;��I\z��$�,B\{
|
2
|
+
IzE���b�bg��j�j�֢�T�A�,��L!�'r���X�V� 幘b�P���t��e����m�����c�mG�ܣ�s���7Gi��A,&~$!q�b[Β���H�(�O����饗�IJ���F7��9Q�
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -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",
|
17
|
-
dependency "octokit", "~>
|
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 "#{
|
25
|
+
ruby "#{inc} bin/of #{cmd} #{options}"
|
26
26
|
end
|
27
27
|
|
28
28
|
task :sync => :isolate do
|
data/lib/omnifocus.rb
CHANGED
@@ -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.
|
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
|
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
|
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
|
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
|
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
|
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
|
-
|
285
|
+
plugins.each do |plugin|
|
237
286
|
extend plugin
|
238
287
|
end
|
239
288
|
|
240
289
|
prepopulate_existing_tasks
|
241
290
|
|
242
|
-
|
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
|
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
|
-
|
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.
|
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
|
-
|
14
|
+
MIIDPjCCAiagAwIBAgIBBDANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
|
15
15
|
ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
|
16
|
-
|
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
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
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:
|
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.
|
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.
|
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.
|
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
|