sidekiq 4.0.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sidekiq might be problematic. Click here for more details.

Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/{Contributing.md → .github/contributing.md} +0 -0
  3. data/.github/issue_template.md +9 -0
  4. data/.gitignore +1 -0
  5. data/.travis.yml +12 -10
  6. data/4.0-Upgrade.md +4 -1
  7. data/5.0-Upgrade.md +56 -0
  8. data/COMM-LICENSE +1 -1
  9. data/Changes.md +236 -7
  10. data/Ent-Changes.md +111 -3
  11. data/Gemfile +7 -6
  12. data/Pro-3.0-Upgrade.md +5 -7
  13. data/Pro-Changes.md +162 -5
  14. data/README.md +31 -21
  15. data/Rakefile +5 -2
  16. data/bin/sidekiq +0 -1
  17. data/bin/sidekiqctl +1 -1
  18. data/bin/sidekiqload +15 -33
  19. data/code_of_conduct.md +50 -0
  20. data/lib/generators/sidekiq/templates/worker_spec.rb.erb +2 -2
  21. data/lib/generators/sidekiq/templates/worker_test.rb.erb +6 -6
  22. data/lib/sidekiq.rb +46 -21
  23. data/lib/sidekiq/api.rb +94 -30
  24. data/lib/sidekiq/cli.rb +38 -16
  25. data/lib/sidekiq/client.rb +32 -26
  26. data/lib/sidekiq/core_ext.rb +14 -0
  27. data/lib/sidekiq/delay.rb +21 -0
  28. data/lib/sidekiq/exception_handler.rb +2 -1
  29. data/lib/sidekiq/extensions/action_mailer.rb +1 -0
  30. data/lib/sidekiq/extensions/active_record.rb +1 -0
  31. data/lib/sidekiq/extensions/class_methods.rb +1 -0
  32. data/lib/sidekiq/extensions/generic_proxy.rb +8 -1
  33. data/lib/sidekiq/fetch.rb +2 -1
  34. data/lib/sidekiq/job_logger.rb +27 -0
  35. data/lib/sidekiq/job_retry.rb +235 -0
  36. data/lib/sidekiq/launcher.rb +42 -33
  37. data/lib/sidekiq/logging.rb +3 -1
  38. data/lib/sidekiq/manager.rb +9 -4
  39. data/lib/sidekiq/middleware/chain.rb +1 -0
  40. data/lib/sidekiq/middleware/i18n.rb +1 -0
  41. data/lib/sidekiq/middleware/server/active_record.rb +9 -0
  42. data/lib/sidekiq/paginator.rb +1 -0
  43. data/lib/sidekiq/processor.rb +73 -19
  44. data/lib/sidekiq/rails.rb +47 -25
  45. data/lib/sidekiq/redis_connection.rb +14 -3
  46. data/lib/sidekiq/scheduled.rb +12 -1
  47. data/lib/sidekiq/testing.rb +65 -13
  48. data/lib/sidekiq/testing/inline.rb +1 -0
  49. data/lib/sidekiq/util.rb +3 -15
  50. data/lib/sidekiq/version.rb +2 -1
  51. data/lib/sidekiq/web.rb +120 -184
  52. data/lib/sidekiq/web/action.rb +89 -0
  53. data/lib/sidekiq/web/application.rb +331 -0
  54. data/lib/sidekiq/{web_helpers.rb → web/helpers.rb} +57 -27
  55. data/lib/sidekiq/web/router.rb +100 -0
  56. data/lib/sidekiq/worker.rb +52 -11
  57. data/sidekiq.gemspec +12 -7
  58. data/web/assets/images/{status-sd8051fd480.png → status.png} +0 -0
  59. data/web/assets/javascripts/application.js +24 -20
  60. data/web/assets/javascripts/dashboard.js +11 -13
  61. data/web/assets/stylesheets/application-rtl.css +246 -0
  62. data/web/assets/stylesheets/application.css +362 -5
  63. data/web/assets/stylesheets/bootstrap-rtl.min.css +9 -0
  64. data/web/assets/stylesheets/bootstrap.css +4 -8
  65. data/web/locales/ar.yml +80 -0
  66. data/web/locales/cs.yml +11 -1
  67. data/web/locales/de.yml +1 -1
  68. data/web/locales/en.yml +2 -0
  69. data/web/locales/fa.yml +80 -0
  70. data/web/locales/fr.yml +21 -12
  71. data/web/locales/he.yml +79 -0
  72. data/web/locales/ja.yml +19 -10
  73. data/web/locales/ru.yml +3 -0
  74. data/web/locales/ur.yml +80 -0
  75. data/web/views/_footer.erb +2 -2
  76. data/web/views/_job_info.erb +5 -1
  77. data/web/views/_nav.erb +2 -2
  78. data/web/views/_paging.erb +1 -1
  79. data/web/views/busy.erb +14 -9
  80. data/web/views/dashboard.erb +5 -5
  81. data/web/views/dead.erb +1 -1
  82. data/web/views/layout.erb +13 -5
  83. data/web/views/morgue.erb +16 -12
  84. data/web/views/queue.erb +11 -11
  85. data/web/views/queues.erb +3 -3
  86. data/web/views/retries.erb +15 -13
  87. data/web/views/retry.erb +2 -2
  88. data/web/views/scheduled.erb +4 -4
  89. data/web/views/scheduled_job_info.erb +1 -1
  90. metadata +97 -148
  91. data/lib/sidekiq/middleware/server/logging.rb +0 -40
  92. data/lib/sidekiq/middleware/server/retry_jobs.rb +0 -206
  93. data/test/config.yml +0 -9
  94. data/test/env_based_config.yml +0 -11
  95. data/test/fake_env.rb +0 -0
  96. data/test/fixtures/en.yml +0 -2
  97. data/test/helper.rb +0 -74
  98. data/test/test_actors.rb +0 -137
  99. data/test/test_api.rb +0 -494
  100. data/test/test_cli.rb +0 -335
  101. data/test/test_client.rb +0 -194
  102. data/test/test_exception_handler.rb +0 -55
  103. data/test/test_extensions.rb +0 -126
  104. data/test/test_fetch.rb +0 -49
  105. data/test/test_launcher.rb +0 -80
  106. data/test/test_logging.rb +0 -34
  107. data/test/test_manager.rb +0 -49
  108. data/test/test_middleware.rb +0 -157
  109. data/test/test_processor.rb +0 -200
  110. data/test/test_rails.rb +0 -21
  111. data/test/test_redis_connection.rb +0 -126
  112. data/test/test_retry.rb +0 -325
  113. data/test/test_scheduled.rb +0 -114
  114. data/test/test_scheduling.rb +0 -49
  115. data/test/test_sidekiq.rb +0 -99
  116. data/test/test_testing.rb +0 -142
  117. data/test/test_testing_fake.rb +0 -331
  118. data/test/test_testing_inline.rb +0 -93
  119. data/test/test_util.rb +0 -16
  120. data/test/test_web.rb +0 -608
  121. data/test/test_web_helpers.rb +0 -53
  122. data/web/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  123. data/web/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  124. data/web/assets/images/status/active.png +0 -0
  125. data/web/assets/images/status/idle.png +0 -0
  126. data/web/assets/javascripts/locales/README.md +0 -27
  127. data/web/assets/javascripts/locales/jquery.timeago.ar.js +0 -96
  128. data/web/assets/javascripts/locales/jquery.timeago.bg.js +0 -18
  129. data/web/assets/javascripts/locales/jquery.timeago.bs.js +0 -49
  130. data/web/assets/javascripts/locales/jquery.timeago.ca.js +0 -18
  131. data/web/assets/javascripts/locales/jquery.timeago.cs.js +0 -18
  132. data/web/assets/javascripts/locales/jquery.timeago.cy.js +0 -20
  133. data/web/assets/javascripts/locales/jquery.timeago.da.js +0 -18
  134. data/web/assets/javascripts/locales/jquery.timeago.de.js +0 -18
  135. data/web/assets/javascripts/locales/jquery.timeago.el.js +0 -18
  136. data/web/assets/javascripts/locales/jquery.timeago.en-short.js +0 -20
  137. data/web/assets/javascripts/locales/jquery.timeago.en.js +0 -20
  138. data/web/assets/javascripts/locales/jquery.timeago.es.js +0 -18
  139. data/web/assets/javascripts/locales/jquery.timeago.et.js +0 -18
  140. data/web/assets/javascripts/locales/jquery.timeago.fa.js +0 -22
  141. data/web/assets/javascripts/locales/jquery.timeago.fi.js +0 -28
  142. data/web/assets/javascripts/locales/jquery.timeago.fr-short.js +0 -16
  143. data/web/assets/javascripts/locales/jquery.timeago.fr.js +0 -17
  144. data/web/assets/javascripts/locales/jquery.timeago.he.js +0 -18
  145. data/web/assets/javascripts/locales/jquery.timeago.hr.js +0 -49
  146. data/web/assets/javascripts/locales/jquery.timeago.hu.js +0 -18
  147. data/web/assets/javascripts/locales/jquery.timeago.hy.js +0 -18
  148. data/web/assets/javascripts/locales/jquery.timeago.id.js +0 -18
  149. data/web/assets/javascripts/locales/jquery.timeago.it.js +0 -16
  150. data/web/assets/javascripts/locales/jquery.timeago.ja.js +0 -19
  151. data/web/assets/javascripts/locales/jquery.timeago.ko.js +0 -17
  152. data/web/assets/javascripts/locales/jquery.timeago.lt.js +0 -20
  153. data/web/assets/javascripts/locales/jquery.timeago.mk.js +0 -20
  154. data/web/assets/javascripts/locales/jquery.timeago.nl.js +0 -20
  155. data/web/assets/javascripts/locales/jquery.timeago.no.js +0 -18
  156. data/web/assets/javascripts/locales/jquery.timeago.pl.js +0 -31
  157. data/web/assets/javascripts/locales/jquery.timeago.pt-br.js +0 -16
  158. data/web/assets/javascripts/locales/jquery.timeago.pt.js +0 -16
  159. data/web/assets/javascripts/locales/jquery.timeago.ro.js +0 -18
  160. data/web/assets/javascripts/locales/jquery.timeago.rs.js +0 -49
  161. data/web/assets/javascripts/locales/jquery.timeago.ru.js +0 -34
  162. data/web/assets/javascripts/locales/jquery.timeago.sk.js +0 -18
  163. data/web/assets/javascripts/locales/jquery.timeago.sl.js +0 -44
  164. data/web/assets/javascripts/locales/jquery.timeago.sv.js +0 -18
  165. data/web/assets/javascripts/locales/jquery.timeago.th.js +0 -20
  166. data/web/assets/javascripts/locales/jquery.timeago.tr.js +0 -16
  167. data/web/assets/javascripts/locales/jquery.timeago.uk.js +0 -34
  168. data/web/assets/javascripts/locales/jquery.timeago.uz.js +0 -19
  169. data/web/assets/javascripts/locales/jquery.timeago.zh-cn.js +0 -20
  170. data/web/assets/javascripts/locales/jquery.timeago.zh-tw.js +0 -20
  171. data/web/views/_poll_js.erb +0 -5
