gren 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.ja.txt +5 -0
- data/History.txt +4 -0
- data/bin/grenweb +1 -1
- data/lib/gren.rb +1 -1
- data/lib/grenweb/help.rb +5 -3
- data/lib/grenweb/home.rb +5 -3
- data/lib/grenweb/html_renderer.rb +41 -29
- data/lib/grenweb/searcher.rb +12 -10
- data/lib/grenweb/viewer.rb +12 -14
- data/test/test_grenweb_html_renderer.rb +5 -4
- metadata +3 -3
data/History.ja.txt
CHANGED
data/History.txt
CHANGED
data/bin/grenweb
CHANGED
data/lib/gren.rb
CHANGED
data/lib/grenweb/help.rb
CHANGED
@@ -15,6 +15,7 @@ module Grenweb
|
|
15
15
|
include Rack::Utils
|
16
16
|
|
17
17
|
def call(env)
|
18
|
+
@env = env
|
18
19
|
@request = Rack::Request.new(env)
|
19
20
|
@query = Query.new(@request)
|
20
21
|
|
@@ -27,9 +28,10 @@ module Grenweb
|
|
27
28
|
private
|
28
29
|
|
29
30
|
def render
|
30
|
-
|
31
|
-
@response.write
|
32
|
-
@response.write
|
31
|
+
r = HTMLRendeler.new(@request.script_name + '/..')
|
32
|
+
@response.write r.header("gren - help", "gren - help")
|
33
|
+
@response.write r.sample_code
|
34
|
+
@response.write r.footer
|
33
35
|
@response.to_a
|
34
36
|
end
|
35
37
|
end
|
data/lib/grenweb/home.rb
CHANGED
@@ -15,6 +15,7 @@ module Grenweb
|
|
15
15
|
include Rack::Utils
|
16
16
|
|
17
17
|
def call(env)
|
18
|
+
@env = env
|
18
19
|
@request = Rack::Request.new(env)
|
19
20
|
@query = Query.new(@request)
|
20
21
|
|
@@ -27,9 +28,10 @@ module Grenweb
|
|
27
28
|
private
|
28
29
|
|
29
30
|
def render
|
30
|
-
|
31
|
-
@response.write
|
32
|
-
@response.write
|
31
|
+
r = HTMLRendeler.new(@request.script_name)
|
32
|
+
@response.write r.header_home("gren", "gren", Version)
|
33
|
+
@response.write r.search_box
|
34
|
+
@response.write r.footer_home("??", Database.instance.fileNum)
|
33
35
|
@response.to_a
|
34
36
|
end
|
35
37
|
end
|
@@ -13,7 +13,11 @@ module Grenweb
|
|
13
13
|
class HTMLRendeler
|
14
14
|
include Rack::Utils
|
15
15
|
|
16
|
-
def
|
16
|
+
def initialize(script_name)
|
17
|
+
@script_name = Pathname(script_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def header(title, header1)
|
17
21
|
<<EOS
|
18
22
|
<?xml version="1.0" encoding="utf-8"?>
|
19
23
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
@@ -23,12 +27,12 @@ module Grenweb
|
|
23
27
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
24
28
|
<!-- <meta name="robot" content="noindex,nofollow" /> -->
|
25
29
|
<title>#{title}</title>
|
26
|
-
<link rel="stylesheet" href="
|
30
|
+
<link rel="stylesheet" href="#{fullpath('css/gren.css')}" type="text/css" media="all" />
|
27
31
|
</head>
|
28
32
|
<body>
|
29
33
|
<div class="header">
|
30
34
|
<h1>
|
31
|
-
<a href="
|
35
|
+
<a href="#{fullpath('')}"><img src="#{fullpath('images/gren-icon-mini.png')}" alt="gren-icon" border="0"/></a>
|
32
36
|
#{header1}
|
33
37
|
</h1>
|
34
38
|
</div>
|
@@ -37,7 +41,7 @@ module Grenweb
|
|
37
41
|
EOS
|
38
42
|
end
|
39
43
|
|
40
|
-
def
|
44
|
+
def footer
|
41
45
|
<<EOS
|
42
46
|
</div>
|
43
47
|
|
@@ -48,7 +52,7 @@ EOS
|
|
48
52
|
EOS
|
49
53
|
end
|
50
54
|
|
51
|
-
def
|
55
|
+
def header_home(title, header1, version)
|
52
56
|
<<EOS
|
53
57
|
<?xml version="1.0" encoding="utf-8"?>
|
54
58
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
@@ -58,13 +62,13 @@ EOS
|
|
58
62
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
59
63
|
<!-- <meta name="robot" content="noindex,nofollow" /> -->
|
60
64
|
<title>#{title}</title>
|
61
|
-
<link rel="stylesheet" href="
|
65
|
+
<link rel="stylesheet" href="#{fullpath('css/gren.css')}" type="text/css" media="all" />
|
62
66
|
</head>
|
63
67
|
<body>
|
64
68
|
<div align="center">
|
65
69
|
<div class="header_home">
|
66
70
|
<h1>
|
67
|
-
<a href="
|
71
|
+
<a href="#{fullpath('')}"><img src="#{fullpath('images/gren-icon.png')}" alt="gren-icon" border="0" height="100px"/></a>
|
68
72
|
#{header1} <font class="version">#{version}</font>
|
69
73
|
</h1>
|
70
74
|
</div>
|
@@ -73,14 +77,14 @@ EOS
|
|
73
77
|
EOS
|
74
78
|
end
|
75
79
|
|
76
|
-
def
|
80
|
+
def footer_home(package, files)
|
77
81
|
<<EOS
|
78
82
|
</div>
|
79
83
|
|
80
84
|
<div class="footer_home">
|
81
|
-
<!-- <a href="
|
82
|
-
<a href="
|
83
|
-
<a href="
|
85
|
+
<!-- <a href="#{fullpath('::search/p:*')}">#{package}</a>のパッケージ , -->
|
86
|
+
<a href="#{fullpath('::search/f:*')}">#{files}</a>のファイル<br>
|
87
|
+
<a href="#{fullpath('::help')}">ヘルプ</a> ,
|
84
88
|
<a href="http://ongaeshi.github.com/gren">grenについて</a>
|
85
89
|
</div>
|
86
90
|
</div>
|
@@ -89,10 +93,10 @@ EOS
|
|
89
93
|
EOS
|
90
94
|
end
|
91
95
|
|
92
|
-
def
|
96
|
+
def result_record(record, patterns, nth=1)
|
93
97
|
if (patterns.size > 0)
|
94
98
|
<<EOS
|
95
|
-
<dt class='result-record'><a href='#{"
|
99
|
+
<dt class='result-record'><a href='#{fullpath("::view/" + Rack::Utils::escape_html(record.shortpath))}'>#{record.shortpath}</a></dt>
|
96
100
|
<dd>
|
97
101
|
<pre class='lines'>
|
98
102
|
#{result_record_match_line(record, patterns, nth)}
|
@@ -101,12 +105,12 @@ EOS
|
|
101
105
|
EOS
|
102
106
|
else
|
103
107
|
<<EOS
|
104
|
-
<dt class='result-record'><a href='#{"
|
108
|
+
<dt class='result-record'><a href='#{fullpath("::view/" + Rack::Utils::escape_html(record.shortpath))}'>#{record.shortpath}</a></dt>
|
105
109
|
EOS
|
106
110
|
end
|
107
111
|
end
|
108
112
|
|
109
|
-
def
|
113
|
+
def result_record_match_line(record, patterns, nth)
|
110
114
|
str = ""
|
111
115
|
|
112
116
|
grep = Grep.new(record.content)
|
@@ -126,7 +130,7 @@ EOS
|
|
126
130
|
str
|
127
131
|
end
|
128
132
|
|
129
|
-
def
|
133
|
+
def record_content(record)
|
130
134
|
<<EOS
|
131
135
|
<pre>
|
132
136
|
#{record_content_line(record)}
|
@@ -134,7 +138,7 @@ EOS
|
|
134
138
|
EOS
|
135
139
|
end
|
136
140
|
|
137
|
-
def
|
141
|
+
def record_content_line(record)
|
138
142
|
str = ""
|
139
143
|
|
140
144
|
grep = Grep.new(record.content)
|
@@ -145,11 +149,11 @@ EOS
|
|
145
149
|
str
|
146
150
|
end
|
147
151
|
|
148
|
-
def
|
152
|
+
def line(lineno, line, match_datas)
|
149
153
|
sprintf("%5d: %s", lineno, match_strong(Rack::Utils::escape_html(line), match_datas))
|
150
154
|
end
|
151
155
|
|
152
|
-
def
|
156
|
+
def match_strong(line, match_datas)
|
153
157
|
match_datas.each do |m|
|
154
158
|
line = line.split(m[0]).join('<strong>' + m[0] + '</strong>') unless (m.nil?)
|
155
159
|
end
|
@@ -157,16 +161,16 @@ EOS
|
|
157
161
|
line
|
158
162
|
end
|
159
163
|
|
160
|
-
def
|
164
|
+
def pagination_link(page, label)
|
161
165
|
href = "?page=#{page}"
|
162
166
|
pagination_span("<a href='#{href}'>#{label}</a>")
|
163
167
|
end
|
164
168
|
|
165
|
-
def
|
169
|
+
def pagination_span(content)
|
166
170
|
"<span class='pagination-link'>#{content}</span>\n"
|
167
171
|
end
|
168
172
|
|
169
|
-
def
|
173
|
+
def empty_summary()
|
170
174
|
<<EOS
|
171
175
|
<div class='search-summary'>
|
172
176
|
<p>gren web検索</p>
|
@@ -174,7 +178,7 @@ EOS
|
|
174
178
|
EOS
|
175
179
|
end
|
176
180
|
|
177
|
-
def
|
181
|
+
def search_summary(keyword, total_records, range, elapsed)
|
178
182
|
<<EOS
|
179
183
|
<div class='search-summary'>
|
180
184
|
<span class="keyword">#{keyword}</span>の検索結果:
|
@@ -184,7 +188,7 @@ EOS
|
|
184
188
|
EOS
|
185
189
|
end
|
186
190
|
|
187
|
-
def
|
191
|
+
def view_summary(path, elapsed)
|
188
192
|
<<EOS
|
189
193
|
<div class='search-summary'>
|
190
194
|
<span class="keyword">#{path}</span>(#{elapsed}秒)
|
@@ -192,9 +196,9 @@ EOS
|
|
192
196
|
EOS
|
193
197
|
end
|
194
198
|
|
195
|
-
def
|
199
|
+
def search_box(text = "")
|
196
200
|
<<EOS
|
197
|
-
<form method="post" action="
|
201
|
+
<form method="post" action="#{fullpath('::search')}">
|
198
202
|
<p>
|
199
203
|
<input name="query" type="text" size="60" value="#{text}" />
|
200
204
|
<input type="submit" value="検索" />
|
@@ -203,7 +207,7 @@ EOS
|
|
203
207
|
EOS
|
204
208
|
end
|
205
209
|
|
206
|
-
def
|
210
|
+
def sample_code
|
207
211
|
<<EOS
|
208
212
|
<div class='sample-code'>
|
209
213
|
<ol>
|
@@ -222,8 +226,16 @@ EOS
|
|
222
226
|
EOS
|
223
227
|
end
|
224
228
|
|
225
|
-
def
|
226
|
-
"<a href='
|
229
|
+
def link(keyword)
|
230
|
+
"<a href='#{fullpath('::search' + '/' + Rack::Utils::escape_html(keyword))}'>#{keyword}</a>"
|
231
|
+
end
|
232
|
+
|
233
|
+
def fullpath(path)
|
234
|
+
unless (path == '')
|
235
|
+
(@script_name + path).to_s
|
236
|
+
else
|
237
|
+
@script_name.to_s
|
238
|
+
end
|
227
239
|
end
|
228
240
|
end
|
229
241
|
end
|
data/lib/grenweb/searcher.rb
CHANGED
@@ -26,6 +26,8 @@ module Grenweb
|
|
26
26
|
|
27
27
|
@nth = 3 # マッチした行の前後何行を表示するか
|
28
28
|
|
29
|
+
@rendeler = HTMLRendeler.new(@request.script_name + '/..')
|
30
|
+
|
29
31
|
if @request.post? or @request['query']
|
30
32
|
post_request
|
31
33
|
else
|
@@ -55,27 +57,27 @@ module Grenweb
|
|
55
57
|
end
|
56
58
|
|
57
59
|
def render_header
|
58
|
-
@response.write
|
60
|
+
@response.write @rendeler.header("gren : #{@query.escape_html}", "gren")
|
59
61
|
end
|
60
62
|
|
61
63
|
def render_search_box
|
62
|
-
@response.write
|
64
|
+
@response.write @rendeler.search_box(@query.escape_html)
|
63
65
|
end
|
64
66
|
|
65
67
|
def render_search_result
|
66
68
|
if @query.empty?
|
67
|
-
@response.write
|
69
|
+
@response.write @rendeler.empty_summary
|
68
70
|
else
|
69
71
|
records, total_records, elapsed = Database.instance.search(@query.keywords, @query.packages, @query.fpaths, @query.suffixs, calcPage, calcLimit)
|
70
72
|
render_search_summary(records, total_records, elapsed)
|
71
|
-
records.each { |record| @response.write(
|
73
|
+
records.each { |record| @response.write(@rendeler.result_record(record, @query.keywords, @nth)) }
|
72
74
|
render_pagination(calcPage, total_records)
|
73
75
|
end
|
74
76
|
end
|
75
77
|
|
76
78
|
def render_search_summary(records, total_records, elapsed)
|
77
79
|
pageStart = calcPage * calcLimit
|
78
|
-
@response.write
|
80
|
+
@response.write @rendeler.search_summary(@query.query_string,
|
79
81
|
total_records,
|
80
82
|
(total_records.zero? ? 0 : pageStart + 1)..(pageStart + records.size),
|
81
83
|
elapsed)
|
@@ -88,23 +90,23 @@ module Grenweb
|
|
88
90
|
last_page = (total_records / calcLimit.to_f).ceil
|
89
91
|
@response.write("<div class='pagination'>\n")
|
90
92
|
if page > 0
|
91
|
-
@response.write(
|
93
|
+
@response.write(@rendeler.pagination_link(page - 1, "<<"))
|
92
94
|
end
|
93
95
|
last_page.times do |i|
|
94
96
|
if i == page
|
95
|
-
@response.write(
|
97
|
+
@response.write(@rendeler.pagination_span(i))
|
96
98
|
else
|
97
|
-
@response.write(
|
99
|
+
@response.write(@rendeler.pagination_link(i, i))
|
98
100
|
end
|
99
101
|
end
|
100
102
|
if page < (last_page - 1)
|
101
|
-
@response.write(
|
103
|
+
@response.write(@rendeler.pagination_link(page + 1, ">>"))
|
102
104
|
end
|
103
105
|
@response.write("</div>\n")
|
104
106
|
end
|
105
107
|
|
106
108
|
def render_footer
|
107
|
-
@response.write
|
109
|
+
@response.write @rendeler.footer
|
108
110
|
end
|
109
111
|
|
110
112
|
private
|
data/lib/grenweb/viewer.rb
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
|
8
8
|
require 'rack'
|
9
9
|
require File.join(File.dirname(__FILE__), 'database')
|
10
|
+
require File.join(File.dirname(__FILE__), 'html_renderer')
|
10
11
|
|
11
12
|
module Grenweb
|
12
13
|
class Viewer
|
@@ -22,17 +23,19 @@ module Grenweb
|
|
22
23
|
|
23
24
|
record, elapsed = Database.instance.record(req2query)
|
24
25
|
|
26
|
+
@rendeler = HTMLRendeler.new(@request.script_name + '/..')
|
27
|
+
|
25
28
|
if (record)
|
26
|
-
@response.write
|
27
|
-
@response.write
|
28
|
-
@response.write
|
29
|
-
@response.write
|
29
|
+
@response.write @rendeler.header("gren : #{record.shortpath}", "gren")
|
30
|
+
@response.write @rendeler.search_box("")
|
31
|
+
@response.write @rendeler.view_summary(record.shortpath, elapsed)
|
32
|
+
@response.write @rendeler.record_content(record)
|
30
33
|
else
|
31
|
-
@response.write
|
32
|
-
@response.write
|
33
|
-
@response.write
|
34
|
+
@response.write @rendeler.header("gren : not found.", "gren")
|
35
|
+
@response.write @rendeler.search_box("")
|
36
|
+
@response.write @rendeler.empty_summary
|
34
37
|
end
|
35
|
-
@response.write
|
38
|
+
@response.write @rendeler.footer
|
36
39
|
|
37
40
|
@response.to_a
|
38
41
|
end
|
@@ -40,14 +43,9 @@ module Grenweb
|
|
40
43
|
private
|
41
44
|
|
42
45
|
def req2query
|
46
|
+
p @request.path_info
|
43
47
|
unescape(@request.path_info.gsub(/\A\/|\/z/, ''))
|
44
48
|
end
|
45
49
|
|
46
|
-
def req2path(component='')
|
47
|
-
path = []
|
48
|
-
path << ((@request.script_name == "") ? '/' : @request.script_name)
|
49
|
-
path << component if (component)
|
50
|
-
path.join('/')
|
51
|
-
end
|
52
50
|
end
|
53
51
|
end
|
@@ -6,14 +6,15 @@ class TestGrenwebHTMLRendeler < Test::Unit::TestCase
|
|
6
6
|
include Grenweb
|
7
7
|
|
8
8
|
def setup
|
9
|
+
@rendeler = HTMLRendeler.new('/')
|
9
10
|
end
|
10
11
|
|
11
12
|
def test_pagination_line
|
12
|
-
assert_equal("<span class='pagination-link'><a href='?page=1'>test</a></span>\n",
|
13
|
+
assert_equal("<span class='pagination-link'><a href='?page=1'>test</a></span>\n", @rendeler.pagination_link(1, "test"))
|
13
14
|
end
|
14
15
|
|
15
16
|
def test_search_summary
|
16
|
-
assert_equal(
|
17
|
+
assert_equal(@rendeler.search_summary(10, 500, 10..20, 0.00893),
|
17
18
|
<<-EOS)
|
18
19
|
<div class='search-summary'>
|
19
20
|
<span class="keyword">10</span>の検索結果:
|
@@ -24,11 +25,11 @@ EOS
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def test_match_strong
|
27
|
-
assert_equal(
|
28
|
+
assert_equal(@rendeler.match_strong("This is line.", [nil, nil]), "This is line.")
|
28
29
|
end
|
29
30
|
|
30
31
|
def test_search_box
|
31
|
-
assert_equal(
|
32
|
+
assert_equal(@rendeler.search_box('test must'), <<-EOF)
|
32
33
|
<form method="post" action="/::search">
|
33
34
|
<p>
|
34
35
|
<input name="query" type="text" size="60" value="test must" />
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 1
|
9
|
+
version: 0.3.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- ongaeshi
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-11-
|
17
|
+
date: 2010-11-20 00:00:00 +09:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|