-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.rb
121 lines (97 loc) · 2.29 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
112
113
114
115
116
117
118
119
120
121
# frozen_string_literal: true
require "sinatra"
require "sinatra/reloader"
require "json"
class Memo
attr_reader :id, :title, :body
FILE_NAME = "memos.json"
def initialize(id, title, body)
@id = id
@title = title
@body = body
end
def self.load
File.open(FILE_NAME) { |f| JSON.load(f) }
end
def self.create(post_data)
id = Memo.load.size == 0 ? 1 : Memo.load[-1]["id"] + 1
title = Memo.title(post_data)
body = Memo.body(post_data)
Memo.new(id, title, body)
end
def self.add(post_data)
new_memos = Memo.load << Memo.create(post_data).to_hash
File.open(FILE_NAME, "w") { |f| JSON.dump(new_memos, f) }
end
def self.destroy(id)
new_memos = Memo.load.delete_if { |item| item["id"] == id.to_i }
File.open(FILE_NAME, "w") { |f| JSON.dump(new_memos, f) }
end
def self.create_with_id(id, post_data)
title = Memo.title(post_data)
body = Memo.body(post_data)
Memo.new(id, title, body)
end
def self.refer(item)
id = item["id"]
title = item["title"]
body = item["body"]
Memo.new(id, title, body)
end
def self.find(id)
File.open(FILE_NAME) do |f|
target_item = Memo.load.find { |item| item["id"] == id.to_i }
Memo.refer(target_item)
end
end
def self.update(id, text)
memos = Memo.load
memos[Memo.find_index(id)] = Memo.create_with_id(id.to_i, text).to_hash
File.open(FILE_NAME, "w") { |f| JSON.dump(memos, f) }
end
def self.find_index(id)
Memo.load.find_index { |item| item["id"] == id.to_i }
end
def self.title(post_data)
post_data.split("\s")[0]
end
def self.body(post_data)
ary = post_data.split("\s")
ary.delete_at(0)
ary.join("<br>")
end
def to_hash
{ "id" => id, "title" => title, "body" => body }
end
def text_show
title + "\n" + "\n" + body.gsub("<br>", "\n")
end
end
enable :method_override
get "/" do
@hash_data = Memo.load
erb :index
end
get "/new_memo" do
erb :form
end
post "/memos" do
Memo.add(params[:text])
redirect "/"
end
get "/:id" do |id|
@item = Memo.find(id).to_hash
erb :memo
end
delete "/:id" do |id|
Memo.destroy(id)
redirect "/"
end
get "/:id/edit" do |id|
@former_text = Memo.find(id).text_show
erb :edit
end
patch "/:id/edit" do |id|
Memo.update(id, params[:text])
redirect "/"
end