@@ -53,10 +53,10 @@
53
53
  </ul>
54
54
  <ul class="nav navbar-nav navbar-right navbar-livereload" data-navbar="static">
55
55
  <li>
56
- <div class="poll-wrapper pull-right">
56
+ <div class="poll-wrapper">
57
57
  <%= erb :_poll_link %>
58
58
  <% if Sidekiq::Web.app_url %>
59
- <a class="btn btn-inverse" href="<%= Sidekiq::Web.app_url %>">Back to App</a>
59
+ <a class="btn btn-inverse" href="<%= Sidekiq::Web.app_url %>"><%= t('BackToApp') %></a>
60
60
  <% end %>
61
61
  </div>
62
62
  </li>
@@ -1,5 +1,5 @@
1
1
  <% if @total_size > @count %>
2
- <ul class="pagination pull-right">
2
+ <ul class="pagination pull-right flip">
3
3
  <li class="<%= 'disabled' if @current_page == 1 %>">
4
4
  <a href="<%= url %>?page=1">&laquo;</a>
5
5
  </li>
@@ -1,13 +1,13 @@
1
1
  <div class="row header">
2
- <div class="col-sm-8 pull-left">
2
+ <div class="col-sm-8 pull-left flip">
3
3
  <h3><%= t('Processes') %></h3>
