Created
July 14, 2017 02:32
-
-
Save forresty/87fec4dcac2eddb1d7070403c9d6f790 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require_relative 'router' | |
require_relative 'tasks_controller' | |
require_relative 'tasks_repository' | |
repo = TasksRepository.new | |
controller = TasksController.new(repo) | |
Router.new(controller).run |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require_relative 'tasks_repository' | |
# require_relative 'tasks_view' | |
require_relative 'tasks_controller' | |
repo = TasksRepository.new | |
repo.add_task('eat') | |
repo.add_task('pray') | |
repo.add_task('love') | |
repo.mark_task_as_done_by_index(1) | |
# view = TasksView.new(repo.all) | |
# view.list | |
# view.ask_for_index_to_mark | |
controller = TasksController.new(repo) | |
controller.list | |
puts | |
controller.add_task | |
# controller.list | |
puts | |
controller.mark_as_done | |
puts | |
controller.list |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Router | |
def initialize(controller) | |
@controller = controller | |
end | |
def run | |
loop do | |
print_actions | |
action = gets.chomp.to_i | |
dispatch(action) | |
end | |
end | |
private | |
def print_actions | |
puts "\n---" | |
puts 'What do you want to do?' | |
puts '1 - Display tasks' | |
puts '2 - Add a new task' | |
puts '3 - Mark a task as done' | |
puts '4 - Remove a task' | |
puts '---' | |
print '> ' | |
end | |
def dispatch(action) | |
case action | |
when 1 then @controller.list | |
when 2 then @controller.add_task | |
when 3 then @controller.mark_as_done | |
when 4 then @controller.destroy | |
else | |
puts "Please type 1, 2, 3 or 4 :)" | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Task | |
attr_reader :description | |
def initialize(description) | |
@description = description | |
@done = false | |
end | |
def done? | |
@done | |
end | |
def mark_as_done | |
@done = true | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require_relative 'tasks_view' | |
class TasksController | |
def initialize(repo) | |
@repo = repo | |
end | |
def list | |
view = TasksView.new(@repo.all) | |
view.list | |
end | |
def add_task | |
view = TasksView.new(@repo.all) | |
description = view.ask_for_new_task_description | |
@repo.add_task(description) | |
# task = Task.new(description) | |
# @repo.add_task(task) | |
end | |
def mark_as_done | |
view = TasksView.new(@repo.all) | |
index = view.ask_for_index_to_mark | |
@repo.mark_task_as_done_by_index(index - 1) | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require_relative 'task' | |
class TasksRepository | |
def initialize | |
# TODO: load from CSV | |
@tasks = [] | |
end | |
def all | |
@tasks | |
end | |
# def add_task(task) | |
# @tasks << task | |
# save_tasks | |
# end | |
def add_task(description) | |
@tasks << Task.new(description) | |
save_tasks | |
end | |
def remove_task_by_index(index) | |
@tasks.delete_at(index) | |
save_tasks | |
end | |
def mark_task_as_done_by_index(index) | |
@tasks[index].mark_as_done | |
save_tasks | |
end | |
private | |
def save_tasks | |
# TODO: save to CSV file | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class TasksView | |
def initialize(tasks) | |
@tasks = tasks | |
end | |
def list | |
display_tasks | |
end | |
def ask_for_new_task_description | |
puts "enter description for new task:" | |
print '> ' | |
gets.chomp | |
end | |
def ask_for_index_to_mark | |
display_tasks | |
puts "enter index to mark as done:" | |
print '> ' | |
gets.chomp.to_i | |
end | |
private | |
def display_tasks | |
@tasks.each_with_index do |task, index| | |
puts "#{index+1} : [#{ task.done? ? 'X' : ' ' }] #{task.description}" | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment