lib/tasks.rb in tudu-0.0.5 vs lib/tasks.rb in tudu-0.0.6
- old
+ new
@@ -1,98 +1,26 @@
# encoding: utf-8
+require 'task'
+require 'tudu_file_keys'
+# rubocop:disable ClassLength
module Tudu
# = Tudu::Tasks
class Tasks
- # == Tudufile key
- TUDU_FILE_KEY = :tudufile
- # == todo key
- TUDU_TODO_KEY = :todo
- # == doing key
- TUDU_DOING_KEY = :doing
- # == done key
- TUDU_DONE_KEY = :done
- # == file's key
- TUDU_KEYS = [TUDU_FILE_KEY, TUDU_TODO_KEY, TUDU_DOING_KEY, TUDU_DONE_KEY]
-
- # == Tudufile file name
- TUDU_FILE = 'Tudufile'
- # == Tudufile file name
- TUDU_DIR = 'tudu'
- # == todo file name
- TUDU_TODOS_FILE = 'todos'
- # == todo file path
- TUDU_TODOS_FILE_PATH = "./#{TUDU_DIR}/#{TUDU_TODOS_FILE}"
- # == doing file name
- TUDU_DOINGS_FILE = 'doings'
- # == doing file path
- TUDU_DOINGS_FILE_PATH = "./#{TUDU_DIR}/#{TUDU_DOINGS_FILE}"
- # == done file name
- TUDU_DONES_FILE = 'dones'
- # == done file path
- TUDU_DONES_FILE_PATH = "./#{TUDU_DIR}/#{TUDU_DONES_FILE}"
- # == file names
- INIT_FILES = {
- TUDU_FILE_KEY => TUDU_FILE,
- TUDU_TODO_KEY => TUDU_TODOS_FILE,
- TUDU_DOING_KEY => TUDU_DOINGS_FILE,
- TUDU_DONE_KEY => TUDU_DONES_FILE
- }
- # == task file names
- TASK_FILES = {
- TUDU_TODO_KEY => TUDU_TODOS_FILE,
- TUDU_DOING_KEY => TUDU_DOINGS_FILE,
- TUDU_DONE_KEY => TUDU_DONES_FILE
- }
-
- # == Tudufile file template
- TUDU_FILE_TEMPLATE = <<-EOS
-# encoding: utf-8
-
-# !!!!!!! in tudu ver 0.0.1 this file not using !!!!!!!
-
-# if you want to use notification, set target type. default => :none
-# you can set :none, :mail
-# target_type :mail
-
-# if you want to use notification, set targets. default => []
-# if you choose target_type none, you must not set targets.
-# if you choose mail, you must set target email addresses.
-# targets ["target1@abcdefg", "target2@abcdefg"]
- EOS
-
- # == todo file template
- TUDU_TODOS_FILE_TEMPLATE = ''
- # == doing file template
- TUDU_DOINGS_FILE_TEMPLATE = ''
- # == done file template
- TUDU_DONES_FILE_TEMPLATE = ''
-
- # == template files
- INIT_FILES_TEMPLATE = {
- TUDU_FILE_KEY => TUDU_FILE_TEMPLATE,
- TUDU_TODO_KEY => TUDU_TODOS_FILE_TEMPLATE,
- TUDU_DOING_KEY => TUDU_DOINGS_FILE_TEMPLATE,
- TUDU_DONE_KEY => TUDU_DONES_FILE_TEMPLATE
- }
-
- # == task type [todo, doing, done]
- attr_accessor :type
- # == task name [uniq]
- attr_accessor :name
-
class << self
# == add task to todos
# === Params
#- task_names : add task name list
def add(*task_names)
task_names.each do |task_name|
if find_tasks(task_name)
puts "#{task_name} is already exists."
next
end
- File.open(TUDU_TODOS_FILE_PATH, 'a:UTF-8') { |f|f.puts task_name }
+ File.open(TuduPaths::TUDU_TODOS_FILE_PATH, 'a:UTF-8') do |f|
+ f.puts task_name
+ end
puts "complete add todo '#{task_name}' to tudu/todos"
end
end
# == remove task to todo
@@ -111,11 +39,11 @@
task_name = get_first_todo_name_if_nil_or_empty task_name
task = find_tasks(task_name)
return if when_choose_no_task?(task, task_name)
return unless when_choose_type_is_todo?(task, task_name)
remove task_name
- File.open(TUDU_DOINGS_FILE_PATH, 'w:UTF-8') { |f|f.puts task_name }
+ write_doing(task_name)
puts "complete add doings '#{task_name}'"
end
# == doing to done
#- if doings size == 0, nothing todo.
@@ -126,55 +54,55 @@
end
# == get todos type tasks.
# === Returns
# return Array[Tasks]
- def get_todos
- get_tasks(TUDU_TODOS_FILE)
+ def todos
+ get_tasks(TuduPaths::TUDU_TODOS_FILE)
end
# == get doings type tasks.
# === Returns
# return Array[Tasks]
- def get_doings
- get_tasks(TUDU_DOINGS_FILE)
+ def doings
+ get_tasks(TuduPaths::TUDU_DOINGS_FILE)
end
# == get dones type tasks.
# === Returns
# return Array[Tasks]
- def get_dones
- get_tasks(TUDU_DONES_FILE)
+ def dones
+ get_tasks(TuduPaths::TUDU_DONES_FILE)
end
# == get each type tasks.
# === Params
#- type : task type.if use nil, you can get all types task.
# === Returns
# return Array[Tasks]
def get_tasks(type = nil)
- type.nil? ? get_all_tasks : get_each_tasks(type)
+ type.nil? ? all_tasks : get_each_tasks(type)
end
# == get each type tasks from file.
# === Params
#- type : task type.
# === Returns
# return Array[String]
def get_tasks_from_file(file_name)
- File.read("./#{TUDU_DIR}/#{file_name}").split("\n")
+ File.read("./#{TuduPaths::TUDU_DIR}/#{file_name}").split("\n")
end
# == filter tasklist by search_word.
# === Params
#- tasks : task list.
#- search_word : filtering word.
# === Returns
# return filterd task list
def filter_tasks(tasks, search_word)
return tasks if search_word.nil?
- tasks.select { |task|task.name.match /.*#{search_word}.*/ }
+ tasks.select { |task|task.name.match(/.*#{search_word}.*/) }
end
# == find task from all tasks.
# === Params
#- task_name : task name.
@@ -188,48 +116,54 @@
# == display tasks progress
# === Returns
# return progress
def progress
total_count = get_tasks.size
- dones_count = get_dones.size
- percent = total_count == 0 ? 0 : (dones_count.to_f / total_count.to_f * 100).round
+ dones_count = dones.size
+ percent = total_count == 0 ? 0 : percentage(dones_count, total_count)
prefix = "#{dones_count}/#{total_count}|"
done_bar = '=' * (percent / 10)
rest_bar = ' ' * (10 - (percent / 10))
progress_bar = "#{done_bar}>#{rest_bar}"
sufix = "|#{percent}%"
"#{prefix}#{progress_bar}#{sufix}"
end
private
+ def percentage(base, total)
+ (base.to_f / total.to_f * 100).round
+ end
+
def get_first_todo_name_if_nil_or_empty(task_name)
- task_name.nil? || task_name.empty? ? get_todos.first.name : task_name
+ task_name.nil? || task_name.empty? ? todos.first.name : task_name
end
def get_each_tasks(type)
tasks = []
- get_tasks_from_file(type).each { |task|tasks << Tasks.new(type, task) }
+ get_tasks_from_file(type).each { |task|tasks << Task.new(type, task) }
tasks
end
- def get_all_tasks
+ def all_tasks
tasks = []
- TASK_FILES.each_value { |each_type|tasks += get_each_tasks(each_type) }
+ TuduPaths::TASK_FILES.each_value do |each_type|
+ tasks += get_each_tasks(each_type)
+ end
tasks
end
- def has_task?(tasks, task_name)
+ def include_task?(tasks, task_name)
tasks.include? task_name
end
def remove_each_task(task_name)
can_find = false
- TASK_FILES.each_value do |rf|
+ TuduPaths::TASK_FILES.each_value do |rf|
tasks = get_tasks_from_file(rf)
- next unless has_task?(tasks, task_name)
- remove_task(tasks, task_name, "./#{TUDU_DIR}/#{rf}")
+ next unless include_task?(tasks, task_name)
+ remove_task(tasks, task_name, "./#{TuduPaths::TUDU_DIR}/#{rf}")
can_find = true
break
end
puts "no such todo '#{task_name}'" unless can_find
end
@@ -240,17 +174,17 @@
File.open(file_path, 'w:UTF-8') { |wf|wf.print contents }
puts "complete remove todo '#{task_name}' from #{file_path}"
end
def when_choose_no_todos?
- return false unless get_todos.size == 0
+ return false unless todos.size == 0
puts 'todos is empty.'
true
end
def when_choose_no_doings?
- return true if get_doings.size == 0
+ return true if doings.size == 0
puts 'todos is empty.'
false
end
def when_choose_no_task?(task, task_name)
@@ -259,61 +193,58 @@
false
end
def when_choose_type_is_todo?(task, task_name)
return true if task.todo?
- puts "#{task_name} is not exists in todos. #{task_name} in #{task.type}"
+ puts "#{task_name} is not exists in todos. #{task_name} in #{task.type}" # rubocop:disable LineLength
false
end
def doings_to_dones
- _doings = get_doings
- if _doings.size == 0
+ tmp_doings = doings
+ if tmp_doings.size == 0
puts 'there is no doing task.before done, you must choose task.'
return false
end
- File.open(TUDU_DOINGS_FILE_PATH, 'w:UTF-8') { |f|f.print '' }
- File.open(TUDU_DONES_FILE_PATH, 'a:UTF-8') { |f|f.puts _doings.first.name }
+ write_doing('')
+ write_done(tmp_doings.first.name)
true
end
+ def write_doing(text)
+ File.open(TuduPaths::TUDU_DOINGS_FILE_PATH, 'w:UTF-8') do |f|
+ if text.empty?
+ f.print(text)
+ else
+ f.puts text
+ end
+ end
+ end
+
+ def write_done(text)
+ File.open(TuduPaths::TUDU_DONES_FILE_PATH, 'a:UTF-8') do |f|
+ f.puts text
+ end
+ end
+
def todos_to_doings
- _todos = get_todos
- return if finish?(_todos)
- deleted_todos = _todos.dup
+ tmp_todos = todos
+ return if finish?(tmp_todos)
+ deleted_todos = tmp_todos.dup
deleted_todos.delete_at 0
- File.open(TUDU_TODOS_FILE_PATH, 'w:UTF-8') do |f|
+ File.open(TuduPaths::TUDU_TODOS_FILE_PATH, 'w:UTF-8') do |f|
deleted_todos.each { |task|f.puts task.name }
end
- File.open(TUDU_DOINGS_FILE_PATH, 'w:UTF-8') { |f|f.puts _todos.first.name }
+ File.open(TuduPaths::TUDU_DOINGS_FILE_PATH, 'w:UTF-8') do |f|
+ f.puts tmp_todos.first.name
+ end
end
- def finish?(_todos)
- return false unless _todos.size == 0
- puts 'All Tasks Finish!!' if get_doings.size == 0
+ def finish?(tmp_todos)
+ return false unless tmp_todos.size == 0
+ puts 'All Tasks Finish!!' if doings.size == 0
true
end
end
-
- # == init task with setting task type and task name.
- def initialize(type, name)
- @type, @name = type, name
- end
-
- def todo?
- @type == 'todos'
- end
-
- def doing?
- @type == 'doings'
- end
-
- def done?
- @type == 'dones'
- end
-
- def ==(other)
- return true if name == other.name && type == other.type
- false
- end
end
end
+# rubocop:enable ClassLength