4
4
  </div>
5
- <div class="col-sm-4 pull-right">
6
- <form method="POST" style="margin-top: 20px; margin-bottom: 10px;">
5
+ <div class="col-sm-4 pull-right flip">
6
+ <form method="POST" class="warning-messages">
7
7
  <%= csrf_tag %>
8
- <div class="btn-group pull-right">
9
- <button class="btn btn-warn" type="submit" name="quiet" value="1"><%= t('QuietAll') %></button>
10
- <button class="btn btn-danger" type="submit" name="stop" value="1"><%= t('StopAll') %></button>
8
+ <div class="btn-group pull-right flip">
9
+ <button class="btn btn-warn" type="submit" name="quiet" value="1" data-confirm="<%= t('AreYouSure') %>"><%= t('QuietAll') %></button>
10
+ <button class="btn btn-danger" type="submit" name="stop" value="1" data-confirm="<%= t('AreYouSure') %>"><%= t('StopAll') %></button>
11
11
  </div>
12
12
  </form>
13
13
  </div>
@@ -24,12 +24,15 @@
24
24
  </thead>
25
25
  <% processes.each do |process| %>
26
26
  <tr>
27
- <td width="50%">
27
+ <td class="box">
28
28
  <%= "#{process['hostname']}:#{process['pid']}" %>
29
29
  <span class="label label-success"><%= process.tag %></span>
30
30
  <% process.labels.each do |label| %>
31
31
  <span class="label label-info"><%= label %></span>
32
32
  <% end %>
33
+ <% if process.stopping? %>
34
+ <span class="label label-danger">Quiet</span>
35
+ <% end %>
33
36
  <br>
34
37
  <b><%= "#{t('Queues')}: " %></b>
35
38
  <%= process['queues'] * ", " %>
@@ -38,11 +41,13 @@
38
41
  <td><%= process['concurrency'] %></td>
39
42
  <td><%= process['busy'] %></td>
40
43
  <td>
41
- <div class="btn-group pull-right">
44
+ <div class="btn-group pull-right flip">
42
45
  <form method="POST">
43
46
  <%= csrf_tag %>
44
47
  <input type="hidden" name="identity" value="<%= process['identity'] %>"/>
45
- <button class="btn btn-warn" type="submit" name="quiet" value="1"><%= t('Quiet') %></button>
48
+ <% unless process.stopping? %>
49
+ <button class="btn btn-warn" type="submit" name="quiet" value="1"><%= t('Quiet') %></button>
50
+ <% end %>
46
51
  <button class="btn btn-danger" type="submit" name="stop" value="1"><%= t('Stop') %></button>
47
52
  </form>
48
53
  </div>
@@ -7,11 +7,11 @@
7
7
  <span class="dot"></span>
8
8
  </span>
9
9
  </h3>
10
- <div class="interval-slider">
10
+ <div class="interval-slider ltr">
11
11
  <span class="interval-slider-label"><%= t('PollingInterval') %>:</span>
12
- <span class="current-interval">2 sec</span>
12
+ <span class="current-interval">5 sec</span>
13
13
  <br/>
14
- <input type="range" min="2000" max="20000" step="1000" value="2000"/>
14
+ <input type="range" min="2000" max="20000" step="1000" value="5000"/>
15
15
  </div>
16
16
  </div>
17
17
 
@@ -58,14 +58,14 @@
58
58
  </div>
59
59
  <% end %>
60
60
 
61
- <% if @redis_info.fetch("used_memory_human", nil) %>
61
+ <% if @redis_info.fetch("used_memory_human", nil) %>
62
62
  <div class="stat">
63
63
  <h3 class="used_memory_human"><%= @redis_info.fetch("used_memory_human") %></h3>
64
64
  <p><%= t('MemoryUsage') %></p>
65
65
  </div>
66
66
  <% end %>
67
67
 
68
- <% if @redis_info.fetch("used_memory_peak_human", nil) %>
68
+ <% if @redis_info.fetch("used_memory_peak_human", nil) %>
69
69
  <div class="stat">
70
70
  <h3 class="used_memory_peak_human"><%= @redis_info.fetch("used_memory_peak_human") %></h3>
71
71
  <p><%= t('PeakMemoryUsage') %></p>
@@ -1,4 +1,4 @@
1
- <%= erb :_job_info, :locals => {:job => @dead, :type => :dead} %>
1
+ <%= erb :_job_info, locals: { job: @dead, type: :dead } %>
2
2
 
3
3
  <h3><%= t('Error') %></h3>
4
4
  <div class="table_container">
@@ -1,17 +1,26 @@
1
1
  <!doctype html>
2
- <html>
2
+ <html dir="<%= text_direction %>">
3
3
  <head>
4
4
  <title><%= environment_title_prefix %><%= Sidekiq::NAME %></title>
5
+ <meta charset="utf8" />
5
6
  <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
+
6
8
  <link href="<%= root_path %>stylesheets/bootstrap.css" media="screen" rel="stylesheet" type="text/css" />
