todo-txt 0.8 → 0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 61f9189159159b6e65f5f74b988b2e10bce9ebdd
4
- data.tar.gz: d4b2af334263168828b8c55907bb7cbd88d5e961
3
+ metadata.gz: 04e209879cbf8434759e4343c03bdbb2b48a7e3f
4
+ data.tar.gz: bad9b8396a6d32ef8eb8f647394de850d5c0a658
5
5
  SHA512:
6
- metadata.gz: e21f06a513c28f57ee49574a9cf433d3adaf84bd6ce7de7101263ddd414919cd83b6f2d3d73c7720a85bd3c028e6b22689b7208134d5727bd1ec6d55fa204619
7
- data.tar.gz: bec7f7985f84d4d966936f454ebb21d7c820e67488e5fe98c2eceb013a2e5454686084377e4f924a6eaac5d56c47d69a7c50451972ea5d257475a1ff1e720b7d
6
+ metadata.gz: 7d5599684ab23946adde905819a231f75d38029780c49e0771acd0258a6622fd88d5edd1c0e5ff2d6415b1e359047b7b6fbef8cd684c701ce94fdafa972d2b31
7
+ data.tar.gz: 9b7c601dad7b1a07541fea804b06a9c12490406501a7173b4e2e0dfaf26d5da320a7605960f4e8b9d5ba5f66d10dac3892c50bee9e2676d95fbb8df295f7c014
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ StringLiterals:
2
+ Enabled: false
data/lib/todo-txt.rb CHANGED
@@ -1,6 +1,3 @@
1
- lib = File.dirname(__FILE__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
-
4
1
  require 'logger'
5
2
  require 'todo-txt/logger'
6
3
  require 'todo-txt/options'
data/lib/todo-txt/list.rb CHANGED
@@ -1,26 +1,26 @@
1
1
  module Todo
2
+ # Initializes a Todo List object with a path to the corresponding todo.txt
3
+ # file. For example, if your todo.txt file is located at:
4
+ #
5
+ # /home/sam/Dropbox/todo/todo.txt
6
+ #
7
+ # You would initialize this object like:
8
+ #
9
+ # list = Todo::List.new "/home/sam/Dropbox/todo/todo-txt"
10
+ #
11
+ # Alternately, you can initialize this object with an array of strings or
12
+ # tasks. If the array is of strings, the strings will be converted into
13
+ # tasks. You can supply a mixed list of string and tasks if you wish.
14
+ #
15
+ # Example:
16
+ #
17
+ # array = Array.new
18
+ # array.push "(A) A string task!"
19
+ # array.push Todo::Task.new("(A) An actual task!")
20
+ #
21
+ # list = Todo::List.new array
2
22
  class List < Array
3
- # Initializes a Todo List object with a path to the corresponding todo.txt
4
- # file. For example, if your todo.txt file is located at:
5
- #
6
- # /home/sam/Dropbox/todo/todo.txt
7
- #
8
- # You would initialize this object like:
9
- #
10
- # list = Todo::List.new "/home/sam/Dropbox/todo/todo-txt"
11
- #
12
- # Alternately, you can initialize this object with an array of strings or
13
- # tasks. If the array is of strings, the strings will be converted into
14
- # tasks. You can supply a mixed list of string and tasks if you wish.
15
- #
16
- # Example:
17
- #
18
- # array = Array.new
19
- # array.push "(A) A string task!"
20
- # array.push Todo::Task.new("(A) An actual task!")
21
- #
22
- # list = Todo::List.new array
23
- def initialize list
23
+ def initialize(list)
24
24
  if list.is_a? Array
25
25
  # No file path was given.
26
26
  @path = nil
@@ -29,10 +29,10 @@ module Todo
29
29
  list.each do |task|
30
30
  # If it's a string, make a new task out of it.
31
31
  if task.is_a? String
32
- self.push Todo::Task.new task
32
+ push Task.new task
33
33
  # If it's a task, just add it.
34
34
  elsif task.is_a? Todo::Task
35
- self.push task
35
+ push task
36
36
  end
37
37
  end
38
38
  elsif list.is_a? String
@@ -41,16 +41,14 @@ module Todo
41
41
  # Read in lines from file, create Todo::Tasks out of them and push them
42
42
  # onto self.
43
43
  File.open(list) do |file|
44
- file.each_line { |line| self.push Todo::Task.new line }
44
+ file.each_line { |line| push Task.new(line) }
45
45
  end
46
46
  end
47
47
  end
48
48
 
49
49
  # The path to the todo.txt file that you supplied when you created the
50
50
  # Todo::List object.
51
- def path
52
- @path
53
- end
51
+ attr_reader :path
54
52
 
55
53
  # Filters the list by priority and returns a new list.
56
54
  #
@@ -58,8 +56,8 @@ module Todo
58
56
  #
59
57
  # list = Todo::List.new "/path/to/list"
60
58
  # list.by_priority "A" #=> Will be a new list with only priority A tasks
61
- def by_priority priority
62
- Todo::List.new self.select { |task| task.priority == priority }
59
+ def by_priority(priority)
60
+ List.new(select { |task| task.priority == priority })
63
61
  end
64
62
 
65
63
  # Filters the list by context and returns a new list.
@@ -69,8 +67,8 @@ module Todo
69
67
  # list = Todo::List.new "/path/to/list"
70
68
  # list.by_context "@context" #=> Will be a new list with only tasks
71
69
  # containing "@context"
72
- def by_context context
73
- Todo::List.new self.select { |task| task.contexts.include? context }
70
+ def by_context(context)
71
+ List.new(select { |task| task.contexts.include? context })
74
72
  end
75
73
 
76
74
  # Filters the list by project and returns a new list.
@@ -80,8 +78,8 @@ module Todo
80
78
  # list = Todo::List.new "/path/to/list"
81
79
  # list.by_project "+project" #=> Will be a new list with only tasks
82
80
  # containing "+project"
83
- def by_project project
84
- Todo::List.new self.select { |task| task.projects.include? project }
81
+ def by_project(project)
82
+ List.new(select { |task| task.projects.include? project })
85
83
  end
86
84
 
87
85
  # Filters the list by completed tasks and returns a new list.
@@ -92,7 +90,7 @@ module Todo
92
90
  # list.by_done #=> Will be a new list with only tasks marked with
93
91
  # an [x]
94
92
  def by_done
95
- Todo::List.new self.select { |task| task.done? }
93
+ List.new(select(&:done?))
96
94
  end
97
95
 
98
96
  # Filters the list by incomplete tasks and returns a new list.
@@ -102,7 +100,23 @@ module Todo
102
100
  # list = Todo::List.new "/path/to/list"
103
101
  # list.by_not_done #=> Will be a new list with only incomplete tasks
104
102
  def by_not_done
105
- Todo::List.new self.select { |task| task.done? == false }
103
+ List.new(select { |task| task.done? == false })
104
+ end
105
+
106
+ # Saves the list to the original file location.
107
+ #
108
+ # Warning: This is a destructive operation and will overwrite what is
109
+ # currently there.
110
+ #
111
+ # If no `path` is specified in the constructor then an error is raised.
112
+ def save!
113
+ raise "No path specified." unless path
114
+
115
+ File.open(path, 'w') do |outfile|
116
+ each do |task|
117
+ outfile.puts(task.to_s)
118
+ end
119
+ end
106
120
  end
107
121
  end
108
122
  end
@@ -12,12 +12,23 @@ module Todo
12
12
  yield(options_instance)
13
13
  end
14
14
 
15
+ # Options for default preferences and library settings that can be customized
16
+ # by clients of the gem.
15
17
  class Options
16
18
  # Require all done tasks to have a `completed_on` date. True by default.
17
19
  #
18
20
  # - When `true`, tasks with invalid dates are considered not done.
19
21
  # - When `false`, tasks starting with `x ` are considered done.
20
22
  #
23
+ # Example:
24
+ #
25
+ # Todo.customize do |opts|
26
+ # opts.require_completed_on = false
27
+ # end
28
+ #
29
+ # task = Todo::Task.new("x This is done!")
30
+ # task.done? # => true
31
+ #
21
32
  # @return [Boolean]
22
33
  attr_accessor :require_completed_on
23
34
 
@@ -1,35 +1,45 @@
1
1
  module Todo
2
+ # Parsing and extraction of the core syntax fragments in todo.txt lines.
2
3
  module Syntax
3
- # The regular expression used to match contexts.
4
- CONTEXTS_PATTERN = /(?:\s+|^)@[^\s]+/.freeze
4
+ # The regex used to match contexts.
5
+ CONTEXTS_PATTERN = /(?:\s+|^)@[^\s]+/
5
6
 
6
7
  # The regex used to match projects.
7
- PROJECTS_PATTERN = /(?:\s+|^)\+[^\s]+/.freeze
8
+ PROJECTS_PATTERN = /(?:\s+|^)\+[^\s]+/
8
9
 
9
10
  # The regex used to match priorities.
10
11
  PRIORITY_PATTERN = /(?:^|\s+)\(([A-Za-z])\)\s+/
11
12
 
12
13
  # The regex used to match creation date.
13
- CREATED_ON_PATTERN = /(?:^|-\d{2}\s|\)\s)(\d{4}-\d{2}-\d{2})\s/.freeze
14
+ CREATED_ON_PATTERN = /(?:^|-\d{2}\s|\)\s)(\d{4}-\d{2}-\d{2})\s/
14
15
 
