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