Skip to content

Commit cf7e9b9

Browse files
authored
Merge pull request #33 from ruby/style
feat: render individual messages and the search page somewhat nicely
2 parents e7b3a44 + ffa3b21 commit cf7e9b9

File tree

8 files changed

+107
-38
lines changed

8 files changed

+107
-38
lines changed

app/assets/stylesheets/application.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,10 @@
1313
*= require_tree .
1414
*= require_self
1515
*/
16+
17+
body {
18+
background: #fff;
19+
color: #333;
20+
margin: 0;
21+
padding: .5rem 1rem;
22+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
.headers {
3+
list-style: none;
4+
padding: 0 0 1rem 0;
5+
border-bottom: 1px solid #000;
6+
}
7+
8+
.search {
9+
padding: 0 0 1rem 0;
10+
border-bottom: 1px solid #000;
11+
}
12+
13+
h2 {
14+
font-size: 100%;
15+
}

app/helpers/messages_helper.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,24 @@
11
module MessagesHelper
2+
def without_list_prefix(subject)
3+
subject.sub(/^\[.+\]\s*/, '')
4+
end
5+
6+
MARGIN = 50
7+
def search_snippet(body, keyword)
8+
snippet = ''
9+
10+
offset = 0
11+
while (i = body.index(keyword, offset))
12+
start = [i - MARGIN, offset].max
13+
len = keyword.length + MARGIN
14+
snippet += body[start, len]
15+
offset = start + len
16+
end
17+
18+
if snippet.empty?
19+
return body[0, MARGIN * 2]
20+
else
21+
snippet
22+
end
23+
end
224
end

app/models/message.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,21 @@ def self.from_string(str)
3737
published_at = DateTime.strptime(headers['Date'], '%Y-%m-%dT%H:%M:%S%:z')
3838

3939
self.new(
40-
body: body,
40+
body: Kconv.toutf8(body),
4141
subject: headers['Subject'],
4242
from: headers['From'],
4343
published_at: published_at,
4444
)
4545
end
4646

47-
def reload_from_s3
48-
m = self.from_s3(List.find_by_id(self.list_id).name, self.list_seq)
47+
def reload_from_s3(s3_client = Aws::S3::Client.new(region: BLADE_BUCKET_REGION))
48+
m = Message.from_s3(List.find_by_id(self.list_id).name, self.list_seq, s3_client)
4949

5050
self.body = m.body
5151
self.subject = m.subject
5252
self.from = from
5353
self.published_at = m.published_at
54+
55+
m
5456
end
5557
end

app/views/layouts/application.html.erb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
<!DOCTYPE html>
22
<html>
33
<head>
4-
<title>BladeRubyLangOrg</title>
4+
<title><%=
5+
if yield(:title).empty?
6+
'blade.ruby-lang.org'
7+
else
8+
yield(:title)
9+
end
10+
%></title>
511
<meta name="viewport" content="width=device-width,initial-scale=1">
612
<%= csrf_meta_tags %>
713
<%= csp_meta_tag %>
Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
<div id="<%= dom_id message %>">
2-
<p>
3-
<strong>Subject:</strong>
4-
<%= message.subject %>
5-
</p>
6-
7-
<p>
8-
<strong>From:</strong>
9-
<%= message.from %>
10-
</p>
1+
<% content_for :title, message.subject %>
112

3+
<div class="message" id="<%= dom_id message %>">
4+
<ul class="headers">
5+
<li>From: <%= message.from %></li>
6+
<li>Date: <%= message.published_at %></li>
7+
<li>Subject: <%= message.subject %></li>
8+
</ul>
129
<pre><%= message.body %></pre>
13-
1410
</div>

app/views/messages/index.html.erb

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,36 @@
22

33
<h1>blade.ruby-lang.org</h1>
44

5-
<%= form_with(method: :get) do |form| %>
6-
<%= form.text_field :q, { value: params[:q] } %>
7-
<%= form.submit "Search" %>
5+
<div class="search">
6+
<%= form_with(method: :get) do |form| %>
7+
<%= form.text_field :q, { value: params[:q] } %>
8+
<%= form.submit "Search" %>
89

9-
<p>
10-
<%
11-
[
12-
[:ruby_talk, 'ruby-talk (English)'],
13-
[:ruby_core, 'ruby-core (For developing Ruby iself, English)'],
14-
[:ruby_list, 'ruby-list (Japanese)'],
15-
[:ruby_dev, 'ruby-dev (For developing Ruby itself, Japanese)'],
16-
].each do |name, label|
17-
%>
18-
<span>
19-
<%= form.check_box name, {checked: params[name] != '0' } %>
20-
<%= form.label name, label %>
21-
</span>
22-
<% end %>
23-
</p>
24-
<% end %>
10+
<p>
11+
<%
12+
[
13+
[:ruby_talk, 'ruby-talk (English)'],
14+
[:ruby_core, 'ruby-core (For developing Ruby iself, English)'],
15+
[:ruby_list, 'ruby-list (Japanese)'],
16+
[:ruby_dev, 'ruby-dev (For developing Ruby itself, Japanese)'],
17+
].each do |name, label|
18+
%>
19+
<span>
20+
<%= form.check_box name, {checked: params[name] != '0' } %>
21+
<%= form.label name, label %>
22+
</span>
23+
<% end %>
24+
</p>
25+
<% end %>
26+
</div>
2527

2628
<% @messages.each do |message| %>
27-
<div>
29+
<div class="search-result">
2830
<% list_name = List.find_by_id(message.list_id).name %>
29-
<%= list_name %>:<%= message.list_seq %>
30-
<%= link_to message.subject, "/#{list_name}/#{message.list_seq}" %>
31-
<small><%= message.body %></small>
31+
<h2 class="subject">
32+
<span class="prefix"><%= list_name %>:<%= message.list_seq %></span>
33+
<%= link_to without_list_prefix(message.subject), "/#{list_name}/#{message.list_seq}" %>
34+
</h2>
35+
<div class="snippet"><%= search_snippet(message.body, params[:q]) %></div>
3236
</div>
3337
<% end %>

test/models/message_test.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,21 @@ class MessageTest < ActiveSupport::TestCase
2626
END_OF_BODY
2727
Message.from_s3('ruby-list', 1234, s3_client)
2828
end
29+
30+
test 'reload_from_s3' do
31+
s3_client = Aws::S3::Client.new(stub_responses: true)
32+
s3_client.stub_responses(:get_object, body: <<END_OF_BODY)
33+
Subject: [ruby-list:1] Hello
34+
From: alice@...
35+
Date: 2005-12-15T19:32:40+09:00
36+
37+
Hello, world!
38+
END_OF_BODY
39+
40+
m = Message.new
41+
m.list_id = 1
42+
m.list_seq = 1
43+
m.reload_from_s3(s3_client)
44+
assert_equal '[ruby-list:1] Hello', m.subject
45+
end
2946
end

0 commit comments

Comments
 (0)