Class: Hypertodo::Command

Inherits:
Object
  • Object
show all
Defined in:
lib/hypertodo/command.rb,
lib/hypertodo/command/options.rb

Defined Under Namespace

Modules: Options

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(argv) ⇒ Command

Returns a new instance of Command.



11
12
13
# File 'lib/hypertodo/command.rb', line 11

def initialize(argv)
  @argv = argv
end

Class Method Details

.run(argv) ⇒ Object



7
8
9
# File 'lib/hypertodo/command.rb', line 7

def self.run(argv)
  new(argv).execute
end

Instance Method Details

#create_task(name, content) ⇒ Object



37
38
39
40
# File 'lib/hypertodo/command.rb', line 37

def create_task(name, content)
  # タスク作成時のstatusはデフォルト値が使われNOT_YETとなる
  Task.create!(name: name, content: content).reload
end

#delete_task(id) ⇒ Object



42
43
44
45
# File 'lib/hypertodo/command.rb', line 42

def delete_task(id)
  task = Task.find(id)
  task.destroy
end

#executeObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/hypertodo/command.rb', line 15

def execute
  options     = Options.parse!(@argv)
  sub_command = options.delete(:command)

  DB.prepare

  tasks = case sub_command
          when 'create'
            create_task(options[:name], options[:content])
          when 'delete'
            delete_task(options[:id])
          when 'update'
            update_task(options.delete(:id), options)
          when 'list'
            find_tasks(options[:status])
          end
  display_tasks tasks

rescue => e
  abort "Error: #{e.message}"
end

#find_tasks(status_name) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/hypertodo/command.rb', line 58

def find_tasks(status_name)
  all_tasks = Task.order('created_at DESC')

  if status_name
    status = Task::STATUS.fetch(status_name.upcase)
    all_tasks.status_is(status)
  else
    all_tasks
  end
end

#update_task(id, attributes) ⇒ Object



47
48
49
50
51
52
53
54
55
56
# File 'lib/hypertodo/command.rb', line 47

def update_task(id, attributes)
  if status_name = attributes[:status]
    attributes[:status] = Task::STATUS.fetch(status_name.upcase)
  end

  task = Task.find(id)
  task.update_attributes! attributes

  task.reload
end