-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.rb
111 lines (93 loc) · 2.19 KB
/
main.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# frozen_string_literal: true
require 'sinatra'
require 'sinatra/reloader'
require 'net/http'
require 'pg'
require 'yaml'
DB_CONNECTION_SETTING_FILE = File.join(File.dirname(__FILE__), 'db', 'db_memo.yml')
TABLE_MEMO_NAME = 'memos'
get '/memos' do
@memos = read_memos
erb :memos
end
post '/memos' do
title = params[:title]
content = params[:content]
id = SecureRandom.uuid
insert_memos(id, title, content)
redirect '/memos'
end
get '/memos/new' do
erb :new
end
get '/memos/:id' do
memos = read_memos
id = params[:id]
if memos.key?(id)
@id = id
@title = memos[id]['title']
@content = memos[id]['content']
erb :show_memos
else
erb :not_found
end
end
patch '/memos/:id' do
title = params[:new_title]
content = params[:new_content]
id = params[:id]
update_memos(id, title, content)
redirect '/memos'
end
delete '/memos/:id' do
id = params[:id]
delete_memos(id)
redirect '/memos'
end
get '/memos/:id/edit' do
memos = read_memos
id = params[:id]
if memos.key?(id)
@id = id
@old_title = memos[id]['title']
@old_content = memos[id]['content']
erb :edit_memos
else
erb :not_found
end
end
not_found do
erb :not_found
end
def read_memos
connection = PG.connect(db_config)
table_memos = connection.exec("SELECT * FROM #{TABLE_MEMO_NAME}")
connection.close
table_memos.each_with_object({}) do |row, new_object|
new_object[row['id']] = row.reject { |key| key == 'id' }
end
end
def insert_memos(id, title, content)
connection = PG.connect(db_config)
connection.exec_params("INSERT INTO #{TABLE_MEMO_NAME} (id, title, content) VALUES ($1, $2, $3)",
[id, title, content])
connection.close
end
def update_memos(id, title, content)
connection = PG.connect(db_config)
connection.exec_params("UPDATE #{TABLE_MEMO_NAME} SET title = $2, content = $3 WHERE id = $1", [id, title, content])
connection.close
end
def delete_memos(id)
connection = PG.connect(db_config)
connection.exec_params("DELETE FROM #{TABLE_MEMO_NAME} WHERE id = $1", [id])
connection.close
end
def db_config
YAML.load_file(DB_CONNECTION_SETTING_FILE)
end
helpers do
def h(text)
Rack::Utils.escape_html(text)
end
end