rakeleak 0.1.0 → 0.2.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/README.md +3 -3
- data/app/assets/javascripts/rakeleak/tasks.js +19 -12
- data/app/assets/stylesheets/rakeleak/tasks.css +16 -4
- data/app/controllers/rakeleak/tasks_controller.rb +4 -6
- data/app/views/rakeleak/tasks/_arg.html.erb +1 -0
- data/app/views/rakeleak/tasks/_task.html.erb +11 -5
- data/lib/rakeleak/version.rb +1 -1
- data/lib/rakeleak.rb +14 -1
- data/test/dummy/lib/tasks/with_args.rake +6 -0
- data/test/dummy/log/development.log +10836 -0
- data/test/dummy/log/test.log +6424 -0
- data/test/functional/rakeleak/tasks_controller_test.rb +17 -6
- data/test/rakeleak_test.rb +35 -2
- metadata +5 -50
- data/test/dummy/tmp/cache/assets/C5E/440/sprockets%2Fba31529ca20206e11215433ee169332b +0 -0
- data/test/dummy/tmp/cache/assets/C9B/4A0/sprockets%2F798d65ca17a72755d92723797da97d24 +0 -0
- data/test/dummy/tmp/cache/assets/CB9/3A0/sprockets%2F16a64c486f8333fe04529e91e5a6635b +0 -0
- data/test/dummy/tmp/cache/assets/CE8/240/sprockets%2F777dce4d696645611f0ae85347dc00b7 +0 -0
- data/test/dummy/tmp/cache/assets/CEE/A10/sprockets%2F5f66bc32b0a17ed0847c99b4747989c0 +0 -0
- data/test/dummy/tmp/cache/assets/CEF/D60/sprockets%2F8ce62194b0c88c58b75f30703867fbc7 +0 -0
- data/test/dummy/tmp/cache/assets/D02/6E0/sprockets%2F5db2ebf4409582ca15d8da402374e431 +0 -0
- data/test/dummy/tmp/cache/assets/D0D/370/sprockets%2Feda0592655569205d3738f32c4bdadf0 +0 -0
- data/test/dummy/tmp/cache/assets/D27/240/sprockets%2Fd28e9af8999b4f679b650105a606b9bf +0 -0
- data/test/dummy/tmp/cache/assets/D7B/DD0/sprockets%2F6f2905cdb5eed396c60140fbe94c9e66 +0 -0
- data/test/dummy/tmp/cache/assets/D8B/7C0/sprockets%2F5ef63b3be3860b7a1d2f1edbd1b08025 +0 -0
- data/test/dummy/tmp/cache/assets/D91/470/sprockets%2F80012ff0ade705b8eed3f36fa5ed5121 +0 -0
- data/test/dummy/tmp/cache/assets/D9C/D90/sprockets%2F383b39d58a0ed61af597d1ebdd2e01e5 +0 -0
- data/test/dummy/tmp/cache/assets/D9E/9F0/sprockets%2F3f8503a3d9bfee0922e881e8a32fccb2 +0 -0
- data/test/dummy/tmp/cache/assets/DB1/A30/sprockets%2F2cfcbef803fb9c40270c8846f6f983ef +0 -0
- data/test/dummy/tmp/cache/assets/DC5/D40/sprockets%2F7cf78f2e7bf164a14df03fcd0d0bd900 +0 -0
- data/test/dummy/tmp/cache/assets/DC8/880/sprockets%2F2ecbee3d3fdfbc150f65064a19ed9225 +0 -0
- data/test/dummy/tmp/cache/assets/DC9/730/sprockets%2F09cb8bd8fb2b5a925a9ef047cac34a53 +0 -0
- data/test/dummy/tmp/cache/assets/DD4/990/sprockets%2F2f127f8c0ebf8d16939a0efc14fe09ec +0 -0
- data/test/dummy/tmp/cache/assets/DDB/EA0/sprockets%2F2395acf962c33e59dc8655cafeab8e3d +0 -0
- data/test/dummy/tmp/cache/assets/DEA/BE0/sprockets%2F352f037cde13c0e2e244d1dcaa5fde6c +0 -0
- data/test/dummy/tmp/cache/assets/DEB/510/sprockets%2F99aed1df3af79a258def18d7db49993c +0 -0
- data/test/dummy/tmp/cache/assets/E29/770/sprockets%2F3f8c60e8d26acb84da06d9aaac3cc7e5 +0 -0
- data/test/dummy/tmp/cache/assets/E5A/A10/sprockets%2Ff9ffe2fc2fc392bab3c1361efae80ad6 +0 -0
data/README.md
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
# Rakeleak [](https://travis-ci.org/donderom/rakeleak)
|
1
|
+
# Rakeleak [](https://travis-ci.org/donderom/rakeleak) [](http://badge.fury.io/rb/rakeleak)
|
2
2
|
|
3
3
|
Helps you search & run your Rake tasks from Rails (3.2+) application. It:
|
4
4
|
|
5
5
|
* Shows all the available Rake tasks;
|
6
6
|
* Allows you to search by task name and description;
|
7
7
|
* And run any task you want (see TODO for more details);
|
8
|
+
* See the task output if any;
|
8
9
|
* If the task was failed you can see the error message and even stacktrace.
|
9
10
|
|
10
11
|
## Getting Started
|
@@ -27,12 +28,11 @@ Just go to ```http://localhost:3000/rakeleak/tasks```.
|
|
27
28
|
|
28
29
|
This is how it feels in action:
|
29
30
|

