--- /dev/null
+class JobRunnerController < ApplicationController
+ include AdminAuthenticatable
+
+ def index
+ @users = User.all.order(:created_at)
+ end
+
+ def run
+ if params[:job] == 'weekly_bookmarks_digest'
+ user = params[:user_id].present? ? User.find(params[:user_id]) : nil
+ WeeklyBookmarksDigestJob.perform_later(user)
+ flash[:notice] = user ? "Weekly bookmarks digest job queued for #{user.email}" : "Weekly bookmarks digest job queued for all users"
+ else
+ flash[:alert] = "Invalid job selection"
+ end
+ redirect_to job_runner_path
+ end
+end
--- /dev/null
+module JobRunnerHelper
+end
class WeeklyBookmarksDigestJob < ApplicationJob
queue_as :default
- def perform(*args)
+ def perform(user = nil)
start_date = 1.week.ago.beginning_of_week
end_date = Time.current.end_of_week
bookmarks = Post.bookmarks.where(created_at: start_date..end_date)
# or do User.find_each do |user| for everyone, but that'll break fastmail
- DigestMailer.weekly_bookmarks_digest(User.first, bookmarks).deliver_now
+ if user.present?
+ DigestMailer.weekly_bookmarks_digest(user, bookmarks).deliver_now
+ else
+ DigestMailer.weekly_bookmarks_digest(User.first, bookmarks).deliver_now
+ end
end
end
<% end %>
</ul>
-<p>Have a great weekend!</p>
\ No newline at end of file
+<p>Have a great weekend,<br>
+Aidan.</p>
\ No newline at end of file
--- /dev/null
+<div class="container">
+ <h1>Rails jobs</h1>
+ <%= link_to "Back home...", root_url %>
+</div>
+
+<div class="post">
+ <div class="container">
+ <h3>Send a weekly bookmark digest:</h3>
+
+
+ <%= form_tag job_runner_path, method: :post do %>
+ <div>
+ <%= label_tag :job, "Select Job:" %>
+ <%= select_tag :job, options_for_select([['Weekly Bookmarks Digest', 'weekly_bookmarks_digest']]) %>
+ </div>
+
+ <div>
+ <%= label_tag :user_id, "Select User (optional):" %>
+ <%= select_tag :user_id, options_from_collection_for_select(@users, :id, :email), prompt: "Select a user (defaults to Aidan)" %>
+ </div>
+
+ <%= submit_tag "Run Job" %>
+ <% end %>
+
+ </div>
+</div>
\ No newline at end of file
--- /dev/null
+<h1>JobRunner#run</h1>
+<p>Find me in app/views/job_runner/run.html.erb</p>
resource :two_factor, only: [:new, :create, :destroy], controller: 'two_factor' do
get 'backup_codes', on: :member
end
+ get "job_runner", to: "job_runner#index"
+ post "job_runner", to: "job_runner#run"
resources :subscriptions, only: [:new, :create, :index]
resources :pages
get 'importer', to: 'posts#importer'
--- /dev/null
+require "test_helper"
+
+class JobRunnerControllerTest < ActionDispatch::IntegrationTest
+ test "should get index" do
+ get job_runner_index_url
+ assert_response :success
+ end
+
+ test "should get run" do
+ get job_runner_run_url
+ assert_response :success
+ end
+end