15
16
  # The regex used to match completion.
16
- COMPLETED_ON_PATTERN = /^x\s+(\d{4}-\d{2}-\d{2})\s+/.freeze
17
+ COMPLETED_ON_PATTERN = /^x\s+(\d{4}-\d{2}-\d{2})\s+/
17
18
 
18
19
  # The regex used to match due date.
19
- DUE_ON_PATTERN = /(?:due:)(\d{4}-\d{2}-\d{2})(?:\s+|$)/i.freeze
20
+ DUE_ON_PATTERN = /(?:due:)(\d{4}-\d{2}-\d{2})(?:\s+|$)/i
20
21
 
21
- def get_item_text(line)
22
- line.
23
- gsub(COMPLETED_ON_PATTERN, '').
24
- gsub(PRIORITY_PATTERN, '').
25
- gsub(CREATED_ON_PATTERN, '').
26
- gsub(CONTEXTS_PATTERN, '').
27
- gsub(PROJECTS_PATTERN, '').
28
- gsub(DUE_ON_PATTERN, '').
29
- strip
22
+ # Extracts the readable text content of a task line, stripping out all the
23
+ # discrete pieces of metadata (priority, dates, completion flag, projects,
24
+ # contexts, etc).
25
+ #
26
+ # @param line [String] the todo item to be processed
27
+ # @return [String] the text content of the item
28
+ def extract_item_text(line)
29
+ line.gsub(COMPLETED_ON_PATTERN, '')
30
+ .gsub(PRIORITY_PATTERN, '')
31
+ .gsub(CREATED_ON_PATTERN, '')
32
+ .gsub(CONTEXTS_PATTERN, '')
33
+ .gsub(PROJECTS_PATTERN, '')
34
+ .gsub(DUE_ON_PATTERN, '')
35
+ .strip
30
36
  end