9
+ <% if rtl? %>
10
+ <link href="<%= root_path %>stylesheets/bootstrap-rtl.min.css" media="screen" rel="stylesheet" type="text/css"/>
11
+ <% end %>
12
+
7
13
  <link href="<%= root_path %>stylesheets/application.css" media="screen" rel="stylesheet" type="text/css" />
14
+ <% if rtl? %>
15
+ <link href="<%= root_path %>stylesheets/application-rtl.css" media="screen" rel="stylesheet" type="text/css" />
16
+ <% end %>
17
+
8
18
  <link rel="shortcut icon" type="image/ico" href="<%= root_path %>images/favicon.ico" />
9
19
  <script type="text/javascript" src="<%= root_path %>javascripts/application.js"></script>
10
- <script type="text/javascript" src="<%= root_path %>javascripts/locales/jquery.timeago.<%= locale %>.js"></script>
11
20
  <meta name="google" content="notranslate" />
12
21
  <%= display_custom_head %>
13
22
  </head>
14
- <body class="admin">
23
+ <body class="admin" data-poll-path="<%= poll_path %>" data-locale="<%= locale %>">
15
24
  <%= erb :_nav %>
16
25
  <div id="page">
17
26
  <div class="container">
@@ -26,7 +35,6 @@
26
35
  </div>
27
36
  </div>
28
37
  </div>
29
- <%= erb :_footer %>
30
- <%= erb :_poll_js %>
38
+ <%= erb :_footer %>
31
39
  </body>
32
40
  </html>
@@ -4,7 +4,7 @@
4
4
  </div>
5
5
  <% if @dead.size > 0 && @total_size > @count %>
6
6
  <div class="col-sm-4">
7
- <%= erb :_paging, :locals => { :url => "#{root_path}morgue" } %>
7
+ <%= erb :_paging, locals: { url: "#{root_path}morgue" } %>
8
8
  </div>
9
9
  <% end %>
10
10
  <%= filtering('dead') %>
@@ -17,7 +17,7 @@
17
17
  <table class="table table-striped table-bordered table-white">
18
18
  <thead>
19
19
  <tr>
20
- <th width="20px" class="table-checkbox">
20
+ <th class="table-checkbox checkbox-column">
21
21
  <label>
22
22
  <input type="checkbox" class="check_all" />
23
23
  </label>
@@ -47,24 +47,28 @@
47
47
  <div class="args"><%= display_args(entry.display_args) %></div>
48
48
  </td>
49
49
  <td>
50
+ <% if entry.error? %>
50
51
  <div><%= h truncate("#{entry['error_class']}: #{entry['error_message']}", 200) %></div>
52
+ <% end %>
51
53
  </td>
52
54
  </tr>
53
55
  <% end %>
54
56
  </table>
55
57
  </div>
56
- <input class="btn btn-primary btn-xs pull-left" type="submit" name="retry" value="<%= t('RetryNow') %>" />
57
- <input class="btn btn-danger btn-xs pull-left" type="submit" name="delete" value="<%= t('Delete') %>" />
58
+ <input class="btn btn-primary btn-xs pull-left flip" type="submit" name="retry" value="<%= t('RetryNow') %>" />
59
+ <input class="btn btn-danger btn-xs pull-left flip" type="submit" name="delete" value="<%= t('Delete') %>" />
58
60
  </form>
59
61
 
60
- <form action="<%= root_path %>morgue/all/delete" method="post">
61
- <%= csrf_tag %>
62
- <input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
63
- </form>
64
- <form action="<%= root_path %>morgue/all/retry" method="post">
65
- <%= csrf_tag %>
66
- <input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
67
- </form>
62
+ <% unfiltered? do %>
63
+ <form action="<%= root_path %>morgue/all/delete" method="post">
64
+ <%= csrf_tag %>
65
+ <input class="btn btn-danger btn-xs pull-right flip" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
66
+ </form>
67
+ <form action="<%= root_path %>morgue/all/retry" method="post">
68
+ <%= csrf_tag %>
69
+ <input class="btn btn-danger btn-xs pull-right flip" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
70
+ </form>
71
+ <% end %>
68
72
 
69
73
  <% else %>
70
74
  <div class="alert alert-success"><%= t('NoDeadJobsFound') %></div>
@@ -7,8 +7,8 @@
7
7
  <% end %>
8
8
  </h3>
9
9
  </div>
10
- <div class="col-sm-4 pull-right">
11
- <%= erb :_paging, :locals => { :url => "#{root_path}queues/#{@name}" } %>
10
+ <div class="col-sm-4 pull-right flip">
11
+ <%= erb :_paging, locals: { url: "#{root_path}queues/#{CGI.escape(@name)}" } %>
12
12
  </div>
13
13
  </header>
14
14
  <div class="table_container">
@@ -22,19 +22,19 @@
22
22
  <tr>
23
23
  <td><%= h(msg.display_class) %></td>
24
24
  <td>
25
- <% a = msg.display_args.inspect %>
26
- <% if a.size > 100 %>
27
- <%= h(msg.display_args.inspect[0..100]) + "... " %>
28
- <button data-toggle="collapse" data-target="#worker_<%= index %>" class="btn btn-default btn-xs"><%= t('ShowAll') %></button>
29
- <div class="toggle" id="worker_<%= index %>" style="display: none;"><%= h(msg.display_args) %></div>
25
+ <% a = msg.display_args %>
26
+ <% if a.inspect.size > 100 %>
27
+ <span class="worker_<%= index %>"><%= h(a.inspect[0..100]) + "... " %></span>
28
+ <button data-toggle="collapse" data-target=".worker_<%= index %>" class="btn btn-default btn-xs"><%= t('ShowAll') %></button>
29
+ <div class="toggle worker_<%= index %>"><%= display_args(a) %></div>
30
30
  <% else %>
