all_todo 0.4.1 → 0.4.2
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 +0 -0
- data.tar.gz.sig +0 -0
- data/lib/all_todo.rb +103 -22
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14a238fd842c1ed5bc0895777821fd9c55475f8f
|
4
|
+
data.tar.gz: 94883c7db7611aaf8d9b81437f4aa7792425e68c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d644983654f354f63ab409e03264b12dc15c7164cebfab9f1ee2aa9a78399f0776f44cb8103ca1d372ad4284ab8b0c9fe23338e13e9084b25cc5fc04fc25669
|
7
|
+
data.tar.gz: eea0a4e9fc9e82949dfa4b2b7b805ed0dcb790636978ef8c1e8bad97e7992652efc77a7131c6676e3656f54c68372b198e4bb0c74208fc6af35b5cba8925b7df
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/all_todo.rb
CHANGED
@@ -9,29 +9,35 @@ require 'rexle-diff'
|
|
9
9
|
|
10
10
|
class AllTodo < PxTodo
|
11
11
|
|
12
|
-
def initialize(raw_s, filepath: '.')
|
12
|
+
def initialize(raw_s=nil, filepath: '.')
|
13
13
|
|
14
|
-
|
14
|
+
if raw_s then
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
today_item = todo.slice!(/^\*\s+/)
|
20
|
-
x.when = 'today' if today_item
|
21
|
-
|
22
|
-
x.title = todo
|
23
|
-
|
24
|
-
end
|
16
|
+
super(raw_s, filepath: filepath) do |x|
|
17
|
+
|
18
|
+
todo = x.title
|
25
19
|
|
20
|
+
# is the to-do item selected for action today?
|
21
|
+
today_item = todo.slice!(/^\*\s+/)
|
22
|
+
x.when = 'today' if today_item
|
23
|
+
|
24
|
+
x.title = todo
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
26
29
|
end
|
27
30
|
|
31
|
+
# generates the all_todo_detail.txt file contents
|
32
|
+
#
|
28
33
|
def detail()
|
29
34
|
|
30
35
|
lines = []
|
31
36
|
|
32
37
|
@px.each_recursive do |item, parent, level, i|
|
33
38
|
|
34
|
-
lines << item.to_h.map
|
39
|
+
lines << item.to_h.map \
|
40
|
+
{|k,v| "%s%s: %s" % [' ' * level, k, v]}.join("\n")
|
35
41
|
lines << ['']
|
36
42
|
|
37
43
|
end
|
@@ -69,12 +75,83 @@ class AllTodo < PxTodo
|
|
69
75
|
pr = PxRowX.new(lines.join)
|
70
76
|
pr.to_xml pretty: true
|
71
77
|
|
78
|
+
end
|
79
|
+
|
80
|
+
# parses the all_todo_detail.txt file and updates the all_todo_detail.xml file
|
81
|
+
|
82
|
+
def update_detail()
|
83
|
+
|
84
|
+
s = File.read File.join(@filepath, 'all_todo_detail.txt')
|
85
|
+
|
86
|
+
px = Polyrex.new parse_detail(s)
|
87
|
+
results = []
|
88
|
+
|
89
|
+
px.each_recursive do |x, parent|
|
90
|
+
|
91
|
+
if x.when.length > 0 then
|
92
|
+
|
93
|
+
basic_xpath = x.node.backtrack.to_xpath
|
94
|
+
|
95
|
+
a = basic_xpath.split('/')
|
96
|
+
a.shift # removes the root node reference
|
97
|
+
|
98
|
+
s = if parent.heading.length > 0 then
|
99
|
+
"heading='%s'" % parent.heading
|
100
|
+
else
|
101
|
+
"title='%s'" % parent.title
|
102
|
+
end
|
103
|
+
|
104
|
+
a[-3] << "[summary/#{s}]"
|
105
|
+
a.last << "[summary/title='#{x.title}']"
|
106
|
+
xpath = a.join('/')
|
107
|
+
|
108
|
+
results << [xpath, x.when]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# open the all_todo_detail.xml file
|
113
|
+
|
114
|
+
xmlfilepath = File.join(@filepath, 'all_todo_detail.xml')
|
115
|
+
|
116
|
+
# if the file doesn't exist save it and return from the method
|
117
|
+
|
118
|
+
unless File.exists? xmlfilepath then
|
119
|
+
File.write xmlfilepath, px.to_xml(pretty: true)
|
120
|
+
end
|
121
|
+
|
122
|
+
px2 = Polyrex.new xmlfilepath
|
123
|
+
|
124
|
+
results.each do |xpath, val|
|
125
|
+
|
126
|
+
r = px2.element(xpath + '/summary/when')
|
127
|
+
r2 = px.element(xpath + '/summary/when')
|
128
|
+
next unless r
|
129
|
+
|
130
|
+
a1, a2 = [r.text, val].map {|x| x.split(';').map(&:strip) }
|
131
|
+
|
132
|
+
# return values which in both a1 and a2
|
133
|
+
r2.text = (a1 | a2).join('; ')
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
# update the all_todo_detail.xml file
|
138
|
+
|
139
|
+
File.write xmlfilepath, px.to_xml(pretty: true)
|
140
|
+
|
72
141
|
end
|
73
142
|
|
74
143
|
def save(filepath=File.join(@filepath, 'all_todo.xml'))
|
75
144
|
|
76
145
|
File.write filepath, @px.to_xml(pretty: true)
|
77
|
-
|
146
|
+
|
147
|
+
# also update the all_todo.txt and all_todo_detail.txt
|
148
|
+
|
149
|
+
File.write File.join(@filepath, 'all_todo.txt'), self.to_s
|
150
|
+
|
151
|
+
#update_detail()
|
152
|
+
#File.write File.join(@filepath, 'all_todo_detail.txt'), self.detail
|
153
|
+
'saved'
|
154
|
+
|
78
155
|
end
|
79
156
|
|
80
157
|
def to_s()
|
@@ -103,7 +180,7 @@ class AllTodo < PxTodo
|
|
103
180
|
status = x.status == 'done' ? 'x' : ' '
|
104
181
|
|
105
182
|
todo = []
|
106
|
-
todo << '* ' if x.when
|
183
|
+
todo << '* ' if x.when =~ /today/
|
107
184
|
todo << "%s[%s] %s" % [indent, status, x.title]
|
108
185
|
|
109
186
|
lines << '' if i == 0 and parent.heading.length > 0
|
@@ -166,35 +243,39 @@ class AllTodo < PxTodo
|
|
166
243
|
def update_today(file='todo_daily.txt')
|
167
244
|
|
168
245
|
# parse the newest todo_daily.txt file
|
169
|
-
|
246
|
+
|
247
|
+
pxtodo = PxTodo.new(file, filepath: @filepath, ignore_headings: true)
|
170
248
|
|
171
249
|
# remove the id attributes
|
172
250
|
px2 = pxtodo.to_px
|
173
251
|
px2.xpath('//todo').each {|x| x.attributes.delete :id}
|
174
|
-
|
252
|
+
|
175
253
|
# read the todo_daily_noid file
|
176
254
|
px1noid = Polyrex.new(File.join(@filepath, 'todo_daily_noid.xml'))
|
177
|
-
|
255
|
+
xml = px1noid.to_xml
|
256
|
+
xml2 = px2.to_xml pretty: true
|
257
|
+
|
178
258
|
# compare the 2 documents
|
179
|
-
doc = RexleDiff.new(
|
180
|
-
|
259
|
+
doc = RexleDiff.new(xml, xml2).to_doc
|
260
|
+
|
181
261
|
a = doc.xpath('//todo/summary/status[@created]../.')
|
182
262
|
|
263
|
+
|
183
264
|
# update the all_todo document
|
184
265
|
# first we need to find the ids
|
185
266
|
|
186
267
|
px1 = Polyrex.new(File.join(@filepath, 'todo_daily.xml'))
|
187
|
-
|
268
|
+
|
188
269
|
statuses = a.map do |node|
|
189
270
|
|
190
271
|
e = px1.element("//summary[contains(title,'#{node.text('title')}')]")
|
191
272
|
[e.parent.attributes[:id], node.text('status') ]
|
192
273
|
|
193
274
|
end
|
194
|
-
|
275
|
+
|
195
276
|
statuses.each do |id, status|
|
196
277
|
|
197
|
-
todo = @px.find_by_id id
|
278
|
+
todo = @px.find_by_id id
|
198
279
|
todo.status = status
|
199
280
|
|
200
281
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: all_todo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
4IWTpx4UfuUB+a/n3zRd7tPzfsCnbjv0WeNaOLxPEdrqrbPxdMp0ULnHMi6/cuMX
|
32
32
|
+/4csIEIHj2yLg==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2016-
|
34
|
+
date: 2016-12-03 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: px_todo
|
metadata.gz.sig
CHANGED
Binary file
|