31
37
 
32
- def orig_priority(line)
38
+ # Extracts the priority indicator from the task line.
39
+ #
40
+ # @param line [String] the todo item to be processed
41
+ # @return [String] the character (from A-Z) representing the priority
42
+ def extract_priority(line)
33
43
  line.match(PRIORITY_PATTERN)[1] if line =~ PRIORITY_PATTERN
34
44
  end
35
45
 
@@ -38,7 +48,7 @@ module Todo
38
48
  #
39
49
  # @param line [String] the todo item to be processed
40
50
  # @return [Date] the created date of the line
41
- def orig_created_on(line)
51
+ def extract_created_on(line)
42
52
  date = line.match CREATED_ON_PATTERN
43
53
  begin
44
54
  Date.parse(date[1]) if date
@@ -80,7 +90,7 @@ module Todo
80
90
  #
81
91
  # @param line [String] the todo item to be processed
82
92
  # @return [Date] the due date of the line
83
- def get_due_on_date(line)
93
+ def extract_due_on_date(line)
84
94
  date = DUE_ON_PATTERN.match(line)
85
95
  begin
86
96
  Date.parse(date[1]) if date
@@ -94,7 +104,7 @@ module Todo
94
104
  # @param [String] line Line of text encoding a single task
95
105
  # @return [Array<String>] List of context tags
96
106
  def extract_contexts(line)
97
- line.scan(CONTEXTS_PATTERN).map { |tag| tag.strip }
107
+ line.scan(CONTEXTS_PATTERN).map(&:strip)
98
108
  end
