Sitepoint demo app for learning to use Sinatra
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 

58 lines
1.1 KiB

require 'sinatra'
require 'data_mapper'
require 'haml'
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/development.db")
class Task
include DataMapper::Resource
property :id, Serial
property :name, String, required: true
property :completed_at, DateTime
belongs_to :list
end
class List
include DataMapper::Resource
property :id, Serial
property :name, String, required: true
has n, :tasks, :constraint => :destroy
end
DataMapper.finalize
get '/' do
@lists = List.all(:order => [:name])
haml :index
end
post '/:id' do
List.get(params[:id]).tasks.create params['task']
redirect '/'
end
delete '/task/:id' do
Task.get(params[:id]).destroy
redirect '/'
end
put '/task/:id' do
task = Task.get params[:id]
task.completed_at = task.completed_at.nil? ? Time.now : nil
task.save
redirect '/'
end
get '/:task' do
@task = params[:task].split('-').join(' ').capitalize
# haml :task
end
post '/new/list' do
List.create params['list']
redirect '/'
end
delete '/list/:id' do
List.get(params[:id]).destroy
redirect '/'
end