vue_delayed_job_dashboard 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -0
- data/lib/vue_delayed_job_dashboard/authentication.rb +5 -0
- data/lib/vue_delayed_job_dashboard/version.rb +1 -1
- data/lib/vue_delayed_job_dashboard/web/app.rb +13 -12
- data/lib/vue_delayed_job_dashboard/web/filter.rb +18 -0
- data/lib/vue_delayed_job_dashboard/web/priv/JobsList.vue +79 -16
- data/lib/vue_delayed_job_dashboard/web/public/bundle.js +117 -33
- data/lib/vue_delayed_job_dashboard.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abd7f26728d3056a3dd0f352b44bb71e5efceb4c
|
4
|
+
data.tar.gz: d050e8d92a3aa7dbcccd3cdc2a8aa71faa4d72c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44200b594ae11cf96984fddaa9b559003470e0915b3597f9e05da7962503f75cb7ca9409cbaee6bd5bb5fa8cf06a6e1421574fad9ef2c5d0b88ad18733cd91ae
|
7
|
+
data.tar.gz: 8299052b51f98f6ffa0a8120c5ec7f0ea462908a84003c50fab8379bd7aa4c1f798449e1269107f3a0f83d0db067f210a0fe0499b45e9a691821a3751501705c
|
data/README.md
CHANGED
@@ -28,6 +28,20 @@ Add the following line to top of `route.rb`
|
|
28
28
|
mount VueDelayedJobDashboard::WebApplication => '/delayed_job'
|
29
29
|
```
|
30
30
|
|
31
|
+
vue_delayed_job_dashboard will require basic authentication by default. Add the following configuration to environment variable.
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
ENV["VUE_DELAYED_JOB_USERNAME"] = "username"
|
35
|
+
ENV["VUE_DELAYED_JOB_PASSWORD"] = "password"
|
36
|
+
```
|
37
|
+
|
38
|
+
## TODO
|
39
|
+
|
40
|
+
- Add unit tests
|
41
|
+
- Add pagination
|
42
|
+
- Stats
|
43
|
+
- Add authentication [DONE]
|
44
|
+
|
31
45
|
## Development
|
32
46
|
|
33
47
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'sinatra/base'
|
2
|
+
require 'vue_delayed_job_dashboard/web/filter'
|
2
3
|
|
3
4
|
module VueDelayedJobDashboard
|
4
5
|
class WebApplication < Sinatra::Base
|
@@ -36,21 +37,21 @@ module VueDelayedJobDashboard
|
|
36
37
|
haml :working, escape_html: false
|
37
38
|
end
|
38
39
|
|
39
|
-
get '/
|
40
|
+
get '/jobs_info.json' do
|
40
41
|
content_type :json
|
42
|
+
total = VueDelayedJobDashboard::Filter.for(Delayed::Job, params[:filter]).page(0).per(params[:per_page]).total_pages
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
@jobs = Delayed::Job.order(created_at: :desc)
|
51
|
-
end
|
44
|
+
{
|
45
|
+
total_jobs: VueDelayedJobDashboard::Filter.for(Delayed::Job, params[:filter]).count,
|
46
|
+
total_pages: total
|
47
|
+
}.to_json
|
48
|
+
end
|
49
|
+
|
50
|
+
get '/jobs.json' do
|
51
|
+
content_type :json
|
52
52
|
|
53
|
-
@jobs = Delayed::Job.order(created_at: :desc)
|
53
|
+
@jobs = Delayed::Job.page(params[:page]).per(params[:per_page]).order(created_at: :desc)
|
54
|
+
@jobs = VueDelayedJobDashboard::Filter.for(@jobs, params[:filter])
|
54
55
|
|
55
56
|
@jobs_json = @jobs.as_json
|
56
57
|
@jobs_json.each_with_index do |job, index|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module VueDelayedJobDashboard
|
2
|
+
class Filter
|
3
|
+
def self.for(jobs, filter)
|
4
|
+
case filter
|
5
|
+
when "pending"
|
6
|
+
jobs.where(locked_at: nil, attempts: 0)
|
7
|
+
when "failed"
|
8
|
+
jobs.where.not(failed_at: nil)
|
9
|
+
when "working"
|
10
|
+
jobs.where.not(locked_at: nil)
|
11
|
+
when "enqueued"
|
12
|
+
jobs
|
13
|
+
when nil || ""
|
14
|
+
jobs
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,5 +1,16 @@
|
|
1
1
|
<template>
|
2
2
|
<div>
|
3
|
+
<div class="block">
|
4
|
+
<el-pagination
|
5
|
+
layout="total, sizes, prev, pager, next"
|
6
|
+
@size-change="handleSizeChange"
|
7
|
+
@current-change="handleCurrentChange"
|
8
|
+
:page-sizes="pageSizes"
|
9
|
+
:page-size="perPage"
|
10
|
+
:total="totalJobs">
|
11
|
+
</el-pagination>
|
12
|
+
</div>
|
13
|
+
|
3
14
|
<el-table
|
4
15
|
:data="jobs"
|
5
16
|
v-loading.body="loading"
|
@@ -52,6 +63,17 @@
|
|
52
63
|
</el-table-column>
|
53
64
|
</el-table>
|
54
65
|
|
66
|
+
<div class="block">
|
67
|
+
<el-pagination
|
68
|
+
layout="total, sizes, prev, pager, next"
|
69
|
+
@size-change="handleSizeChange"
|
70
|
+
@current-change="handleCurrentChange"
|
71
|
+
:page-sizes="pageSizes"
|
72
|
+
:page-size="perPage"
|
73
|
+
:total="totalJobs">
|
74
|
+
</el-pagination>
|
75
|
+
</div>
|
76
|
+
|
55
77
|
<el-dialog title="Object Payload" v-model="dialogVisible" size="small">
|
56
78
|
<pre>{{jobDetailHandler}}</pre>
|
57
79
|
<span slot="footer" class="dialog-footer">
|
@@ -65,34 +87,75 @@
|
|
65
87
|
const moment = require('moment');
|
66
88
|
|
67
89
|
export default {
|
68
|
-
props: ["mydata"],
|
69
90
|
data () {
|
70
91
|
return {
|
71
92
|
jobs: [],
|
72
93
|
dialogVisible: false,
|
73
94
|
jobDetailHandler: "",
|
74
95
|
jobDetailId: "",
|
75
|
-
loading: true
|
76
|
-
|
96
|
+
loading: true,
|
97
|
+
currentPage: 0,
|
98
|
+
perPage: 4,
|
99
|
+
totalJobs: 0,
|
100
|
+
totalPages: 0,
|
101
|
+
pageSizes: [4, 6, 8, 10]
|
77
102
|
}
|
78
103
|
},
|
104
|
+
|
79
105
|
created () {
|
80
|
-
|
81
|
-
|
82
|
-
this.loadJobs({ params: { filter: "pending" } });
|
83
|
-
} else if (path.includes("failed")) {
|
84
|
-
this.loadJobs({ params: { filter: "failed" } });
|
85
|
-
} else if (path.includes("working")) {
|
86
|
-
this.loadJobs({ params: { filter: "working" } });
|
87
|
-
} else if (path.includes("enqueued")) {
|
88
|
-
this.loadJobs({ params: { filter: "enqueued" } });
|
89
|
-
}
|
90
|
-
else {
|
91
|
-
this.loadJobs({ params: {} });
|
92
|
-
}
|
106
|
+
this.loadPageInfo();
|
107
|
+
this.loadJobsForCurrentPage();
|
93
108
|
},
|
94
109
|
|
95
110
|
methods: {
|
111
|
+
getJobType() {
|
112
|
+
const path = window.location.pathname;
|
113
|
+
if (path.includes("pending")) {
|
114
|
+
return "pending"
|
115
|
+
} else if (path.includes("failed")) {
|
116
|
+
return "failed"
|
117
|
+
} else if (path.includes("working")) {
|
118
|
+
return "working"
|
119
|
+
} else if (path.includes("enqueued")) {
|
120
|
+
return "enqueued"
|
121
|
+
}
|
122
|
+
else {
|
123
|
+
return ""
|
124
|
+
}
|
125
|
+
},
|
126
|
+
|
127
|
+
loadJobsForCurrentPage() {
|
128
|
+
const filter = this.getJobType();
|
129
|
+
this.loadJobs({
|
130
|
+
params: {
|
131
|
+
filter: filter,
|
132
|
+
page: this.currentPage,
|
133
|
+
per_page: this.perPage
|
134
|
+
}
|
135
|
+
});
|
136
|
+
},
|
137
|
+
|
138
|
+
loadPageInfo(){
|
139
|
+
const queries = { params: { filter: this.getJobType(), r_page: this.perPage } };
|
140
|
+
this.$http.get("/delayed_job/jobs_info.json", queries).then(response => {
|
141
|
+
const res = response.body;
|
142
|
+
this.totalPages = res.total_pages;
|
143
|
+
this.totalJobs = res.total_jobs;
|
144
|
+
}, response => {
|
145
|
+
});
|
146
|
+
},
|
147
|
+
|
148
|
+
handleSizeChange(val){
|
149
|
+
this.perPage = val;
|
150
|
+
this.loadPageInfo();
|
151
|
+
this.loadJobsForCurrentPage();
|
152
|
+
},
|
153
|
+
|
154
|
+
handleCurrentChange(val) {
|
155
|
+
this.currentPage = val;
|
156
|
+
this.loadJobsForCurrentPage();
|
157
|
+
},
|
158
|
+
|
96
159
|
handleClickDialog(index, jobs){
|
97
160
|
this.jobDetailHandler = jobs[index].payload_object;
|
98
161
|
this.jobDetailId = jobs[index].id;
|
@@ -51443,11 +51443,11 @@ var Component = __webpack_require__(140)(
|
|
51443
51443
|
/* template */
|
51444
51444
|
__webpack_require__(202),
|
51445
51445
|
/* scopeId */
|
51446
|
-
"data-v-
|
51446
|
+
"data-v-96b7533e",
|
51447
51447
|
/* cssModules */
|
51448
51448
|
null
|
51449
51449
|
)
|
51450
|
-
Component.options.__file = "/Users/mac/Desktop/opensources/
|
51450
|
+
Component.options.__file = "/Users/mac/Desktop/opensources/delayed_job_dashboard/lib/vue_delayed_job_dashboard/web/priv/App.vue"
|
51451
51451
|
if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
|
51452
51452
|
if (Component.options.functional) {console.error("[vue-loader] App.vue: functional components are not supported with templates, they should use render functions.")}
|
51453
51453
|
|
@@ -51458,9 +51458,9 @@ if (false) {(function () {
|
|
51458
51458
|
if (!hotAPI.compatible) return
|
51459
51459
|
module.hot.accept()
|
51460
51460
|
if (!module.hot.data) {
|
51461
|
-
hotAPI.createRecord("data-v-
|
51461
|
+
hotAPI.createRecord("data-v-96b7533e", Component.options)
|
51462
51462
|
} else {
|
51463
|
-
hotAPI.reload("data-v-
|
51463
|
+
hotAPI.reload("data-v-96b7533e", Component.options)
|
51464
51464
|
}
|
51465
51465
|
})()}
|
51466
51466
|
|
@@ -54516,38 +54516,96 @@ Object.defineProperty(exports, "__esModule", {
|
|
54516
54516
|
//
|
54517
54517
|
//
|
54518
54518
|
//
|
54519
|
+
//
|
54520
|
+
//
|
54521
|
+
//
|
54522
|
+
//
|
54523
|
+
//
|
54524
|
+
//
|
54525
|
+
//
|
54526
|
+
//
|
54527
|
+
//
|
54528
|
+
//
|
54529
|
+
//
|
54530
|
+
//
|
54531
|
+
//
|
54532
|
+
//
|
54533
|
+
//
|
54534
|
+
//
|
54535
|
+
//
|
54536
|
+
//
|
54537
|
+
//
|
54538
|
+
//
|
54539
|
+
//
|
54540
|
+
//
|
54519
54541
|
|
54520
54542
|
var moment = __webpack_require__(0);
|
54521
54543
|
|
54522
54544
|
exports.default = {
|
54523
|
-
props: ["mydata"],
|
54524
54545
|
data: function data() {
|
54525
54546
|
return {
|
54526
54547
|
jobs: [],
|
54527
54548
|
dialogVisible: false,
|
54528
54549
|
jobDetailHandler: "",
|
54529
54550
|
jobDetailId: "",
|
54530
|
-
loading: true
|
54531
|
-
|
54551
|
+
loading: true,
|
54552
|
+
currentPage: 0,
|
54553
|
+
perPage: 4,
|
54554
|
+
totalJobs: 0,
|
54555
|
+
totalPages: 0,
|
54556
|
+
pageSizes: [4, 6, 8, 10]
|
54532
54557
|
};
|
54533
54558
|
},
|
54534
54559
|
created: function created() {
|
54535
|
-
|
54536
|
-
|
54537
|
-
this.loadJobs({ params: { filter: "pending" } });
|
54538
|
-
} else if (path.includes("failed")) {
|
54539
|
-
this.loadJobs({ params: { filter: "failed" } });
|
54540
|
-
} else if (path.includes("working")) {
|
54541
|
-
this.loadJobs({ params: { filter: "working" } });
|
54542
|
-
} else if (path.includes("enqueued")) {
|
54543
|
-
this.loadJobs({ params: { filter: "enqueued" } });
|
54544
|
-
} else {
|
54545
|
-
this.loadJobs({ params: {} });
|
54546
|
-
}
|
54560
|
+
this.loadPageInfo();
|
54561
|
+
this.loadJobsForCurrentPage();
|
54547
54562
|
},
|
54548
54563
|
|
54549
54564
|
|
54550
54565
|
methods: {
|
54566
|
+
getJobType: function getJobType() {
|
54567
|
+
var path = window.location.pathname;
|
54568
|
+
if (path.includes("pending")) {
|
54569
|
+
return "pending";
|
54570
|
+
} else if (path.includes("failed")) {
|
54571
|
+
return "failed";
|
54572
|
+
} else if (path.includes("working")) {
|
54573
|
+
return "working";
|
54574
|
+
} else if (path.includes("enqueued")) {
|
54575
|
+
return "enqueued";
|
54576
|
+
} else {
|
54577
|
+
return "";
|
54578
|
+
}
|
54579
|
+
},
|
54580
|
+
loadJobsForCurrentPage: function loadJobsForCurrentPage() {
|
54581
|
+
var filter = this.getJobType();
|
54582
|
+
this.loadJobs({
|
54583
|
+
params: {
|
54584
|
+
filter: filter,
|
54585
|
+
page: this.currentPage,
|
54586
|
+
per_page: this.perPage
|
54587
|
+
}
|
54588
|
+
});
|
54589
|
+
},
|
54590
|
+
loadPageInfo: function loadPageInfo() {
|
54591
|
+
var _this = this;
|
54592
|
+
|
54593
|
+
var queries = { params: { filter: this.getJobType(), r_page: this.perPage } };
|
54594
|
+
this.$http.get("/delayed_job/jobs_info.json", queries).then(function (response) {
|
54595
|
+
var res = response.body;
|
54596
|
+
_this.totalPages = res.total_pages;
|
54597
|
+
_this.totalJobs = res.total_jobs;
|
54598
|
+
}, function (response) {});
|
54599
|
+
},
|
54600
|
+
handleSizeChange: function handleSizeChange(val) {
|
54601
|
+
this.perPage = val;
|
54602
|
+
this.loadPageInfo();
|
54603
|
+
this.loadJobsForCurrentPage();
|
54604
|
+
},
|
54605
|
+
handleCurrentChange: function handleCurrentChange(val) {
|
54606
|
+
this.currentPage = val;
|
54607
|
+
this.loadJobsForCurrentPage();
|
54608
|
+
},
|
54551
54609
|
handleClickDialog: function handleClickDialog(index, jobs) {
|
54552
54610
|
this.jobDetailHandler = jobs[index].payload_object;
|
54553
54611
|
this.jobDetailId = jobs[index].id;
|
@@ -54581,13 +54639,13 @@ exports.default = {
|
|
54581
54639
|
return moment(row.created_at).format('MMMM Do YYYY, h:mm:ss a');
|
54582
54640
|
},
|
54583
54641
|
loadJobs: function loadJobs(queries) {
|
54584
|
-
var
|
54642
|
+
var _this2 = this;
|
54585
54643
|
|
54586
54644
|
this.$http.get("/delayed_job/jobs.json", queries).then(function (response) {
|
54587
|
-
|
54588
|
-
|
54645
|
+
_this2.jobs = response.body;
|
54646
|
+
_this2.loading = false;
|
54589
54647
|
}, function (response) {
|
54590
|
-
|
54648
|
+
_this2.loading = false;
|
54591
54649
|
});
|
54592
54650
|
}
|
54593
54651
|
}
|
@@ -56534,7 +56592,7 @@ exports = module.exports = __webpack_require__(17)(undefined);
|
|
56534
56592
|
|
56535
56593
|
|
56536
56594
|
// module
|
56537
|
-
exports.push([module.i, "\na[data-v-
|
56595
|
+
exports.push([module.i, "\na[data-v-96b7533e] {\n text-decoration: none;\n}\n", ""]);
|
56538
56596
|
|
56539
56597
|
// exports
|
56540
56598
|
|
@@ -63432,7 +63490,7 @@ var Component = __webpack_require__(140)(
|
|
63432
63490
|
/* cssModules */
|
63433
63491
|
null
|
63434
63492
|
)
|
63435
|
-
Component.options.__file = "/Users/mac/Desktop/opensources/
|
63493
|
+
Component.options.__file = "/Users/mac/Desktop/opensources/delayed_job_dashboard/lib/vue_delayed_job_dashboard/web/priv/JobsList.vue"
|
63436
63494
|
if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
|
63437
63495
|
if (Component.options.functional) {console.error("[vue-loader] JobsList.vue: functional components are not supported with templates, they should use render functions.")}
|
63438
63496
|
|
@@ -63443,9 +63501,9 @@ if (false) {(function () {
|
|
63443
63501
|
if (!hotAPI.compatible) return
|
63444
63502
|
module.hot.accept()
|
63445
63503
|
if (!module.hot.data) {
|
63446
|
-
hotAPI.createRecord("data-v-
|
63504
|
+
hotAPI.createRecord("data-v-48df34f8", Component.options)
|
63447
63505
|
} else {
|
63448
|
-
hotAPI.reload("data-v-
|
63506
|
+
hotAPI.reload("data-v-48df34f8", Component.options)
|
63449
63507
|
}
|
63450
63508
|
})()}
|
63451
63509
|
|
@@ -63457,7 +63515,20 @@ module.exports = Component.exports
|
|
63457
63515
|
/***/ (function(module, exports, __webpack_require__) {
|
63458
63516
|
|
63459
63517
|
module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
|
63460
|
-
return _c('div', [_c('
|
63518
|
+
return _c('div', [_c('div', {
|
63519
|
+
staticClass: "block"
|
63520
|
+
}, [_c('el-pagination', {
|
63521
|
+
attrs: {
|
63522
|
+
"layout": "total, sizes, prev, pager, next",
|
63523
|
+
"page-sizes": _vm.pageSizes,
|
63524
|
+
"page-size": _vm.perPage,
|
63525
|
+
"total": _vm.totalJobs
|
63526
|
+
},
|
63527
|
+
on: {
|
63528
|
+
"size-change": _vm.handleSizeChange,
|
63529
|
+
"current-change": _vm.handleCurrentChange
|
63530
|
+
}
|
63531
|
+
})], 1), _vm._v(" "), _c('el-table', {
|
63461
63532
|
directives: [{
|
63462
63533
|
name: "loading",
|
63463
63534
|
rawName: "v-loading.body",
|
@@ -63542,6 +63613,19 @@ module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c
|
|
63542
63613
|
}, [_vm._v("\n Show\n ")])]
|
63543
63614
|
}]
|
63544
63615
|
])
|
63616
|
+
})], 1), _vm._v(" "), _c('div', {
|
63617
|
+
staticClass: "block"
|
63618
|
+
}, [_c('el-pagination', {
|
63619
|
+
attrs: {
|
63620
|
+
"layout": "total, sizes, prev, pager, next",
|
63621
|
+
"page-sizes": _vm.pageSizes,
|
63622
|
+
"page-size": _vm.perPage,
|
63623
|
+
"total": _vm.totalJobs
|
63624
|
+
},
|
63625
|
+
on: {
|
63626
|
+
"size-change": _vm.handleSizeChange,
|
63627
|
+
"current-change": _vm.handleCurrentChange
|
63628
|
+
}
|
63545
63629
|
})], 1), _vm._v(" "), _c('el-dialog', {
|
63546
63630
|
attrs: {
|
63547
63631
|
"title": "Object Payload",
|
@@ -63572,7 +63656,7 @@ module.exports.render._withStripped = true
|
|
63572
63656
|
if (false) {
|
63573
63657
|
module.hot.accept()
|
63574
63658
|
if (module.hot.data) {
|
63575
|
-
require("vue-hot-reload-api").rerender("data-v-
|
63659
|
+
require("vue-hot-reload-api").rerender("data-v-48df34f8", module.exports)
|
63576
63660
|
}
|
63577
63661
|
}
|
63578
63662
|
|
@@ -63638,7 +63722,7 @@ module.exports.render._withStripped = true
|
|
63638
63722
|
if (false) {
|
63639
63723
|
module.hot.accept()
|
63640
63724
|
if (module.hot.data) {
|
63641
|
-
require("vue-hot-reload-api").rerender("data-v-
|
63725
|
+
require("vue-hot-reload-api").rerender("data-v-96b7533e", module.exports)
|
63642
63726
|
}
|
63643
63727
|
}
|
63644
63728
|
|
@@ -63653,13 +63737,13 @@ var content = __webpack_require__(175);
|
|
63653
63737
|
if(typeof content === 'string') content = [[module.i, content, '']];
|
63654
63738
|
if(content.locals) module.exports = content.locals;
|
63655
63739
|
// add the styles to the DOM
|
63656
|
-
var update = __webpack_require__(204)("
|
63740
|
+
var update = __webpack_require__(204)("304edec2", content, false);
|
63657
63741
|
// Hot Module Replacement
|
63658
63742
|
if(false) {
|
63659
63743
|
// When the styles change, update the <style> tags
|
63660
63744
|
if(!content.locals) {
|
63661
|
-
module.hot.accept("!!../../../../node_modules/css-loader/index.js!../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"id\":\"data-v-
|
63662
|
-
var newContent = require("!!../../../../node_modules/css-loader/index.js!../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"id\":\"data-v-
|
63745
|
+
module.hot.accept("!!../../../../node_modules/css-loader/index.js!../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"id\":\"data-v-96b7533e\",\"scoped\":true,\"hasInlineConfig\":false}!../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./App.vue", function() {
|
63746
|
+
var newContent = require("!!../../../../node_modules/css-loader/index.js!../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"id\":\"data-v-96b7533e\",\"scoped\":true,\"hasInlineConfig\":false}!../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./App.vue");
|
63663
63747
|
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
|
63664
63748
|
update(newContent);
|
63665
63749
|
});
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vue_delayed_job_dashboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Long Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -62,8 +62,10 @@ files:
|
|
62
62
|
- README.md
|
63
63
|
- Rakefile
|
64
64
|
- lib/vue_delayed_job_dashboard.rb
|
65
|
+
- lib/vue_delayed_job_dashboard/authentication.rb
|
65
66
|
- lib/vue_delayed_job_dashboard/version.rb
|
66
67
|
- lib/vue_delayed_job_dashboard/web/app.rb
|
68
|
+
- lib/vue_delayed_job_dashboard/web/filter.rb
|
67
69
|
- lib/vue_delayed_job_dashboard/web/priv/App.vue
|
68
70
|
- lib/vue_delayed_job_dashboard/web/priv/JobsList.vue
|
69
71
|
- lib/vue_delayed_job_dashboard/web/priv/app.js
|