99
109
 
100
110
  # Extract the list of `+project` tags out of the task line.
@@ -102,7 +112,7 @@ module Todo
102
112
  # @param [String] line Line of text encoding a single task
103
113
  # @return [Array<String>] List of project tags
104
114
  def extract_projects(line)
105
- line.scan(PROJECTS_PATTERN).map { |tag| tag.strip }
115
+ line.scan(PROJECTS_PATTERN).map(&:strip)
106
116
  end
107
117
  end
108
118
  end
data/lib/todo-txt/task.rb CHANGED
@@ -1,21 +1,22 @@
1
1
  require 'date'
2
2
 
3
3
  module Todo
4
+ # Creates a new task. The argument that you pass in must be the string
5
+ # representation of a task.
6
+ #
7
+ # Example:
8
+ #
9
+ # task = Todo::Task.new("(A) A high priority task!")
4
10
  class Task
5
11
  include Comparable
6
12
  include Todo::Logger
7
13
  include Todo::Syntax
8
14
 
9
- # Creates a new task. The argument that you pass in must be the string
10
- # representation of a task.
11
- #
12
- # Example:
13
- #
14
- # task = Todo::Task.new("(A) A high priority task!")
15
- def initialize task
15
+ def initialize(task)
16
16
  @orig = task
17
- @priority, @created_on = orig_priority(orig), orig_created_on(orig)
18
- @due_on = get_due_on_date(orig)
17
+ @priority = extract_priority(orig)
18
+ @created_on = extract_created_on(orig)
19
+ @due_on = extract_due_on_date(orig)
19
20
  @contexts ||= extract_contexts(orig)
20
21
  @projects ||= extract_projects(orig)
21
22
 
@@ -110,7 +111,7 @@ module Todo
110
111
  # task = Todo::Task.new "(A) @test Testing!"
111
112
  # task.text #=> "Testing!"
112
113
  def text
113
- @text ||= get_item_text(orig)
114
+ @text ||= extract_item_text(orig)
114
115
  end
115
116
 
116
117
  # Returns the task's creation date, if any.
@@ -197,7 +198,7 @@ module Todo
197
198
  def undo!
198
199
  @completed_on = nil
199
200
  @is_completed = false
200
- @priority = orig_priority(orig)
201
+ @priority = extract_priority(orig)
201
202
  end
202
203
 
203
204
  # Increases the priority until A. If it's nil, it sets it to A.
@@ -271,15 +272,15 @@ module Todo
271
272
  #
272
273
  # task2 > task1
273
274
  # # => false
274
- def <=> other_task
275
- if self.priority.nil? and other_task.priority.nil?
275
+ def <=>(other)
276
+ if priority.nil? && other.priority.nil?
276
277
  0
277
- elsif other_task.priority.nil?
278
+ elsif other.priority.nil?
278
279
  1
279
- elsif self.priority.nil?
280
+ elsif priority.nil?
280
281
  -1
281
282
  else
282
- other_task.priority <=> self.priority
283
+ other.priority <=> priority
283
284
  end
284
285
  end
285
286
  end
@@ -0,0 +1,3 @@
1
+ Task 1
2
+ Task 2
3
+ Task 3
@@ -2,6 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Todo::List do
4
4
  let(:path) { File.dirname(__FILE__) + '/../data/todo.txt' }
5
+ let(:mutable_path) { File.dirname(__FILE__) + '/../data/tasks.txt' }
5
6
  let(:list) { Todo::List.new(path) }
6
7
 
7
8
  context 'create with an array' do
@@ -20,6 +21,22 @@ describe Todo::List do
20
21
  end
21
22
  end
22
23
 
24
+ context 'create and save from file' do
25
+ it 'successfully writes back changes' do
26
+ backup = Todo::List.new(mutable_path)
27
+
28
+ tasks = Todo::List.new(mutable_path)
29
+ tasks.each(&:do!)
30
+ tasks.save!
31
+
32
+ result = Todo::List.new(mutable_path)
33
+
34
+ expect(result.by_done.count).to eq(3)
35
+
36
+ backup.save!
37
+ end
38
+ end
39
+
23
40
  it 'accepts a mix of tasks and strings' do
