diff --git a/lib/crono.rb b/lib/crono.rb index d874ee9..81632ca 100644 --- a/lib/crono.rb +++ b/lib/crono.rb @@ -10,6 +10,7 @@ require 'crono/job' require 'crono/scheduler' require 'crono/config' require 'crono/performer_proxy' +require 'crono/cronotab' require 'crono/orm/active_record/crono_job' require 'crono/railtie' if defined?(Rails) diff --git a/lib/crono/cli.rb b/lib/crono/cli.rb index aa7eb98..1c59a0f 100644 --- a/lib/crono/cli.rb +++ b/lib/crono/cli.rb @@ -21,6 +21,7 @@ module Crono write_pid load_rails + Cronotab.process(File.expand_path(config.cronotab)) print_banner check_jobs @@ -71,7 +72,6 @@ module Crono require 'rails' require File.expand_path('config/environment.rb') ::Rails.application.eager_load! - require File.expand_path(config.cronotab) end def check_jobs diff --git a/lib/crono/cronotab.rb b/lib/crono/cronotab.rb new file mode 100644 index 0000000..a07b7a2 --- /dev/null +++ b/lib/crono/cronotab.rb @@ -0,0 +1,10 @@ +module Crono + class Cronotab + def self.process(cronotab_path = nil) + cronotab_path ||= ENV['CRONOTAB'] || (defined?(Rails) && + File.join(Rails.root, Config::CRONOTAB)) + fail 'No cronotab defined' unless cronotab_path + require cronotab_path + end + end +end diff --git a/lib/tasks/crono_tasks.rake b/lib/tasks/crono_tasks.rake index 09e2738..ccc99aa 100644 --- a/lib/tasks/crono_tasks.rake +++ b/lib/tasks/crono_tasks.rake @@ -1,18 +1,8 @@ -module Crono - def self.load_cronotab - cronotab_path = ENV['CRONOTAB'] || (defined?(Rails) && - File.join(Rails.root, Config::CRONOTAB)) - fail 'No cronotab defined' unless cronotab_path - puts "Load cronotab #{cronotab_path}" - require cronotab_path - end -end - namespace :crono do desc 'Clean unused job stats from DB' task clean: :environment do Crono.scheduler = Crono::Scheduler.new - Crono.load_cronotab + Crono::Cronotab.process current_job_ids = Crono.scheduler.jobs.map(&:job_id) Crono::CronoJob.where.not(job_id: current_job_ids).destroy_all end @@ -20,7 +10,7 @@ namespace :crono do desc 'Check cronotab.rb syntax' task check: :environment do Crono.scheduler = Crono::Scheduler.new - Crono.load_cronotab + Crono::Cronotab.process puts 'Syntax ok' end end diff --git a/spec/cronotab_spec.rb b/spec/cronotab_spec.rb new file mode 100644 index 0000000..1932f09 --- /dev/null +++ b/spec/cronotab_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe Crono::Cronotab do + describe '#process' do + it 'should load cronotab file' do + cronotab_path = File.expand_path('../assets/good_cronotab.rb', __FILE__) + expect(Crono.scheduler).to receive(:add_job).with(kind_of(Crono::Job)) + expect { + Crono::Cronotab.process(cronotab_path) + }.to_not raise_error + end + + it 'should raise error when cronotab is invalid' do + cronotab_path = File.expand_path('../assets/bad_cronotab.rb', __FILE__) + expect { + Crono::Cronotab.process(cronotab_path) + }.to raise_error + end + end +end