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.
Files changed (38) hide show
  1. data/README.md +3 -3
  2. data/app/assets/javascripts/rakeleak/tasks.js +19 -12
  3. data/app/assets/stylesheets/rakeleak/tasks.css +16 -4
  4. data/app/controllers/rakeleak/tasks_controller.rb +4 -6
  5. data/app/views/rakeleak/tasks/_arg.html.erb +1 -0
  6. data/app/views/rakeleak/tasks/_task.html.erb +11 -5
  7. data/lib/rakeleak/version.rb +1 -1
  8. data/lib/rakeleak.rb +14 -1
  9. data/test/dummy/lib/tasks/with_args.rake +6 -0
  10. data/test/dummy/log/development.log +10836 -0
  11. data/test/dummy/log/test.log +6424 -0
  12. data/test/functional/rakeleak/tasks_controller_test.rb +17 -6
  13. data/test/rakeleak_test.rb +35 -2
  14. metadata +5 -50
  15. data/test/dummy/tmp/cache/assets/C5E/440/sprockets%2Fba31529ca20206e11215433ee169332b +0 -0
  16. data/test/dummy/tmp/cache/assets/C9B/4A0/sprockets%2F798d65ca17a72755d92723797da97d24 +0 -0
  17. data/test/dummy/tmp/cache/assets/CB9/3A0/sprockets%2F16a64c486f8333fe04529e91e5a6635b +0 -0
  18. data/test/dummy/tmp/cache/assets/CE8/240/sprockets%2F777dce4d696645611f0ae85347dc00b7 +0 -0
  19. data/test/dummy/tmp/cache/assets/CEE/A10/sprockets%2F5f66bc32b0a17ed0847c99b4747989c0 +0 -0
  20. data/test/dummy/tmp/cache/assets/CEF/D60/sprockets%2F8ce62194b0c88c58b75f30703867fbc7 +0 -0
  21. data/test/dummy/tmp/cache/assets/D02/6E0/sprockets%2F5db2ebf4409582ca15d8da402374e431 +0 -0
  22. data/test/dummy/tmp/cache/assets/D0D/370/sprockets%2Feda0592655569205d3738f32c4bdadf0 +0 -0
  23. data/test/dummy/tmp/cache/assets/D27/240/sprockets%2Fd28e9af8999b4f679b650105a606b9bf +0 -0
  24. data/test/dummy/tmp/cache/assets/D7B/DD0/sprockets%2F6f2905cdb5eed396c60140fbe94c9e66 +0 -0
  25. data/test/dummy/tmp/cache/assets/D8B/7C0/sprockets%2F5ef63b3be3860b7a1d2f1edbd1b08025 +0 -0
  26. data/test/dummy/tmp/cache/assets/D91/470/sprockets%2F80012ff0ade705b8eed3f36fa5ed5121 +0 -0
  27. data/test/dummy/tmp/cache/assets/D9C/D90/sprockets%2F383b39d58a0ed61af597d1ebdd2e01e5 +0 -0
  28. data/test/dummy/tmp/cache/assets/D9E/9F0/sprockets%2F3f8503a3d9bfee0922e881e8a32fccb2 +0 -0
  29. data/test/dummy/tmp/cache/assets/DB1/A30/sprockets%2F2cfcbef803fb9c40270c8846f6f983ef +0 -0
  30. data/test/dummy/tmp/cache/assets/DC5/D40/sprockets%2F7cf78f2e7bf164a14df03fcd0d0bd900 +0 -0
  31. data/test/dummy/tmp/cache/assets/DC8/880/sprockets%2F2ecbee3d3fdfbc150f65064a19ed9225 +0 -0
  32. data/test/dummy/tmp/cache/assets/DC9/730/sprockets%2F09cb8bd8fb2b5a925a9ef047cac34a53 +0 -0
  33. data/test/dummy/tmp/cache/assets/DD4/990/sprockets%2F2f127f8c0ebf8d16939a0efc14fe09ec +0 -0
  34. data/test/dummy/tmp/cache/assets/DDB/EA0/sprockets%2F2395acf962c33e59dc8655cafeab8e3d +0 -0
  35. data/test/dummy/tmp/cache/assets/DEA/BE0/sprockets%2F352f037cde13c0e2e244d1dcaa5fde6c +0 -0
  36. data/test/dummy/tmp/cache/assets/DEB/510/sprockets%2F99aed1df3af79a258def18d7db49993c +0 -0
  37. data/test/dummy/tmp/cache/assets/E29/770/sprockets%2F3f8c60e8d26acb84da06d9aaac3cc7e5 +0 -0
  38. data/test/dummy/tmp/cache/assets/E5A/A10/sprockets%2Ff9ffe2fc2fc392bab3c1361efae80ad6 +0 -0
data/README.md CHANGED
@@ -1,10 +1,11 @@
1
- # Rakeleak [![Build Status](https://travis-ci.org/donderom/rakeleak.png?branch=master)](https://travis-ci.org/donderom/rakeleak)
1
+ # Rakeleak [![Build Status](https://travis-ci.org/donderom/rakeleak.png?branch=master)](https://travis-ci.org/donderom/rakeleak) [![Gem Version](https://badge.fury.io/rb/rakeleak.png)](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
  ![Rakeleak in Action](http://f.cl.ly/items/2C0C2A3r0a2c2L0F162K/rakeleak.png)
31
+ ![Rakeleak in Action](http://f.cl.ly/items/1z1y3y1d3E2i1x3l3C1O/rakeleak2.png)
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 .error").click(function() {
28
- var stacktrace = $(this).parent().find(".stacktrace");
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 (stacktrace.is(":visible")) {
32
- stacktrace.slideUp(slideSpeed);
31
+ if (output.is(":visible")) {
32
+ output.slideUp(slideSpeed);
33
33
  arrow.replaceWith(downArrow);
34
34
  } else {
35
- stacktrace.slideDown(slideSpeed);
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.error.msg + "</div>";
42
+ var errorMsg = "<div class='msg'>" + downArrow + response.msg + "</div>";
43
43
  var task = $(this).closest(".task");
44
- task.addClass("errortask");
45
- task.find(".error").html(errorMsg);
46
- task.find(".stacktrace").html("<pre>" + response.error.stacktrace + "</pre>");
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("errortask");
50
- task.find(".error").empty();
51
- task.find(".stacktrace").empty();
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
- .errortask {
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 .error {
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 .stacktrace {
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: true }
12
+ output = Rakeleak.run(params[:id])
13
+ format.json { render json: { output: output } }
14
14
  rescue => e
15
15
  response = {
16
- error: {
17
- msg: e.to_s,
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"><%= task.name %></div>
3
- <div><%= button_to "Run", rakeleak.run_task_path(task.name), remote: true, method: :post, disable_with: 'Running...', class: 'button' %></div>
4
- <div class="comment"><%= task.comment %></div>
5
- <div class="error"></div>
6
- <div class="stacktrace"></div>
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>
@@ -1,3 +1,3 @@
1
1
  module Rakeleak
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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
@@ -0,0 +1,6 @@
1
+ namespace :rakeleak do
2
+ desc 'Simple task with 2 arguments'
3
+ task :with_args, [:arg1, :arg2] => :environment do |_, args|
4
+ puts args
5
+ end
6
+ end