rush_job 0.5.2 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b3041b6c30d0c536801cacb8b1ad90508d07b13cd164f30a4b9e077502eebe95
4
- data.tar.gz: 2d5385d373b5fed963fc13771014b179af4dd04965184f6787c764cb80bddfe0
3
+ metadata.gz: 9f1f2016e98628b8ca8df65ab968afd510ae17cec5c27f1c32bb310d9e566cc7
4
+ data.tar.gz: 58461cac54f6376f5505ef433b100c17acb4059b267611b63b2284fec3868535
5
5
  SHA512:
6
- metadata.gz: 98184de98f079ba5293f1fe248b1e851e7f1fc45b0deb8a8d6e79733505ace0d484ac90be13401a943a078e37c61523cbe0a69ee569d2fc8e624b1f43069d75c
7
- data.tar.gz: 8159d4e7f1f61d2a6c8f706176dcd026753602ff7df78a62a41f88a4c326ddac50e880c27812b97d93f1be6f6d8787b8f81d449f4da0fa723c930be00be71acd
6
+ metadata.gz: b6bebec349e0ec4975275946490aff4908914c1cdc6420b05e5e8b8bb7977119fee0d8199cf8b69577646d591bb9bf124f13f40d43786f73762d87282da765b2
7
+ data.tar.gz: 0c9175a6c11f22a8b93f422bfa5d4346c10f5daed5d8e18a5d512146aa138cc126f2eb48f2f6f535ad68f5e3fe368c9a43c4ad6442df579027c4326e7318a497
data/README.md CHANGED
@@ -17,7 +17,7 @@ Navigate to the `/rush_job` route in your application to see the Delayed Jobs. L
17
17
  Add this line to your Ruby on Rails application's Gemfile:
18
18
 
19
19
  ```ruby
20
- gem 'rush_job', '~> 0.5.2'
20
+ gem 'rush_job', '~> 0.6.1'
21
21
  ```
22
22
 
23
23
  And then execute:
@@ -1,12 +1,11 @@
1
- import 'bootstrap'
2
- import Rails from '@rails/ujs'
3
- Rails.start();
4
-
5
- import { Application } from '@hotwired/stimulus'
1
+ import { Application } from '@hotwired/stimulus';
2
+ import Rails from '@rails/ujs';
3
+ import RushJobPollingController from './controllers/rush_job_polling_controller';
4
+ import RushJobReloadJobsTableController from './controllers/rush_job_reload_jobs_table_controller';
5
+ import 'bootstrap';
6
6
 
7
- import RushJobPollingController from './controllers/rush_job_polling_controller'
8
- import RushJobReloadJobsTableController from './controllers/rush_job_reload_jobs_table_controller'
7
+ Rails.start();
9
8
 
10
- window.Stimulus = Application.start()
11
- Stimulus.register('rush-job-polling', RushJobPollingController)
12
- Stimulus.register('rush-job-reload-jobs-table', RushJobReloadJobsTableController)
9
+ window.Stimulus = Application.start();
10
+ Stimulus.register('rush-job-polling', RushJobPollingController);
11
+ Stimulus.register('rush-job-reload-jobs-table', RushJobReloadJobsTableController);
@@ -1,49 +1,50 @@
1
- import { RushJobTableUpdateController } from './rush_job_table_update_controller.js'
1
+ import { RushJobTableUpdateController } from './rush_job_table_update_controller';
2
2
 
3
- let intervalID
3
+ let intervalID;
4
4
 
5
5
  export default class extends RushJobTableUpdateController {
6
- static targets = [ 'pollingTime', 'pollingTimeLabel', 'pollingSlide' ]
6
+ static targets = ['pollingTime', 'pollingTimeLabel', 'pollingSlide'];
7
7
 
8
8
  connect() {
9
- this.pollingChange()
10
- this.stopPolling()
9
+ this.pollingChange();
10
+ this.stopPolling();
11
11
  }
12
12
 
13
13
  pollingChange() {
14
14
  const pollingLabelRegex = /\d+/;
15
- let pollingLabelUpdate = this.pollingTimeLabelTarget.innerHTML.replace(pollingLabelRegex, this.pollingTime())
16
- this.pollingTimeLabelTarget.innerHTML = pollingLabelUpdate
15
+ const pollingTimeTargetHtml = this.pollingTimeLabelTarget.innerHTML;
16
+ const pollingLabelUpdate = pollingTimeTargetHtml.replace(pollingLabelRegex, this.pollingTime());
17
+ this.pollingTimeLabelTarget.innerHTML = pollingLabelUpdate;
17
18
  }
18
19
 
19
20
  pollingToggle() {
20
- let pollingSlide = this.pollingSlideTarget
21
+ const pollingSlide = this.pollingSlideTarget;
21
22
 
22
23
  if (pollingSlide.checked === true) {
23
- this.startPolling()
24
+ this.startPolling();
24
25
  } else {
25
- this.stopPolling()
26
+ this.stopPolling();
26
27
  }
27
28
  }
28
29
 
29
30
  startPolling() {
30
- this.updateJobs()
31
+ this.updateJobs();
31
32
 
32
33
  intervalID = setTimeout(() => {
33
- this.startPolling()
34
- }, this.pollingTime() * 1000)
34
+ this.startPolling();
35
+ }, this.pollingTime() * 1000);
35
36
  }
