----- # Built-in filters_pre: - "bluecloth" # Custom kind: article menupriority: 4 title: MVC explained (make it usable) multiTitle: fr: make it usable en: make it usable ----- ## Make it usable ## The app is almost usable. You only need to have a way to add new tasks and to delete them. Let's do it using
http://localhost:2000/?newtask="new task text"
http://localhost:2000/?deletetask=taskNumber
#!/usr/bin/env ruby
require 'webrick'
# the Todo class is in an external file
require 'todo.rb'
include WEBrick
s = HTTPServer.new( :Port => 2000 )
class Servlet
# you write the common header and footer of all pages
# directly in the source code
@@Header='
Todo Application
'
@@Footer=''
def initialize()
@todo=Todo.new
end
# implement the GET request
def do_GET(req, res)
if req.query['newtask']
@todo.addTask(req.query['newtask'])
elsif req.query['deletetask']
@todo.deleteTask(req.query['deletetask'])
end
res.body = @@Header + @todo.content + @@Footer
res['Content-Type'] = "text/html"
end
end
servlet=Servlet.new
s.mount_proc("/"){ |req,res| servlet.do_GET(req,res) }
trap("INT"){ s.shutdown }
s.start
class Todo
def initialize
@todoList=['first task','second task']
end
def content
res='Todo
';
i=0
@todoList.each do |task|
res<<='- '+task+
' done'+'
'
i+=1
end
res<<='
'
return res
end
def addTask(task)
@todoList<<=task
end
def deleteTask(taskNum)
@todoList.delete_at(Integer(taskNum.to_s))
end
end