|
31
|
+

|
30
32
|
|
31
33
|
## TODO
|
32
34
|
|
33
35
|
* Passing parameters (now it's useful only for tasks without arguments)
|
34
|
-
* Showing log maybe?
|
35
|
-
* Or capturing $STDOUT?
|
36
36
|
* Remove explicit mounting?
|
37
37
|
|
38
38
|
## License
|
@@ -24,30 +24,37 @@ $(function() {
|
|
24
24
|
var leftArrow = "<img src=\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAANElEQVQYV2NkYGD4D8SEACMjVAU+xWA1MIUgNjbFcHlkheiKUeTQFcIUY4hjU4jVY0NBIQA2XwULPNHkwgAAAABJRU5ErkJggg==\'>";
|
25
25
|
var downArrow = "<img src=\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAANklEQVQYV2NkYGD4D8SMQIwXgBSAFIIAXsXICvEqRleIUzE2hVgVk20iTg+R7GuiwpFQWIPlAYx9CQtnBpznAAAAAElFTkSuQmCC\'>";
|
26
26
|
|
27
|
-
$(".task .
|
28
|
-
var
|
27
|
+
$(".task .result").click(function() {
|
28
|
+
var output = $(this).parent().find(".output");
|
29
29
|
var arrow = $(this).find("img");
|
30
30
|
var slideSpeed = "fast";
|
31
|
-
if (
|
32
|
-
|
31
|
+
if (output.is(":visible")) {
|
32
|
+
output.slideUp(slideSpeed);
|
33
33
|
arrow.replaceWith(downArrow);
|
34
34
|
} else {
|
35
|
-
|
35
|
+
output.slideDown(slideSpeed);
|
36
36
|
arrow.replaceWith(leftArrow);
|
37
37
|
}
|
38
38
|
});
|
39
39
|
|
40
40
|
$("form.button_to").bind("ajax:error", function(xhr, data, status) {
|
41
41
|
var response = $.parseJSON(data.responseText);
|
42
|
-
var errorMsg = "<div class='msg'>" + downArrow + response.
|
42
|
+
var errorMsg = "<div class='msg'>" + downArrow + response.msg + "</div>";
|
43
43
|
var task = $(this).closest(".task");
|
44
|
-
task.addClass("
|
45
|
-
task.find(".
|
46
|
-
task.find(".
|
44
|
+
task.removeClass("success").addClass("error");
|
45
|
+
task.find(".result").html(errorMsg).removeClass("success").addClass("error");
|
46
|
+
task.find(".output").html("<pre>" + response.stacktrace + "</pre>");
|
47
47
|
}).bind("ajax:success", function(xhr, data, status) {
|
48
48
|
var task = $(this).closest(".task");
|
49
|
-
task.removeClass("
|
50
|
-
task.find(".
|
51
|
-
task.find(".
|
49
|
+
task.removeClass("error");
|
50
|
+
var result = task.find(".result").empty().removeClass("error").removeClass("success");
|
51
|
+
var output = task.find(".output").empty();
|
52
|
+
|
53
|
+
if (data.output.length > 0) {
|
54
|
+
task.addClass("success");
|
55
|
+
result.html("<div class='msg'>" + downArrow + "Click here to see the task output</div>");
|
56
|
+
result.addClass("success");
|
57
|
+
output.html("<pre>" + data.output + "</pre>");
|
58
|
+
}
|
52
59
|
});
|
53
60
|
});
|
@@ -81,10 +81,14 @@ input[type="search"] {
|
|
81
81
|
display: block;
|
82
82
|
}
|
83
83
|
|
84
|
-
.
|
84
|
+
.error {
|
85
85
|
border: solid 2px #ee6066;
|
86
86
|
}
|
87
87
|
|
88
|
+
.success {
|
89
|
+
border: solid 2px #bfe7ab;
|
90
|
+
}
|
91
|
+
|
88
92
|
.task .name {
|
89
93
|
color: #593534;
|
90
94
|
font-size: 1.2em;
|
@@ -103,9 +107,8 @@ input[type="search"] {
|
|
103
107
|
font-family: 'Open Sans';
|
104
108
|
}
|
105
109
|
|
106
|
-
.task .
|
110
|
+
.task .result {
|
107
111
|
color: #fff;
|
108
|
-
background-color: #ee6066 !important;
|
109
112
|
padding: 0px !important;
|
110
113
|
font-family: 'Open Sans';
|
111
114
|
font-size: 0.9em;
|
@@ -114,7 +117,16 @@ input[type="search"] {
|
|
114
117
|
cursor: pointer;
|
115
118
|
}
|
116
119
|
|
117
|
-
.task .
|
120
|
+
.task .result.error {
|
121
|
+
background-color: #ee6066 !important;
|
122
|
+
}
|
123
|
+
|
124
|
+
.task .result.success {
|
125
|
+
color: #595959;
|
126
|
+
background-color: #bfe7ab !important;
|
127
|
+
}
|
128
|
+
|
129
|
+
.task .output {
|
118
130
|
display: none;
|
119
131
|
overflow: auto;
|
120
132
|
}
|
@@ -9,14 +9,12 @@ module Rakeleak
|
|
9
9
|
def run
|
10
10
|
respond_to do |format|
|
11
11
|
begin
|
12
|
-
Rakeleak.run(params[:id])
|
13
|
-
format.json { render json:
|
12
|
+
output = Rakeleak.run(params[:id])
|
13
|
+
format.json { render json: { output: output } }
|
14
14
|
rescue => e
|
15
15
|
response = {
|
16
|
-
|
17
|
-
|
18
|
-
stacktrace: e.backtrace.join("\n").to_s
|
19
|
-
}
|
16
|
+
msg: e.to_s,
|
17
|
+
stacktrace: e.backtrace.join("\n").to_s
|
20
18
|
}
|
21
19
|
format.json { render json: response, status: :forbidden }
|
22
20
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<input type="text" name="<%= arg %>" placeholder="<%= arg %>">
|
@@ -1,7 +1,13 @@
|
|
1
1
|
<div class="task">
|
2
|
-
<div class="name"
|
3
|
-
|
4
|
-
|
5
|
-
<div
|
6
|
-
|
2
|
+
<div class="name">
|
3
|
+
<%= task.name %>
|
4
|
+
</div>
|
5
|
+
<div>
|
6
|
+
<%= button_to "Run", rakeleak.run_task_path(task.name), remote: true, method: :post, disable_with: 'Running...', class: 'button' %>
|
7
|
+
</div>
|
8
|
+
<div class="comment">
|
9
|
+
<%= task.comment %>
|
10
|
+
</div>
|
11
|
+
<div class="result"></div>
|
12
|
+
<div class="output"></div>
|
7
13
|
</div>
|
data/lib/rakeleak/version.rb
CHANGED
data/lib/rakeleak.rb
CHANGED
@@ -7,6 +7,19 @@ module Rakeleak
|
|
7
7
|
|
8
8
|
def self.run(task)
|
9
9
|
Rake::Task[task].reenable
|
10
|
-
Rake::Task[task].invoke
|
10
|
+
capture_stdout { Rake::Task[task].invoke }
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.capture_stdout
|
14
|
+
stdout = $stdout
|
15
|
+
trap = StringIO.new
|
16
|
+
$stdout = trap
|
17
|
+
$stdout.sync = true
|
18
|
+
|
19
|
+
yield if block_given?
|
20
|
+
|
21
|
+
trap.string
|
22
|
+
ensure
|
23
|
+
$stdout = stdout
|
11
24
|
end
|
12
25
|
end
|