36
37
 
37
38
  stopPolling() {
38
39
  if (intervalID) {
39
- clearInterval(intervalID)
40
+ clearInterval(intervalID);
40
41
  }
41
42
  }
42
43
 
43
44
  pollingTime() {
44
- const pollingTimes = [3, 5, 8, 13, 21, 34, 55]
45
- let pollingTime = this.pollingTimeTarget.value || 3
45
+ const pollingTimes = [3, 5, 8, 13, 21, 34, 55];
46
+ const pollingTime = this.pollingTimeTarget.value || 3;
46
47
 
47
- return pollingTimes[pollingTime]
48
+ return pollingTimes[pollingTime];
48
49
  }
49
50
  }
@@ -1,7 +1,7 @@
1
- import { RushJobTableUpdateController } from './rush_job_table_update_controller.js'
1
+ import { RushJobTableUpdateController } from './rush_job_table_update_controller';
2
2
 
3
3
  export default class extends RushJobTableUpdateController {
4
4
  reloadJobs() {
5
- this.updateJobs()
5
+ this.updateJobs();
6
6
  }
7
7
  }
@@ -1,19 +1,19 @@
1
- import { Controller } from '@hotwired/stimulus'
2
- import Rails from '@rails/ujs'
1
+ import { Controller } from '@hotwired/stimulus';
2
+ import Rails from '@rails/ujs';
3
3
 
4
4
  export class RushJobTableUpdateController extends Controller {
5
5
  updateJobs() {
6
- this.blurTable()
6
+ this.blurTable();
7
7
 
8
8
  Rails.ajax({
9
9
  url: document.location.href,
10
10
  type: 'GET',
11
- dataType: 'script'
12
- })
11
+ dataType: 'script',
12
+ });
13
13
  }
14
14
 
15
15
  blurTable() {
16
- let jobs_container = document.getElementById('rush-job-jobs-container')
17
- jobs_container.classList.add('table-refresh')
16
+ const jobsContainer = document.getElementById('rush-job-jobs-container');
17
+ jobsContainer.classList.add('table-refresh');
18
18
  }
19
19
  }
@@ -15,6 +15,19 @@ module RushJob
15
15
  page_param: :queue_page)
16
16
  end
17
17
 
18
+ def destroy
19
+ RushJob.clear_queue(queue_params[:queue], queue_params[:priority])
20
+
21
+ flash[:success] = t(:cleared_queue, queue: queue_params[:queue])
22
+ redirect_to root_path, status: :see_other
23
+ end
24
+
25
+ private
26
+
27
+ def queue_params
28
+ params.permit(:queue, :priority)
29
+ end
30
+
18
31
  def redirect_to_first_page
19
32
  redirect_to root_path, notice: t(:invalid_page_notice)
20
33
  end
@@ -7,11 +7,6 @@ module RushJob
7
7
 
8
8
  def index
9
9
  @pagy, @rush_jobs = pagy(RushJob.order("#{sort_column} #{sort_direction}"))
10
-
11
- respond_to do |format|
12
- format.html
13
- format.js
14
- end
15
10
  end
16
11
 
17
12
  private
@@ -0,0 +1,18 @@
1
+ module RushJob
2
+ class SettingsController < ApplicationController
3
+ def update
4
+ change_setting if Settings::RUSH_JOB_SETTINGS[params[:setting]&.to_sym]
5
+
6
+ redirect_to root_path
7
+ end
8
+
9
+ private
10
+
11
+ def change_setting
12
+ setting_param = params[:setting]
13
+ setting_cookie = "rush_job_#{setting_param}"
14
+
15
+ cookies.permanent[setting_cookie.to_sym] = Settings.change_setting(setting_param, cookies[setting_cookie.to_sym])
16
+ end
17
+ end
18
+ end
@@ -1,11 +1,5 @@
1
1
  module RushJob
2
2
  module ApplicationHelper
