markdo 0.1.12.alpha → 0.2.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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +15 -9
  4. data/Dockerfile +21 -7
  5. data/Guardfile +11 -0
  6. data/README.md +12 -7
  7. data/Rakefile +11 -7
  8. data/bin/markdo +1 -1
  9. data/docker-compose.yml +9 -0
  10. data/lib/markdo/cli.rb +23 -55
  11. data/lib/markdo/command_support.rb +14 -0
  12. data/lib/markdo/commands.rb +16 -0
  13. data/lib/markdo/{add_command.rb → commands/add_command.rb} +2 -6
  14. data/lib/markdo/commands/command.rb +33 -0
  15. data/lib/markdo/{edit_command.rb → commands/edit_command.rb} +2 -2
  16. data/lib/markdo/commands/forecast_command.rb +41 -0
  17. data/lib/markdo/{help_command.rb → commands/help_command.rb} +7 -8
  18. data/lib/markdo/commands/ics_command.rb +15 -0
  19. data/lib/markdo/commands/inbox_command.rb +11 -0
  20. data/lib/markdo/commands/overdue_command.rb +11 -0
  21. data/lib/markdo/commands/overview_command.rb +16 -0
  22. data/lib/markdo/commands/process_command.rb +91 -0
  23. data/lib/markdo/commands/query_command.rb +14 -0
  24. data/lib/markdo/commands/star_command.rb +11 -0
  25. data/lib/markdo/commands/summary_command.rb +25 -0
  26. data/lib/markdo/commands/tag_command.rb +11 -0
  27. data/lib/markdo/commands/today_command.rb +12 -0
  28. data/lib/markdo/commands/tomorrow_command.rb +12 -0
  29. data/lib/markdo/{version_command.rb → commands/version_command.rb} +1 -1
  30. data/lib/markdo/commands/week_command.rb +16 -0
  31. data/lib/markdo/data_source.rb +27 -0
  32. data/lib/markdo/ics_exporter.rb +65 -0
  33. data/lib/markdo/models/task.rb +46 -0
  34. data/lib/markdo/models/task_attribute.rb +22 -0
  35. data/lib/markdo/models/task_collection.rb +75 -0
  36. data/lib/markdo/version.rb +1 -1
  37. data/markdo.gemspec +6 -0
  38. data/script/build +9 -0
  39. data/spec/fixtures/add_command/Inbox.md +0 -0
  40. data/spec/fixtures/date_commands/Inbox.md +6 -0
  41. data/spec/fixtures/date_commands/Sprint.md +6 -0
  42. data/spec/fixtures/ics_command/Inbox.md +0 -0
  43. data/{test/fixtures/ics_command.md → spec/fixtures/ics_command/Sprint.md} +0 -0
  44. data/spec/fixtures/inbox_command/Inbox.md +2 -0
  45. data/spec/fixtures/inbox_command/Sprint.md +2 -0
  46. data/spec/fixtures/process_command/Backlog.md +0 -0
  47. data/spec/fixtures/process_command/Inbox.md +0 -0
  48. data/spec/fixtures/process_command/Maybe.md +0 -0
  49. data/spec/fixtures/process_command/Sprint.md +0 -0
  50. data/spec/fixtures/query_command/Inbox.md +4 -0
  51. data/spec/fixtures/query_command/Sprint.md +4 -0
  52. data/spec/fixtures/tag_command/Inbox.md +2 -0
  53. data/spec/fixtures/tag_command/Sprint.md +2 -0
  54. data/spec/lib/cli_spec.rb +79 -0
  55. data/spec/lib/commands/add_command_spec.rb +70 -0
  56. data/spec/lib/commands/edit_command_spec.rb +32 -0
  57. data/spec/lib/commands/forecast_command_spec.rb +24 -0
  58. data/spec/lib/commands/ics_command_spec.rb +30 -0
  59. data/spec/lib/commands/inbox_command_spec.rb +22 -0
  60. data/spec/lib/commands/overdue_command_spec.rb +19 -0
  61. data/spec/lib/commands/overview_command_spec.rb +25 -0
  62. data/spec/lib/commands/process_command_spec.rb +178 -0
  63. data/spec/lib/commands/query_command_spec.rb +23 -0
  64. data/spec/lib/commands/star_command_spec.rb +19 -0
  65. data/spec/lib/commands/summary_command_spec.rb +23 -0
  66. data/spec/lib/commands/tag_command_spec.rb +21 -0
  67. data/spec/lib/commands/today_command_spec.rb +19 -0
  68. data/spec/lib/commands/tomorrow_command_spec.rb +19 -0
  69. data/spec/lib/commands/week_command_spec.rb +23 -0
  70. data/spec/lib/ics_exporter_spec.rb +59 -0
  71. data/spec/lib/models/task_attribute_spec.rb +85 -0
  72. data/spec/lib/models/task_collection_spec.rb +168 -0
  73. data/spec/lib/models/task_spec.rb +79 -0
  74. data/spec/spec_helper.rb +40 -0
  75. metadata +189 -42
  76. data/.ruby-version +0 -1
  77. data/lib/markdo/command.rb +0 -12
  78. data/lib/markdo/date_command.rb +0 -9
  79. data/lib/markdo/forecast_command.rb +0 -61
  80. data/lib/markdo/ics_command.rb +0 -73
  81. data/lib/markdo/inbox_command.rb +0 -15
  82. data/lib/markdo/overdue_command.rb +0 -47
  83. data/lib/markdo/overview_command.rb +0 -17
  84. data/lib/markdo/process_command.rb +0 -68
  85. data/lib/markdo/query_command.rb +0 -24
  86. data/lib/markdo/rss_command.rb +0 -67
  87. data/lib/markdo/star_command.rb +0 -9
  88. data/lib/markdo/summary_command.rb +0 -30
  89. data/lib/markdo/tag_command.rb +0 -9
  90. data/lib/markdo/today_command.rb +0 -10
  91. data/lib/markdo/tomorrow_command.rb +0 -10
  92. data/lib/markdo/week_command.rb +0 -36
  93. data/test/fixtures/inbox.md +0 -2
  94. data/test/fixtures/rss_command.md +0 -4
  95. data/test/ics_command_test.rb +0 -38
  96. data/test/inbox_command_test.rb +0 -19
  97. data/test/rss_command_test.rb +0 -39
  98. data/test/summary_command_test.rb +0 -19
  99. data/test/test_helper.rb +0 -3
