File tree Expand file tree Collapse file tree 8 files changed +102
-0
lines changed Expand file tree Collapse file tree 8 files changed +102
-0
lines changed Original file line number Diff line number Diff line change @@ -22,6 +22,7 @@ gem 'sqlite3'
22
22
gem 'turbolinks'
23
23
gem 'twitter-typeahead-rails'
24
24
gem 'uglifier'
25
+ gem 'whenever'
25
26
26
27
# Range limit gem for slider on Solr integer fields (year)
27
28
# Currently broken (9/2/2016)
@@ -43,5 +44,7 @@ group :development, :test do
43
44
gem 'selenium-webdriver'
44
45
gem 'simplecov'
45
46
gem 'spring'
47
+ gem 'timecop'
46
48
gem 'web-console'
49
+ gem 'whenever-test'
47
50
end
Original file line number Diff line number Diff line change 89
89
capybara (>= 1.0 , < 4 )
90
90
launchy
91
91
childprocess (4.1.0 )
92
+ chronic (0.10.2 )
92
93
coderay (1.1.3 )
93
94
concurrent-ruby (1.1.7 )
94
95
config (2.2.1 )
381
382
thor (1.0.1 )
382
383
thread_safe (0.3.6 )
383
384
tilt (2.0.10 )
385
+ timecop (0.9.6 )
384
386
turbolinks (5.2.1 )
385
387
turbolinks-source (~> 5.2 )
386
388
turbolinks-source (5.2.0 )
403
405
websocket-driver (0.7.3 )
404
406
websocket-extensions (>= 0.1.0 )
405
407
websocket-extensions (0.1.5 )
408
+ whenever (1.0.0 )
409
+ chronic (>= 0.6.3 )
410
+ whenever-test (1.0.1 )
411
+ whenever
406
412
xpath (3.2.0 )
407
413
nokogiri (~> 1.8 )
408
414
@@ -442,10 +448,13 @@ DEPENDENCIES
442
448
solr_wrapper
443
449
spring
444
450
sqlite3
451
+ timecop
445
452
turbolinks
446
453
twitter-typeahead-rails
447
454
uglifier
448
455
web-console
456
+ whenever
457
+ whenever-test
449
458
450
459
BUNDLED WITH
451
460
2.1.4
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot . define do
4
+ factory :search do
5
+ query_params { { q : 'test' } }
6
+ end
7
+ end
Original file line number Diff line number Diff line change
1
+ require 'rake'
2
+
3
+ RSpec . configure do |config |
4
+ config . before ( :suite ) do
5
+ Rails . application . load_tasks
6
+ end
7
+ end
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments