trackable_tasks 0.1.0 → 0.1.1
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/CHANGELOG +6 -0
- data/Gemfile.lock +64 -71
- data/VERSION +1 -1
- data/app/models/trackable_tasks/task_run.rb +1 -4
- data/app/views/trackable_tasks/task_runs/_chart.html.erb +92 -30
- data/app/views/trackable_tasks/task_runs/stats.html.erb +2 -1
- data/spec/dummy/db/schema.rb +1 -0
- data/spec/dummy/lib/trackable_tasks/debug_task.rb +7 -0
- data/spec/dummy/lib/trackable_tasks/error_task.rb +7 -0
- data/spec/dummy/lib/trackable_tasks/my_task.rb +2 -0
- data/spec/dummy/lib/trackable_tasks/notice_task.rb +7 -0
- data/spec/models/task_run_spec.rb +114 -52
- data/trackable_tasks.gemspec +47 -2
- metadata +160 -3
data/CHANGELOG
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
trackable_tasks (0.0
|
|
4
|
+
trackable_tasks (0.1.0)
|
|
5
5
|
rails (>= 3.0.7)
|
|
6
6
|
trackable_tasks
|
|
7
7
|
|
|
8
8
|
GEM
|
|
9
9
|
remote: http://rubygems.org/
|
|
10
10
|
specs:
|
|
11
|
-
actionmailer (3.
|
|
12
|
-
actionpack (= 3.
|
|
13
|
-
mail (~> 2.
|
|
14
|
-
actionpack (3.
|
|
15
|
-
activemodel (= 3.
|
|
16
|
-
activesupport (= 3.
|
|
11
|
+
actionmailer (3.2.8)
|
|
12
|
+
actionpack (= 3.2.8)
|
|
13
|
+
mail (~> 2.4.4)
|
|
14
|
+
actionpack (3.2.8)
|
|
15
|
+
activemodel (= 3.2.8)
|
|
16
|
+
activesupport (= 3.2.8)
|
|
17
17
|
builder (~> 3.0.0)
|
|
18
18
|
erubis (~> 2.7.0)
|
|
19
|
-
|
|
20
|
-
rack (~> 1.
|
|
21
|
-
rack-cache (~> 1.
|
|
22
|
-
rack-mount (~> 0.8.2)
|
|
19
|
+
journey (~> 1.0.4)
|
|
20
|
+
rack (~> 1.4.0)
|
|
21
|
+
rack-cache (~> 1.2)
|
|
23
22
|
rack-test (~> 0.6.1)
|
|
24
|
-
sprockets (~> 2.
|
|
25
|
-
activemodel (3.
|
|
26
|
-
activesupport (= 3.
|
|
23
|
+
sprockets (~> 2.1.3)
|
|
24
|
+
activemodel (3.2.8)
|
|
25
|
+
activesupport (= 3.2.8)
|
|
27
26
|
builder (~> 3.0.0)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
arel (~> 2.2.3)
|
|
27
|
+
activerecord (3.2.8)
|
|
28
|
+
activemodel (= 3.2.8)
|
|
29
|
+
activesupport (= 3.2.8)
|
|
30
|
+
arel (~> 3.0.2)
|
|
33
31
|
tzinfo (~> 0.3.29)
|
|
34
|
-
activeresource (3.
|
|
35
|
-
activemodel (= 3.
|
|
36
|
-
activesupport (= 3.
|
|
37
|
-
activesupport (3.
|
|
32
|
+
activeresource (3.2.8)
|
|
33
|
+
activemodel (= 3.2.8)
|
|
34
|
+
activesupport (= 3.2.8)
|
|
35
|
+
activesupport (3.2.8)
|
|
36
|
+
i18n (~> 0.6)
|
|
38
37
|
multi_json (~> 1.0)
|
|
38
|
+
addressable (2.3.2)
|
|
39
39
|
archive-tar-minitar (0.5.2)
|
|
40
|
-
arel (
|
|
41
|
-
builder (3.0.
|
|
40
|
+
arel (3.0.2)
|
|
41
|
+
builder (3.0.3)
|
|
42
42
|
capybara (1.1.2)
|
|
43
43
|
mime-types (>= 1.16)
|
|
44
44
|
nokogiri (>= 1.3.3)
|
|
@@ -46,75 +46,69 @@ GEM
|
|
|
46
46
|
rack-test (>= 0.5.4)
|
|
47
47
|
selenium-webdriver (~> 2.0)
|
|
48
48
|
xpath (~> 0.1.4)
|
|
49
|
-
childprocess (0.3.
|
|
50
|
-
ffi (
|
|
51
|
-
ci_reporter (1.7.
|
|
49
|
+
childprocess (0.3.5)
|
|
50
|
+
ffi (>= 1.0.6, ~> 1.0)
|
|
51
|
+
ci_reporter (1.7.3)
|
|
52
52
|
builder (>= 2.1.2)
|
|
53
53
|
columnize (0.3.6)
|
|
54
|
+
cucumber (1.2.1)
|
|
54
55
|
builder (>= 2.1.2)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
gherkin (~> 2.9.0)
|
|
56
|
+
diff-lcs (>= 1.1.3)
|
|
57
|
+
gherkin (~> 2.11.0)
|
|
58
58
|
json (>= 1.4.6)
|
|
59
|
-
term-ansicolor (>= 1.0.6)
|
|
60
|
-
cucumber (1.1.9)
|
|
61
|
-
builder (>= 2.1.2)
|
|
62
|
-
diff-lcs (>= 1.1.2)
|
|
63
|
-
gherkin (~> 2.9.0)
|
|
64
|
-
json (>= 1.4.6)
|
|
65
|
-
term-ansicolor (>= 1.0.6)
|
|
66
59
|
cucumber-rails (1.3.0)
|
|
67
60
|
capybara (>= 1.1.2)
|
|
68
61
|
cucumber (>= 1.1.8)
|
|
69
62
|
nokogiri (>= 1.5.0)
|
|
70
|
-
database_cleaner (0.
|
|
63
|
+
database_cleaner (0.9.1)
|
|
71
64
|
diff-lcs (1.1.3)
|
|
72
65
|
erubis (2.7.0)
|
|
73
|
-
ffi (1.
|
|
74
|
-
gherkin (2.
|
|
66
|
+
ffi (1.1.5)
|
|
67
|
+
gherkin (2.11.5)
|
|
75
68
|
json (>= 1.4.6)
|
|
76
69
|
git (1.2.5)
|
|
77
70
|
hike (1.2.1)
|
|
78
|
-
i18n (0.6.
|
|
71
|
+
i18n (0.6.1)
|
|
79
72
|
jeweler (1.6.4)
|
|
80
73
|
bundler (~> 1.0)
|
|
81
74
|
git (>= 1.2.5)
|
|
82
75
|
rake
|
|
83
|
-
|
|
76
|
+
journey (1.0.4)
|
|
77
|
+
json (1.7.5)
|
|
78
|
+
libwebsocket (0.1.5)
|
|
79
|
+
addressable
|
|
84
80
|
linecache19 (0.5.12)
|
|
85
81
|
ruby_core_source (>= 0.1.4)
|
|
86
|
-
mail (2.
|
|
82
|
+
mail (2.4.4)
|
|
87
83
|
i18n (>= 0.4.0)
|
|
88
84
|
mime-types (~> 1.16)
|
|
89
85
|
treetop (~> 1.4.8)
|
|
90
|
-
mime-types (1.
|
|
91
|
-
multi_json (1.
|
|
92
|
-
nokogiri (1.5.
|
|
86
|
+
mime-types (1.19)
|
|
87
|
+
multi_json (1.3.6)
|
|
88
|
+
nokogiri (1.5.5)
|
|
93
89
|
polyglot (0.3.3)
|
|
94
|
-
rack (1.
|
|
90
|
+
rack (1.4.1)
|
|
95
91
|
rack-cache (1.2)
|
|
96
92
|
rack (>= 0.4)
|
|
97
|
-
rack-mount (0.8.3)
|
|
98
|
-
rack (>= 1.0.0)
|
|
99
93
|
rack-ssl (1.3.2)
|
|
100
94
|
rack
|
|
101
|
-
rack-test (0.6.
|
|
95
|
+
rack-test (0.6.2)
|
|
102
96
|
rack (>= 1.0)
|
|
103
|
-
rails (3.
|
|
104
|
-
actionmailer (= 3.
|
|
105
|
-
actionpack (= 3.
|
|
106
|
-
activerecord (= 3.
|
|
107
|
-
activeresource (= 3.
|
|
108
|
-
activesupport (= 3.
|
|
97
|
+
rails (3.2.8)
|
|
98
|
+
actionmailer (= 3.2.8)
|
|
99
|
+
actionpack (= 3.2.8)
|
|
100
|
+
activerecord (= 3.2.8)
|
|
101
|
+
activeresource (= 3.2.8)
|
|
102
|
+
activesupport (= 3.2.8)
|
|
109
103
|
bundler (~> 1.0)
|
|
110
|
-
railties (= 3.
|
|
111
|
-
railties (3.
|
|
112
|
-
actionpack (= 3.
|
|
113
|
-
activesupport (= 3.
|
|
104
|
+
railties (= 3.2.8)
|
|
105
|
+
railties (3.2.8)
|
|
106
|
+
actionpack (= 3.2.8)
|
|
107
|
+
activesupport (= 3.2.8)
|
|
114
108
|
rack-ssl (~> 1.3.2)
|
|
115
109
|
rake (>= 0.8.7)
|
|
116
110
|
rdoc (~> 3.4)
|
|
117
|
-
thor (
|
|
111
|
+
thor (< 2.0, >= 0.14.6)
|
|
118
112
|
rake (0.9.2.2)
|
|
119
113
|
rcov (0.9.11)
|
|
120
114
|
rdoc (3.12)
|
|
@@ -142,24 +136,23 @@ GEM
|
|
|
142
136
|
ruby-debug-base19 (>= 0.11.19)
|
|
143
137
|
ruby_core_source (0.1.5)
|
|
144
138
|
archive-tar-minitar (>= 0.5.2)
|
|
145
|
-
rubyzip (0.9.
|
|
146
|
-
selenium-webdriver (2.
|
|
139
|
+
rubyzip (0.9.9)
|
|
140
|
+
selenium-webdriver (2.25.0)
|
|
147
141
|
childprocess (>= 0.2.5)
|
|
148
|
-
|
|
142
|
+
libwebsocket (~> 0.1.3)
|
|
149
143
|
multi_json (~> 1.0)
|
|
150
144
|
rubyzip
|
|
151
|
-
sprockets (2.
|
|
145
|
+
sprockets (2.1.3)
|
|
152
146
|
hike (~> 1.2)
|
|
153
147
|
rack (~> 1.0)
|
|
154
148
|
tilt (!= 1.3.0, ~> 1.1)
|
|
155
|
-
sqlite3 (1.3.
|
|
156
|
-
|
|
157
|
-
thor (0.14.6)
|
|
149
|
+
sqlite3 (1.3.6)
|
|
150
|
+
thor (0.16.0)
|
|
158
151
|
tilt (1.3.3)
|
|
159
|
-
treetop (1.4.
|
|
152
|
+
treetop (1.4.11)
|
|
160
153
|
polyglot
|
|
161
154
|
polyglot (>= 0.3.1)
|
|
162
|
-
tzinfo (0.3.
|
|
155
|
+
tzinfo (0.3.33)
|
|
163
156
|
xpath (0.1.4)
|
|
164
157
|
nokogiri (~> 1.3)
|
|
165
158
|
yard (0.6.8)
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.1.
|
|
1
|
+
0.1.1
|
|
@@ -26,7 +26,7 @@ module TrackableTasks
|
|
|
26
26
|
# Restrict task runs by a time period of today, this week or all time
|
|
27
27
|
#
|
|
28
28
|
# @param String timeframe Which tasks to look for, 'all', 'week', or 'today'
|
|
29
|
-
def self.by_timeframe(timeframe)
|
|
29
|
+
def self.by_timeframe(timeframe = "")
|
|
30
30
|
if timeframe =='week'
|
|
31
31
|
this_week
|
|
32
32
|
elsif timeframe == 'all'
|
|
@@ -40,10 +40,7 @@ module TrackableTasks
|
|
|
40
40
|
# @return Hash Percentage of tasks that succeeded today organized by task name
|
|
41
41
|
def self.percentages_by_task_type(timeframe = "")
|
|
42
42
|
task_runs = by_timeframe(timeframe)
|
|
43
|
-
puts task_runs.inspect
|
|
44
|
-
|
|
45
43
|
task_types = task_runs.collect { |tr| tr.task_type }.uniq
|
|
46
|
-
puts task_types.inspect
|
|
47
44
|
|
|
48
45
|
percentages = []
|
|
49
46
|
task_types.each do |task_type|
|
|
@@ -2,31 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
<div id='chart_container' style="width: 800px; height: 800px; background-color: gray; overflow:scroll; position: relative;" >
|
|
4
4
|
<div id='chart' style="min-height: 10000px; position: absolute; top: 0; left: 0;" >
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
5
|
+
<% unless task_runs.empty? %>
|
|
6
|
+
<% task_runs.each_with_index do |task_run, index| %>
|
|
7
|
+
<% run_time = task_run.run_time_or_time_elapsed.to_i > 8000 ? 8000 : task_run.run_time_or_time_elapsed.to_i %>
|
|
8
|
+
<% height = (Math.log(run_time+3)*20).to_int %>
|
|
9
|
+
<%= link_to trackable_tasks_task_run_path(task_run) do %>
|
|
10
|
+
<div
|
|
11
|
+
id="task_run_<%= task_run.id.to_s %>"
|
|
12
|
+
class="task_run"
|
|
13
|
+
data-id="<%= task_run.id.to_s %>"
|
|
14
|
+
data-start_time="<%= task_run.start_time.to_i %>"
|
|
15
|
+
data-run_time="<%= run_time %>"
|
|
16
|
+
data-task_type="<%= task_run.task_type %>"
|
|
17
|
+
style="
|
|
18
|
+
position: absolute;
|
|
19
|
+
min-height: 20px;
|
|
20
|
+
height: <%= height %>px;
|
|
21
|
+
width: 150px;
|
|
22
|
+
padding: 0px 10px;
|
|
23
|
+
margin: 10px;
|
|
24
|
+
background-color: <%= task_run.status_color %>;
|
|
25
|
+
color: black;" >
|
|
26
|
+
<%= task_run.task_type %> -index: <%= task_run.id %>
|
|
27
|
+
</div>
|
|
28
|
+
<% end %>
|
|
27
29
|
<% end %>
|
|
28
30
|
<% end %>
|
|
29
|
-
<% end %>
|
|
30
31
|
</div>
|
|
31
32
|
</div>
|
|
32
33
|
|
|
@@ -58,6 +59,10 @@ function Bin() {
|
|
|
58
59
|
this.has_room_for = function(task_run) {
|
|
59
60
|
for(var i = 0; i < this.task_runs.length; i++) {
|
|
60
61
|
if(this.overlap(this.task_runs[i], task_run)) {
|
|
62
|
+
|
|
63
|
+
var other_top = parseInt(this.task_runs[i].css('top'));
|
|
64
|
+
task_run.css('top', other_top + "px");
|
|
65
|
+
|
|
61
66
|
return false;
|
|
62
67
|
}
|
|
63
68
|
}
|
|
@@ -74,9 +79,9 @@ function Bin() {
|
|
|
74
79
|
|
|
75
80
|
//if a's runtime includes the beginning of b
|
|
76
81
|
//if a's runtime includes the end of b
|
|
77
|
-
if((a_start
|
|
82
|
+
if((a_start <= b_start && a_end >= b_start) || (a_start <= b_end && a_end >= b_end )) {
|
|
78
83
|
return true
|
|
79
|
-
} else if((b_start
|
|
84
|
+
} else if((b_start <= a_start && b_end >= a_start) || (b_start <= a_end && b_end >= a_end )) {
|
|
80
85
|
return true
|
|
81
86
|
} else {
|
|
82
87
|
return false
|
|
@@ -114,21 +119,24 @@ function FirstFitPacker() {
|
|
|
114
119
|
//make a new bin if nothing fits/base case
|
|
115
120
|
var new_bin = new Bin()
|
|
116
121
|
this.bins.push(new_bin)
|
|
122
|
+
new_bin.index = this.bins.length;
|
|
117
123
|
return new_bin
|
|
118
124
|
}
|
|
119
125
|
|
|
120
126
|
this.first_bin_with_duplicate_task_type = function(task_run) {
|
|
121
127
|
for(var i = 0; i < this.bins.length; i++) {
|
|
122
128
|
if(this.bins[i].has_room_and_duplicate_type_for(task_run)) {
|
|
129
|
+
this.bins[i].index = i;
|
|
123
130
|
return this.bins[i]
|
|
124
131
|
}
|
|
125
132
|
}
|
|
126
133
|
return
|
|
127
134
|
}
|
|
128
|
-
|
|
135
|
+
|
|
129
136
|
this.first_bin_with_room = function(task_run) {
|
|
130
137
|
for(var i = 0; i < this.bins.length; i++) {
|
|
131
138
|
if(this.bins[i].has_room_for(task_run)) {
|
|
139
|
+
this.bins[i].index = i;
|
|
132
140
|
return this.bins[i]
|
|
133
141
|
}
|
|
134
142
|
}
|
|
@@ -147,20 +155,74 @@ function ordered_task_runs() {
|
|
|
147
155
|
}
|
|
148
156
|
|
|
149
157
|
$(document).ready(function() {
|
|
158
|
+
var p = new FirstFitPacker();
|
|
159
|
+
var bin_ordering = p.pack(ordered_task_runs());
|
|
160
|
+
align_task_runs_by_bins(bin_ordering)
|
|
161
|
+
|
|
162
|
+
var prev_height = 0;
|
|
163
|
+
var prev_task;
|
|
150
164
|
$('.task_run').each(function() {
|
|
151
165
|
$(this).css('top', (now - $(this).attr("data-start_time")) / 10);
|
|
166
|
+
|
|
167
|
+
$(this).css('top', prev_height + "px");
|
|
168
|
+
|
|
169
|
+
if(typeof prev_task != 'undefined')
|
|
170
|
+
{
|
|
171
|
+
div_overlap(prev_task, $(this));
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
prev_height = 2 + parseInt($(this).css('top')) + parseInt($(this).css('height'));
|
|
175
|
+
prev_task = $(this);
|
|
176
|
+
|
|
152
177
|
});
|
|
153
178
|
});
|
|
154
179
|
|
|
180
|
+
function div_overlap(run_a, run_b) {
|
|
181
|
+
var a_start = parseInt(run_a.attr('data-start_time'))
|
|
182
|
+
var a_end = a_start + parseInt(run_a.attr('data-run_time'))
|
|
183
|
+
var b_start = parseInt(run_b.attr('data-start_time'))
|
|
184
|
+
var b_end = b_start + parseInt(run_b.attr('data-run_time'))
|
|
185
|
+
var a_runtime = a_end - a_start;
|
|
186
|
+
var b_runtime = b_end - b_start;
|
|
187
|
+
|
|
188
|
+
var top_to_change = parseInt(run_b.css('top'));
|
|
189
|
+
var diff;
|
|
190
|
+
|
|
191
|
+
if((a_start <= b_start && a_end >= b_end)) {
|
|
192
|
+
diff = Math.abs(b_start - a_end);
|
|
193
|
+
diff /= a_runtime;
|
|
194
|
+
diff *= parseInt(run_a.css('height'));
|
|
195
|
+
run_a.css('top', (top_to_change-diff) + "px" );
|
|
196
|
+
|
|
197
|
+
} else if((a_start >= b_start && a_end <= b_end)) {
|
|
198
|
+
diff = Math.abs(a_start - b_end);
|
|
199
|
+
diff /= b_runtime;
|
|
200
|
+
diff *= parseInt(run_b.css('height'));
|
|
201
|
+
run_b.css('top', (top_to_change-diff) + "px" );
|
|
202
|
+
|
|
203
|
+
} else if((a_start <= b_start && a_end >= b_start) || (b_start <= a_end && b_end >= a_end )) {
|
|
204
|
+
diff = Math.abs(a_end - b_start);
|
|
205
|
+
diff /= b_runtime;
|
|
206
|
+
diff *= parseInt(run_b.css('height'));
|
|
207
|
+
run_a.css('top', (top_to_change-diff) + "px" );
|
|
208
|
+
|
|
209
|
+
} else if((b_start <= a_start && b_end >= a_start) || (a_start <= b_end && a_end >= b_end )) {
|
|
210
|
+
diff = Math.abs(b_end - a_start);
|
|
211
|
+
diff /= a_runtime;
|
|
212
|
+
diff *= parseInt(run_a.css('height'));
|
|
213
|
+
run_b.css('top', (top_to_change-diff) + "px" );
|
|
214
|
+
|
|
215
|
+
} else {
|
|
216
|
+
return false
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
155
220
|
function align_task_runs_by_bins(bins) {
|
|
156
221
|
for(var i = 0; i < bins.length; i++) {
|
|
157
222
|
for(var j = 0; j < bins[i].task_runs.length; j++) {
|
|
158
|
-
bins[i].task_runs[j].css('left', 190 * i + "px");
|
|
223
|
+
bins[i].task_runs[j].css('left', ((190 * i) +30) + "px");
|
|
159
224
|
}
|
|
160
225
|
}
|
|
161
226
|
}
|
|
162
227
|
|
|
163
|
-
var p = new FirstFitPacker();
|
|
164
|
-
var bin_ordering = p.pack(ordered_task_runs());
|
|
165
|
-
align_task_runs_by_bins(bin_ordering)
|
|
166
228
|
</script>
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
<!--
|
|
1
2
|
<h1>Stats BETA</h1>
|
|
2
3
|
|
|
3
4
|
<h2>Today's Stats</h2>
|
|
@@ -5,6 +6,6 @@
|
|
|
5
6
|
|
|
6
7
|
<h2>This Week's Stats</h2>
|
|
7
8
|
<%= render :partial => "percentages", :locals => {:task_stats => @week_percentages } %>
|
|
8
|
-
|
|
9
|
+
-->
|
|
9
10
|
<h2>Chart</h2>
|
|
10
11
|
<%= render :partial => "chart", :locals => { :task_runs => @task_runs } %>
|
data/spec/dummy/db/schema.rb
CHANGED
|
@@ -36,39 +36,12 @@ describe TaskRun do
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
it "end time should be after start time" do
|
|
39
|
+
@run.start_time = 5.minutes.ago
|
|
40
|
+
@run.end_time = 10.minutes.ago
|
|
41
|
+
@run.should have(1).error_on(:end_time)
|
|
39
42
|
end
|
|
40
43
|
end
|
|
41
44
|
|
|
42
|
-
describe "add_log_text method" do
|
|
43
|
-
before(:each) do
|
|
44
|
-
@run = TaskRun.new()
|
|
45
|
-
@text = "This trackable task is cool"
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "should take one parameter" do
|
|
49
|
-
@run.method(:add_log_text).arity.should == 1
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should add a newline after the input text" do
|
|
53
|
-
@run.add_log_text(@text)
|
|
54
|
-
@run.log_text.should == (@text + "\n")
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should save the string to the log_text if it is empty" do
|
|
58
|
-
@run.add_log_text(@text)
|
|
59
|
-
@run.log_text.should match @text
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
it "should append the string to the text if it is not empty" do
|
|
63
|
-
original_text = "first log text"
|
|
64
|
-
@run.log_text = original_text
|
|
65
|
-
@run.add_log_text(@text)
|
|
66
|
-
@run.log_text.should match original_text
|
|
67
|
-
@run.log_text.should match @text
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
end
|
|
71
|
-
|
|
72
45
|
describe "today scope" do
|
|
73
46
|
before(:each) do
|
|
74
47
|
@today = TrackableTasks::TaskRun.create!(:task_type => "test task", :start_time => 5.hours.ago, :end_time => 3.hours.ago, :success => true)
|
|
@@ -114,6 +87,79 @@ describe TaskRun do
|
|
|
114
87
|
end
|
|
115
88
|
end
|
|
116
89
|
|
|
90
|
+
describe "by_timeframe class method" do
|
|
91
|
+
it "should call this_week if the timeframe is 'week'" do
|
|
92
|
+
TrackableTasks::TaskRun.should_receive(:this_week)
|
|
93
|
+
TrackableTasks::TaskRun.by_timeframe('week')
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "should call all if the timeframe is 'all'" do
|
|
97
|
+
TrackableTasks::TaskRun.should_receive(:all)
|
|
98
|
+
TrackableTasks::TaskRun.by_timeframe('all')
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "should call today if the timeframe is anything else" do
|
|
102
|
+
TrackableTasks::TaskRun.should_receive(:today)
|
|
103
|
+
TrackableTasks::TaskRun.by_timeframe('today')
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "should call today if the timeframe is anything else" do
|
|
107
|
+
TrackableTasks::TaskRun.should_receive(:today)
|
|
108
|
+
TrackableTasks::TaskRun.by_timeframe()
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
describe "percentages_by_task_type class method" do
|
|
113
|
+
before(:each) do
|
|
114
|
+
@run1 = TrackableTasks::TaskRun.create(:start_time => 5.minutes.ago, :end_time => 1.minute.ago, :task_type => "my_task", :success => true)
|
|
115
|
+
@run2 = TrackableTasks::TaskRun.create(:start_time => 5.minutes.ago, :end_time => 1.minute.ago, :task_type => "my_task", :success => false)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it "should call by_timeframe" do
|
|
119
|
+
TrackableTasks::TaskRun.should_receive(:by_timeframe).and_return([])
|
|
120
|
+
TrackableTasks::TaskRun.percentages_by_task_type
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "should return a hash of percentages" do
|
|
124
|
+
output = TrackableTasks::TaskRun.percentages_by_task_type
|
|
125
|
+
output.should == [{
|
|
126
|
+
:name => "my_task",
|
|
127
|
+
:runs => 2,
|
|
128
|
+
:percentage => 50
|
|
129
|
+
}]
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
describe "add_log_text method" do
|
|
134
|
+
before(:each) do
|
|
135
|
+
@run = TaskRun.new()
|
|
136
|
+
@text = "This trackable task is cool"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "should take one parameter" do
|
|
140
|
+
@run.method(:add_log_text).arity.should == 1
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "should add a newline after the input text" do
|
|
144
|
+
@run.add_log_text(@text)
|
|
145
|
+
@run.log_text.should == (@text + "\n")
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "should save the string to the log_text if it is empty" do
|
|
149
|
+
@run.add_log_text(@text)
|
|
150
|
+
@run.log_text.should match @text
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it "should append the string to the text if it is not empty" do
|
|
154
|
+
original_text = "first log text"
|
|
155
|
+
@run.log_text = original_text
|
|
156
|
+
@run.add_log_text(@text)
|
|
157
|
+
@run.log_text.should match original_text
|
|
158
|
+
@run.log_text.should match @text
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
end
|
|
162
|
+
|
|
117
163
|
describe "add_error_text method" do
|
|
118
164
|
before(:each) do
|
|
119
165
|
@run = TaskRun.new()
|
|
@@ -143,28 +189,6 @@ describe TaskRun do
|
|
|
143
189
|
end
|
|
144
190
|
end
|
|
145
191
|
|
|
146
|
-
describe "status_color method" do
|
|
147
|
-
before(:each) do
|
|
148
|
-
@run = TaskRun.new()
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
it "should return green if success is true and error_text is empty (nil)" do
|
|
152
|
-
@run.success = true
|
|
153
|
-
@run.error_text = nil
|
|
154
|
-
@run.status_color.should == "green"
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "should return yellow if success is true but there is error_text" do
|
|
158
|
-
@run.success = true
|
|
159
|
-
@run.error_text = "Error text"
|
|
160
|
-
@run.status_color.should == "yellow"
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it "should return red if success is false" do
|
|
164
|
-
@run.success = false
|
|
165
|
-
@run.status_color.should == "red"
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
192
|
|
|
169
193
|
describe "display_run_time method" do
|
|
170
194
|
before(:each) do
|
|
@@ -189,4 +213,42 @@ describe TaskRun do
|
|
|
189
213
|
end
|
|
190
214
|
end
|
|
191
215
|
|
|
216
|
+
describe "run_time_or_time_elapsed method" do
|
|
217
|
+
before(:each) do
|
|
218
|
+
@run = TrackableTasks::TaskRun.new(:start_time => 5.minutes.ago, :end_time => 3.minutes.ago)
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
it "should return the runtime if end date is set" do
|
|
222
|
+
@run.run_time_or_time_elapsed.should == Time.at(@run.end_time - @run.start_time)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# this one has the potential to fail if ruby is running slowly or it is running in between seconds
|
|
226
|
+
it "should return the time elapsed between the start time and now if end date is not set" do
|
|
227
|
+
@run.end_time = nil
|
|
228
|
+
@run.run_time_or_time_elapsed.to_i.should == (Time.at(Time.now - @run.start_time).to_i)
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
describe "status_color method" do
|
|
233
|
+
before(:each) do
|
|
234
|
+
@run = TaskRun.new()
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
it "should return green if success is true and error_text is empty (nil)" do
|
|
238
|
+
@run.success = true
|
|
239
|
+
@run.error_text = nil
|
|
240
|
+
@run.status_color.should == "green"
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
it "should return yellow if success is true but there is error_text" do
|
|
244
|
+
@run.success = true
|
|
245
|
+
@run.error_text = "Error text"
|
|
246
|
+
@run.status_color.should == "yellow"
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
it "should return red if success is false" do
|
|
250
|
+
@run.success = false
|
|
251
|
+
@run.status_color.should == "red"
|
|
252
|
+
end
|
|
253
|
+
end
|
|
192
254
|
end
|
data/trackable_tasks.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = "trackable_tasks"
|
|
8
|
-
s.version = "0.1.
|
|
8
|
+
s.version = "0.1.1"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Jeremiah Hemphill"]
|
|
12
|
-
s.date = "2012-
|
|
12
|
+
s.date = "2012-10-15"
|
|
13
13
|
s.description = "Adds tracking to rake tasks including error capturing and logging."
|
|
14
14
|
s.email = "jeremiah@cloudspace.com"
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -70,7 +70,10 @@ Gem::Specification.new do |s|
|
|
|
70
70
|
"spec/dummy/features/support/paths.rb",
|
|
71
71
|
"spec/dummy/features/support/selectors.rb",
|
|
72
72
|
"spec/dummy/features/task_run.feature",
|
|
73
|
+
"spec/dummy/lib/trackable_tasks/debug_task.rb",
|
|
74
|
+
"spec/dummy/lib/trackable_tasks/error_task.rb",
|
|
73
75
|
"spec/dummy/lib/trackable_tasks/my_task.rb",
|
|
76
|
+
"spec/dummy/lib/trackable_tasks/notice_task.rb",
|
|
74
77
|
"spec/dummy/public/404.html",
|
|
75
78
|
"spec/dummy/public/422.html",
|
|
76
79
|
"spec/dummy/public/500.html",
|
|
@@ -206,6 +209,20 @@ Gem::Specification.new do |s|
|
|
|
206
209
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.3"])
|
|
207
210
|
s.add_development_dependency(%q<json>, [">= 0"])
|
|
208
211
|
s.add_development_dependency(%q<ci_reporter>, [">= 0"])
|
|
212
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.3"])
|
|
213
|
+
s.add_development_dependency(%q<capybara>, [">= 0.4.0"])
|
|
214
|
+
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
|
215
|
+
s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
|
|
216
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
|
|
217
|
+
s.add_development_dependency(%q<rspec-rails>, ["~> 2.6.1"])
|
|
218
|
+
s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
|
|
219
|
+
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
|
220
|
+
s.add_development_dependency(%q<cucumber-rails>, [">= 0"])
|
|
221
|
+
s.add_development_dependency(%q<database_cleaner>, [">= 0"])
|
|
222
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
223
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.3"])
|
|
224
|
+
s.add_development_dependency(%q<json>, [">= 0"])
|
|
225
|
+
s.add_development_dependency(%q<ci_reporter>, [">= 0"])
|
|
209
226
|
else
|
|
210
227
|
s.add_dependency(%q<trackable_tasks>, [">= 0"])
|
|
211
228
|
s.add_dependency(%q<rails>, [">= 3.0.7"])
|
|
@@ -311,6 +328,20 @@ Gem::Specification.new do |s|
|
|
|
311
328
|
s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
|
|
312
329
|
s.add_dependency(%q<json>, [">= 0"])
|
|
313
330
|
s.add_dependency(%q<ci_reporter>, [">= 0"])
|
|
331
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
|
|
332
|
+
s.add_dependency(%q<capybara>, [">= 0.4.0"])
|
|
333
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
|
334
|
+
s.add_dependency(%q<ruby-debug19>, [">= 0"])
|
|
335
|
+
s.add_dependency(%q<rspec>, ["~> 2.6.0"])
|
|
336
|
+
s.add_dependency(%q<rspec-rails>, ["~> 2.6.1"])
|
|
337
|
+
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
|
338
|
+
s.add_dependency(%q<cucumber>, [">= 0"])
|
|
339
|
+
s.add_dependency(%q<cucumber-rails>, [">= 0"])
|
|
340
|
+
s.add_dependency(%q<database_cleaner>, [">= 0"])
|
|
341
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
342
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
|
|
343
|
+
s.add_dependency(%q<json>, [">= 0"])
|
|
344
|
+
s.add_dependency(%q<ci_reporter>, [">= 0"])
|
|
314
345
|
end
|
|
315
346
|
else
|
|
316
347
|
s.add_dependency(%q<trackable_tasks>, [">= 0"])
|
|
@@ -417,6 +448,20 @@ Gem::Specification.new do |s|
|
|
|
417
448
|
s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
|
|
418
449
|
s.add_dependency(%q<json>, [">= 0"])
|
|
419
450
|
s.add_dependency(%q<ci_reporter>, [">= 0"])
|
|
451
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
|
|
452
|
+
s.add_dependency(%q<capybara>, [">= 0.4.0"])
|
|
453
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
|
454
|
+
s.add_dependency(%q<ruby-debug19>, [">= 0"])
|
|
455
|
+
s.add_dependency(%q<rspec>, ["~> 2.6.0"])
|
|
456
|
+
s.add_dependency(%q<rspec-rails>, ["~> 2.6.1"])
|
|
457
|
+
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
|
458
|
+
s.add_dependency(%q<cucumber>, [">= 0"])
|
|
459
|
+
s.add_dependency(%q<cucumber-rails>, [">= 0"])
|
|
460
|
+
s.add_dependency(%q<database_cleaner>, [">= 0"])
|
|
461
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
462
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.3"])
|
|
463
|
+
s.add_dependency(%q<json>, [">= 0"])
|
|
464
|
+
s.add_dependency(%q<ci_reporter>, [">= 0"])
|
|
420
465
|
end
|
|
421
466
|
end
|
|
422
467
|
|
metadata
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: trackable_tasks
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease:
|
|
5
|
-
version: 0.1.
|
|
5
|
+
version: 0.1.1
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Jeremiah Hemphill
|
|
@@ -10,7 +10,7 @@ autorequire:
|
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
12
|
|
|
13
|
-
date: 2012-
|
|
13
|
+
date: 2012-10-15 00:00:00 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: trackable_tasks
|
|
@@ -1156,6 +1156,160 @@ dependencies:
|
|
|
1156
1156
|
type: :development
|
|
1157
1157
|
prerelease: false
|
|
1158
1158
|
version_requirements: *id104
|
|
1159
|
+
- !ruby/object:Gem::Dependency
|
|
1160
|
+
name: jeweler
|
|
1161
|
+
requirement: &id105 !ruby/object:Gem::Requirement
|
|
1162
|
+
none: false
|
|
1163
|
+
requirements:
|
|
1164
|
+
- - ~>
|
|
1165
|
+
- !ruby/object:Gem::Version
|
|
1166
|
+
version: 1.6.3
|
|
1167
|
+
type: :development
|
|
1168
|
+
prerelease: false
|
|
1169
|
+
version_requirements: *id105
|
|
1170
|
+
- !ruby/object:Gem::Dependency
|
|
1171
|
+
name: capybara
|
|
1172
|
+
requirement: &id106 !ruby/object:Gem::Requirement
|
|
1173
|
+
none: false
|
|
1174
|
+
requirements:
|
|
1175
|
+
- - ">="
|
|
1176
|
+
- !ruby/object:Gem::Version
|
|
1177
|
+
version: 0.4.0
|
|
1178
|
+
type: :development
|
|
1179
|
+
prerelease: false
|
|
1180
|
+
version_requirements: *id106
|
|
1181
|
+
- !ruby/object:Gem::Dependency
|
|
1182
|
+
name: sqlite3
|
|
1183
|
+
requirement: &id107 !ruby/object:Gem::Requirement
|
|
1184
|
+
none: false
|
|
1185
|
+
requirements:
|
|
1186
|
+
- - ">="
|
|
1187
|
+
- !ruby/object:Gem::Version
|
|
1188
|
+
version: "0"
|
|
1189
|
+
type: :development
|
|
1190
|
+
prerelease: false
|
|
1191
|
+
version_requirements: *id107
|
|
1192
|
+
- !ruby/object:Gem::Dependency
|
|
1193
|
+
name: ruby-debug19
|
|
1194
|
+
requirement: &id108 !ruby/object:Gem::Requirement
|
|
1195
|
+
none: false
|
|
1196
|
+
requirements:
|
|
1197
|
+
- - ">="
|
|
1198
|
+
- !ruby/object:Gem::Version
|
|
1199
|
+
version: "0"
|
|
1200
|
+
type: :development
|
|
1201
|
+
prerelease: false
|
|
1202
|
+
version_requirements: *id108
|
|
1203
|
+
- !ruby/object:Gem::Dependency
|
|
1204
|
+
name: rspec
|
|
1205
|
+
requirement: &id109 !ruby/object:Gem::Requirement
|
|
1206
|
+
none: false
|
|
1207
|
+
requirements:
|
|
1208
|
+
- - ~>
|
|
1209
|
+
- !ruby/object:Gem::Version
|
|
1210
|
+
version: 2.6.0
|
|
1211
|
+
type: :development
|
|
1212
|
+
prerelease: false
|
|
1213
|
+
version_requirements: *id109
|
|
1214
|
+
- !ruby/object:Gem::Dependency
|
|
1215
|
+
name: rspec-rails
|
|
1216
|
+
requirement: &id110 !ruby/object:Gem::Requirement
|
|
1217
|
+
none: false
|
|
1218
|
+
requirements:
|
|
1219
|
+
- - ~>
|
|
1220
|
+
- !ruby/object:Gem::Version
|
|
1221
|
+
version: 2.6.1
|
|
1222
|
+
type: :development
|
|
1223
|
+
prerelease: false
|
|
1224
|
+
version_requirements: *id110
|
|
1225
|
+
- !ruby/object:Gem::Dependency
|
|
1226
|
+
name: yard
|
|
1227
|
+
requirement: &id111 !ruby/object:Gem::Requirement
|
|
1228
|
+
none: false
|
|
1229
|
+
requirements:
|
|
1230
|
+
- - ~>
|
|
1231
|
+
- !ruby/object:Gem::Version
|
|
1232
|
+
version: 0.6.0
|
|
1233
|
+
type: :development
|
|
1234
|
+
prerelease: false
|
|
1235
|
+
version_requirements: *id111
|
|
1236
|
+
- !ruby/object:Gem::Dependency
|
|
1237
|
+
name: cucumber
|
|
1238
|
+
requirement: &id112 !ruby/object:Gem::Requirement
|
|
1239
|
+
none: false
|
|
1240
|
+
requirements:
|
|
1241
|
+
- - ">="
|
|
1242
|
+
- !ruby/object:Gem::Version
|
|
1243
|
+
version: "0"
|
|
1244
|
+
type: :development
|
|
1245
|
+
prerelease: false
|
|
1246
|
+
version_requirements: *id112
|
|
1247
|
+
- !ruby/object:Gem::Dependency
|
|
1248
|
+
name: cucumber-rails
|
|
1249
|
+
requirement: &id113 !ruby/object:Gem::Requirement
|
|
1250
|
+
none: false
|
|
1251
|
+
requirements:
|
|
1252
|
+
- - ">="
|
|
1253
|
+
- !ruby/object:Gem::Version
|
|
1254
|
+
version: "0"
|
|
1255
|
+
type: :development
|
|
1256
|
+
prerelease: false
|
|
1257
|
+
version_requirements: *id113
|
|
1258
|
+
- !ruby/object:Gem::Dependency
|
|
1259
|
+
name: database_cleaner
|
|
1260
|
+
requirement: &id114 !ruby/object:Gem::Requirement
|
|
1261
|
+
none: false
|
|
1262
|
+
requirements:
|
|
1263
|
+
- - ">="
|
|
1264
|
+
- !ruby/object:Gem::Version
|
|
1265
|
+
version: "0"
|
|
1266
|
+
type: :development
|
|
1267
|
+
prerelease: false
|
|
1268
|
+
version_requirements: *id114
|
|
1269
|
+
- !ruby/object:Gem::Dependency
|
|
1270
|
+
name: bundler
|
|
1271
|
+
requirement: &id115 !ruby/object:Gem::Requirement
|
|
1272
|
+
none: false
|
|
1273
|
+
requirements:
|
|
1274
|
+
- - ~>
|
|
1275
|
+
- !ruby/object:Gem::Version
|
|
1276
|
+
version: 1.0.0
|
|
1277
|
+
type: :development
|
|
1278
|
+
prerelease: false
|
|
1279
|
+
version_requirements: *id115
|
|
1280
|
+
- !ruby/object:Gem::Dependency
|
|
1281
|
+
name: jeweler
|
|
1282
|
+
requirement: &id116 !ruby/object:Gem::Requirement
|
|
1283
|
+
none: false
|
|
1284
|
+
requirements:
|
|
1285
|
+
- - ~>
|
|
1286
|
+
- !ruby/object:Gem::Version
|
|
1287
|
+
version: 1.6.3
|
|
1288
|
+
type: :development
|
|
1289
|
+
prerelease: false
|
|
1290
|
+
version_requirements: *id116
|
|
1291
|
+
- !ruby/object:Gem::Dependency
|
|
1292
|
+
name: json
|
|
1293
|
+
requirement: &id117 !ruby/object:Gem::Requirement
|
|
1294
|
+
none: false
|
|
1295
|
+
requirements:
|
|
1296
|
+
- - ">="
|
|
1297
|
+
- !ruby/object:Gem::Version
|
|
1298
|
+
version: "0"
|
|
1299
|
+
type: :development
|
|
1300
|
+
prerelease: false
|
|
1301
|
+
version_requirements: *id117
|
|
1302
|
+
- !ruby/object:Gem::Dependency
|
|
1303
|
+
name: ci_reporter
|
|
1304
|
+
requirement: &id118 !ruby/object:Gem::Requirement
|
|
1305
|
+
none: false
|
|
1306
|
+
requirements:
|
|
1307
|
+
- - ">="
|
|
1308
|
+
- !ruby/object:Gem::Version
|
|
1309
|
+
version: "0"
|
|
1310
|
+
type: :development
|
|
1311
|
+
prerelease: false
|
|
1312
|
+
version_requirements: *id118
|
|
1159
1313
|
description: Adds tracking to rake tasks including error capturing and logging.
|
|
1160
1314
|
email: jeremiah@cloudspace.com
|
|
1161
1315
|
executables: []
|
|
@@ -1219,7 +1373,10 @@ files:
|
|
|
1219
1373
|
- spec/dummy/features/support/paths.rb
|
|
1220
1374
|
- spec/dummy/features/support/selectors.rb
|
|
1221
1375
|
- spec/dummy/features/task_run.feature
|
|
1376
|
+
- spec/dummy/lib/trackable_tasks/debug_task.rb
|
|
1377
|
+
- spec/dummy/lib/trackable_tasks/error_task.rb
|
|
1222
1378
|
- spec/dummy/lib/trackable_tasks/my_task.rb
|
|
1379
|
+
- spec/dummy/lib/trackable_tasks/notice_task.rb
|
|
1223
1380
|
- spec/dummy/public/404.html
|
|
1224
1381
|
- spec/dummy/public/422.html
|
|
1225
1382
|
- spec/dummy/public/500.html
|
|
@@ -1253,7 +1410,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
1253
1410
|
requirements:
|
|
1254
1411
|
- - ">="
|
|
1255
1412
|
- !ruby/object:Gem::Version
|
|
1256
|
-
hash:
|
|
1413
|
+
hash: 3508837051035824591
|
|
1257
1414
|
segments:
|
|
1258
1415
|
- 0
|
|
1259
1416
|
version: "0"
|