31
- <%= h(msg.display_args) %>
31
+ <%= display_args(msg.display_args) %>
32
32
  <% end %>
33
33
  </td>
34
34
  <td>
35
- <form action="<%= root_path %>queues/<%= @name %>/delete" method="post">
35
+ <form action="<%= root_path %>queues/<%= CGI.escape(@name) %>/delete" method="post">
36
36
  <%= csrf_tag %>
37
- <input name="key_val" value="<%= h Sidekiq.dump_json(msg.item) %>" type="hidden" />
37
+ <input name="key_val" value="<%= h msg.value %>" type="hidden" />
38
38
  <input class="btn btn-danger btn-xs" type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSure') %>" />
39
39
  </form>
40
40
  </td>
@@ -42,4 +42,4 @@
42
42
  <% end %>
43
43
  </table>
44
44
  </div>
45
- <%= erb :_paging, :locals => { :url => "#{root_path}queues/#{@name}" } %>
45
+ <%= erb :_paging, locals: { url: "#{root_path}queues/#{@name}" } %>
@@ -10,14 +10,14 @@
10
10
  <% @queues.each do |queue| %>
11
11
  <tr>
12
12
  <td>
13
- <a href="<%= root_path %>queues/<%= queue.name %>"><%= queue.name %></a>
13
+ <a href="<%= root_path %>queues/<%= CGI.escape(queue.name) %>"><%= h queue.name %></a>
14
14
  <% if queue.paused? %>
15
15
  <span class="label label-danger"><%= t('Paused') %></span>
16
16
  <% end %>
17
17
  </td>
18
18
  <td><%= number_with_delimiter(queue.size) %> </td>
19
- <td width="20%">
20
- <form action="<%=root_path %>queues/<%= queue.name %>" method="post">
19
+ <td class="delete-confirm">
20
+ <form action="<%=root_path %>queues/<%= CGI.escape(queue.name) %>" method="post">
21
21
  <%= csrf_tag %>
22
22
  <input class="btn btn-danger btn-xs" type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSureDeleteQueue', :queue => h(queue.name)) %>" />
23
23
  </form>
@@ -4,7 +4,7 @@
4
4
  </div>
5
5
  <% if @retries.size > 0 && @total_size > @count %>
6
6
  <div class="col-sm-4">
7
- <%= erb :_paging, :locals => { :url => "#{root_path}retries" } %>
7
+ <%= erb :_paging, locals: { url: "#{root_path}retries" } %>
8
8
  </div>
9
9
  <% end %>
10
10
  <%= filtering('retries') %>
@@ -17,7 +17,7 @@
17
17
  <table class="table table-striped table-bordered table-white">
18
18
  <thead>
19
19
  <tr>
20
- <th width="20px" class="table-checkbox">
20
+ <th class="table-checkbox checkbox-column">
21
21
  <label>
22
22
  <input type="checkbox" class="check_all" />
23
23
  </label>
@@ -55,19 +55,21 @@
55
55
  <% end %>
56
56
  </table>
57
57
  </div>
58
- <input class="btn btn-primary btn-xs pull-left" type="submit" name="retry" value="<%= t('RetryNow') %>" />
59
- <input class="btn btn-danger btn-xs pull-left" type="submit" name="delete" value="<%= t('Delete') %>" />
60
- <input class="btn btn-danger btn-xs pull-left" type="submit" name="kill" value="<%= t('Kill') %>" />
58
+ <input class="btn btn-primary btn-xs pull-left flip" type="submit" name="retry" value="<%= t('RetryNow') %>" />
59
+ <input class="btn btn-danger btn-xs pull-left flip" type="submit" name="delete" value="<%= t('Delete') %>" />
60
+ <input class="btn btn-danger btn-xs pull-left flip" type="submit" name="kill" value="<%= t('Kill') %>" />
61
61
  </form>
62
62
 
63
- <form action="<%= root_path %>retries/all/delete" method="post">
64
- <%= csrf_tag %>
65
- <input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
66
- </form>
67
- <form action="<%= root_path %>retries/all/retry" method="post">
68
- <%= csrf_tag %>
69
- <input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
70
- </form>
63
+ <% unfiltered? do %>
64
+ <form action="<%= root_path %>retries/all/delete" method="post">
65
+ <%= csrf_tag %>
66
+ <input class="btn btn-danger btn-xs pull-right flip" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
67
+ </form>
68
+ <form action="<%= root_path %>retries/all/retry" method="post">
69
+ <%= csrf_tag %>
70
+ <input class="btn btn-danger btn-xs pull-right flip" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
71
+ </form>
72
+ <% end %>
71
73
 
72
74
  <% else %>
73
75
  <div class="alert alert-success"><%= t('NoRetriesFound') %></div>
@@ -1,4 +1,4 @@
1
- <%= erb :_job_info, :locals => {:job => @retry, :type => :retry} %>
1
+ <%= erb :_job_info, locals: { job: @retry, type: :retry } %>
2
2
 
3
3
  <h3><%= t('Error') %></h3>
4
4
  <div class="table_container">
@@ -7,7 +7,7 @@
7
7
  <tr>
8
8
  <th><%= t('ErrorClass') %></th>
9
9
  <td>
10
- <code><%= @retry['error_class'] %></code>
10
+ <code><%= h @retry['error_class'] %></code>
11
11
  </td>
12
12
  </tr>
13
13
  <tr>
@@ -4,7 +4,7 @@
4
4
  </div>
5
5
  <% if @scheduled.size > 0 && @total_size > @count %>
6
6
  <div class="col-sm-4">
7
- <%= erb :_paging, :locals => { :url => "#{root_path}scheduled" } %>
7
+ <%= erb :_paging, locals: { url: "#{root_path}scheduled" } %>
8
8
  </div>
9
9
  <% end %>
10
10
  <%= filtering('scheduled') %>
@@ -18,7 +18,7 @@
18
18
  <table class="table table-striped table-bordered table-white">
