heel 3.0.2 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/HISTORY.md +5 -0
- data/Manifest.txt +3 -1
- data/README.md +2 -2
- data/Rakefile +7 -7
- data/bin/heel +0 -1
- data/data/css/error.css +78 -37
- data/data/css/index.css +77 -0
- data/data/error.rhtml +18 -20
- data/data/listing.rhtml +48 -34
- data/lib/heel.rb +2 -1
- data/lib/heel/directory_indexer.rb +6 -4
- data/lib/heel/error_response.rb +6 -4
- data/lib/heel/server.rb +6 -10
- data/lib/heel/template_vars.rb +8 -0
- data/spec/server_spec.rb +12 -0
- data/spec/template_vars_spec.rb +22 -0
- data/tasks/default.rake +1 -1
- metadata +20 -17
- data/data/css/listing.css +0 -29
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDA5YmUzNmVkNjQ5YWZjMzMyMmQ1ZTNiZjMxN2YxMzRhNzZiMzM4MA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTkzM2M2MTMxN2MxZGI0ZDFiNGRiZWMyOTQ1YjRiYWE4ZGI1MGM4MQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OGU2MGU3ZjczYzhkZjExODYzOWMwMTQ5MGIxYTM1Y2Y2NTdiOWUxZGM4ODlj
|
10
|
+
YzE0ZjcwN2FlNGQ4OGIzYWJkN2I3M2U2NGNkZTc2MzZjMDZjNzFmZmQ0YWFl
|
11
|
+
ZGU5ODg4NGZkZjQ5YjRjMWQ2ZWQ3NTIxMTI5NmU2MGZiMDBiNzU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGYyMjk4NDhjOTRkYzUzODc0Nzg0MjgxNjFiYzk3ZTJhNTFhMzMxMmExMDdk
|
14
|
+
Y2NlNDdlZDkyZDk5NGE4NjRiYzNmYjdiZDI2ZGYyOGRmOWNlZWZlZGUwNWY3
|
15
|
+
Nzg5OWI0MTNiZTk5MmE3ZjljNTdmZTFmMmJjODFlZWExMDdiMjI=
|
data/HISTORY.md
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
# Changelog
|
2
|
+
## Version 3.1.0 - 2013-07-07
|
3
|
+
* Update dependencies
|
4
|
+
* Switch to template contributed by brianflanagan [#8]
|
5
|
+
* Add support for multiple independent heel servers [#9]
|
6
|
+
|
2
7
|
## Version 3.0.2 - 2013-03-13
|
3
8
|
|
4
9
|
* Fix generated pages to say they are utf-8 [#4]
|
data/Manifest.txt
CHANGED
@@ -9,7 +9,7 @@ data/css/coderay-alpha.css
|
|
9
9
|
data/css/coderay-cycnus.css
|
10
10
|
data/css/coderay-murphy.css
|
11
11
|
data/css/error.css
|
12
|
-
data/css/
|
12
|
+
data/css/index.css
|
13
13
|
data/error.rhtml
|
14
14
|
data/famfamfam/icons/application.png
|
15
15
|
data/famfamfam/icons/compress.png
|
@@ -35,10 +35,12 @@ lib/heel/mime_map.rb
|
|
35
35
|
lib/heel/rackapp.rb
|
36
36
|
lib/heel/request.rb
|
37
37
|
lib/heel/server.rb
|
38
|
+
lib/heel/template_vars.rb
|
38
39
|
spec/configuration_spec.rb
|
39
40
|
spec/directory_indexer_spec.rb
|
40
41
|
spec/rackapp_spec.rb
|
41
42
|
spec/server_spec.rb
|
42
43
|
spec/spec_helper.rb
|
44
|
+
spec/template_vars_spec.rb
|
43
45
|
tasks/default.rake
|
44
46
|
tasks/this.rb
|
data/README.md
CHANGED
@@ -62,7 +62,7 @@ Or run it in the background
|
|
62
62
|
### For running:
|
63
63
|
|
64
64
|
* [coderay](http://coderay.rubychan.de/)
|
65
|
-
* [launchy](http://
|
65
|
+
* [launchy](http://github.com/copiousfreetime/launchy/) >= 0.1.1
|
66
66
|
* [mime-types](http://mime-types.rubyforge.org/)
|
67
67
|
* [puma](http://puma.io)
|
68
68
|
|
@@ -79,7 +79,7 @@ Or run it in the background
|
|
79
79
|
## CREDITS:
|
80
80
|
|
81
81
|
* [puma](http://puma.io)
|
82
|
-
* [Rack](http://rack.
|
82
|
+
* [Rack](http://rack.github.io/)
|
83
83
|
* http://www.famfamfam.com/ for amazing icons
|
84
84
|
|
85
85
|
## BSD LICENSE:
|
data/Rakefile
CHANGED
@@ -7,14 +7,14 @@ This.email = "jeremy@copiousfreetime.org"
|
|
7
7
|
This.homepage = "http://github.com/copiousfreetime/#{ This.name }"
|
8
8
|
|
9
9
|
This.ruby_gemspec do |spec|
|
10
|
-
spec.add_runtime_dependency( 'puma' , '~>
|
11
|
-
spec.add_runtime_dependency( 'mime-types', '~> 1.
|
12
|
-
spec.add_runtime_dependency( 'launchy' , '~> 2.
|
13
|
-
spec.add_runtime_dependency( 'coderay' , '~> 1.0
|
10
|
+
spec.add_runtime_dependency( 'puma' , '~> 2.0' )
|
11
|
+
spec.add_runtime_dependency( 'mime-types', '~> 1.23')
|
12
|
+
spec.add_runtime_dependency( 'launchy' , '~> 2.3' )
|
13
|
+
spec.add_runtime_dependency( 'coderay' , '~> 1.0' )
|
14
14
|
|
15
|
-
spec.add_development_dependency( 'rake' , '~> 10.
|
16
|
-
spec.add_development_dependency( 'minitest' , '~>
|
17
|
-
spec.add_development_dependency( 'rdoc' , '~>
|
15
|
+
spec.add_development_dependency( 'rake' , '~> 10.1')
|
16
|
+
spec.add_development_dependency( 'minitest' , '~> 5.0' )
|
17
|
+
spec.add_development_dependency( 'rdoc' , '~> 4.0' )
|
18
18
|
|
19
19
|
spec.license = "BSD"
|
20
20
|
end
|
data/bin/heel
CHANGED
data/data/css/error.css
CHANGED
@@ -1,38 +1,79 @@
|
|
1
|
-
body
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
}
|
10
|
-
div.box {
|
11
|
-
border-left: 1px solid #333;
|
12
|
-
border-right: 1px solid #333;
|
13
|
-
background: #FFF;
|
14
|
-
display: block;
|
15
|
-
}
|
16
|
-
img { padding-right: 20px;}
|
17
|
-
h1 { display: inline; font-weight: bold; }
|
18
|
-
h2 { display: inline; font-weight: bold; padding-left: 25px;text-align: center;}
|
19
|
-
div.header { font-size: x-large; }
|
20
|
-
div.content { font-size: x-large; border: 0; padding: 10px 25px 10px 25px;}
|
21
|
-
div.footer { text-align: right; width: 400px; }
|
1
|
+
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
|
2
|
+
margin: 0;
|
3
|
+
padding: 0;
|
4
|
+
font-size: 100%;
|
5
|
+
vertical-align: baseline;
|
6
|
+
border: 0;
|
7
|
+
outline: 0;
|
8
|
+
background: transparent;
|
9
|
+
-webkit-font-smoothing: optimizeLegibility; }
|
22
10
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
}
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
11
|
+
blockquote, q {
|
12
|
+
quotes: none; }
|
13
|
+
|
14
|
+
:focus {
|
15
|
+
outline: 0; }
|
16
|
+
|
17
|
+
table {
|
18
|
+
border-collapse: collapse;
|
19
|
+
border-spacing: 0; }
|
20
|
+
|
21
|
+
ul, ol {
|
22
|
+
list-style: none; }
|
23
|
+
|
24
|
+
cite {
|
25
|
+
font-style: normal; }
|
26
|
+
|
27
|
+
* {
|
28
|
+
-moz-box-sizing: border-box;
|
29
|
+
-webkit-box-sizing: border-box;
|
30
|
+
-ms-box-sizing: border-box;
|
31
|
+
box-sizing: border-box;
|
32
|
+
*behavior: url(image-path("boxsizing.htc")); }
|
33
|
+
|
34
|
+
body {
|
35
|
+
background: #e7c9ae;
|
36
|
+
color: #47423b;
|
37
|
+
font-family: "Open Sans", sans-serif;
|
38
|
+
font-size: 14px;
|
39
|
+
line-height: 19.6px;
|
40
|
+
padding: 14px; }
|
41
|
+
body a, body a:link, body a:visited {
|
42
|
+
color: #3b619b;
|
43
|
+
text-decoration: none; }
|
44
|
+
body a:hover, body a:link:hover, body a:visited:hover {
|
45
|
+
color: #4d79bc; }
|
46
|
+
body > [role='wrapper'] {
|
47
|
+
background: white;
|
48
|
+
-webkit-border-radius: 3px;
|
49
|
+
-moz-border-radius: 3px;
|
50
|
+
border-radius: 3px;
|
51
|
+
-webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.125);
|
52
|
+
-moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.125);
|
53
|
+
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.125);
|
54
|
+
width: 100%;
|
55
|
+
max-width: 360px;
|
56
|
+
margin: 0 auto; }
|
57
|
+
body > [role='wrapper'] > header, body > [role='wrapper'] > footer {
|
58
|
+
padding: 7px; }
|
59
|
+
body > [role='wrapper'] > header {
|
60
|
+
background: #df5256;
|
61
|
+
color: white;
|
62
|
+
-webkit-border-top-left-radius: 3px;
|
63
|
+
-webkit-border-top-right-radius: 3px;
|
64
|
+
-moz-border-radius-topleft: 3px;
|
65
|
+
-moz-border-radius-topright: 3px;
|
66
|
+
border-top-left-radius: 3px;
|
67
|
+
border-top-right-radius: 3px; }
|
68
|
+
body > [role='wrapper'] > footer p {
|
69
|
+
font-size: 11.2px;
|
70
|
+
line-height: 14.56px;
|
71
|
+
text-align: right; }
|
72
|
+
body > [role='wrapper'] > [role='content'] {
|
73
|
+
background: #f9f9f9;
|
74
|
+
-webkit-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.1);
|
75
|
+
-moz-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.1);
|
76
|
+
box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.1); }
|
77
|
+
body > [role='wrapper'] > [role='content'] > [role='message'] {
|
78
|
+
padding: 28px 14px;
|
79
|
+
text-align: center; }
|
data/data/css/index.css
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
|
2
|
+
margin: 0;
|
3
|
+
padding: 0;
|
4
|
+
font-size: 100%;
|
5
|
+
vertical-align: baseline;
|
6
|
+
border: 0;
|
7
|
+
outline: 0;
|
8
|
+
background: transparent;
|
9
|
+
-webkit-font-smoothing: optimizeLegibility; }
|
10
|
+
|
11
|
+
blockquote, q {
|
12
|
+
quotes: none; }
|
13
|
+
|
14
|
+
:focus {
|
15
|
+
outline: 0; }
|
16
|
+
|
17
|
+
table {
|
18
|
+
border-collapse: collapse;
|
19
|
+
border-spacing: 0; }
|
20
|
+
|
21
|
+
ul, ol {
|
22
|
+
list-style: none; }
|
23
|
+
|
24
|
+
cite {
|
25
|
+
font-style: normal; }
|
26
|
+
|
27
|
+
* {
|
28
|
+
-moz-box-sizing: border-box;
|
29
|
+
-webkit-box-sizing: border-box;
|
30
|
+
-ms-box-sizing: border-box;
|
31
|
+
box-sizing: border-box;
|
32
|
+
*behavior: url(image-path("boxsizing.htc")); }
|
33
|
+
|
34
|
+
body {
|
35
|
+
background: #e7c9ae;
|
36
|
+
color: #47423b;
|
37
|
+
font-family: "Open Sans", sans-serif;
|
38
|
+
font-size: 14px;
|
39
|
+
line-height: 19.6px;
|
40
|
+
padding: 14px; }
|
41
|
+
body a, body a:link, body a:visited {
|
42
|
+
color: #3b619b;
|
43
|
+
text-decoration: none; }
|
44
|
+
body a:hover, body a:link:hover, body a:visited:hover {
|
45
|
+
color: #4d79bc; }
|
46
|
+
body > [role='wrapper'] {
|
47
|
+
background: white;
|
48
|
+
-webkit-border-radius: 3px;
|
49
|
+
-moz-border-radius: 3px;
|
50
|
+
border-radius: 3px;
|
51
|
+
-webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.125);
|
52
|
+
-moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.125);
|
53
|
+
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.125);
|
54
|
+
width: 100%;
|
55
|
+
max-width: 960px;
|
56
|
+
margin: 0 auto; }
|
57
|
+
body > [role='wrapper'] > header, body > [role='wrapper'] > footer {
|
58
|
+
padding: 7px; }
|
59
|
+
body > [role='wrapper'] > footer p {
|
60
|
+
font-size: 11.2px;
|
61
|
+
line-height: 14.56px;
|
62
|
+
text-align: right; }
|
63
|
+
body > [role='wrapper'] > [role='content'] {
|
64
|
+
background: #f9f9f9;
|
65
|
+
-webkit-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.1);
|
66
|
+
-moz-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.1);
|
67
|
+
box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.1); }
|
68
|
+
body > [role='wrapper'] > [role='content'] > table {
|
69
|
+
width: 100%; }
|
70
|
+
body > [role='wrapper'] > [role='content'] > table thead {
|
71
|
+
border-bottom: 2px solid #f3f3f3; }
|
72
|
+
body > [role='wrapper'] > [role='content'] > table th, body > [role='wrapper'] > [role='content'] > table td {
|
73
|
+
text-align: left;
|
74
|
+
padding: 3.5px 7px;
|
75
|
+
color: #71695e; }
|
76
|
+
body > [role='wrapper'] > [role='content'] > table tr:nth-child(even) {
|
77
|
+
background: whitesmoke; }
|
data/data/error.rhtml
CHANGED
@@ -1,29 +1,27 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html lang="en">
|
3
3
|
<head>
|
4
|
-
<title>Error <%= status
|
5
|
-
<meta charset=
|
6
|
-
<link
|
4
|
+
<title>Error <%= status %></title>
|
5
|
+
<meta charset='utf-8'>
|
6
|
+
<link href='/heel_css/error.css' rel='stylesheet' type='text/css'>
|
7
|
+
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
|
8
|
+
<!--[if IE]>
|
9
|
+
<script src='//html5shiv.googlecode.com/svn/trunk/html5.js'></script>
|
10
|
+
<![endif]-->
|
7
11
|
</head>
|
8
12
|
<body>
|
9
|
-
<div
|
10
|
-
<
|
11
|
-
Requested URL: <%= base_uri
|
12
|
-
</
|
13
|
-
<div
|
14
|
-
<
|
15
|
-
<div class="box">
|
16
|
-
<div class="content">
|
17
|
-
<img src="/heel_icons/error.png" alt=""/><h1>Error <%= status %></h1>
|
18
|
-
<br />
|
19
|
-
<h2><%= message %></h2>
|
20
|
-
</div>
|
21
|
-
</div>
|
22
|
-
<b class="c4"></b><b class="c3"></b><b class="c2"></b><b class="c1"></b>
|
23
|
-
</div>
|
24
|
-
<div class="footer">
|
25
|
-
<a href="<%= homepage %>">heel</a>/v<%= ::Heel::VERSION %>
|
13
|
+
<div role='wrapper'>
|
14
|
+
<header>
|
15
|
+
<h1>Requested URL: <%= base_uri %></h1>
|
16
|
+
</header>
|
17
|
+
<div role='content'>
|
18
|
+
<article role='message'><p><%= message %></p></article>
|
26
19
|
</div>
|
20
|
+
<footer>
|
21
|
+
<p>
|
22
|
+
<a href="http://github.com/copiousfreetime/heel/">heel</a> v<%= Heel::VERSION %>
|
23
|
+
</p>
|
24
|
+
</footer>
|
27
25
|
</div>
|
28
26
|
</body>
|
29
27
|
</html>
|
data/data/listing.rhtml
CHANGED
@@ -1,42 +1,56 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<html lang=
|
2
|
+
<html lang='en'>
|
3
3
|
<head>
|
4
4
|
<title>Index of <%= base_uri %></title>
|
5
|
-
<meta charset=
|
6
|
-
<link
|
5
|
+
<meta charset='utf-8'>
|
6
|
+
<link href='/heel_css/index.css' rel='stylesheet' type='text/css'>
|
7
|
+
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
|
8
|
+
<!--[if IE]>
|
9
|
+
<script src='//html5shiv.googlecode.com/svn/trunk/html5.js'></script>
|
10
|
+
<![endif]-->
|
7
11
|
</head>
|
8
12
|
<body>
|
9
|
-
<div
|
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
|
-
|
13
|
+
<div role='wrapper'>
|
14
|
+
<header>
|
15
|
+
<h1>Index of <%= base_uri %></h1>
|
16
|
+
</header>
|
17
|
+
<div role='content'>
|
18
|
+
<table>
|
19
|
+
<thead>
|
20
|
+
<tr>
|
21
|
+
<th>Name</th>
|
22
|
+
<th>Last Modified</th>
|
23
|
+
<th>Size</th>
|
24
|
+
<th>Type</th>
|
25
|
+
</tr>
|
26
|
+
</thead>
|
27
|
+
<tbody>
|
28
|
+
<% entries.each do |entry| %>
|
29
|
+
<tr>
|
30
|
+
<td>
|
31
|
+
<a href="<%= "#{base_uri.chomp('/')}/#{entry.link}" %>">
|
32
|
+
<% if entry.icon_url then %>
|
33
|
+
<img src="<%= entry.icon_url %>" width="16" height="16" alt="icon for type <%= entry.content_type %>" />
|
34
|
+
<% end %>
|
35
|
+
<%= entry.name %>
|
36
|
+
</a>
|
37
|
+
<% if highlighting? and entry.content_type != 'Directory' then %>
|
38
|
+
(<a href="<%= "#{base_uri.chomp('/')}/#{entry.link}?highlighting=false" %>">download</a>)
|
39
|
+
<% end %>
|
40
|
+
</td>
|
41
|
+
<td><%= entry.last_modified %></td>
|
42
|
+
<td class="<%= entry.content_type == "Directory" ? 'c' : 'n' %>" ><%= entry.size %></td>
|
43
|
+
<td><%= entry.content_type %></td>
|
44
|
+
</tr>
|
45
|
+
<% end %>
|
46
|
+
</tbody>
|
47
|
+
</table>
|
48
|
+
</div>
|
49
|
+
<footer>
|
50
|
+
<p>
|
51
|
+
<a href="<%= homepage %>">heel</a> v<%= Heel::VERSION %>
|
52
|
+
</p>
|
53
|
+
</footer>
|
40
54
|
</div>
|
41
55
|
</body>
|
42
56
|
</html>
|
data/lib/heel.rb
CHANGED
@@ -56,8 +56,7 @@ module Heel
|
|
56
56
|
#
|
57
57
|
def index_page_for(req)
|
58
58
|
reload_template if reload_on_template_change?
|
59
|
-
dir
|
60
|
-
base_uri = req.path_info
|
59
|
+
dir = req.request_path
|
61
60
|
entries = []
|
62
61
|
Dir.entries(dir).each do |entry|
|
63
62
|
next if should_ignore?(entry)
|
@@ -88,8 +87,11 @@ module Heel
|
|
88
87
|
entries << entry_data
|
89
88
|
end
|
90
89
|
|
91
|
-
|
92
|
-
|
90
|
+
template_vars = TemplateVars.new( :base_uri => req.path_info )
|
91
|
+
template_vars.entries = entries.sort_by { |e| e.link }
|
92
|
+
template_vars.homepage = Heel::Configuration::HOMEPAGE
|
93
|
+
|
94
|
+
return template.result( template_vars.binding_for_template )
|
93
95
|
end
|
94
96
|
|
95
97
|
# essentially this is strfbytes from facets
|
data/lib/heel/error_response.rb
CHANGED
@@ -33,10 +33,12 @@ module Heel
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def finish
|
36
|
-
status
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
template_vars = TemplateVars.new( :status => @response.status,
|
37
|
+
:message => Rack::Utils::HTTP_STATUS_CODES[@response.status],
|
38
|
+
:base_uri => base_uri,
|
39
|
+
:homepage => ErrorResponse.homepage )
|
40
|
+
|
41
|
+
content = ErrorResponse.template.result( template_vars.binding_for_template )
|
40
42
|
@response.write( content )
|
41
43
|
return @response.finish
|
42
44
|
end
|
data/lib/heel/server.rb
CHANGED
@@ -27,10 +27,6 @@ module Heel
|
|
27
27
|
(ENV["HOMEPATH"] && "#{ENV["HOMEDRIVE"]}#{ENV["HOMEPATH"]}") ||
|
28
28
|
"/"
|
29
29
|
end
|
30
|
-
|
31
|
-
def kill_existing_proc
|
32
|
-
Heel::Server.new.kill_existing_proc
|
33
|
-
end
|
34
30
|
end
|
35
31
|
|
36
32
|
def initialize(argv = [])
|
@@ -71,11 +67,11 @@ module Heel
|
|
71
67
|
end
|
72
68
|
|
73
69
|
def pid_file
|
74
|
-
File.join(default_directory,"heel.pid")
|
70
|
+
File.join(default_directory,"heel.#{options.port}.pid")
|
75
71
|
end
|
76
72
|
|
77
73
|
def log_file
|
78
|
-
File.join(default_directory,"heel.log")
|
74
|
+
File.join(default_directory,"heel.#{options.port}.log")
|
79
75
|
end
|
80
76
|
|
81
77
|
def win?
|
@@ -182,7 +178,7 @@ module Heel
|
|
182
178
|
@stdout.puts "Unable to kill process with pid #{pid}. No permissions to kill process."
|
183
179
|
end
|
184
180
|
else
|
185
|
-
@stdout.puts "No pid file exists, no process to kill"
|
181
|
+
@stdout.puts "No pid file exists for server running on port #{options.port}, no process to kill"
|
186
182
|
end
|
187
183
|
@stdout.puts "Done."
|
188
184
|
exit 0
|
@@ -200,10 +196,10 @@ module Heel
|
|
200
196
|
|
201
197
|
# make sure that if we are daemonizing the process is not running
|
202
198
|
def ensure_not_running
|
203
|
-
if
|
199
|
+
if File.exist?(pid_file) then
|
204
200
|
@stdout.puts "ERROR: PID File #{pid_file} already exists. Heel may already be running."
|
205
201
|
@stdout.puts "ERROR: Check the Log file #{log_file}"
|
206
|
-
@stdout.puts "ERROR: Heel will not start until the .pid file is cleared (`heel --kill' to clean it up)."
|
202
|
+
@stdout.puts "ERROR: Heel will not start until the .pid file is cleared (`heel --kill --port #{options.port}' to clean it up)."
|
207
203
|
exit 1
|
208
204
|
end
|
209
205
|
end
|
@@ -269,8 +265,8 @@ module Heel
|
|
269
265
|
# run the heel server with the current options.
|
270
266
|
def run
|
271
267
|
|
272
|
-
error_version_help_kill
|
273
268
|
merge_options
|
269
|
+
error_version_help_kill
|
274
270
|
setup_heel_dir
|
275
271
|
ensure_not_running
|
276
272
|
|
data/spec/server_spec.rb
CHANGED
@@ -118,4 +118,16 @@ describe Heel::Server do
|
|
118
118
|
@stdout.string.must_match( /Sending TERM to process -42/m )
|
119
119
|
end
|
120
120
|
end
|
121
|
+
|
122
|
+
it "records the port of the server process in the pid filename" do
|
123
|
+
server = Heel::Server.new( %w[ --port 4222 ] )
|
124
|
+
server.merge_options
|
125
|
+
File.basename( server.pid_file ).must_equal( "heel.4222.pid" )
|
126
|
+
end
|
127
|
+
|
128
|
+
it "records the port of the server process in the log filename" do
|
129
|
+
server = Heel::Server.new( %w[ --port 4222 ] )
|
130
|
+
server.merge_options
|
131
|
+
File.basename( server.log_file ).must_equal( "heel.4222.log" )
|
132
|
+
end
|
121
133
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
describe Heel::TemplateVars do
|
5
|
+
before do
|
6
|
+
@template = ERB.new( "<%= foo %> && <%= bar %>" )
|
7
|
+
end
|
8
|
+
|
9
|
+
it "exposes all its data members in a binding" do
|
10
|
+
t = Heel::TemplateVars.new( :foo => 'foo', :bar => 'bar' )
|
11
|
+
s = @template.result( t.binding_for_template )
|
12
|
+
s.must_equal( "foo && bar")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "data members may be added after instantiation" do
|
16
|
+
t = Heel::TemplateVars.new
|
17
|
+
t.foo = 'foo'
|
18
|
+
t.bar = 'bar'
|
19
|
+
s = @template.result( t.binding_for_template )
|
20
|
+
s.must_equal( "foo && bar")
|
21
|
+
end
|
22
|
+
end
|
data/tasks/default.rake
CHANGED
@@ -115,7 +115,7 @@ else
|
|
115
115
|
end
|
116
116
|
|
117
117
|
#------------------------------------------------------------------------------
|
118
|
-
# Manifest - We want an explicit list of
|
118
|
+
# Manifest - We want an explicit list of those files that are to be packaged in
|
119
119
|
# the gem. Most of this is from Hoe.
|
120
120
|
#------------------------------------------------------------------------------
|
121
121
|
namespace 'manifest' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: heel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Hinegardner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: puma
|
@@ -16,98 +16,98 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mime-types
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.23'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.23'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: launchy
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '2.
|
47
|
+
version: '2.3'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '2.
|
54
|
+
version: '2.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: coderay
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0
|
61
|
+
version: '1.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.0
|
68
|
+
version: '1.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 10.
|
75
|
+
version: '10.1'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 10.
|
82
|
+
version: '10.1'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: minitest
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: '5.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: '5.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rdoc
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ~>
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '4.0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '4.0'
|
111
111
|
description: ! 'Heel is a small static web server for use when you need a quick web
|
112
112
|
server for a directory. Once the server is running, heel will use (http://rubygems.org/gems/launchy/)
|
113
113
|
to open your browser at the URL of your document root. Heel is built using (http://rack.github.com)
|
@@ -138,7 +138,7 @@ files:
|
|
138
138
|
- data/css/coderay-cycnus.css
|
139
139
|
- data/css/coderay-murphy.css
|
140
140
|
- data/css/error.css
|
141
|
-
- data/css/
|
141
|
+
- data/css/index.css
|
142
142
|
- data/error.rhtml
|
143
143
|
- data/famfamfam/icons/application.png
|
144
144
|
- data/famfamfam/icons/compress.png
|
@@ -164,11 +164,13 @@ files:
|
|
164
164
|
- lib/heel/rackapp.rb
|
165
165
|
- lib/heel/request.rb
|
166
166
|
- lib/heel/server.rb
|
167
|
+
- lib/heel/template_vars.rb
|
167
168
|
- spec/configuration_spec.rb
|
168
169
|
- spec/directory_indexer_spec.rb
|
169
170
|
- spec/rackapp_spec.rb
|
170
171
|
- spec/server_spec.rb
|
171
172
|
- spec/spec_helper.rb
|
173
|
+
- spec/template_vars_spec.rb
|
172
174
|
- tasks/default.rake
|
173
175
|
- tasks/this.rb
|
174
176
|
homepage: http://github.com/copiousfreetime/heel
|
@@ -207,3 +209,4 @@ test_files:
|
|
207
209
|
- spec/rackapp_spec.rb
|
208
210
|
- spec/server_spec.rb
|
209
211
|
- spec/spec_helper.rb
|
212
|
+
- spec/template_vars_spec.rb
|
data/data/css/listing.css
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
a, a:active { text-decoration: none; color: blue;}
|
2
|
-
a:visited { color: purple;}
|
3
|
-
a:hover, a:focus { text-decoration: underline; color: red;}
|
4
|
-
body { font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #eee; }
|
5
|
-
.c { text-align: center; }
|
6
|
-
table { border-collapse: collapse; border-spacing: 0px; width: 100%;}
|
7
|
-
tr { background-color: #ccf;}
|
8
|
-
tr:hover { background-color: #faa;}
|
9
|
-
td, th {
|
10
|
-
border-bottom: 1px solid #ccc;
|
11
|
-
padding: 0em .3em 0em .3em ;
|
12
|
-
color: #666;
|
13
|
-
text-align: left;
|
14
|
-
vertical-align: middle;
|
15
|
-
}
|
16
|
-
thead th {
|
17
|
-
border-top: 2px solid #666;
|
18
|
-
border-bottom: 2px solid #666;
|
19
|
-
font-weight: bold;
|
20
|
-
background: #aaa;
|
21
|
-
color: #fff;
|
22
|
-
text-transform: uppercase;
|
23
|
-
}
|
24
|
-
tr.odd { background-color: #cfc; color: #333;}
|
25
|
-
tr.odd:hover { background-color: #faa; color: #333;}
|
26
|
-
td.n { text-align: right; padding-right: 2em;}
|
27
|
-
div.header { }
|
28
|
-
div.content { background: #FFF; width: 100%;}
|
29
|
-
div.footer { border-top: 2px solid #333; text-align: right;}
|