class Gitodo::TodoService

Attributes

config[RW]

Public Class Methods

new() click to toggle source
# File lib/gitodo/services/todo_service.rb, line 7
def initialize
  @config = load_gitodo_config
end

Public Instance Methods

add_todo(branch:, todo:) click to toggle source
# File lib/gitodo/services/todo_service.rb, line 11
def add_todo(branch:, todo:)
  config[branch] ||= []
  config[branch] << todo

  write_gitodo_config
end
complete_todos(branch:, todo_indexes:) click to toggle source
# File lib/gitodo/services/todo_service.rb, line 27
def complete_todos(branch:, todo_indexes:)
  todos = get_todos(branch: branch)
  todo_indexes = todo_indexes.uniq

  to_complete = todos.reject{|t| !todo_indexes.include?(t.display_index) }

  to_complete.each do |todo|
    # index-1 to map from crazy user land indexes to real, sane indexes
    config[branch][todo.internal_index] = nil
  end

  config[branch] = config[branch].reject(&:nil?)
  write_gitodo_config
end
get_todos(branch:, todo_indexes: nil) click to toggle source
# File lib/gitodo/services/todo_service.rb, line 18
def get_todos(branch:, todo_indexes: nil)
  raw_todos = config[branch] || []
  todos = raw_todos.map.with_index {|todo, i| Todo.new(display_index: i+1, internal_index: i, todo: todo) }

  todos = todos.reject{|t| !todo_indexes.include?(t.display_index) } if todo_indexes

  todos
end
validate_todo_indexes(branch:, todo_indexes:) click to toggle source
# File lib/gitodo/services/todo_service.rb, line 42
def validate_todo_indexes(branch:, todo_indexes:)
  valid_todo_indexes = get_todos(branch: branch).map{|t| t.display_index}

  todo_indexes = todo_indexes.uniq
  todo_indexes = todo_indexes.each do |index|
    return false unless valid_todo_indexes.include? index
  end

  return true
end

Private Instance Methods

gitodo_file() click to toggle source
# File lib/gitodo/services/todo_service.rb, line 56
def gitodo_file
  return @gitodo_file if @gitodo_file
  git_root = GitService.git_repo_root
  @gitodo_file = "#{git_root}/.gitodo.yml"
end
load_gitodo_config() click to toggle source
# File lib/gitodo/services/todo_service.rb, line 62
def load_gitodo_config
  return {} unless File.exist? gitodo_file
  yaml = YAML.load_file(gitodo_file)
  return {} unless yaml
  return yaml
end
write_gitodo_config() click to toggle source
# File lib/gitodo/services/todo_service.rb, line 69
def write_gitodo_config
  File.open(gitodo_file, 'w') {|f| f.write config.to_yaml }
end