3
- def current_theme
4
- cookies[:rush_job_theme] == 'dark' ? 'dark' : 'light'
5
- end
6
-
7
- def invert_theme
8
- cookies[:rush_job_theme] == 'dark' ? 'light' : 'dark'
9
- end
3
+ include SettingsHelper
10
4
  end
11
5
  end
@@ -0,0 +1,15 @@
1
+ module RushJob
2
+ module SettingsHelper
3
+ def current_theme
4
+ cookies[:rush_job_theme] == 'dark' ? 'dark' : 'light'
5
+ end
6
+
7
+ def invert_theme
8
+ cookies[:rush_job_theme] == 'dark' ? 'light' : 'dark'
9
+ end
10
+
11
+ def editing_enabled?
12
+ cookies[:rush_job_editing] == 'enabled'
13
+ end
14
+ end
15
+ end
@@ -4,6 +4,11 @@ module RushJob
4
4
 
5
5
  scope :locked_jobs, -> { where.not(locked_at: nil).order(locked_at: :desc) }
6
6
  scope :queue_groups, -> { group(:queue, :priority).order(:priority).count }
7
+ scope :queue_group, ->(queue, priority) { where(queue:).and(where(priority:)) }
8
+
9
+ def self.clear_queue(queue, priority)
10
+ queue_group(queue, priority).delete_all
11
+ end
7
12
 
8
13
  def job_class
9
14
  job_data[:job_class]
@@ -0,0 +1,18 @@
1
+ module RushJob
2
+ class Settings
3
+ RUSH_JOB_SETTINGS = {
4
+ theme: %w[light dark],
5
+ editing: %w[disabled enabled]
6
+ }.freeze
7
+
8
+ def self.change_setting(setting, value)
9
+ return unless RUSH_JOB_SETTINGS[setting.to_sym]
10
+
11
+ if RUSH_JOB_SETTINGS[setting.to_sym][1] == value
12
+ RUSH_JOB_SETTINGS[setting.to_sym][0]
13
+ else
14
+ RUSH_JOB_SETTINGS[setting.to_sym][1]
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ <% flash.each do |type, msg| %>
2
+ <div class="alert alert-<%= invert_theme %>" role="alert">
3
+ <%= msg %>
4
+ </div>
5
+ <% end %>
@@ -22,8 +22,24 @@
22
22
  <li class="nav-item">
23
23
  <%= link_to t(:jobs), rush_jobs_path, class: "nav-link#{' active' if current_page?(rush_jobs_path)}" %>
24
24
  </li>
25
- <li class="nav-item">
26
- <%= link_to t("#{invert_theme}_mode"), theme_path, class: "nav-link", method: :patch %>
25
+ <li class="nav-item dropdown">
26
+ <a class="nav-link dropdown-toggle"
27
+ data-bs-toggle="dropdown"
28
+ href="#" role="button"
29
+ aria-haspopup="true"
30
+ aria-expanded="false">
31
+ Options
32
+ </a>
33
+ <div class="dropdown-menu"
34
+ data-bs-popper="static">
35
+ <%= button_to t("#{invert_theme}_mode"), settings_path, class: "nav-link", method: :patch, params: { setting: 'theme' } %>
36
+ <%= button_to t("#{editing_enabled? ? 'disable_editing' : 'enable_editing'}"),
37
+ settings_path,
38
+ class: "nav-link",
39
+ method: :patch,
40
+ params: { setting: 'editing' },
41
+ data: { confirm: t("#{editing_enabled? ? 'disable_editing_confirmation' : 'enable_editing_confirmation'}") } %>
42
+ </div>
27
43
  </li>
28
44
  </ul>
29
45
  </div>
@@ -12,11 +12,9 @@
12
12
  </head>
13
13
  <body class="background-color-<%= current_theme %>">
14
14
  <%= render 'layouts/rush_job/navbar' %>
15
- <% flash.each do |type, msg| %>
16
- <div class="alert alert-<%= invert_theme %>" role="alert">
17
- <%= msg %>
18
- </div>
19
- <% end %>
15
+ <div id="rush-job-flash-messages">
16
+ <%= render 'layouts/rush_job/flash_messages' %>
17
+ </div>
20
18
 
21
19
  <%= yield %>
22
20
 
@@ -53,6 +53,9 @@
53
53
  <th><%= t :name %></th>
54
54
  <th><%= t :priority %></th>
55
55
  <th><%= t :count %></th>
56
+ <% if editing_enabled? %>
57
+ <th><%= t :clear %></th>
58
+ <% end %>
56
59
  </tr>
57
60
  </thead>
58
61
  <tbody class="table-group-divider">
