Class: Deadline::Task
- Inherits:
-
Object
- Object
- Deadline::Task
- Defined in:
- lib/deadline/task.rb
Constant Summary collapse
- CONFIG_PATH =
File.('~/.deadline/tasks.yml')
Class Method Summary collapse
- .add(args = {}) ⇒ Object
- .all ⇒ Object
- .load_config ⇒ Object
- .print_tasks ⇒ Object
- .push_notify(task) ⇒ Object
- .refresh ⇒ Object
- .remove(target) ⇒ Object
- .save_config(conf) ⇒ Object
- .string_to_time(string) ⇒ Object
Class Method Details
.add(args = {}) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/deadline/task.rb', line 16 def self.add(args = {}) return unless args[:task] && args[:deadline] deadline_time = string_to_time(args[:deadline]) return unless deadline_time new_task = { task: args[:task], deadline: deadline_time, } conf = load_config if conf conf[:tasks].push(new_task) else conf = Hash.new conf[:tasks] = Array.new.push(new_task) end save_config(conf) puts "New task: #{new_task[:task]}, #{new_task[:deadline]}" end |
.all ⇒ Object
10 11 12 13 14 |
# File 'lib/deadline/task.rb', line 10 def self.all conf = load_config return unless conf conf[:tasks] end |
.load_config ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/deadline/task.rb', line 97 def self.load_config path = File.('~/.deadline/') if FileTest.exist?(path) == false FileUtils.mkdir_p(path) return nil end if FileTest.exist?(CONFIG_PATH) str = nil File.open(CONFIG_PATH, 'r') do |f| str = f.read end YAML.load(str) else nil end end |
.print_tasks ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/deadline/task.rb', line 85 def self.print_tasks Task.refresh tasks = Task.all if tasks == nil || tasks.size == 0 puts "No task available" return end tasks.each_with_index do |task, idx| puts "Task #{idx}: #{task[:task]}, #{task[:deadline]}" end end |
.push_notify(task) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/deadline/task.rb', line 71 def self.push_notify(task) begin growl = Growl.new "localhost", "deadline" growl.add_notification "deadline" growl.notify "deadline", "Deadline End", task[:task] rescue TerminalNotifier.notify( nil, title: 'Deadline End', subtitle: task[:task] ) end end |
.refresh ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/deadline/task.rb', line 55 def self.refresh tasks = Task.all tasks.sort!{ |a, b| a[:deadline] <=> b [:deadline] } new_tasks = Array.new tasks.each do |task| if task[:deadline] - Time.now > 0 new_tasks.push(task) else push_notify(task) end end save_config({tasks: new_tasks}) end |
.remove(target) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/deadline/task.rb', line 37 def self.remove(target) tasks = Task.all return unless tasks if target == "all" save_config({tasks: []}) else number = target.to_i if number < tasks.size tasks.delete_at(number) conf = { tasks: tasks } save_config(conf) end end end |
.save_config(conf) ⇒ Object
115 116 117 118 119 |
# File 'lib/deadline/task.rb', line 115 def self.save_config(conf) File.open(CONFIG_PATH, 'w') do |f| f << conf.to_yaml end end |
.string_to_time(string) ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/deadline/task.rb', line 121 def self.string_to_time(string) case string when /^[0-9]+$/ Time.now + string.to_i * 60 when /^(([0-9]|)[0-9]):([0-9][0-9])$/ today_time = Time.local( Date.today.year, Date.today.month, Date.today.day, $1, $3, 0 ) if today_time - Time.now >= 0 today_time else tomorrow_time = Time.local( Date.tomorrow.year, Date.tomorrow.month, Date.tomorrow.day, $1, $3, 0 ) end else nil end end |