heel 3.0.2 → 3.1.0
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.
- 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;}
|