@@ -61,6 +64,14 @@
61
64
  <td><%= queue[0] %></td>
62
65
  <td><%= queue[1] %></td>
63
66
  <td><%= @queue_groups[queue] %></td>
67
+ <% if editing_enabled? %>
68
+ <td><%= button_to t(:clear),
69
+ dashboard_path,
70
+ class: "btn btn-danger btn-sm",
71
+ method: :delete,
72
+ params: { queue: queue[0], priority: queue[1] },
73
+ data: { confirm: t(:clear_queue_confirmation, queue: queue[0]) } %></td>
74
+ <% end %>
64
75
  </tr>
65
76
  <% end %>
66
77
  </tbody>
@@ -1 +1,2 @@
1
+ document.getElementById('rush-job-flash-messages').innerHTML = "<%= j (render partial: 'layouts/rush_job/flash_messages') %>"
1
2
  document.getElementById('rush-job-jobs').innerHTML = "<%= j (render partial: 'dashboard_tables') %>"
@@ -1 +1,2 @@
1
+ document.getElementById('rush-job-flash-messages').innerHTML = "<%= j (render partial: 'layouts/rush_job/flash_messages') %>"
1
2
  document.getElementById('rush-job-jobs').innerHTML = "<%= j (render partial: 'jobs_table') %>"
@@ -1,10 +1,17 @@
1
1
  en:
2
2
  arguments: "Arguments"
3
3
  attempts: "Attempts"
4
+ clear: "Clear"
5
+ clear_queue_confirmation: "Are you sure you want to clear queue %{queue}?"
6
+ cleared_queue: "Cleared queue %{queue}"
4
7
  count: "Count"
5
8
  dark_mode: "Dark Mode"
6
9
  dashboard: "Dashboard"
7
10
  delayed_title: "Delayed Jobs"
11
+ disable_editing: "Disable Editing"
12
+ disable_editing_confirmation: "Are you sure?"
13
+ enable_editing: "Enable Editing"
14
+ enable_editing_confirmation: "Are you sure? Verify workers are stopped before editing."
8
15
  enable_polling: "Enable polling"
9
16
  failed_at: "Failed at"
10
17
  id: "Id"
data/config/routes.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  RushJob::Engine.routes.draw do
2
2
  root 'dashboard#index'
3
+ delete '/dashboard', to: 'dashboard#destroy'
3
4
  get '/rush_jobs', to: 'rush_jobs#index'
4
- patch '/theme', to: 'themes#update'
5
+ patch '/settings', to: 'settings#update'
5
6
  end
@@ -1,3 +1,3 @@
1
1
  module RushJob
2
- VERSION = '0.5.2'.freeze
2
+ VERSION = '0.6.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rush_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - JavaKoala
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-10 00:00:00.000000000 Z
11
+ date: 2023-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -304,13 +304,16 @@ files:
304
304
  - app/controllers/rush_job/application_controller.rb
305
305
  - app/controllers/rush_job/dashboard_controller.rb
306
306
  - app/controllers/rush_job/rush_jobs_controller.rb
307
- - app/controllers/rush_job/themes_controller.rb
307
+ - app/controllers/rush_job/settings_controller.rb
308
308
  - app/helpers/rush_job/application_helper.rb
309
309
  - app/helpers/rush_job/dashboard_helper.rb
310
310
  - app/helpers/rush_job/rush_jobs_helper.rb
311
+ - app/helpers/rush_job/settings_helper.rb
311
312
  - app/helpers/rush_job/sort_helper.rb
312
313
  - app/models/rush_job/application_record.rb
313
314
  - app/models/rush_job/rush_job.rb
315
+ - app/services/rush_job/settings.rb
316
+ - app/views/layouts/rush_job/_flash_messages.html.erb
314
317
  - app/views/layouts/rush_job/_navbar.html.erb
315
318
  - app/views/layouts/rush_job/application.html.erb
316
319
  - app/views/rush_job/dashboard/_dashboard_tables.html.erb
@@ -351,7 +354,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
351
354
  - !ruby/object:Gem::Version
352
355
  version: '0'
353
356
  requirements: []
354
- rubygems_version: 3.4.10
357
+ rubygems_version: 3.4.20
355
358
  signing_key:
356
359
  specification_version: 4
357
360
  summary: User interface for delayed_job
@@ -1,13 +0,0 @@
1
- module RushJob
2
- class ThemesController < ApplicationController
3
- def update
4
- cookies.permanent[:rush_job_theme] = if cookies[:rush_job_theme] == 'dark'
5
- 'light'
6
- else
7
- 'dark'
8
- end
9
-
10
- redirect_to root_path
11
- end
12
- end
13
- end