19
19
  <thead>
20
20
  <tr>
21
- <th width="20px">
21
+ <th class="checkbox-column">
22
22
  <input type="checkbox" class="check_all" />
23
23
  </th>
24
24
  <th><%= t('When') %></th>
@@ -46,8 +46,8 @@
46
46
  <% end %>
47
47
  </table>
48
48
  </div>
49
- <input class="btn btn-danger pull-right" type="submit" name="delete" value="<%= t('Delete') %>" />
50
- <input class="btn btn-danger pull-right" type="submit" name="add_to_queue" value="<%= t('AddToQueue') %>" />
49
+ <input class="btn btn-danger pull-right flip" type="submit" name="delete" value="<%= t('Delete') %>" />
50
+ <input class="btn btn-danger pull-right flip" type="submit" name="add_to_queue" value="<%= t('AddToQueue') %>" />
51
51
  </form>
52
52
  <% else %>
53
53
  <div class="alert alert-success"><%= t('NoScheduledFound') %></div>
@@ -1,4 +1,4 @@
1
- <%= erb :_job_info, :locals => {:job => @job, :type => :scheduled} %>
1
+ <%= erb :_job_info, locals: { job: @job, type: :scheduled } %>
2
2
 
3
3
  <form class="form-horizontal" action="<%= root_path %>scheduled/<%= job_params(@job, @job.score) %>" method="post">
4
4
  <%= csrf_tag %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Perham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-16 00:00:00.000000000 Z
11
+ date: 2017-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: '3.3'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 3.2.1
22
+ version: 3.3.3
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '3.2'
29
+ version: '3.3'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 3.2.1
32
+ version: 3.3.3
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: connection_pool
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -51,7 +51,7 @@ dependencies:
51
51
  - !ruby/object:Gem::Version
52
52
  version: 2.2.0
53
53
  - !ruby/object:Gem::Dependency
54
- name: json
54
+ name: concurrent-ruby
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
@@ -65,19 +65,19 @@ dependencies:
65
65
  - !ruby/object:Gem::Version
66
66
  version: '1.0'
67
67
  - !ruby/object:Gem::Dependency
68
- name: concurrent-ruby
68
+ name: rack-protection
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - "~>"
71
+ - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: '1.0'
73
+ version: 1.5.0
74
74
  type: :runtime
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
- - - "~>"
78
+ - - ">="
79
79
  - !ruby/object:Gem::Version
80
- version: '1.0'
80
+ version: 1.5.0
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: redis-namespace
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -99,79 +99,123 @@ dependencies:
99
99
  - !ruby/object:Gem::Version
100
100
  version: 1.5.2
101
101
  - !ruby/object:Gem::Dependency
102
- name: sinatra
102
+ name: minitest
103
103
  requirement: !ruby/object:Gem::Requirement
104
104
  requirements:
105
105
  - - "~>"
106
106
  - !ruby/object:Gem::Version
107
- version: '1.4'
107
+ version: '5.10'
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 1.4.6
110
+ version: 5.10.1
111
111
  type: :development
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '1.4'
117
+ version: '5.10'
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
- version: 1.4.6
120
+ version: 5.10.1
121
121
  - !ruby/object:Gem::Dependency
122
- name: minitest
122
+ name: rake
123
123
  requirement: !ruby/object:Gem::Requirement
124
124
  requirements:
125
125
  - - "~>"
126
126
  - !ruby/object:Gem::Version
127
- version: '5.7'
127
+ version: '10.0'
128
+ type: :development
129
+ prerelease: false
130
+ version_requirements: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: '10.0'
135
+ - !ruby/object:Gem::Dependency
136
+ name: rails
137
+ requirement: !ruby/object:Gem::Requirement
138
+ requirements:
128
139
  - - ">="
129
140
  - !ruby/object:Gem::Version
130
- version: 5.7.0
141
+ version: 3.2.0
131
142
  type: :development
132
143
  prerelease: false
133
144
  version_requirements: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: 3.2.0
149
+ - !ruby/object:Gem::Dependency
150
+ name: capybara
151
+ requirement: !ruby/object:Gem::Requirement
134
152
  requirements:
135
153
  - - "~>"
136
154
  - !ruby/object:Gem::Version
137
- version: '5.7'
138
- - - ">="
155
+ version: '2.11'
156
+ type: :development
157
+ prerelease: false
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - "~>"
139
161
  - !ruby/object:Gem::Version
140
- version: 5.7.0
162
+ version: '2.11'
141
163
  - !ruby/object:Gem::Dependency
142
- name: rake
164
+ name: poltergeist
143
165
  requirement: !ruby/object:Gem::Requirement
144
166
  requirements:
145
167
  - - "~>"
146
168
  - !ruby/object:Gem::Version
147
- version: '10.0'
169
+ version: '1.12'
148
170
  type: :development
149
171
  prerelease: false
150
172
  version_requirements: !ruby/object:Gem::Requirement
151
173
  requirements:
152
174
  - - "~>"
153
175
  - !ruby/object:Gem::Version
154
- version: '10.0'
176
+ version: '1.12'
155
177
  - !ruby/object:Gem::Dependency
156
- name: rails
178
+ name: percy-capybara
157
179
  requirement: !ruby/object:Gem::Requirement
158
180
  requirements:
159
181
  - - "~>"
160
182
  - !ruby/object:Gem::Version
161
- version: '4'
162
- - - ">="
183
+ version: '2.3'
184
+ type: :development
185
+ prerelease: false
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - "~>"
163
189
  - !ruby/object:Gem::Version
164
- version: 3.2.0
190
+ version: '2.3'
191
+ - !ruby/object:Gem::Dependency
192
+ name: timecop
193
+ requirement: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - "~>"
196
+ - !ruby/object:Gem::Version
197
+ version: '0.8'
165
198
  type: :development
166
199
  prerelease: false
