Skip to content

Commit 85b06f6

Browse files
Merge pull request #269 from NYULibraries/cron-job-to-clear-search
Cron job to clear search
2 parents eab1476 + 5843920 commit 85b06f6

File tree

8 files changed

+102
-0
lines changed

8 files changed

+102
-0
lines changed

Gemfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ gem 'sqlite3'
2222
gem 'turbolinks'
2323
gem 'twitter-typeahead-rails'
2424
gem 'uglifier'
25+
gem 'whenever'
2526

2627
# Range limit gem for slider on Solr integer fields (year)
2728
# Currently broken (9/2/2016)
@@ -43,5 +44,7 @@ group :development, :test do
4344
gem 'selenium-webdriver'
4445
gem 'simplecov'
4546
gem 'spring'
47+
gem 'timecop'
4648
gem 'web-console'
49+
gem 'whenever-test'
4750
end

Gemfile.lock

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ GEM
8989
capybara (>= 1.0, < 4)
9090
launchy
9191
childprocess (4.1.0)
92+
chronic (0.10.2)
9293
coderay (1.1.3)
9394
concurrent-ruby (1.1.7)
9495
config (2.2.1)
@@ -381,6 +382,7 @@ GEM
381382
thor (1.0.1)
382383
thread_safe (0.3.6)
383384
tilt (2.0.10)
385+
timecop (0.9.6)
384386
turbolinks (5.2.1)
385387
turbolinks-source (~> 5.2)
386388
turbolinks-source (5.2.0)
@@ -403,6 +405,10 @@ GEM
403405
websocket-driver (0.7.3)
404406
websocket-extensions (>= 0.1.0)
405407
websocket-extensions (0.1.5)
408+
whenever (1.0.0)
409+
chronic (>= 0.6.3)
410+
whenever-test (1.0.1)
411+
whenever
406412
xpath (3.2.0)
407413
nokogiri (~> 1.8)
408414

@@ -442,10 +448,13 @@ DEPENDENCIES
442448
solr_wrapper
443449
spring
444450
sqlite3
451+
timecop
445452
turbolinks
446453
twitter-typeahead-rails
447454
uglifier
448455
web-console
456+
whenever
457+
whenever-test
449458

450459
BUNDLED WITH
451460
2.1.4

config/schedule.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Use this file to easily define all of your cron jobs.
2+
#
3+
# It's helpful, but not entirely necessary to understand cron before proceeding.
4+
# http://en.wikipedia.org/wiki/Cron
5+
6+
# Example:
7+
#
8+
# set :output, "/path/to/my/cron_log.log"
9+
#
10+
# every 2.hours do
11+
# command "/usr/bin/some_great_command"
12+
# runner "MyModel.some_method"
13+
# rake "some:great:rake:task"
14+
# end
15+
#
16+
# every 4.days do
17+
# runner "AnotherModel.prune_old_records"
18+
# end
19+
20+
# Learn more: http://github.com/javan/whenever
21+
22+
every 1.week do
23+
rake 'vacate_searches:vacate'
24+
end

lib/tasks/vacate_searches.rake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace :vacate_searches do
2+
desc 'Vacate week-old searches'
3+
task vacate: :environment do
4+
Search.where('created_at < ?', (Date.today - 7.days)).destroy_all
5+
end
6+
end

spec/factories/search.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# frozen_string_literal: true
2+
3+
FactoryBot.define do
4+
factory :search do
5+
query_params { { q: 'test' } }
6+
end
7+
end

spec/support/tasks.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require 'rake'
2+
3+
RSpec.configure do |config|
4+
config.before(:suite) do
5+
Rails.application.load_tasks
6+
end
7+
end

spec/tasks/vacate_searches_spec.rb

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
require 'timecop'
2+
3+
RSpec.describe 'Vacate Searches', type: :task do
4+
context 'vacate_searches:vacate' do
5+
before do
6+
# Freeze time as task is time-sensitive
7+
Timecop.freeze Time.now
8+
end
9+
10+
after { Timecop.return }
11+
12+
it 'deletes searches older than 1 week' do
13+
create(:search, created_at: 2.week.ago)
14+
expect { invoke_task }.to change { Search.count }.by(-1)
15+
end
16+
17+
it 'does not delete newer searches' do
18+
create(:search, created_at: 2.days.ago)
19+
expect { invoke_task }.not_to(change { Search.count })
20+
end
21+
22+
private
23+
24+
def invoke_task
25+
task = Rake::Task['vacate_searches:vacate']
26+
# Ensure task is re-enabled, as rake tasks by default are disabled
27+
# after running once within a process http://pivotallabs.com/how-i-test-rake-tasks/
28+
task.reenable
29+
task.invoke
30+
end
31+
end
32+
end

spec/whenever/schedule_spec.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# spec/whenever_spec.rb
2+
require 'spec_helper'
3+
4+
describe 'Whenever Schedule' do
5+
before do
6+
load 'Rakefile' # Makes sure rake tasks are loaded so you can assert in rake jobs
7+
end
8+
9+
it 'should have a rake task that runs every week' do
10+
schedule = Whenever::Test::Schedule.new(file: 'config/schedule.rb')
11+
task_name = schedule.jobs[:rake].first[:task]
12+
task_name.should include('vacate_searches:vacate')
13+
end
14+
end

0 commit comments

Comments
 (0)