oinak
5/7/2013 - 4:46 PM

Curso de Introducción a Ruby on Rails - Ejercicio 2

Curso de Introducción a Ruby on Rails - Ejercicio 2

source 'https://rubygems.org'
gem "sinatra", "~> 1.4.2"
gem "data_mapper", "~> 1.2.0"
gem "dm-sqlite-adapter", "~> 1.2.0"
gem "haml", "~> 4.0.1"
require 'sinatra'
require 'data_mapper'

DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/development.db")

# Models
class Task
  include DataMapper::Resource
  property :id,           Serial
  property :name,         String, :required => true
  property :completed_at, DateTime
end

# Routes/controller
get '/' do
  @tasks = Task.all
  haml :index, :format => :html5
end

post '/' do
  Task.create(:name => params[:name])
  redirect '/'
end

get '/:id' do
  @task = Task.get(params[:id])
  haml :edit, :format => :html5
end

put '/:id' do
  task = Task.get(params[:id])
  task.completed_at = params[:completed] ?  Time.now : nil
  task.name = (params[:name])
  task.save ? (redirect '/') : (redirect '/' + task.id.to_s)
end

delete '/:id' do
  Task.get(params[:id]).destroy
  redirect '/'
end

DataMapper.auto_upgrade!

# Inline views
__END__
@@ layout
!!! 5
%html
  %head
    %meta(charset="utf-8")
    %title To Do List
    %style li.completed{text-decoration:line-through;}
  %body
    %h1 <a title="Show Tasks" href="/">To Do List</a>
    = yield
@@ index
%form(action="/" method="POST")
  %input#name(type="text" name="name")
  %input(type="submit" value="Add Task!")
%ul#tasks
  -@tasks.each do |task|
    %li{:class => (task.completed_at ? "completed":  nil)}
      %a(href="/#{task.id}")= task.name
@@ edit
%form(action="#{@task.id}" method="POST")
  %input(name="_method" type="hidden" value="PUT")
  %input#name(type="text" name="name"value="#{@task.name}")
  %input#completed{:name => "completed",:type => "checkbox",:value => "done",:checked => (@task.completed_at ? "checked":  nil)}
  %input(name="commit" type="submit" value="Update")
%form(action="#{@task.id}" method="POST")
  %input(name="_method" type="hidden" value="DELETE")
  %input(type="submit" value="Delete") or <a href="/">Cancel</a>