fjord/memoapp/app.rb

91 lines
1.5 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require 'sinatra'
2024-08-04 23:11:19 +09:00
require 'sinatra/reloader'
2024-08-18 22:59:25 +09:00
require 'pg'
2024-08-14 14:22:10 +09:00
require 'cgi'
2024-08-11 18:55:47 +09:00
2024-08-18 22:59:25 +09:00
configure do
set :conn, PG.connect(dbname: 'memo_app')
end
2024-08-11 18:55:47 +09:00
helpers do
2024-08-14 14:22:10 +09:00
def h(text)
CGI.escapeHTML(text.to_s)
end
2024-08-18 22:59:25 +09:00
def db
settings.conn
end
def find_memo(id)
db.exec_params('SELECT * FROM memos WHERE id = $1', [id]).first
end
def create_memo(title, content)
db.exec_params(
'INSERT INTO memos (title, content) VALUES ($1, $2) RETURNING id',
[title, content]
).first['id']
end
def update_memo(id, title, content)
db.exec_params(
'UPDATE memos SET title = $1, content = $2 WHERE id = $3',
[title, content, id]
)
2024-08-11 18:55:47 +09:00
end
2024-08-18 22:59:25 +09:00
def delete_memo(id)
db.exec_params('DELETE FROM memos WHERE id = $1', [id])
end
def all_memos
db.exec('SELECT * FROM memos ORDER BY created_at DESC').to_a
end
end
get '/' do
redirect '/memos'
end
get '/memos' do
2024-08-18 22:59:25 +09:00
@memos = all_memos
erb :index
end
get '/memos/new' do
erb :new
end
post '/memos' do
2024-08-18 22:59:25 +09:00
id = create_memo(params[:title], params[:content])
redirect "/memos/#{id}"
end
get '/memos/:id' do
2024-08-18 22:59:25 +09:00
@memo = find_memo(params[:id])
2024-08-02 22:54:42 +09:00
halt 404, erb(:not_found) unless @memo
erb :show
end
get '/memos/:id/edit' do
2024-08-18 22:59:25 +09:00
@memo = find_memo(params[:id])
2024-08-02 22:54:42 +09:00
halt 404, erb(:not_found) unless @memo
erb :edit
end
patch '/memos/:id' do
2024-08-18 22:59:25 +09:00
update_memo(params[:id], params[:title], params[:content])
redirect "/memos/#{params[:id]}"
end
delete '/memos/:id' do
2024-08-18 22:59:25 +09:00
delete_memo(params[:id])
redirect '/memos'
end
2024-08-02 22:54:42 +09:00
not_found do
erb :not_found
end