167
200
  version_requirements: !ruby/object:Gem::Requirement
168
201
  requirements:
169
202
  - - "~>"
170
203
  - !ruby/object:Gem::Version
171
- version: '4'
172
- - - ">="
204
+ version: '0.8'
205
+ - !ruby/object:Gem::Dependency
206
+ name: mocha
207
+ requirement: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - "~>"
173
210
  - !ruby/object:Gem::Version
174
- version: 3.2.0
211
+ version: '1.1'
212
+ type: :development
213
+ prerelease: false
214
+ version_requirements: !ruby/object:Gem::Requirement
215
+ requirements:
216
+ - - "~>"
217
+ - !ruby/object:Gem::Version
218
+ version: '1.1'
175
219
  description: Simple, efficient background processing for Ruby.
176
220
  email:
177
221
  - mperham@gmail.com
@@ -181,13 +225,15 @@ executables:
181
225
  extensions: []
182
226
  extra_rdoc_files: []
183
227
  files:
228
+ - ".github/contributing.md"
229
+ - ".github/issue_template.md"
184
230
  - ".gitignore"
185
231
  - ".travis.yml"
186
232
  - 3.0-Upgrade.md
187
233
  - 4.0-Upgrade.md
234
+ - 5.0-Upgrade.md
188
235
  - COMM-LICENSE
189
236
  - Changes.md
190
- - Contributing.md
191
237
  - Ent-Changes.md
192
238
  - Gemfile
193
239
  - LICENSE
@@ -199,6 +245,7 @@ files:
199
245
  - bin/sidekiq
200
246
  - bin/sidekiqctl
201
247
  - bin/sidekiqload
248
+ - code_of_conduct.md
202
249
  - lib/generators/sidekiq/templates/worker.rb.erb
203
250
  - lib/generators/sidekiq/templates/worker_spec.rb.erb
204
251
  - lib/generators/sidekiq/templates/worker_test.rb.erb
@@ -208,20 +255,21 @@ files:
208
255
  - lib/sidekiq/cli.rb
209
256
  - lib/sidekiq/client.rb
210
257
  - lib/sidekiq/core_ext.rb
258
+ - lib/sidekiq/delay.rb
211
259
  - lib/sidekiq/exception_handler.rb
212
260
  - lib/sidekiq/extensions/action_mailer.rb
213
261
  - lib/sidekiq/extensions/active_record.rb
214
262
  - lib/sidekiq/extensions/class_methods.rb
215
263
  - lib/sidekiq/extensions/generic_proxy.rb
216
264
  - lib/sidekiq/fetch.rb
265
+ - lib/sidekiq/job_logger.rb
266
+ - lib/sidekiq/job_retry.rb
217
267
  - lib/sidekiq/launcher.rb
218
268
  - lib/sidekiq/logging.rb
219
269
  - lib/sidekiq/manager.rb
220
270
  - lib/sidekiq/middleware/chain.rb
221
271
  - lib/sidekiq/middleware/i18n.rb
222
272
  - lib/sidekiq/middleware/server/active_record.rb
223
- - lib/sidekiq/middleware/server/logging.rb
224
- - lib/sidekiq/middleware/server/retry_jobs.rb
225
273
  - lib/sidekiq/paginator.rb
226
274
  - lib/sidekiq/processor.rb
227
275
  - lib/sidekiq/rails.rb
@@ -232,101 +280,31 @@ files:
232
280
  - lib/sidekiq/util.rb
233
281
  - lib/sidekiq/version.rb
234
282
  - lib/sidekiq/web.rb
235
- - lib/sidekiq/web_helpers.rb
283
+ - lib/sidekiq/web/action.rb
284
+ - lib/sidekiq/web/application.rb
285
+ - lib/sidekiq/web/helpers.rb
286
+ - lib/sidekiq/web/router.rb
236
287
  - lib/sidekiq/worker.rb
237
288
  - sidekiq.gemspec
238
- - test/config.yml
239
- - test/env_based_config.yml
240
- - test/fake_env.rb
241
- - test/fixtures/en.yml
242
- - test/helper.rb
243
- - test/test_actors.rb
244
- - test/test_api.rb
245
- - test/test_cli.rb
246
- - test/test_client.rb
247
- - test/test_exception_handler.rb
248
- - test/test_extensions.rb
249
- - test/test_fetch.rb
250
- - test/test_launcher.rb
251
- - test/test_logging.rb
252
- - test/test_manager.rb
253
- - test/test_middleware.rb
254
- - test/test_processor.rb
255
- - test/test_rails.rb
256
- - test/test_redis_connection.rb
257
- - test/test_retry.rb
258
- - test/test_scheduled.rb
259
- - test/test_scheduling.rb
260
- - test/test_sidekiq.rb
261
- - test/test_testing.rb
262
- - test/test_testing_fake.rb
263
- - test/test_testing_inline.rb
264
- - test/test_util.rb
265
- - test/test_web.rb
266
- - test/test_web_helpers.rb
267
- - web/assets/images/bootstrap/glyphicons-halflings-white.png
268
- - web/assets/images/bootstrap/glyphicons-halflings.png
269
289
  - web/assets/images/favicon.ico
270
290
  - web/assets/images/logo.png
271
- - web/assets/images/status-sd8051fd480.png
272
- - web/assets/images/status/active.png
273
- - web/assets/images/status/idle.png
291
+ - web/assets/images/status.png
274
292
  - web/assets/javascripts/application.js
275
293
  - web/assets/javascripts/dashboard.js
