rush_job 0.5.1 → 0.6.0

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: 2656877c04c7bf364e6b009dde59e1b4169ec229cb011c8b973587f07185026b
4
- data.tar.gz: d91245e38016a4a0be1e35ee9c8085d6a75580d4bf858cd37c88383e119f33f9
3
+ metadata.gz: 82209f37f6a845c77cb6933c9c559a949df485c3142b8585c20955fa23eb9519
4
+ data.tar.gz: b4fda350f51463d8e05e0d7bc1db426420234b1f5d458406b59d36104d00d746
5
5
  SHA512:
6
- metadata.gz: 3c5b8bf4ef1138187b56cd5081aa8ff64a2cf73b3d05222501f7330bbd7f2816c30df2b7e696fd03b4a0442bde77990fdf00c6a8d863e1485218d274806192a9
7
- data.tar.gz: 174ced87e1345741f9ffc26e8c5819c67b7d943a5b28ddf9e28afc225c65c2bbf477b9eafae11aba923c9bc554a8652fc4a834bf8bfcf0843536f0d693647aa6
6
+ metadata.gz: d8a7d54426d59d39f397fd064685e7c7ab8586c2f717f023001e7f7db232fe66533363d9c5a9834b25d8f89903eb299b8973637e52615025d0655530f4b3df9c
7
+ data.tar.gz: 04a8b173f671ae3ff2b39ab10466b3f38584d6ae7c9ee2556281c024e3c3b613e611063eb8df878983a7247e76cd8d1d16ef4ce1decf07991708d8c38427c161
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.1'
20
+ gem 'rush_job', '~> 0.6.0'
21
21
  ```
22
22
 
23
23
  And then execute:
@@ -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 %>
@@ -17,13 +17,29 @@
17
17
  <div class="collapse navbar-collapse" id="rush-job-navbar-links">
18
18
  <ul class="navbar-nav me-auto">
19
19
  <li class="nav-item">
20
- <%= link_to t(:dashboard), root_path, class: "nav-link" %>
20
+ <%= link_to t(:dashboard), root_path, class: "nav-link#{' active' if current_page?(root_path)}" %>
21
21
  </li>
22
22
  <li class="nav-item">
23
- <%= link_to t(:jobs), rush_jobs_path, class: "nav-link" %>
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,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.1'.freeze
2
+ VERSION = '0.6.0'.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.1
4
+ version: 0.6.0
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-09 00:00:00.000000000 Z
11
+ date: 2023-10-01 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