markdo 0.1.3 → 0.1.4
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
- data/.ruby-version +1 -0
- data/.travis.yml +9 -0
- data/README.md +2 -0
- data/lib/markdo/cli.rb +3 -0
- data/lib/markdo/help_command.rb +2 -0
- data/lib/markdo/ics_command.rb +71 -0
- data/lib/markdo/rss_command.rb +13 -17
- data/lib/markdo/version.rb +1 -1
- data/markdo.gemspec +1 -0
- data/test/fixtures/ics_command.md +4 -0
- data/test/ics_command_test.rb +33 -0
- data/test/rss_command_test.rb +7 -3
- data/test/test_helper.rb +1 -0
- metadata +24 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a2e5bd0ee34d868e2dd11b5dee89f9a0fbc52c4
|
4
|
+
data.tar.gz: b5abfb1983a281bc00b59ffbe915e2a63fdc4c92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5385ec1014d033eb4e620f24d87b9e982040f92cc34a32b35ad0835b08dad8ef724d338e6532a804a3ee3cbdccaee149213e0eb3e67a65101e0bcdf40a61a1bc
|
7
|
+
data.tar.gz: 25dee892bf97eb1fe6c1d71f739b8e8f3421c9394f5fe0f451e4d9b613f83ba8c9426efdf97a30d20f349cc6fbdf3e341185b37cfa834bfc0721e4d44888cf7f
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.1
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Markdo
|
2
2
|
|
3
|
+
[](https://travis-ci.org/benjaminoakes/markdo)
|
4
|
+
|
3
5
|
Markdown-based task manager. Inspired by [OmniFocus][omnifocus], [TaskPaper][taskpaper], and [GitHub Flavored Markdown's task lists][gfm-task-lists].
|
4
6
|
|
5
7
|
[gfm-task-lists]: https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments
|
data/lib/markdo/cli.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'markdo/add_command'
|
2
2
|
require 'markdo/edit_command'
|
3
3
|
require 'markdo/help_command'
|
4
|
+
require 'markdo/ics_command'
|
4
5
|
require 'markdo/overview_command'
|
5
6
|
require 'markdo/query_command'
|
6
7
|
require 'markdo/rss_command'
|
@@ -24,6 +25,8 @@ module Markdo
|
|
24
25
|
AddCommand
|
25
26
|
when 'edit'
|
26
27
|
EditCommand
|
28
|
+
when 'ics'
|
29
|
+
IcsCommand
|
27
30
|
when 'overdue'
|
28
31
|
OverdueCommand
|
29
32
|
when 'overview'
|
data/lib/markdo/help_command.rb
CHANGED
@@ -9,6 +9,8 @@ Markdown-based task manager.
|
|
9
9
|
add "string" Add a task to the inbox. (Set $MARKDO_ROOT and $MARKDO_INBOX.)
|
10
10
|
edit Edit $MARKDO_ROOT in $EDITOR.
|
11
11
|
help, --help Display this help text.
|
12
|
+
ics Make an iCalendar feed of all due dates in Markdo. Can be imported
|
13
|
+
or subscribed to if on a remote server.
|
12
14
|
overview Get overview of overdue, starred, today's, and tomorrow's tasks.
|
13
15
|
overdue Search *.md files for previous dates. (YYYY-MM-DD format.)
|
14
16
|
tag "string" Search *.md files for @string.
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'markdo/command'
|
2
|
+
require 'date'
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
module Markdo
|
6
|
+
class IcsCommand < Command
|
7
|
+
def run
|
8
|
+
events = Dir.
|
9
|
+
glob(markdown_glob).
|
10
|
+
map { |path| File.readlines(path, encoding: 'UTF-8') }.
|
11
|
+
flatten.
|
12
|
+
grep(date_regexp).
|
13
|
+
map { |line|
|
14
|
+
begin
|
15
|
+
raw_due_date = line.match(date_regexp)
|
16
|
+
due_date = Date.parse(raw_due_date[0])
|
17
|
+
Event.new(due_date, due_date, clean(line))
|
18
|
+
rescue ArgumentError
|
19
|
+
# invalid date, skip it
|
20
|
+
end
|
21
|
+
}.compact
|
22
|
+
|
23
|
+
ics = template(events)
|
24
|
+
|
25
|
+
@stdout.puts(ics)
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
Event = Struct.new(:date_start, :date_end, :summary) do
|
31
|
+
def to_ics
|
32
|
+
buf = []
|
33
|
+
buf << 'BEGIN:VEVENT'
|
34
|
+
buf << "DTSTART;VALUE=DATE:#{date_start.strftime('%Y%m%d')}"
|
35
|
+
buf << "DTEND;VALUE=DATE:#{date_end.strftime('%Y%m%d')}"
|
36
|
+
buf << "SUMMARY:#{summary}"
|
37
|
+
buf << 'END:VEVENT'
|
38
|
+
buf.join("\n")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def markdown_glob
|
43
|
+
"#{@env['MARKDO_ROOT']}/*.md"
|
44
|
+
end
|
45
|
+
|
46
|
+
def date_regexp
|
47
|
+
%r(\b\d{4}-\d{2}-\d{2}\b)
|
48
|
+
end
|
49
|
+
|
50
|
+
def clean(line)
|
51
|
+
line.
|
52
|
+
sub(/\s*[-*] \[.\]\s+/, '').
|
53
|
+
sub(date_regexp, '').
|
54
|
+
strip
|
55
|
+
end
|
56
|
+
|
57
|
+
def template(events)
|
58
|
+
buf = []
|
59
|
+
|
60
|
+
buf << 'BEGIN:VCALENDAR'
|
61
|
+
buf << 'VERSION:2.0'
|
62
|
+
buf << 'CALSCALE:GREGORIAN'
|
63
|
+
buf << 'METHOD:PUBLISH'
|
64
|
+
buf << 'X-WR-CALNAME:Markdo Due Dates'
|
65
|
+
buf << events.map { |event| event.to_ics }
|
66
|
+
buf << 'END:VCALENDAR'
|
67
|
+
|
68
|
+
buf.flatten.join("\n")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/markdo/rss_command.rb
CHANGED
@@ -40,30 +40,26 @@ module Markdo
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def template(items)
|
43
|
+
buf = []
|
44
|
+
|
43
45
|
# No beginning of line whitespace allowed
|
44
|
-
buf
|
46
|
+
buf << %(<?xml version="1.0" encoding="UTF-8"?>)
|
45
47
|
|
46
|
-
buf =
|
47
|
-
|
48
|
-
|
49
|
-
<title>Links in Markdo</title>
|
50
|
-
XML
|
48
|
+
buf << %(<rss version="2.0">)
|
49
|
+
buf << %(<channel>)
|
50
|
+
buf << %(<title>Links in Markdo</title>)
|
51
51
|
|
52
52
|
items.each do |item|
|
53
|
-
buf <<
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
</item>
|
58
|
-
XML
|
53
|
+
buf << %(<item>)
|
54
|
+
buf << %(<title>#{item.title}</title>)
|
55
|
+
buf << %(<link>#{item.link}</link>)
|
56
|
+
buf << %(</item>)
|
59
57
|
end
|
60
58
|
|
61
|
-
buf <<
|
62
|
-
|
63
|
-
</rss>
|
64
|
-
XML
|
59
|
+
buf << %(</channel>)
|
60
|
+
buf << %(</rss>)
|
65
61
|
|
66
|
-
buf
|
62
|
+
buf.join("\n")
|
67
63
|
end
|
68
64
|
end
|
69
65
|
end
|
data/lib/markdo/version.rb
CHANGED
data/markdo.gemspec
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'markdo/ics_command'
|
3
|
+
|
4
|
+
module Markdo
|
5
|
+
describe IcsCommand do
|
6
|
+
it 'outputs an iCalendar feed from the input Markdown, skipping invalid dates' do
|
7
|
+
out = StringIO.new
|
8
|
+
err = StringIO.new
|
9
|
+
env = { 'MARKDO_ROOT' => 'test/fixtures' }
|
10
|
+
|
11
|
+
IcsCommand.new(out, err, env).run
|
12
|
+
|
13
|
+
out.string.must_equal <<-ICS
|
14
|
+
BEGIN:VCALENDAR
|
15
|
+
VERSION:2.0
|
16
|
+
CALSCALE:GREGORIAN
|
17
|
+
METHOD:PUBLISH
|
18
|
+
X-WR-CALNAME:Markdo Due Dates
|
19
|
+
BEGIN:VEVENT
|
20
|
+
DTSTART;VALUE=DATE:20140401
|
21
|
+
DTEND;VALUE=DATE:20140401
|
22
|
+
SUMMARY:Task with long-past due date
|
23
|
+
END:VEVENT
|
24
|
+
BEGIN:VEVENT
|
25
|
+
DTSTART;VALUE=DATE:20160401
|
26
|
+
DTEND;VALUE=DATE:20160401
|
27
|
+
SUMMARY:Task with due date
|
28
|
+
END:VEVENT
|
29
|
+
END:VCALENDAR
|
30
|
+
ICS
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/test/rss_command_test.rb
CHANGED
@@ -10,9 +10,9 @@ module Markdo
|
|
10
10
|
|
11
11
|
RssCommand.new(out, err, env).run
|
12
12
|
|
13
|
-
out.string
|
14
|
-
<?xml version
|
15
|
-
<rss>
|
13
|
+
xml_must_equal out.string, <<-XML
|
14
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
15
|
+
<rss version="2.0">
|
16
16
|
<channel>
|
17
17
|
<title>Links in Markdo</title>
|
18
18
|
<item>
|
@@ -31,5 +31,9 @@ module Markdo
|
|
31
31
|
</rss>
|
32
32
|
XML
|
33
33
|
end
|
34
|
+
|
35
|
+
def xml_must_equal(actual, expected)
|
36
|
+
actual.must_equal(expected.gsub(/^\s*/, ''))
|
37
|
+
end
|
34
38
|
end
|
35
39
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markdo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Oakes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -47,6 +61,8 @@ extensions: []
|
|
47
61
|
extra_rdoc_files: []
|
48
62
|
files:
|
49
63
|
- ".gitignore"
|
64
|
+
- ".ruby-version"
|
65
|
+
- ".travis.yml"
|
50
66
|
- Gemfile
|
51
67
|
- LICENSE.txt
|
52
68
|
- README.md
|
@@ -59,6 +75,7 @@ files:
|
|
59
75
|
- lib/markdo/date_command.rb
|
60
76
|
- lib/markdo/edit_command.rb
|
61
77
|
- lib/markdo/help_command.rb
|
78
|
+
- lib/markdo/ics_command.rb
|
62
79
|
- lib/markdo/overdue_command.rb
|
63
80
|
- lib/markdo/overview_command.rb
|
64
81
|
- lib/markdo/query_command.rb
|
@@ -70,7 +87,9 @@ files:
|
|
70
87
|
- lib/markdo/version.rb
|
71
88
|
- lib/markdo/version_command.rb
|
72
89
|
- markdo.gemspec
|
90
|
+
- test/fixtures/ics_command.md
|
73
91
|
- test/fixtures/rss_command.md
|
92
|
+
- test/ics_command_test.rb
|
74
93
|
- test/rss_command_test.rb
|
75
94
|
- test/test_helper.rb
|
76
95
|
homepage: http://github.com/benjaminoakes/markdo
|
@@ -93,11 +112,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
112
|
version: '0'
|
94
113
|
requirements: []
|
95
114
|
rubyforge_project:
|
96
|
-
rubygems_version: 2.
|
115
|
+
rubygems_version: 2.5.1
|
97
116
|
signing_key:
|
98
117
|
specification_version: 4
|
99
118
|
summary: Markdown-based task manager
|
100
119
|
test_files:
|
120
|
+
- test/fixtures/ics_command.md
|
101
121
|
- test/fixtures/rss_command.md
|
122
|
+
- test/ics_command_test.rb
|
102
123
|
- test/rss_command_test.rb
|
103
124
|
- test/test_helper.rb
|