better_delayed_job_web 1.3.5 → 1.3.11
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 +4 -4
- data/README.markdown +1 -1
- data/better_delayed_job_web.gemspec +1 -1
- data/lib/better_delayed_job_web/application/public/javascripts/data-confirm-modal.js +256 -0
- data/lib/better_delayed_job_web/application/public/stylesheets/style.css +33 -0
- data/lib/better_delayed_job_web/application/views/enqueued.erb +5 -3
- data/lib/better_delayed_job_web/application/views/failed.erb +18 -15
- data/lib/better_delayed_job_web/application/views/job.erb +63 -20
- data/lib/better_delayed_job_web/application/views/layout.erb +1 -0
- data/lib/better_delayed_job_web/application/views/overview.erb +2 -2
- data/lib/better_delayed_job_web/application/views/pending.erb +9 -7
- data/lib/better_delayed_job_web/application/views/working.erb +5 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ebd0d58d88efa052fda53a9abfb5f3113388a30
|
4
|
+
data.tar.gz: efda9bc4d973940e9815ed93095013cce879cb77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c5012ad8a8b05837e210779669a4396f918f737fd152dbd5e2d765e9c74c7f92189c1c27c5c1f54596f8fc38d08e29923835a40c2cea7c87bc49a142a8f9ac0
|
7
|
+
data.tar.gz: dd4232c2ede7c922763adf1aa4e039582f67ce949a1e0a43ac6810e0ebbfb7f038de9fbfaa7bae0841cfe0c2af085c14f11b61569b47d9c208cbd604a8fbfb52
|
data/README.markdown
CHANGED
@@ -0,0 +1,256 @@
|
|
1
|
+
/*
|
2
|
+
* Implements a user-facing modal confirmation when link has a
|
3
|
+
* "data-confirm" attribute using bootstrap's modals. MIT license.
|
4
|
+
*
|
5
|
+
* - vjt@openssl.it Tue Jul 2 18:45:15 CEST 2013
|
6
|
+
*/
|
7
|
+
(function ($) {
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Builds the markup for a [Bootstrap modal](http://twitter.github.io/bootstrap/javascript.html#modals)
|
11
|
+
* for the given `element`. Uses the following `data-` parameters to
|
12
|
+
* customize it:
|
13
|
+
*
|
14
|
+
* * `data-confirm`: Contains the modal body text. HTML is allowed.
|
15
|
+
* Separate multiple paragraphs using \n\n.
|
16
|
+
* * `data-commit`: The 'confirm' button text. "Confirm" by default.
|
17
|
+
* * `data-cancel`: The 'cancel' button text. "Cancel" by default.
|
18
|
+
* * `data-verify`: Adds a text input in which the user has to input
|
19
|
+
* the text in this attribute value for the 'confirm'
|
20
|
+
* button to be clickable. Optional.
|
21
|
+
* * `data-verify-text`: Adds a label for the data-verify input. Optional
|
22
|
+
* * `data-focus`: Define focused input. Supported values are
|
23
|
+
* 'cancel' or 'commit', 'cancel' is default for
|
24
|
+
* data-method DELETE, 'commit' for all others.
|
25
|
+
*
|
26
|
+
* You can set global setting using `dataConfirmModal.setDefaults`, for example:
|
27
|
+
*
|
28
|
+
* dataConfirmModal.setDefaults({
|
29
|
+
* title: 'Confirm your action',
|
30
|
+
* commit: 'Continue',
|
31
|
+
* cancel: 'Cancel',
|
32
|
+
* fade: false,
|
33
|
+
* verifyClass: 'form-control',
|
34
|
+
* });
|
35
|
+
*
|
36
|
+
*/
|
37
|
+
|
38
|
+
var defaults = {
|
39
|
+
title: 'Are you sure?',
|
40
|
+
commit: 'Confirm',
|
41
|
+
commitClass: 'btn-danger',
|
42
|
+
cancel: 'Cancel',
|
43
|
+
cancelClass: 'btn-default',
|
44
|
+
fade: true,
|
45
|
+
verifyClass: '',
|
46
|
+
elements: ['a[data-confirm]', 'button[data-confirm]', 'input[type=submit][data-confirm]'],
|
47
|
+
focus: 'commit'
|
48
|
+
};
|
49
|
+
|
50
|
+
var settings;
|
51
|
+
|
52
|
+
window.dataConfirmModal = {
|
53
|
+
setDefaults: function (newSettings) {
|
54
|
+
settings = $.extend(settings, newSettings);
|
55
|
+
},
|
56
|
+
|
57
|
+
restoreDefaults: function () {
|
58
|
+
settings = $.extend({}, defaults);
|
59
|
+
},
|
60
|
+
|
61
|
+
confirm: function (options) {
|
62
|
+
// Build an ephemeral modal
|
63
|
+
//
|
64
|
+
var modal = buildModal (options);
|
65
|
+
|
66
|
+
modal.modal('show');
|
67
|
+
modal.on('hidden.bs.modal', function () {
|
68
|
+
modal.remove();
|
69
|
+
});
|
70
|
+
|
71
|
+
modal.find('.commit').on('click', function () {
|
72
|
+
if (options.onConfirm && options.onConfirm.call)
|
73
|
+
options.onConfirm.call();
|
74
|
+
|
75
|
+
modal.modal('hide');
|
76
|
+
});
|
77
|
+
|
78
|
+
modal.find('.cancel').on('click', function () {
|
79
|
+
if (options.onCancel && options.onCancel.call)
|
80
|
+
options.onCancel.call();
|
81
|
+
|
82
|
+
modal.modal('hide');
|
83
|
+
});
|
84
|
+
}
|
85
|
+
};
|
86
|
+
|
87
|
+
dataConfirmModal.restoreDefaults();
|
88
|
+
|
89
|
+
var buildElementModal = function (element) {
|
90
|
+
var options = {
|
91
|
+
title: element.attr('title') || element.data('original-title'),
|
92
|
+
text: element.data('confirm'),
|
93
|
+
focus: element.data('focus'),
|
94
|
+
method: element.data('method'),
|
95
|
+
commit: element.data('commit'),
|
96
|
+
commitClass: element.data('commit-class'),
|
97
|
+
cancel: element.data('cancel'),
|
98
|
+
cancelClass: element.data('cancel-class'),
|
99
|
+
remote: element.data('remote'),
|
100
|
+
verify: element.data('verify'),
|
101
|
+
verifyRegexp: element.data('verify-regexp'),
|
102
|
+
verifyLabel: element.data('verify-text'),
|
103
|
+
verifyRegexpCaseInsensitive: element.data('verify-regexp-caseinsensitive')
|
104
|
+
};
|
105
|
+
|
106
|
+
var modal = buildModal (options);
|
107
|
+
|
108
|
+
modal.data('confirmed', false);
|
109
|
+
modal.find('.commit').on('click', function () {
|
110
|
+
modal.data('confirmed', true);
|
111
|
+
element.trigger('click');
|
112
|
+
modal.modal('hide');
|
113
|
+
});
|
114
|
+
|
115
|
+
return modal;
|
116
|
+
}
|
117
|
+
|
118
|
+
var buildModal = function (options) {
|
119
|
+
var id = 'confirm-modal-' + String(Math.random()).slice(2, -1);
|
120
|
+
var fade = settings.fade ? 'fade' : '';
|
121
|
+
|
122
|
+
var modal = $(
|
123
|
+
'<div id="'+id+'" class="modal '+fade+'" tabindex="-1" role="dialog" aria-labelledby="'+id+'Label" aria-hidden="true">' +
|
124
|
+
'<div class="modal-dialog">' +
|
125
|
+
'<div class="modal-content">' +
|
126
|
+
'<div class="modal-header">' +
|
127
|
+
'<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>' +
|
128
|
+
'<h4 id="'+id+'Label" class="modal-title"></h4> ' +
|
129
|
+
'</div>' +
|
130
|
+
'<div class="modal-body"></div>' +
|
131
|
+
'<div class="modal-footer">' +
|
132
|
+
'<button class="btn cancel" data-dismiss="modal" aria-hidden="true"></button>' +
|
133
|
+
'<button class="btn commit"></button>' +
|
134
|
+
'</div>'+
|
135
|
+
'</div>'+
|
136
|
+
'</div>'+
|
137
|
+
'</div>'
|
138
|
+
);
|
139
|
+
|
140
|
+
modal.find('.modal-title').text(options.title || settings.title);
|
141
|
+
|
142
|
+
var body = modal.find('.modal-body');
|
143
|
+
|
144
|
+
$.each((options.text||'').split(/\n{2}/), function (i, piece) {
|
145
|
+
body.append($('<p/>').html(piece));
|
146
|
+
});
|
147
|
+
|
148
|
+
var commit = modal.find('.commit');
|
149
|
+
commit.text(options.commit || settings.commit);
|
150
|
+
commit.addClass(options.commitClass || settings.commitClass);
|
151
|
+
|
152
|
+
var cancel = modal.find('.cancel');
|
153
|
+
cancel.text(options.cancel || settings.cancel);
|
154
|
+
cancel.addClass(options.cancelClass || settings.cancelClass);
|
155
|
+
|
156
|
+
if (options.remote) {
|
157
|
+
commit.attr('data-dismiss', 'modal');
|
158
|
+
}
|
159
|
+
|
160
|
+
if (options.verify || options.verifyRegexp) {
|
161
|
+
commit.prop('disabled', true);
|
162
|
+
|
163
|
+
var isMatch;
|
164
|
+
if (options.verifyRegexp) {
|
165
|
+
var caseInsensitive = options.verifyRegexpCaseInsensitive;
|
166
|
+
var re = new RegExp(regexp, caseInsensitive ? 'i' : '');
|
167
|
+
|
168
|
+
isMatch = function (input) { return input.match(re) };
|
169
|
+
} else {
|
170
|
+
isMatch = function (input) { return options.verify == input };
|
171
|
+
}
|
172
|
+
|
173
|
+
var verification = $('<input/>', {"type": 'text', "class": settings.verifyClass}).on('keyup', function () {
|
174
|
+
commit.prop('disabled', !isMatch($(this).val()));
|
175
|
+
});
|
176
|
+
|
177
|
+
modal.on('shown', function () {
|
178
|
+
verification.focus();
|
179
|
+
});
|
180
|
+
|
181
|
+
modal.on('hide', function () {
|
182
|
+
verification.val('').trigger('keyup');
|
183
|
+
});
|
184
|
+
|
185
|
+
if (options.verifyLabel)
|
186
|
+
body.append($('<p>', {text: options.verifyLabel}))
|
187
|
+
|
188
|
+
body.append(verification);
|
189
|
+
}
|
190
|
+
|
191
|
+
var focus_element;
|
192
|
+
if (options.focus) {
|
193
|
+
focus_element = options.focus;
|
194
|
+
} else if (options.method == 'delete') {
|
195
|
+
focus_element = 'cancel'
|
196
|
+
} else {
|
197
|
+
focus_element = settings.focus;
|
198
|
+
}
|
199
|
+
focus_element = modal.find('.' + focus_element);
|
200
|
+
|
201
|
+
modal.on('shown.bs.modal', function () {
|
202
|
+
focus_element.focus();
|
203
|
+
});
|
204
|
+
|
205
|
+
$('body').append(modal);
|
206
|
+
|
207
|
+
return modal;
|
208
|
+
};
|
209
|
+
|
210
|
+
|
211
|
+
/**
|
212
|
+
* Returns a modal already built for the given element or builds a new one,
|
213
|
+
* caching it into the element's `confirm-modal` data attribute.
|
214
|
+
*/
|
215
|
+
var getModal = function (element) {
|
216
|
+
var modal = element.data('confirm-modal') || buildElementModal(element);
|
217
|
+
|
218
|
+
if (modal && !element.data('confirm-modal'))
|
219
|
+
element.data('confirm-modal', modal);
|
220
|
+
|
221
|
+
return modal;
|
222
|
+
};
|
223
|
+
|
224
|
+
$.fn.confirmModal = function () {
|
225
|
+
getModal($(this)).modal('show');
|
226
|
+
|
227
|
+
return this;
|
228
|
+
};
|
229
|
+
|
230
|
+
if ($.rails) {
|
231
|
+
/**
|
232
|
+
* Attaches to the Rails' UJS adapter 'confirm' event on links having a
|
233
|
+
* `data-confirm` attribute. Temporarily overrides the `$.rails.confirm`
|
234
|
+
* function with an anonymous one that returns the 'confirmed' status of
|
235
|
+
* the modal.
|
236
|
+
*
|
237
|
+
* A modal is considered 'confirmed' when an user has successfully clicked
|
238
|
+
* the 'confirm' button in it.
|
239
|
+
*/
|
240
|
+
$(document).delegate(settings.elements.join(', '), 'confirm', function() {
|
241
|
+
var element = $(this), modal = getModal(element);
|
242
|
+
var confirmed = modal.data('confirmed');
|
243
|
+
|
244
|
+
if (!confirmed && !modal.is(':visible')) {
|
245
|
+
modal.modal('show');
|
246
|
+
|
247
|
+
var confirm = $.rails.confirm;
|
248
|
+
$.rails.confirm = function () { return modal.data('confirmed'); }
|
249
|
+
modal.on('hide', function () { $.rails.confirm = confirm; });
|
250
|
+
}
|
251
|
+
|
252
|
+
return confirmed;
|
253
|
+
});
|
254
|
+
}
|
255
|
+
|
256
|
+
})(jQuery);
|
@@ -56,3 +56,36 @@
|
|
56
56
|
code {
|
57
57
|
font-size: 80%;
|
58
58
|
}
|
59
|
+
|
60
|
+
.job-actions {
|
61
|
+
text-align: center;
|
62
|
+
}
|
63
|
+
|
64
|
+
.more-job-actions {
|
65
|
+
float: right;
|
66
|
+
}
|
67
|
+
|
68
|
+
dt {
|
69
|
+
font-size: 24px;
|
70
|
+
margin-top: 11.5px;
|
71
|
+
margin-bottom: 11.5px;
|
72
|
+
font-family: inherit;
|
73
|
+
font-weight: 400!important;
|
74
|
+
line-height: 1.1;
|
75
|
+
color: #444444;
|
76
|
+
}
|
77
|
+
|
78
|
+
.failed-job {
|
79
|
+
margin: 0 auto;
|
80
|
+
width: 100%;
|
81
|
+
float: left;
|
82
|
+
}
|
83
|
+
|
84
|
+
.job-stat {
|
85
|
+
text-align: center;
|
86
|
+
}
|
87
|
+
|
88
|
+
.failed-job-actions {
|
89
|
+
float: left;
|
90
|
+
padding-right: 20px;
|
91
|
+
}
|
@@ -1,10 +1,12 @@
|
|
1
1
|
<h2 class="sub-header">Enqueued</h2>
|
2
|
-
<p class="
|
2
|
+
<p class="lead">
|
3
3
|
The list below contains all jobs currently in the delayed_job queue.
|
4
4
|
</p>
|
5
|
-
<
|
5
|
+
<div class="job-stat">
|
6
|
+
<h4>
|
6
7
|
<%= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} enqueued jobs." %>
|
7
|
-
</
|
8
|
+
</h4>
|
9
|
+
</div>
|
8
10
|
<ul class="job">
|
9
11
|
<% @jobs.each do |job| %>
|
10
12
|
<%= partial :job, {:job => job} %>
|
@@ -1,24 +1,27 @@
|
|
1
1
|
<h2 class="sub-header">Failed Jobs</h2>
|
2
|
-
<p class="
|
2
|
+
<p class="lead">
|
3
3
|
Here are the list of jobs that failed during execution.
|
4
4
|
</p>
|
5
5
|
<% if @jobs.any? %>
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
</
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
<div class="failed-job-actions">
|
7
|
+
<form action="<%= u('requeue/all') %>" method="POST">
|
8
|
+
<%= csrf_token_tag %>
|
9
|
+
<button type="submit" value="Retry Failed Jobs" class="btn btn-primary">Retry All Jobs</button>
|
10
|
+
</form>
|
11
|
+
</div>
|
12
|
+
<div class="failed-job-actions">
|
13
|
+
<form action="<%= u('failed/clear') %>" method="POST">
|
14
|
+
<%= csrf_token_tag %>
|
15
|
+
<button type="submit" value="Clear Failed Jobs" class="btn btn-warning">Clear All Jobs</button>
|
16
|
+
</form>
|
17
|
+
</div>
|
14
18
|
<% end %>
|
15
|
-
<
|
16
|
-
|
17
|
-
</p>
|
18
|
-
<p class="sub">
|
19
|
+
<div class="job-stat">
|
20
|
+
<h4>
|
19
21
|
<%= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} failed jobs." %>
|
20
|
-
</
|
21
|
-
|
22
|
+
</h4>
|
23
|
+
</div>
|
24
|
+
<ul class="failed-job">
|
22
25
|
<% @jobs.each do |job| %>
|
23
26
|
<%= partial :job, {:job => job} %>
|
24
27
|
<% end %>
|
@@ -1,25 +1,68 @@
|
|
1
1
|
<li class="list-group-item">
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
<!-- New Table Interface -->
|
3
|
+
<table class="overview table table-striped table-hover">
|
4
|
+
<tbody><tr>
|
5
|
+
<th>Info</th>
|
6
|
+
<th>Details</th>
|
7
|
+
</tr>
|
8
|
+
<tr>
|
9
|
+
<td class="status">
|
10
|
+
ID
|
11
|
+
</td>
|
12
|
+
<td class="status">
|
6
13
|
<a href="#<%= job.id %>"><%=h job.id %></a>
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
<
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
</td>
|
15
|
+
</tr>
|
16
|
+
<tr>
|
17
|
+
<td class="status">
|
18
|
+
Priority
|
19
|
+
</td>
|
20
|
+
<td class="status">
|
21
|
+
<%=h job.priority %>
|
22
|
+
</td>
|
23
|
+
</tr>
|
24
|
+
<tr>
|
25
|
+
<td class="status">
|
26
|
+
Attempts
|
27
|
+
</td>
|
28
|
+
<td class="status">
|
29
|
+
<%=h job.attempts %>
|
30
|
+
</td>
|
31
|
+
</tr>
|
32
|
+
<% if job.respond_to?(:queue) && job.queue %>
|
33
|
+
<tr class="failure">
|
34
|
+
<td class="status">
|
35
|
+
<a href="/delayed_job/failed">Queue</a>
|
36
|
+
</td>
|
37
|
+
<td class="status danger">
|
38
|
+
<%=h job.queue %>
|
39
|
+
</td>
|
40
|
+
</tr>
|
41
|
+
<% end %>
|
42
|
+
</tbody>
|
43
|
+
</table>
|
44
|
+
<!-- End of New Table Interface -->
|
45
|
+
<hr>
|
46
|
+
<!-- Begin the amazing controls -->
|
47
|
+
<div class="controls">
|
48
|
+
<div class="col-md-4 job-actions">
|
49
|
+
<form action="<%= u("requeue/#{job.id}") %>" method="post"><%= csrf_token_tag %>
|
50
|
+
<button type="submit" value="Retry" class="btn btn-primary">Retry</button>
|
51
|
+
</form>
|
52
|
+
</div>
|
53
|
+
<div class="col-md-4 job-actions">
|
54
|
+
<form action="<%= u("remove/#{job.id}") %>" method="post"><%= csrf_token_tag %>
|
55
|
+
<button type="submit" value="Remove" class="btn btn-danger">Remove</button>
|
56
|
+
</form>
|
57
|
+
</div>
|
58
|
+
<div class="col-md-4 job-actions">
|
59
|
+
<form action="<%= u("reload/#{job.id}") %>" method="post"><%= csrf_token_tag %>
|
60
|
+
<button type="submit" value="Reload" class="btn btn-default">Reload</button>
|
61
|
+
</form>
|
62
|
+
</div>
|
63
|
+
</div>
|
64
|
+
<!-- End of the amazing controls -->
|
65
|
+
<dl>
|
23
66
|
<dt>Handler</dt>
|
24
67
|
<dd>
|
25
68
|
<pre><%=h job.handler %></pre>
|
@@ -49,5 +49,6 @@
|
|
49
49
|
<script src="<%= u("javascripts/application.js") %>" type="text/javascript"></script>
|
50
50
|
<script src="<%= u("javascripts/bootstrap.min.js") %>" type="text/javascript"></script>
|
51
51
|
<script src="<%= u("javascripts/material.js") %>" type="text/javascript"></script>
|
52
|
+
<script src="<%= u("javascripts/data-confirm-modal.js") %>" type="text/javascript"></script>
|
52
53
|
</body>
|
53
54
|
</html>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class="col-xs-6">
|
2
2
|
<h2 class="sub-header">Overview</h2>
|
3
3
|
<div class="table-responsive">
|
4
|
-
<p class="
|
4
|
+
<p class="lead">
|
5
5
|
The list below shows an overview of the jobs in the delayed_job queue.
|
6
6
|
</p>
|
7
7
|
<table class="overview table table-striped table-hover">
|
@@ -48,7 +48,7 @@
|
|
48
48
|
<div class="col-xs-6">
|
49
49
|
<h2 class="sub-header">Statistics</h2>
|
50
50
|
<div class="table-responsive">
|
51
|
-
<p class="
|
51
|
+
<p class="lead">
|
52
52
|
The list below shows an overview of the jobs in the delayed_job queue.
|
53
53
|
</p>
|
54
54
|
<table class="stats table table-striped table-hover">
|
@@ -1,19 +1,21 @@
|
|
1
1
|
<h2 class="sub-header">Pending</h2>
|
2
|
-
<p class="
|
2
|
+
<p class="lead">
|
3
3
|
The list below shows an overview of the jobs that are pending.
|
4
4
|
</p>
|
5
5
|
<% if @jobs.any? %>
|
6
|
+
<div class="failed-job-actions">
|
6
7
|
<form action="<%= u('requeue/all') %>" method="POST">
|
7
8
|
<%= csrf_token_tag %>
|
8
|
-
<
|
9
|
+
<button type="submit" value="Enqueue All Immediately" class="btn btn-primary">Enqueue All Immediately</button>
|
9
10
|
</form>
|
11
|
+
</div>
|
10
12
|
<% end %>
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
<p class="sub">
|
13
|
+
|
14
|
+
<div class="job-stat">
|
15
|
+
<h4>
|
15
16
|
<%= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} pending jobs." %>
|
16
|
-
</
|
17
|
+
</h4>
|
18
|
+
</div>
|
17
19
|
<ul class="job">
|
18
20
|
<% @jobs.each do |job| %>
|
19
21
|
<%= partial :job, {:job => job} %>
|
@@ -1,13 +1,15 @@
|
|
1
1
|
<h2 class="sub-header">Processing</h2>
|
2
|
-
<p class="
|
2
|
+
<p class="lead">
|
3
3
|
The list below shows an overview of the jobs that are currently being processed.
|
4
4
|
</p>
|
5
5
|
<p class="sub">
|
6
6
|
The list below contains jobs currently being processed.
|
7
7
|
</p>
|
8
|
-
<
|
8
|
+
<div class="job-stat">
|
9
|
+
<h4>
|
9
10
|
<%= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} working jobs." %>
|
10
|
-
</
|
11
|
+
</h4>
|
12
|
+
</div>
|
11
13
|
<ul class="list-group">
|
12
14
|
<% @jobs.each do |job| %>
|
13
15
|
<%= partial :job, {:job => job} %>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_delayed_job_web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Skcript
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- lib/better_delayed_job_web/application/public/images/poll.png
|
115
115
|
- lib/better_delayed_job_web/application/public/javascripts/application.js
|
116
116
|
- lib/better_delayed_job_web/application/public/javascripts/bootstrap.min.js
|
117
|
+
- lib/better_delayed_job_web/application/public/javascripts/data-confirm-modal.js
|
117
118
|
- lib/better_delayed_job_web/application/public/javascripts/jquery-1.11.2.min.js
|
118
119
|
- lib/better_delayed_job_web/application/public/javascripts/jquery.relatize_date.js
|
119
120
|
- lib/better_delayed_job_web/application/public/javascripts/material.js
|