duke 0.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.
- data/.gitignore +8 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +38 -0
- data/LICENSE +20 -0
- data/README.rdoc +83 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/bin/duke +25 -0
- data/duke.gemspec +83 -0
- data/lib/duke/app.rb +37 -0
- data/lib/duke/cli.rb +58 -0
- data/lib/duke/controller.rb +58 -0
- data/lib/duke/project.rb +121 -0
- data/lib/duke.rb +31 -0
- data/lib/ext/string.rb +10 -0
- data/spec/duke/cli_spec.rb +155 -0
- data/spec/duke/controller_spec.rb +111 -0
- data/spec/duke/project_spec.rb +272 -0
- data/spec/spec_helper.rb +18 -0
- data/templates/config.ru +9 -0
- data/templates/public/help.html +0 -0
- data/templates/public/stylesheets/base.css +150 -0
- data/templates/public/stylesheets/button.css +74 -0
- data/templates/public/stylesheets/custom.css +105 -0
- data/templates/public/stylesheets/reset.css +92 -0
- data/templates/views/index.rhtml +46 -0
- metadata +146 -0
@@ -0,0 +1,150 @@
|
|
1
|
+
/* Based on http://html5boilerplate.com */
|
2
|
+
|
3
|
+
h1, h2, h3, h4, h5, h6 {
|
4
|
+
font-weight: bold;
|
5
|
+
}
|
6
|
+
|
7
|
+
a, a:active, a:visited {
|
8
|
+
color: #FFF;
|
9
|
+
}
|
10
|
+
|
11
|
+
a:hover {
|
12
|
+
color: #D1FF03;
|
13
|
+
}
|
14
|
+
|
15
|
+
ul, ol {
|
16
|
+
margin-left: 1.8em;
|
17
|
+
}
|
18
|
+
|
19
|
+
ol {
|
20
|
+
list-style-type: decimal;
|
21
|
+
}
|
22
|
+
|
23
|
+
/* Remove margins for navigation lists */
|
24
|
+
nav ul, nav li {
|
25
|
+
margin: 0;
|
26
|
+
}
|
27
|
+
|
28
|
+
small {
|
29
|
+
font-size: 85%;
|
30
|
+
}
|
31
|
+
|
32
|
+
strong, th {
|
33
|
+
font-weight: bold;
|
34
|
+
}
|
35
|
+
|
36
|
+
td, td img {
|
37
|
+
vertical-align: top;
|
38
|
+
}
|
39
|
+
|
40
|
+
sub {
|
41
|
+
vertical-align: sub;
|
42
|
+
font-size: smaller;
|
43
|
+
}
|
44
|
+
|
45
|
+
sup {
|
46
|
+
vertical-align: super;
|
47
|
+
font-size: smaller;
|
48
|
+
}
|
49
|
+
|
50
|
+
pre {
|
51
|
+
padding: 15px;
|
52
|
+
white-space: pre-line;
|
53
|
+
}
|
54
|
+
|
55
|
+
/* align checkboxes, radios, text inputs with their label
|
56
|
+
by: Thierry Koblentz tjkdesign.com/ez-css/css/base.css */
|
57
|
+
input[type="radio"] {
|
58
|
+
vertical-align: text-bottom;
|
59
|
+
}
|
60
|
+
|
61
|
+
input[type="checkbox"] {
|
62
|
+
vertical-align: bottom;
|
63
|
+
}
|
64
|
+
|
65
|
+
/* hand cursor on clickable input elements */
|
66
|
+
label,
|
67
|
+
input[type=button],
|
68
|
+
input[type=submit],
|
69
|
+
button {
|
70
|
+
cursor: pointer;
|
71
|
+
}
|
72
|
+
|
73
|
+
/* webkit browsers add a 2px margin outside the chrome of form elements */
|
74
|
+
button, input, select, textarea {
|
75
|
+
margin: 0;
|
76
|
+
}
|
77
|
+
|
78
|
+
/* webkit browsers add a 2px margin outside the chrome of form elements */
|
79
|
+
button::-moz-focus-inner {
|
80
|
+
border:0;
|
81
|
+
}
|
82
|
+
|
83
|
+
/* These selection declarations have to be separate.
|
84
|
+
No text-shadow: twitter.com/miketaylr/status/12228805301
|
85
|
+
Also: hot pink. */
|
86
|
+
::-moz-selection {
|
87
|
+
background: #D1FF03;
|
88
|
+
color:#000;
|
89
|
+
text-shadow: none;
|
90
|
+
}
|
91
|
+
|
92
|
+
::selection {
|
93
|
+
background:#D1FF03;
|
94
|
+
color:#000;
|
95
|
+
text-shadow: none;
|
96
|
+
}
|
97
|
+
|
98
|
+
/*
|
99
|
+
* Non-semantic helper classes
|
100
|
+
*/
|
101
|
+
|
102
|
+
/* Hide for both screenreaders and browsers
|
103
|
+
css-discuss.incutio.com/wiki/Screenreader_Visibility */
|
104
|
+
.hidden {
|
105
|
+
display: none;
|
106
|
+
visibility: hidden;
|
107
|
+
}
|
108
|
+
|
109
|
+
/* Hide visually and from screenreaders, but maintain layout */
|
110
|
+
.invisible {
|
111
|
+
visibility: hidden;
|
112
|
+
}
|
113
|
+
|
114
|
+
/* >> The Magnificent CLEARFIX: Updated to prevent margin-collapsing on child elements << j.mp/bestclearfix */
|
115
|
+
.clearfix:before,
|
116
|
+
.clearfix:after {
|
117
|
+
content: "\0020";
|
118
|
+
display: block;
|
119
|
+
height: 0;
|
120
|
+
visibility: hidden;
|
121
|
+
}
|
122
|
+
|
123
|
+
.clearfix:after {
|
124
|
+
clear: both;
|
125
|
+
}
|
126
|
+
|
127
|
+
/* Fix clearfix: blueprintcss.lighthouseapp.com/projects/15318/tickets/5-extra-margin-padding-bottom-of-page */
|
128
|
+
.clearfix {
|
129
|
+
zoom: 1;
|
130
|
+
}
|
131
|
+
|
132
|
+
/* Fontz */
|
133
|
+
|
134
|
+
/* fonts.css from the YUI Library: developer.yahoo.com/yui/
|
135
|
+
Refer to developer.yahoo.com/yui/3/cssfonts/ for font sizing percentages
|
136
|
+
|
137
|
+
There are three custom edits:
|
138
|
+
* remove arial, helvetica from explicit font stack
|
139
|
+
* we normalize monospace styles ourselves
|
140
|
+
* table font-size is reset in the HTML5 reset above so there is no need to repeat
|
141
|
+
*/
|
142
|
+
body {
|
143
|
+
font:13px/1.231 sans-serif;
|
144
|
+
*font-size:small;
|
145
|
+
font-smooth: always;
|
146
|
+
} /* hack retained to preserve specificity <- WTF? */
|
147
|
+
|
148
|
+
select, input, textarea, button {
|
149
|
+
font:99% sans-serif;
|
150
|
+
}
|
@@ -0,0 +1,74 @@
|
|
1
|
+
/* Based on http://ubuwaits.github.com/css3-buttons */
|
2
|
+
|
3
|
+
button.blue {
|
4
|
+
background: -webkit-gradient(linear, 0 0, 0 100%,
|
5
|
+
color-stop(0, #59D9EA),
|
6
|
+
color-stop(0.5, #00899A),
|
7
|
+
color-stop(0.5, #007988),
|
8
|
+
color-stop(1, #004F59));
|
9
|
+
border: 0;
|
10
|
+
border-radius: 4px;
|
11
|
+
-moz-border-radius: 4px;
|
12
|
+
-webkit-border-radius: 4px;
|
13
|
+
-webkit-box-shadow: inset 0px 0px 0px 1px rgba(36, 51, 53, 0.4), 0 1px 3px #333;
|
14
|
+
color: #fff;
|
15
|
+
font-size: 197%;
|
16
|
+
float: right;
|
17
|
+
text-align: center;
|
18
|
+
text-shadow: 0px -1px 1px rgba(0, 0, 0, .8), 0 1px 1px rgba(255, 255, 255, 0.3);
|
19
|
+
width: 220px;
|
20
|
+
padding: 12px 0;
|
21
|
+
}
|
22
|
+
|
23
|
+
button.blue:hover {
|
24
|
+
background: -webkit-gradient(linear, 0 0, 0 100%,
|
25
|
+
color-stop(0, #77F7FF),
|
26
|
+
color-stop(0.5, #1EA7B8),
|
27
|
+
color-stop(0.5, #148D9C),
|
28
|
+
color-stop(1, #14636D));
|
29
|
+
}
|
30
|
+
|
31
|
+
button.blue:active {
|
32
|
+
background: -webkit-gradient(linear, 0 0, 0 100%,
|
33
|
+
color-stop(0, #45C5D6),
|
34
|
+
color-stop(0.5, #007586),
|
35
|
+
color-stop(0.5, #006574),
|
36
|
+
color-stop(1, #003B45));
|
37
|
+
-webkit-box-shadow: inset 0px 0px 0px 1px rgba(36, 51, 53, 0.4);
|
38
|
+
}
|
39
|
+
|
40
|
+
button.black {
|
41
|
+
background: -webkit-gradient(linear, 0 0, 0 100%,
|
42
|
+
color-stop(0, #434343),
|
43
|
+
color-stop(0.5, #2F2F2F),
|
44
|
+
color-stop(0.5, #252525),
|
45
|
+
color-stop(1, #111111));
|
46
|
+
border: 0;
|
47
|
+
border-radius: 4px;
|
48
|
+
-moz-border-radius: 4px;
|
49
|
+
-webkit-border-radius: 4px;
|
50
|
+
-webkit-box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.5), 0 1px 3px #333;
|
51
|
+
color: #fff;
|
52
|
+
font-size: 197%;
|
53
|
+
text-align: center;
|
54
|
+
text-shadow: 0px -1px 1px rgba(0, 0, 0, .8), 0 1px 1px rgba(255, 255, 255, 0.3);
|
55
|
+
width: 220px;
|
56
|
+
padding: 12px 0;
|
57
|
+
}
|
58
|
+
|
59
|
+
button.black:hover {
|
60
|
+
background: -webkit-gradient(linear, 0 0, 0 100%,
|
61
|
+
color-stop(0, #575757),
|
62
|
+
color-stop(0.5, #434343),
|
63
|
+
color-stop(0.5, #393939),
|
64
|
+
color-stop(1, #252525));
|
65
|
+
}
|
66
|
+
|
67
|
+
button.black:active {
|
68
|
+
background: -webkit-gradient(linear, 0 0, 0 100%,
|
69
|
+
color-stop(0, #2F2F2F),
|
70
|
+
color-stop(0.5, #252525),
|
71
|
+
color-stop(0.5, #1B1B1B),
|
72
|
+
color-stop(1, #111111));
|
73
|
+
-webkit-box-shadow: inset 0px 0px 0px 1px rgba(0, 0, 0, 0.5);
|
74
|
+
}
|
@@ -0,0 +1,105 @@
|
|
1
|
+
body, select, input, textarea {
|
2
|
+
background-color: #FFF;
|
3
|
+
}
|
4
|
+
|
5
|
+
hgroup {
|
6
|
+
background-color: #00DFFC;
|
7
|
+
padding: 12px 0 12px 0;
|
8
|
+
border-bottom: 2px solid #00B4CC;
|
9
|
+
}
|
10
|
+
|
11
|
+
hgroup h1, hgroup h2 {
|
12
|
+
width:640px;
|
13
|
+
padding-left: 20px;
|
14
|
+
margin-left: auto;
|
15
|
+
margin-right: auto;
|
16
|
+
}
|
17
|
+
|
18
|
+
hgroup h1 {
|
19
|
+
padding-left: 13px;
|
20
|
+
}
|
21
|
+
|
22
|
+
hgroup h1 {
|
23
|
+
color: #008C9E;
|
24
|
+
font-size: 400%;
|
25
|
+
}
|
26
|
+
|
27
|
+
hgroup h2 {
|
28
|
+
color: #343838;
|
29
|
+
}
|
30
|
+
|
31
|
+
section {
|
32
|
+
margin-left: auto;
|
33
|
+
margin-right: auto;
|
34
|
+
width: 660px;
|
35
|
+
}
|
36
|
+
|
37
|
+
ul {
|
38
|
+
width: 660px;
|
39
|
+
list-style: none;
|
40
|
+
margin: 0 0 15px 0;
|
41
|
+
}
|
42
|
+
|
43
|
+
li {
|
44
|
+
background: #CCC;
|
45
|
+
height: 90px;
|
46
|
+
margin-top: 15px;
|
47
|
+
}
|
48
|
+
|
49
|
+
form {
|
50
|
+
padding-top: 16px;
|
51
|
+
margin: 0 20px;
|
52
|
+
float: right;
|
53
|
+
}
|
54
|
+
|
55
|
+
input {
|
56
|
+
border-radius: 4px;
|
57
|
+
-moz-border-radius: 4px;
|
58
|
+
-webkit-border-radius: 4px;
|
59
|
+
font-size: 200%;
|
60
|
+
font-weight: bold;
|
61
|
+
padding: 11px;
|
62
|
+
text-align: center;
|
63
|
+
float: left;
|
64
|
+
font-style: italic;
|
65
|
+
}
|
66
|
+
|
67
|
+
.start input {
|
68
|
+
width: 195px;
|
69
|
+
margin-right: 20px;
|
70
|
+
}
|
71
|
+
|
72
|
+
#create input {
|
73
|
+
width: 354px;
|
74
|
+
margin-right: 20px;
|
75
|
+
}
|
76
|
+
|
77
|
+
.chunky-text {
|
78
|
+
font-size: 200%;
|
79
|
+
font-weight: bold;
|
80
|
+
padding: 12px 0;
|
81
|
+
color: #ffffff;
|
82
|
+
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8);
|
83
|
+
display: inline;
|
84
|
+
line-height: 90px;
|
85
|
+
margin-left: 20px;
|
86
|
+
}
|
87
|
+
|
88
|
+
.port {
|
89
|
+
line-height: 65px;
|
90
|
+
float: right;
|
91
|
+
width: 220px;
|
92
|
+
text-align: center;
|
93
|
+
}
|
94
|
+
|
95
|
+
.fail {
|
96
|
+
background: #DC2323;
|
97
|
+
}
|
98
|
+
|
99
|
+
.pass {
|
100
|
+
background: #1FBD00;
|
101
|
+
}
|
102
|
+
|
103
|
+
.building {
|
104
|
+
background: #FDD820;
|
105
|
+
}
|
@@ -0,0 +1,92 @@
|
|
1
|
+
/* Based on http://html5boilerplate.com */
|
2
|
+
|
3
|
+
html, body, div, span, object, iframe,
|
4
|
+
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
5
|
+
abbr, address, cite, code,
|
6
|
+
del, dfn, em, img, ins, kbd, q, samp,
|
7
|
+
small, strong, sub, sup, var,
|
8
|
+
b, i,
|
9
|
+
dl, dt, dd, ol, ul, li,
|
10
|
+
fieldset, form, label, legend,
|
11
|
+
table, caption, tbody, tfoot, thead, tr, th, td,
|
12
|
+
article, aside, canvas, details, figcaption, figure,
|
13
|
+
footer, header, hgroup, menu, nav, section, summary,
|
14
|
+
time, mark, audio, video {
|
15
|
+
margin:0;
|
16
|
+
padding:0;
|
17
|
+
border:0;
|
18
|
+
outline:0;
|
19
|
+
font-size:100%;
|
20
|
+
vertical-align:baseline;
|
21
|
+
background:transparent;
|
22
|
+
}
|
23
|
+
|
24
|
+
article, aside, details, figcaption, figure,
|
25
|
+
footer, header, hgroup, menu, nav, section {
|
26
|
+
display:block;
|
27
|
+
}
|
28
|
+
|
29
|
+
nav ul {
|
30
|
+
list-style:none;
|
31
|
+
}
|
32
|
+
|
33
|
+
blockquote, q {
|
34
|
+
quotes:none;
|
35
|
+
}
|
36
|
+
|
37
|
+
blockquote:before,
|
38
|
+
blockquote:after,
|
39
|
+
q:before,
|
40
|
+
q:after {
|
41
|
+
content:'';
|
42
|
+
content:none;
|
43
|
+
}
|
44
|
+
|
45
|
+
a {
|
46
|
+
margin:0;
|
47
|
+
padding:0;
|
48
|
+
font-size:100%;
|
49
|
+
vertical-align:baseline;
|
50
|
+
background:transparent;
|
51
|
+
}
|
52
|
+
|
53
|
+
ins {
|
54
|
+
background-color:#ff9;
|
55
|
+
color:#000;
|
56
|
+
text-decoration:none;
|
57
|
+
}
|
58
|
+
|
59
|
+
mark {
|
60
|
+
background-color:#ff9;
|
61
|
+
color:#000;
|
62
|
+
font-style:italic;
|
63
|
+
font-weight:bold;
|
64
|
+
}
|
65
|
+
|
66
|
+
del {
|
67
|
+
text-decoration: line-through;
|
68
|
+
}
|
69
|
+
|
70
|
+
abbr[title], dfn[title] {
|
71
|
+
border-bottom:1px dotted;
|
72
|
+
cursor:help;
|
73
|
+
}
|
74
|
+
|
75
|
+
/* tables still need cellspacing="0" in the markup */
|
76
|
+
table {
|
77
|
+
border-collapse:collapse;
|
78
|
+
border-spacing:0;
|
79
|
+
}
|
80
|
+
|
81
|
+
hr {
|
82
|
+
display:block;
|
83
|
+
height:1px;
|
84
|
+
border:0;
|
85
|
+
border-top:1px solid #ccc;
|
86
|
+
margin:1em 0;
|
87
|
+
padding:0;
|
88
|
+
}
|
89
|
+
|
90
|
+
input, select {
|
91
|
+
vertical-align:middle;
|
92
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<title>Duke - The CIJoe Manager</title>
|
5
|
+
<meta charset="utf-8" />
|
6
|
+
<link rel="stylesheet" href="/stylesheets/reset.css" />
|
7
|
+
<link rel="stylesheet" href="/stylesheets/base.css" />
|
8
|
+
<link rel="stylesheet" href="/stylesheets/custom.css" />
|
9
|
+
<link rel="stylesheet" href="/stylesheets/button.css" />
|
10
|
+
</head>
|
11
|
+
<body>
|
12
|
+
<hgroup>
|
13
|
+
<h1>Duke</h1>
|
14
|
+
<h2>The CIJoe Manager</h2>
|
15
|
+
</hgroup>
|
16
|
+
<section>
|
17
|
+
<ul>
|
18
|
+
<li>
|
19
|
+
<form id="create" action="/projects" method="post">
|
20
|
+
<input name="project[repo_url]" placeholder="Repository"/>
|
21
|
+
<button type="submit" class="blue">Create</button>
|
22
|
+
</form>
|
23
|
+
</li>
|
24
|
+
<% @projects.each do |project| %>
|
25
|
+
<li class="project<%= status_style(project) %>">
|
26
|
+
<% if project.running? %>
|
27
|
+
<a class="chunky-text" href="<%= project.url %>"><%= project.repo_dir %></a>
|
28
|
+
<form class="stop" method="post" action="/projects/<%= project.repo_dir %>">
|
29
|
+
<input type="hidden" name="_method" value="put">
|
30
|
+
<button type="submit" class="black">Stop</button>
|
31
|
+
</form>
|
32
|
+
<p class="port chunky-text"><%= project.port %></p>
|
33
|
+
<% else %>
|
34
|
+
<p class="chunky-text"><%= project.repo_dir %></p>
|
35
|
+
<form class="start" method="post" action="/projects/<%= project.repo_dir %>">
|
36
|
+
<input type="hidden" name="_method" value="put">
|
37
|
+
<button type="submit" class="blue">Start</button>
|
38
|
+
<input name="project[port]" placeholder="Port"/>
|
39
|
+
</form>
|
40
|
+
<% end %>
|
41
|
+
</li>
|
42
|
+
<% end %>
|
43
|
+
</ul>
|
44
|
+
</section>
|
45
|
+
</body>
|
46
|
+
</html>
|
metadata
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: duke
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Justin Marney
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-11-08 00:00:00 -05:00
|
18
|
+
default_executable: duke
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: thor
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: cijoe
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :runtime
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: daemon_controller
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
segments:
|
55
|
+
- 0
|
56
|
+
version: "0"
|
57
|
+
type: :runtime
|
58
|
+
version_requirements: *id003
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rspec
|
61
|
+
prerelease: false
|
62
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 2
|
69
|
+
- 0
|
70
|
+
- 1
|
71
|
+
version: 2.0.1
|
72
|
+
type: :development
|
73
|
+
version_requirements: *id004
|
74
|
+
description: Allows you to easily manage multiple CIJoes.
|
75
|
+
email: gotascii@gmail.com
|
76
|
+
executables:
|
77
|
+
- duke
|
78
|
+
extensions: []
|
79
|
+
|
80
|
+
extra_rdoc_files:
|
81
|
+
- LICENSE
|
82
|
+
- README.rdoc
|
83
|
+
files:
|
84
|
+
- .gitignore
|
85
|
+
- Gemfile
|
86
|
+
- Gemfile.lock
|
87
|
+
- LICENSE
|
88
|
+
- README.rdoc
|
89
|
+
- Rakefile
|
90
|
+
- VERSION
|
91
|
+
- bin/duke
|
92
|
+
- duke.gemspec
|
93
|
+
- lib/duke.rb
|
94
|
+
- lib/duke/app.rb
|
95
|
+
- lib/duke/cli.rb
|
96
|
+
- lib/duke/controller.rb
|
97
|
+
- lib/duke/project.rb
|
98
|
+
- lib/ext/string.rb
|
99
|
+
- spec/duke/cli_spec.rb
|
100
|
+
- spec/duke/controller_spec.rb
|
101
|
+
- spec/duke/project_spec.rb
|
102
|
+
- spec/spec_helper.rb
|
103
|
+
- templates/config.ru
|
104
|
+
- templates/public/help.html
|
105
|
+
- templates/public/stylesheets/base.css
|
106
|
+
- templates/public/stylesheets/button.css
|
107
|
+
- templates/public/stylesheets/custom.css
|
108
|
+
- templates/public/stylesheets/reset.css
|
109
|
+
- templates/views/index.rhtml
|
110
|
+
has_rdoc: true
|
111
|
+
homepage: http://github.com/gotascii/duke
|
112
|
+
licenses: []
|
113
|
+
|
114
|
+
post_install_message:
|
115
|
+
rdoc_options:
|
116
|
+
- --charset=UTF-8
|
117
|
+
require_paths:
|
118
|
+
- lib
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
segments:
|
125
|
+
- 0
|
126
|
+
version: "0"
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
segments:
|
133
|
+
- 0
|
134
|
+
version: "0"
|
135
|
+
requirements: []
|
136
|
+
|
137
|
+
rubyforge_project:
|
138
|
+
rubygems_version: 1.3.7
|
139
|
+
signing_key:
|
140
|
+
specification_version: 3
|
141
|
+
summary: Manage your CIJoes.
|
142
|
+
test_files:
|
143
|
+
- spec/duke/cli_spec.rb
|
144
|
+
- spec/duke/controller_spec.rb
|
145
|
+
- spec/duke/project_spec.rb
|
146
|
+
- spec/spec_helper.rb
|