Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/controllers/resque_web/application_controller.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module ResqueWeb
class ApplicationController < ActionController::Base
include ActionView::Helpers::TextHelper
protect_from_forgery
before_filter :set_subtabs, :authorize

Expand Down
12 changes: 12 additions & 0 deletions app/controllers/resque_web/jobs_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module ResqueWeb
class JobsController < ApplicationController

def destroy
args = JSON.parse(params[:args])
destroyed = Resque::Job.destroy(params[:queue], params[:job_class], *args)
flash[:info] = "#{pluralize(destroyed, 'job')} deleted."
redirect_to queue_path(params[:queue])
end

end
end
3 changes: 3 additions & 0 deletions app/views/layouts/resque_web/application.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@
<% end %>

<div class="container" id="main">
<% flash.each do |key, message| %>
<div class="alert alert-<%= key %>"><%= message %></div>
<% end %>
<%= yield %>
</div>

Expand Down
9 changes: 9 additions & 0 deletions app/views/resque_web/queues/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,20 @@
<tr>
<th>Class</th>
<th>Args</th>
<th>Actions</th>
</tr>
<% queue_jobs.each do |job| %>
<tr>
<td class='class'><%= job['class'] %></td>
<td class='args'><%=h job['args'].inspect %></td>
<td class='actions'>
<%= form_tag(job_path(job['class']), :method => :delete) do %>
<%= hidden_field_tag :queue, params[:id] %>
<%= hidden_field_tag :job_class, job['class'] %>
<%= hidden_field_tag :args, JSON.dump(job['args']) %>
<%= submit_tag "Delete", :class => 'btn btn-default' %>
<% end %>
</td>
</tr>
<% end %>
<% if queue_jobs.empty? %>
Expand Down
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

resource :overview, :only => [:show], :controller => :overview
resources :working, :only => [:index]
resources :jobs, :only => [:destroy], param: :job_class
resources :queues, :only => [:index,:show,:destroy], :constraints => {:id => id_pattern} do
member do
put 'clear'
Expand Down
45 changes: 45 additions & 0 deletions test/functional/jobs_controller_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
require 'test_helper'

module ResqueWeb
class JobsControllerTest < ActionController::TestCase
include ControllerTestHelpers

let(:queue_name) { 'example_queue' }
let(:args) { ['foo', 'bar'] }
let(:params) { { queue: queue_name, job_class: 'ExampleJob', args: JSON.dump(args)} }

setup do
@routes = Engine.routes
Resque.push(queue_name, class: 'ExampleJob', args: args)
@queue_size = Resque.size(queue_name)
end

teardown do
Resque.remove_queue(queue_name)
end

describe "DELETE /destroy" do
let(:params_without_args) do
params.merge(:args => JSON.dump([]))
end

it "deletes a job having the specified arguments" do
visit(:destroy, params, method: :delete)
new_queue_size = Resque.size(queue_name)
assert_equal((@queue_size - 1), new_queue_size)
end

it "deletes all jobs of a class if no args are specified" do
Resque.push(queue_name, class: 'ExampleJob')
visit(:destroy, params_without_args, method: :delete)
new_queue_size = Resque.size(queue_name)
assert_equal(0, new_queue_size)
end

it "redirects to the queue's show page" do
visit(:destroy, params, method: :delete)
assert_redirected_to queue_path(queue_name)
end
end
end
end