Class: Deadline::Task

Inherits:
Object
  • Object
show all
Defined in:
lib/deadline/task.rb

Constant Summary collapse

CONFIG_PATH =
File.expand_path('~/.deadline/tasks.yml')

Class Method Summary collapse

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

.allObject



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_configObject



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.expand_path('~/.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


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

.refreshObject



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