mirror of
https://github.com/plashchynski/crono.git
synced 2026-04-25 18:29:05 +02:00
Refactor to remove global variables
This commit is contained in:
@@ -3,7 +3,6 @@ end
|
||||
|
||||
require "active_support/all"
|
||||
require "crono/version.rb"
|
||||
require "crono/logger.rb"
|
||||
require "crono/period.rb"
|
||||
require "crono/schedule.rb"
|
||||
require "crono/config.rb"
|
||||
|
||||
@@ -2,11 +2,24 @@ require 'crono'
|
||||
require 'optparse'
|
||||
|
||||
module Crono
|
||||
mattr_accessor :schedule
|
||||
|
||||
class CLI
|
||||
include Singleton
|
||||
attr_accessor :config
|
||||
attr_accessor :schedule
|
||||
attr_accessor :logger
|
||||
|
||||
def run
|
||||
self.config = Config.new
|
||||
self.schedule = Schedule.new
|
||||
Crono.schedule = schedule
|
||||
|
||||
parse_options(ARGV)
|
||||
|
||||
logfile = config.daemonize ? config.logfile : STDOUT
|
||||
self.logger = Logger.new(logfile)
|
||||
|
||||
load_rails
|
||||
print_banner
|
||||
start_working_loop
|
||||
@@ -22,7 +35,7 @@ module Crono
|
||||
require 'rails'
|
||||
require File.expand_path("config/environment.rb")
|
||||
::Rails.application.eager_load!
|
||||
require File.expand_path(Crono.config.cronotab)
|
||||
require File.expand_path(config.cronotab)
|
||||
end
|
||||
|
||||
def run_job(klass)
|
||||
@@ -32,7 +45,7 @@ module Crono
|
||||
|
||||
def start_working_loop
|
||||
loop do
|
||||
klass, time = config.schedule.next
|
||||
klass, time = schedule.next
|
||||
sleep(time - Time.now)
|
||||
run_job(klass)
|
||||
end
|
||||
@@ -42,16 +55,16 @@ module Crono
|
||||
OptionParser.new do |opts|
|
||||
opts.banner = "Usage: crono [options]"
|
||||
|
||||
opts.on("-C", "--cronotab PATH", "Path to cronotab file (Default: #{Crono.config.cronotab})") do |cronotab|
|
||||
Crono.config.cronotab = cronotab
|
||||
opts.on("-C", "--cronotab PATH", "Path to cronotab file (Default: #{config.cronotab})") do |cronotab|
|
||||
config.cronotab = cronotab
|
||||
end
|
||||
|
||||
opts.on("-L", "--logfile PATH", "Path to writable logfile (Default: #{Crono.config.logfile})") do |logfile|
|
||||
Crono.config.logfile = logfile
|
||||
opts.on("-L", "--logfile PATH", "Path to writable logfile (Default: #{config.logfile})") do |logfile|
|
||||
config.logfile = logfile
|
||||
end
|
||||
|
||||
opts.on("-d", "--[no-]daemonize", "Daemonize process (Default: #{Crono.config.daemonize})") do |daemonize|
|
||||
Crono.config.daemonize = daemonize
|
||||
opts.on("-d", "--[no-]daemonize", "Daemonize process (Default: #{config.daemonize})") do |daemonize|
|
||||
config.daemonize = daemonize
|
||||
end
|
||||
|
||||
end.parse!(argv)
|
||||
|
||||
@@ -1,23 +1,16 @@
|
||||
module Crono
|
||||
class Config
|
||||
include Singleton
|
||||
CRONOTAB = "config/cronotab.rb"
|
||||
LOGFILE = "log/crono.rb"
|
||||
|
||||
attr_accessor :schedule
|
||||
attr_accessor :cronotab
|
||||
attr_accessor :logfile
|
||||
attr_accessor :daemonize
|
||||
|
||||
def initialize
|
||||
self.schedule = Schedule.new
|
||||
self.cronotab = CRONOTAB
|
||||
self.logfile = LOGFILE
|
||||
self.daemonize = false
|
||||
end
|
||||
end
|
||||
|
||||
def self.config
|
||||
Config.instance
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
module Crono
|
||||
class Logger < ::Logger
|
||||
include Singleton
|
||||
|
||||
def initialize
|
||||
super(Crono.config.daemonize ? Crono.config.logfile : STDOUT)
|
||||
self.level = Logger::DEBUG
|
||||
end
|
||||
end
|
||||
|
||||
def self.logger
|
||||
Logger.instance
|
||||
end
|
||||
end
|
||||
@@ -1,15 +1,16 @@
|
||||
module Crono
|
||||
class PerformerProxy
|
||||
def initialize(performer)
|
||||
def initialize(performer, schedule)
|
||||
@performer = performer
|
||||
@schedule = schedule
|
||||
end
|
||||
|
||||
def every(period, *args)
|
||||
Crono.config.schedule.add(@performer, Period.new(period, *args))
|
||||
@schedule.add(@performer, Period.new(period, *args))
|
||||
end
|
||||
end
|
||||
|
||||
def self.perform(performer)
|
||||
PerformerProxy.new(performer)
|
||||
PerformerProxy.new(performer, Crono.schedule)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -31,17 +31,17 @@ describe Crono::CLI do
|
||||
describe "#parse_options" do
|
||||
it "should set cronotab" do
|
||||
cli.send(:parse_options, ["--cronotab", "/tmp/cronotab.rb"])
|
||||
expect(Crono.config.cronotab).to be_eql "/tmp/cronotab.rb"
|
||||
expect(cli.config.cronotab).to be_eql "/tmp/cronotab.rb"
|
||||
end
|
||||
|
||||
it "should set logfile" do
|
||||
cli.send(:parse_options, ["--logfile", "log/crono.log"])
|
||||
expect(Crono.config.logfile).to be_eql "log/crono.log"
|
||||
expect(cli.config.logfile).to be_eql "log/crono.log"
|
||||
end
|
||||
|
||||
it "should set daemonize" do
|
||||
cli.send(:parse_options, ["--daemonize"])
|
||||
expect(Crono.config.daemonize).to be true
|
||||
expect(cli.config.daemonize).to be true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,8 +3,10 @@ require "spec_helper"
|
||||
describe Crono::Config do
|
||||
describe "#initialize" do
|
||||
it "should initialize schedule" do
|
||||
@config = Crono.config
|
||||
expect(@config.schedule).to be_a(Crono::Schedule)
|
||||
@config = Crono::Config.new
|
||||
expect(@config.cronotab).to be Crono::Config::CRONOTAB
|
||||
expect(@config.logfile).to be Crono::Config::LOGFILE
|
||||
expect(@config.daemonize).to be false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
require "spec_helper"
|
||||
|
||||
describe Crono::Logger do
|
||||
describe "#initialize" do
|
||||
it "should initialize logger" do
|
||||
expect {
|
||||
Crono.logger.info("Test")
|
||||
}.to_not raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -6,7 +6,7 @@ end
|
||||
|
||||
describe Crono::PerformerProxy do
|
||||
it "should add job and period to schedule" do
|
||||
expect(Crono.config.schedule).to receive(:add).with(TestJob, kind_of(Crono::Period))
|
||||
expect(Crono.schedule).to receive(:add).with(TestJob, kind_of(Crono::Period))
|
||||
Crono.perform(TestJob).every(2.days, at: "15:30")
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user