276
- - web/assets/javascripts/locales/README.md
277
- - web/assets/javascripts/locales/jquery.timeago.ar.js
278
- - web/assets/javascripts/locales/jquery.timeago.bg.js
279
- - web/assets/javascripts/locales/jquery.timeago.bs.js
280
- - web/assets/javascripts/locales/jquery.timeago.ca.js
281
- - web/assets/javascripts/locales/jquery.timeago.cs.js
282
- - web/assets/javascripts/locales/jquery.timeago.cy.js
283
- - web/assets/javascripts/locales/jquery.timeago.da.js
284
- - web/assets/javascripts/locales/jquery.timeago.de.js
285
- - web/assets/javascripts/locales/jquery.timeago.el.js
286
- - web/assets/javascripts/locales/jquery.timeago.en-short.js
287
- - web/assets/javascripts/locales/jquery.timeago.en.js
288
- - web/assets/javascripts/locales/jquery.timeago.es.js
289
- - web/assets/javascripts/locales/jquery.timeago.et.js
290
- - web/assets/javascripts/locales/jquery.timeago.fa.js
291
- - web/assets/javascripts/locales/jquery.timeago.fi.js
292
- - web/assets/javascripts/locales/jquery.timeago.fr-short.js
293
- - web/assets/javascripts/locales/jquery.timeago.fr.js
294
- - web/assets/javascripts/locales/jquery.timeago.he.js
295
- - web/assets/javascripts/locales/jquery.timeago.hr.js
296
- - web/assets/javascripts/locales/jquery.timeago.hu.js
297
- - web/assets/javascripts/locales/jquery.timeago.hy.js
298
- - web/assets/javascripts/locales/jquery.timeago.id.js
299
- - web/assets/javascripts/locales/jquery.timeago.it.js
300
- - web/assets/javascripts/locales/jquery.timeago.ja.js
301
- - web/assets/javascripts/locales/jquery.timeago.ko.js
302
- - web/assets/javascripts/locales/jquery.timeago.lt.js
303
- - web/assets/javascripts/locales/jquery.timeago.mk.js
304
- - web/assets/javascripts/locales/jquery.timeago.nl.js
305
- - web/assets/javascripts/locales/jquery.timeago.no.js
306
- - web/assets/javascripts/locales/jquery.timeago.pl.js
307
- - web/assets/javascripts/locales/jquery.timeago.pt-br.js
308
- - web/assets/javascripts/locales/jquery.timeago.pt.js
309
- - web/assets/javascripts/locales/jquery.timeago.ro.js
310
- - web/assets/javascripts/locales/jquery.timeago.rs.js
311
- - web/assets/javascripts/locales/jquery.timeago.ru.js
312
- - web/assets/javascripts/locales/jquery.timeago.sk.js
313
- - web/assets/javascripts/locales/jquery.timeago.sl.js
314
- - web/assets/javascripts/locales/jquery.timeago.sv.js
315
- - web/assets/javascripts/locales/jquery.timeago.th.js
316
- - web/assets/javascripts/locales/jquery.timeago.tr.js
317
- - web/assets/javascripts/locales/jquery.timeago.uk.js
318
- - web/assets/javascripts/locales/jquery.timeago.uz.js
319
- - web/assets/javascripts/locales/jquery.timeago.zh-cn.js
320
- - web/assets/javascripts/locales/jquery.timeago.zh-tw.js
294
+ - web/assets/stylesheets/application-rtl.css
321
295
  - web/assets/stylesheets/application.css
296
+ - web/assets/stylesheets/bootstrap-rtl.min.css
322
297
  - web/assets/stylesheets/bootstrap.css
298
+ - web/locales/ar.yml
323
299
  - web/locales/cs.yml
324
300
  - web/locales/da.yml
325
301
  - web/locales/de.yml
326
302
  - web/locales/el.yml
327
303
  - web/locales/en.yml
328
304
  - web/locales/es.yml
305
+ - web/locales/fa.yml
329
306
  - web/locales/fr.yml
307
+ - web/locales/he.yml
330
308
  - web/locales/hi.yml
331
309
  - web/locales/it.yml
332
310
  - web/locales/ja.yml
@@ -340,13 +318,13 @@ files:
340
318
  - web/locales/sv.yml
341
319
  - web/locales/ta.yml
342
320
  - web/locales/uk.yml
321
+ - web/locales/ur.yml
343
322
  - web/locales/zh-cn.yml
344
323
  - web/locales/zh-tw.yml
345
324
  - web/views/_footer.erb
346
325
  - web/views/_job_info.erb
347
326
  - web/views/_nav.erb
348
327
  - web/views/_paging.erb
349
- - web/views/_poll_js.erb
350
328
  - web/views/_poll_link.erb
351
329
  - web/views/_status.erb
352
330
  - web/views/_summary.erb
@@ -381,37 +359,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
381
359
  version: '0'
382
360
  requirements: []
383
361
  rubyforge_project:
384
- rubygems_version: 2.4.5
362
+ rubygems_version: 2.5.2
385
363
  signing_key:
386
364
  specification_version: 4
387
365
  summary: Simple, efficient background processing for Ruby
388
- test_files:
389
- - test/config.yml
390
- - test/env_based_config.yml
391
- - test/fake_env.rb
392
- - test/fixtures/en.yml
393
- - test/helper.rb
394
- - test/test_actors.rb
395
- - test/test_api.rb
396
- - test/test_cli.rb
397
- - test/test_client.rb
398
- - test/test_exception_handler.rb
399
- - test/test_extensions.rb
400
- - test/test_fetch.rb
401
- - test/test_launcher.rb
402
- - test/test_logging.rb
403
- - test/test_manager.rb
404
- - test/test_middleware.rb
405
- - test/test_processor.rb
406
- - test/test_rails.rb
407
- - test/test_redis_connection.rb
408
- - test/test_retry.rb
409
- - test/test_scheduled.rb
410
- - test/test_scheduling.rb
411
- - test/test_sidekiq.rb
412
- - test/test_testing.rb
413
- - test/test_testing_fake.rb
414
- - test/test_testing_inline.rb
415
- - test/test_util.rb
416
- - test/test_web.rb
417
- - test/test_web_helpers.rb
366
+ test_files: []