24
41
  l = Todo::List.new([
25
42
  "A task!",
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Todo::Syntax do
4
4
  include Todo::Syntax
5
5
 
6
- describe '#get_context_tags' do
6
+ describe '#extract_contexts' do
7
7
  specify 'empty task' do
8
8
  expect(extract_contexts('')).to eq([])
9
9
  end
@@ -21,7 +21,7 @@ describe Todo::Syntax do
21
21
  end
22
22
  end
23
23
 
24
- describe '#get_project_tags' do
24
+ describe '#extract_projects' do
25
25
  specify 'empty task' do
26
26
  expect(extract_projects('')).to eq([])
27
27
  end
@@ -39,43 +39,43 @@ describe Todo::Syntax do
39
39
  end
40
40
  end
41
41
 
42
- describe '#orig_priority' do
42
+ describe '#extract_priority' do
43
43
  specify 'empty task' do
44
- expect(orig_priority('')).to be nil
44
+ expect(extract_priority('')).to be nil
45
45
  end
46
46
 
47
47
  specify 'task without priority' do
48
- expect(orig_priority('something to do')).to be nil
48
+ expect(extract_priority('something to do')).to be nil
49
49
  end
50
50
 
51
51
  specify 'task with priority A' do
52
- expect(orig_priority('(A) something to do')).to eq('A')
52
+ expect(extract_priority('(A) something to do')).to eq('A')
53
53
  end
54
54
 
55
55
  specify 'task with priority B' do
56
- expect(orig_priority('(B) something to do')).to eq('B')
56
+ expect(extract_priority('(B) something to do')).to eq('B')
57
57
  end
58
58
  end
59
59
 
60
- describe '#orig_created_on' do
60
+ describe '#extract_created_on' do
61
61
  specify 'empty task' do
62
- expect(orig_created_on('')).to be nil
62
+ expect(extract_created_on('')).to be nil
63
63
  end
64
64
 
65
65
  specify 'task without date' do
66
- expect(orig_created_on('something to do')).to be nil
66
+ expect(extract_created_on('something to do')).to be nil
67
67
  end
68
68
 
69
69
  specify 'task with created date' do
70
- expect(orig_created_on('2016-03-29 something to do')).to eq(Date.new(2016, 03, 29))
70
+ expect(extract_created_on('2016-03-29 something to do')).to eq(Date.new(2016, 03, 29))
71
71
  end
72
72
 
73
73
  specify 'prioritised task with created date' do
74
- expect(orig_created_on('(A) 2016-03-29 something to do')).to eq(Date.new(2016, 03, 29))
74
+ expect(extract_created_on('(A) 2016-03-29 something to do')).to eq(Date.new(2016, 03, 29))
75
75
  end
76
76
 
77
77
  specify 'date included in task text' do
78
- expect(orig_created_on('(A) something to do on 2016-03-29')).to be nil
78
+ expect(extract_created_on('(A) something to do on 2016-03-29')).to be nil
79
79
  end
80
80
  end
81
81
 
@@ -115,35 +115,35 @@ describe Todo::Syntax do
115
115
  end
116
116
  end
117
117
 
118
- describe '#get_due_on_date' do
118
+ describe '#extract_due_on_date' do
119
119
  specify 'empty task' do
120
- expect(get_due_on_date('')).to be nil
120
+ expect(extract_due_on_date('')).to be nil
121
121
  end
122
122
 
123
123
  specify 'task without due date' do
124
- expect(get_due_on_date('something to do')).to be nil
124
+ expect(extract_due_on_date('something to do')).to be nil
125
125
  end
126
126
 
127
127
  specify 'task with due date' do
128
- expect(get_due_on_date('something to do due:2016-03-30')).to eq(Date.new(2016, 03, 30))
128
+ expect(extract_due_on_date('something to do due:2016-03-30')).to eq(Date.new(2016, 03, 30))
129
129
  end
130
130
  end
131
131
 
132
- describe '#get_item_text' do
132
+ describe '#extract_item_text' do
133
133
  specify 'empty task' do
134
- expect(get_item_text('')).to eq('')
134
+ expect(extract_item_text('')).to eq('')
135
135
  end
136
136
 
137
137
  specify 'task without markup' do
138
- expect(get_item_text('something to do')).to eq('something to do')
138
+ expect(extract_item_text('something to do')).to eq('something to do')
139
139
  end
140
140
 
141
141
  specify 'task with date, priority, projects and context' do
142
- expect(get_item_text('(A) 2016-03-29 something to do +experiment @work')).to eq('something to do')
142
+ expect(extract_item_text('(A) 2016-03-29 something to do +experiment @work')).to eq('something to do')
143
143
  end
144
144
 
145
145
  specify 'completed task with projects and context' do
146
- expect(get_item_text('x 2016-03-30 2016-03-29 something to do +experiment @work')).to eq('something to do')
146
+ expect(extract_item_text('x 2016-03-30 2016-03-29 something to do +experiment @work')).to eq('something to do')
147
147
  end
148
148
  end
149
149
  end
@@ -289,6 +289,23 @@ describe Todo::Task do
289
289
  expect(task.completed_on).to eq(Date.parse('8th December 2013'))
290
290
  end
291
291
  end
292
+
293
+ context 'Options#require_completed_on' do
294
+ before do
295
+ Todo.customize do |options|
296
+ options.require_completed_on = false
297
+ end
298
+ end
299
+
300
+ it 'should allow completion without date when option is set' do
301
+ task = Todo::Task.new('x This is done!')
302
+ expect(task.done?).to be true
303
+ end
304
+
305
+ after do
306
+ Todo.options.reset
307
+ end
308
+ end
292
309
  end
293
310
 
294
311
  describe 'Due dates:' do
data/todo-txt.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
- s.name = %q{todo-txt}
3
- s.version = '0.8'
2
+ s.name = 'todo-txt'
3
+ s.version = '0.9'
4
4
  s.authors = ["Sam Rose"]
5
5
  s.email = %q{samwho@lbak.co.uk}
6
6
  s.summary = %q{A client library for parsing todo.txt files.}
@@ -8,7 +8,5 @@ Gem::Specification.new do |s|
8
8
  s.description = %q{Allows for simple parsing of todo.txt files, as per Gina Trapani's todo.txt project.}
9
9
  s.required_ruby_version = '>= 2.0'
10
10
  s.license = 'GPL-2'
11
-
12
- # Add all files to the files parameter.
13
11
  s.files = `git ls-files`.split(/\n/)
14
12
  end
data/todo.txt ADDED
@@ -0,0 +1,13 @@
1
+ x 2016-04-21 modify list#save! to work with windows line separators +bug
2
+ determine correct/expected behaviour for missing file paths +feature +api
3
+ dirty flag on lists that have modifications after loading +feature
4
+ extract file handling into separate IO-like module +refactor +api
5
+ implement enumerable API on list rather than inherit from array +api
6
+ list operations should be algebraically closed +api
7
+ include rubocop in travis builds +build
8
+ use << operation to move tasks between lists +api +feature
9
+ create github issue with roadmap for 1.0 release +feature +api
10
+ consider rewriting file write tests with mocking and stringio +refactor +build
11
+ remove deprecated date method from task +api
12
+ pass in options as an instance rather than make it always global +refactor +api
13
+ save a backup of an existing todo file when the IO object is read in +feature
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: todo-txt
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.8'
4
+ version: '0.9'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Rose
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-08 00:00:00.000000000 Z
11
+ date: 2016-04-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Allows for simple parsing of todo.txt files, as per Gina Trapani's todo.txt
14
14
  project.
@@ -19,6 +19,7 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - ".gemtest"
21
21
  - ".gitignore"
22
+ - ".rubocop.yml"
22
23
  - ".travis.yml"
23
24
  - Gemfile
24
25
  - LICENSE
@@ -30,6 +31,7 @@ files:
30
31
  - lib/todo-txt/options.rb
31
32
  - lib/todo-txt/syntax.rb
32
33
  - lib/todo-txt/task.rb
34
+ - spec/data/tasks.txt
33
35
  - spec/data/todo.txt
34
36
  - spec/spec_helper.rb
35
37
  - spec/todo-txt/list_spec.rb
@@ -38,6 +40,7 @@ files:
38
40
  - spec/todo-txt/syntax_spec.rb
39
41
  - spec/todo-txt/task_spec.rb
40
42
  - todo-txt.gemspec
43
+ - todo.txt
41
44
  homepage: http://github.com/samwho/todo-txt-gem
42
45
  licenses:
43
46
  - GPL-2