This is a Ruby client library for Gina Trapani's todo.txt. It allows for easy management of task lists and tasks in the todo.txt format.
Find the project on GitHub: http://github.com/samwho/todo-txt-gem.
Find the full API docs on Rubydoc.info: http://www.rubydoc.info/gems/todo-txt.
Installation is very simple. The project is packaged as a Ruby gem and can be installed by running:
gem install todo-txt
Todo::List object encapsulates your todo.txt file. You initialise it by
passing the path to your todo.txt to the constructor:
require 'todo-txt' list = Todo::List.new "path/to/todo.txt"
Array so it has all of the standard methods that are
available on an array. It is, basically, an array of
You can filter your todo list by priority, project, context or a combination of all three with ease.
require 'todo-txt' list = Todo::List.new "path/to/todo.txt" list.by_priority "A" # => Contains a Todo::List object with only priority A tasks. list.by_context "@code" # => Returns a new Todo::List with only tasks that have a @code context. list.by_project "+manhattan" # => Returns a new Todo::List with only tasks that are part of the # +manhattan project (see what I did there?) # And you can combine these, like so list.by_project("+manhattan").by_priority("B")
Todo::Task object can be created from a standard task string if you don't
want to use the
Todo::List approach (though using
require 'todo-txt' task = Todo::Task.new "(A) This task is top priority! +project @context" task.priority # => "A" task.contexts # => ["@context"] task.projects # => ["+project"] task.text # => "This task is top priority!" task.orig # => "(A) This task is top priority! +project @context"
Todo::Task object includes the
Comparable mixin. It compares with other
tasks and sorts by priority in descending order.
task1 = Todo::Task.new "(A) Priority A." task2 = Todo::Task.new "(B) Priority B." task1 > task2 # => true task1 == task2 # => false task2 > task1 # => false
Tasks without a priority will always be less than a task with a priority.
The todo-txt gem requires Ruby 2.0 or higher.