@@ -1,3 +1,3 @@
1
1
  module Markdo
2
- VERSION = "0.1.12.alpha"
2
+ VERSION = '0.2.0'
3
3
  end
@@ -21,4 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "minitest"
23
23
  spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "simplecov"
26
+ spec.add_development_dependency "guard"
27
+ spec.add_development_dependency "guard-rake"
28
+ spec.add_development_dependency "opal"
29
+ spec.add_development_dependency "opal-rspec"
24
30
  end
@@ -0,0 +1,9 @@
1
+ #!/bin/sh
2
+
3
+ set -xe
4
+ rm -rf pkg
5
+ mkdir -p pkg
6
+ rake build
7
+ gem install --no-ri --no-rdoc pkg/*.gem
8
+ markdo version
9
+ markdo help
File without changes
@@ -0,0 +1,6 @@
1
+ - [ ] @due(2016-01-01) Overdue in inbox
2
+ - [ ] @star Starred in inbox
3
+ - [ ] @due(2016-02-28) Due today in inbox
4
+ - [ ] @due(2016-02-29) Due tomorrow in inbox
5
+ - [ ] @due(2016-03-06) Due soon in inbox
6
+ - [ ] @due(2016-03-07) Not due soon in inbox
@@ -0,0 +1,6 @@
1
+ - [ ] @due(2016-01-01) Overdue
2
+ - [ ] @star Starred
3
+ - [ ] @due(2016-02-28) Due today
4
+ - [ ] @due(2016-02-29) Due tomorrow
5
+ - [ ] @due(2016-03-06) Due soon
6
+ - [ ] @due(2016-03-07) Not due soon
File without changes
@@ -0,0 +1,2 @@
1
+ - [ ] Example 1 in inbox
2
+ - [ ] Example 2 in inbox
@@ -0,0 +1,2 @@
1
+ - [ ] Example 3
2
+ - [ ] Example 4
File without changes
File without changes
@@ -0,0 +1,4 @@
1
+ - [ ] ASDF in inbox
2
+ - [ ] asdf in inbox
3
+ - [ ] Foo in inbox
4
+ - [ ] Bar in inbox
@@ -0,0 +1,4 @@
1
+ - [ ] ASDF
2
+ - [ ] asdf
3
+ - [ ] Foo
4
+ - [ ] Bar
@@ -0,0 +1,2 @@
1
+ - [ ] Tagged @foo in inbox
2
+ - [ ] Tagged @bar in inbox
@@ -0,0 +1,2 @@
1
+ - [ ] Tagged @foo
2
+ - [ ] Tagged @bar
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+ require 'markdo/cli'
3
+
4
+ module Markdo
5
+ describe CLI do
6
+ describe 'given "version"' do
7
+ it 'prints the version' do
8
+ command_support = build_command_support
9
+
10
+ CLI.new(command_support).run('version')
11
+
12
+ assert_version_printed command_support.stdout
13
+ end
14
+ end
15
+
16
+ describe 'given "--version"' do
17
+ it 'prints the version' do
18
+ command_support = build_command_support
19
+
20
+ CLI.new(command_support).run('--version')
21
+
22
+ assert_version_printed command_support.stdout
23
+ end
24
+ end
25
+
26
+ describe 'given "--help"' do
27
+ it 'prints help text' do
28
+ command_support = build_command_support
29
+ expect(Kernel).to receive(:exit).with(1)
30
+
31
+ CLI.new(command_support).run('--help')
32
+
33
+ assert_help_printed command_support.stderr
34
+ end
35
+ end
36
+
37
+ describe 'given "starred"' do
38
+ it 'delegates to StarCommand' do
39
+ command_support = build_command_support
40
+ expect(StarCommand).to receive(:new).and_return(FakeCommand.new)
41
+
42
+ CLI.new(command_support).run('starred')
43
+ end
44
+ end
45
+
46
+ describe 'given "q"' do
47
+ it 'delegates to StarCommand' do
48
+ command_support = build_command_support
49
+ expect(QueryCommand).to receive(:new).and_return(FakeCommand.new)
50
+
51
+ CLI.new(command_support).run('q')
52
+ end
53
+ end
54
+
55
+ describe 'given an unknown command' do
56
+ it 'defaults to help text' do
57
+ command_support = build_command_support
58
+ expect(Kernel).to receive(:exit).with(1)
59
+
60
+ CLI.new(command_support).run('asdf')
61
+
62
+ assert_help_printed command_support.stderr
63
+ end
64
+ end
65
+
66
+ def assert_version_printed(io)
67
+ expect(io.string).to match(/v[0-9.]+[a-z0-9]+\n/)
68
+ end
69
+
70
+ def assert_help_printed(io)
71
+ expect(io.string).to match(/^Markdown-based task manager\./)
72
+ end
73
+
74
+ class FakeCommand
75
+ def run
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+ require 'markdo/commands/add_command'
3
+
4
+ module Markdo
5
+ describe AddCommand do
6
+ before do
7
+ skip 'Could not access fixtures' unless File.exists?('spec/fixtures/')
8
+ end
9
+
10
+ it 'appends to the inbox' do
11
+ clear_inbox
12
+ markdo_add 'Example task'
13
+ expect(read_inbox).to eq([
14
+ '- [ ] Example task',
15
+ ])
16
+ markdo_add 'Another example task'
17
+ expect(read_inbox).to eq([
18
+ '- [ ] Example task',
19
+ '- [ ] Another example task',
20
+ ])
21
+ end
22
+
23
+ describe 'given a nil' do
24
+ it 'appends to the inbox' do
25
+ clear_inbox
26
+ markdo_add nil
27
+ assert_inbox_empty
28
+ end
29
+ end
30
+
31
+ describe 'given an empty string' do
32
+ it 'appends to the inbox' do
33
+ clear_inbox
34
+ markdo_add ''
35
+ assert_inbox_empty
36
+ end
37
+ end
38
+
39
+ describe 'given a blank string' do
40
+ it 'appends to the inbox' do
41
+ clear_inbox
42
+ markdo_add ' '
43
+ assert_inbox_empty
44
+ end
45
+ end
46
+
47
+ def clear_inbox
48
+ File.write('spec/fixtures/add_command/Inbox.md', '')
49
+ end
50
+
51
+ def read_inbox
52
+ File.
53
+ readlines('spec/fixtures/add_command/Inbox.md').
54
+ map { |line| line.chomp }
55
+ end
56
+
57
+ def markdo_add(task_body)
58
+ command_support = build_command_support({
59
+ 'MARKDO_ROOT' => 'spec/fixtures/add_command',
60
+ 'MARKDO_INBOX' => 'Inbox.md',
61
+ })
62
+
63
+ AddCommand.new(command_support).run(task_body)
64
+ end
65
+
66
+ def assert_inbox_empty
67
+ expect(read_inbox).to be_empty
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+ require 'markdo/commands/inbox_command'
3
+
4
+ module Markdo
5
+ describe EditCommand do
6
+ it 'edits the Markdo root in your preferred editor' do
7
+ skip 'Shellwords not supported' unless defined?(Shellwords)
8
+
9
+ command_support = build_command_support({
10
+ 'EDITOR' => 'aneditor',
11
+ 'MARKDO_ROOT' => 'spec/fixtures/'
12
+ })
13
+
14
+ expect(Kernel).to receive(:system).with('aneditor spec/fixtures/')
15
+
16
+ EditCommand.new(command_support).run
17
+ end
18
+
19
+ it 'does not allow unsafe values for MARKDO_ROOT' do
20
+ skip 'Shellwords not supported' unless defined?(Shellwords)
21
+
22
+ command_support = build_command_support({
23
+ 'EDITOR' => 'aneditor',
24
+ 'MARKDO_ROOT' => '`ruin everything`'
25
+ })
26
+
27
+ expect(Kernel).to receive(:system).with('aneditor \`ruin\ everything\`')
28
+
29
+ EditCommand.new(command_support).run
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'markdo/commands/forecast_command'
3
+
4
+ module Markdo
5
+ describe ForecastCommand do
6
+ it 'outputs forecast counts' do
7
+ skip 'Dir.glob not supported' unless Dir.respond_to?(:glob)
8
+
9
+ command_support = build_command_support_for_date_commands
10
+
11
+ ForecastCommand.new(command_support).run
12
+
13
+ expect(command_support.stdout.string).to eq(<<-XML)
14
+ Tu: 0
15
+ We: 0
16
+ Th: 0
17
+ Fr: 0
18
+ Sa: 0
19
+ Su: 2
20
+ Next: 4
21
+ XML
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ require 'markdo/commands/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
+ skip 'Dir.glob not supported' unless Dir.respond_to?(:glob)
8
+
9
+ command_support = build_command_support({
10
+ 'MARKDO_ROOT' => 'spec/fixtures/ics_command'
11
+ })
12
+
13
+ IcsCommand.new(command_support).run
14
+
15
+ expect(command_support.stdout.string).to eq(<<-ICS)
16
+ BEGIN:VCALENDAR
17
+ VERSION:2.0
18
+ CALSCALE:GREGORIAN
19
+ METHOD:PUBLISH
20
+ X-WR-CALNAME:Markdo Due Dates
21
+ BEGIN:VEVENT
22
+ DTSTART;VALUE=DATE:20160401
23
+ DTEND;VALUE=DATE:20160401
24
+ SUMMARY:Task with tag-style due date
25
+ END:VEVENT
26
+ END:VCALENDAR
27
+ ICS
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require 'markdo/commands/inbox_command'
3
+
4
+ module Markdo
5
+ describe InboxCommand do
6
+ it 'outputs inbox' do
7
+ skip 'File.readlines not supported' unless File.respond_to?(:readlines)
8
+
9
+ command_support = build_command_support({
10
+ 'MARKDO_ROOT' => 'spec/fixtures/inbox_command',
11
+ 'MARKDO_INBOX' => 'Inbox.md'
12
+ })
13
+
14
+ InboxCommand.new(command_support).run
15
+
16
+ expect(command_support.stdout.string).to eq(<<-XML)
17
+ - [ ] Example 1 in inbox
18
+ - [ ] Example 2 in inbox
19
+ XML
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ require 'markdo/commands/overdue_command'
3
+
4
+ module Markdo
5
+ describe OverdueCommand do
6
+ it 'outputs overdue tasks' do
7
+ skip 'Dir.glob not supported' unless Dir.respond_to?(:glob)
8
+
9
+ command_support = build_command_support_for_date_commands
10
+
11
+ OverdueCommand.new(command_support).run
12
+
13
+ expect(command_support.stdout.string).to eq(<<-EOF)
14
+ - [ ] @due(2016-01-01) Overdue in inbox
15
+ - [ ] @due(2016-01-01) Overdue
16
+ EOF
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+ require 'markdo/commands/overview_command'
3
+
4
+ module Markdo
5
+ describe OverviewCommand do
6
+ it 'outputs tasks overdue, starred, due today, and due tomorrow' do
7
+ skip 'Dir.glob not supported' unless Dir.respond_to?(:glob)
8
+
9
+ command_support = build_command_support_for_date_commands
10
+
11
+ OverviewCommand.new(command_support).run
12
+
13
+ expect(command_support.stdout.string).to eq(<<-EOF)
14
+ - [ ] @due(2016-01-01) Overdue in inbox
15
+ - [ ] @due(2016-01-01) Overdue
16
+ - [ ] @star Starred in inbox
17
+ - [ ] @star Starred
18
+ - [ ] @due(2016-02-28) Due today in inbox
19
+ - [ ] @due(2016-02-28) Due today
20
+ - [ ] @due(2016-02-29) Due tomorrow in inbox
21
+ - [ ] @due(2016-02-29) Due tomorrow
22
+ EOF
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,178 @@
1
+ require 'spec_helper'
2
+ require 'markdo/commands/process_command'
3
+
4
+ module Markdo
5
+ describe ProcessCommand do
6
+ before do
7
+ skip 'Could not access fixtures' unless File.exists?('spec/fixtures/')
8
+ end
9
+
10
+ after do
11
+ clear_all
12
+ end
13
+
14
+ describe 'given the "h" subcommand' do
15
+ it 'prints help to stdout and makes no changes' do
16
+ original_content = ['- [ ] Example']
17
+ write_inbox(original_content)
18
+
19
+ stdout = markdo_process(%w(h h))
20
+
21
+ expect(stdout.string).to eq(<<-EOF)
22
+ - [ ] Example
23
+ File [hisbma]?
24
+ i - inbox (keep in inbox)
25
+ s - sprint
26
+ b - backlog
27
+ m - maybe
28
+ a - abort; make no changes
29
+ - [ ] Example
30
+ File [hisbma]?
31
+ i - inbox (keep in inbox)
32
+ s - sprint
33
+ b - backlog
34
+ m - maybe
35
+ a - abort; make no changes
36
+ - [ ] Example
37
+ File [hisbma]?
38
+ EOF
39
+
40
+ expect(read_lines('Inbox')).to eq(original_content)
41
+ expect(read_lines('Sprint')).to eq([])
42
+ expect(read_lines('Backlog')).to eq([])
43
+ expect(read_lines('Maybe')).to eq([])
44
+ end
45
+ end
46
+
47
+ describe 'given the "i" subcommand' do
48
+ it 'keeps the task in the inbox' do
49
+ original_content = ['- [ ] Example']
50
+ write_inbox(original_content)
51
+
52
+ stdout = markdo_process(%w(i))
53
+
54
+ assert_prompt_shown(stdout)
55
+ expect(read_lines('Inbox')).to eq(original_content)
56
+ expect(read_lines('Sprint')).to eq([])
57
+ expect(read_lines('Backlog')).to eq([])
58
+ expect(read_lines('Maybe')).to eq([])
59
+ end
60
+ end
61
+
62
+ describe 'given the "a" subcommand' do
63
+ it 'makes no changes' do
64
+ original_content = ['- [ ] Example']
65
+ write_inbox(original_content)
66
+
67
+ stdout = markdo_process(%w(a))
68
+
69
+ assert_prompt_shown(stdout)
70
+ expect(read_lines('Inbox')).to eq(original_content)
71
+ expect(read_lines('Sprint')).to eq([])
72
+ expect(read_lines('Backlog')).to eq([])
73
+ expect(read_lines('Maybe')).to eq([])
74
+ end
75
+ end
76
+
77
+ describe 'given the "s" subcommand' do
78
+ it 'moves the line to "Sprint.md"' do
79
+ write_inbox(['- [ ] Example'])
80
+
81
+ stdout = markdo_process(%w(s))
82
+
83
+ assert_prompt_shown(stdout)
84
+ expect(read_lines('Inbox')).to eq([])
85
+ expect(read_lines('Sprint')).to eq([
86
+ '',
87
+ '## Processed on 2016-06-01',
88
+ '',
89
+ '- [ ] Example'
90
+ ])
91
+ expect(read_lines('Backlog')).to eq([])
92
+ expect(read_lines('Maybe')).to eq([])
93
+ end
94
+ end
95
+
96
+ describe 'given the "b" subcommand' do
97
+ it 'moves the line to "Backlog.md"' do
98
+ write_inbox(['- [ ] Example'])
99
+
100
+ stdout = markdo_process(%w(b))
101
+
102
+ assert_prompt_shown(stdout)
103
+ expect(read_lines('Inbox')).to eq([])
104
+ expect(read_lines('Sprint')).to eq([])
105
+ expect(read_lines('Backlog')).to eq([
106
+ '',
107
+ '## Processed on 2016-06-01',
108
+ '',
109
+ '- [ ] Example'
110
+ ])
111
+ expect(read_lines('Maybe')).to eq([])
112
+ end
113
+ end
114
+
115
+ describe 'given the "m" subcommand' do
116
+ it 'moves the line to "Maybe.md"' do
117
+ write_inbox(['- [ ] Example'])
118
+
119
+ stdout = markdo_process(%w(m))
120
+
121
+ assert_prompt_shown(stdout)
122
+ expect(read_lines('Inbox')).to eq([])
123
+ expect(read_lines('Sprint')).to eq([])
124
+ expect(read_lines('Backlog')).to eq([])
125
+ expect(read_lines('Maybe')).to eq([
126
+ '',
127
+ '## Processed on 2016-06-01',
128
+ '',
129
+ '- [ ] Example'
130
+ ])
131
+ end
132
+ end
133
+
134
+ def clear_all
135
+ %w(Backlog Inbox Maybe Sprint).each do |filename|
136
+ File.write("spec/fixtures/process_command/#{filename}.md", '')
137
+ end
138
+ end
139
+
140
+ def write_inbox(content)
141
+ File.write('spec/fixtures/process_command/Inbox.md', content.join("\n"))
142
+ end
143
+
144
+ def markdo_process(subcommands)
145
+ raw_input = subcommands.map { |s| "#{s}\n" }.join
146
+ stdin = StringIO.new(raw_input)
147
+ stdout = StringIO.new
148
+ stderr = StringIO.new
149
+ today = Date.new(2016, 6, 1)
150
+ env = {
151
+ 'MARKDO_ROOT' => 'spec/fixtures/process_command',
152
+ 'MARKDO_INBOX' => 'Inbox.md',
153
+ }
154
+ command_support = CommandSupport.new(stdin: stdin,
155
+ stdout: stdout,
156
+ stderr: stderr,
157
+ today: today,
158
+ env: env)
159
+
160
+ ProcessCommand.new(command_support).run
161
+
162
+ command_support.stdout
163
+ end
164
+
165
+ def read_lines(filename)
166
+ File.
167
+ readlines("spec/fixtures/process_command/#{filename}.md").
168
+ map { |line| line.chomp }
169
+ end
170
+
171
+ def assert_prompt_shown(io)
172
+ expect(io.string).to eq(<<-EOF)
173
+ - [ ] Example
174
+ File [hisbma]?
175
+ EOF
176
+ end
177
+ end
178
+ end