1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
require 'shellwords'
module Whenever
class Job
attr_reader :at, :roles, :mailto
def initialize(options = {})
@options = options
@at = options.delete(:at)
@template = options.delete(:template)
@mailto = options.fetch(:mailto, :default_mailto)
@job_template = options.delete(:job_template) || ":job"
@roles = Array(options.delete(:roles))
@options[:output] = options.has_key?(:output) ? Whenever::Output::Redirection.new(options[:output]).to_s : ''
@options[:environment_variable] ||= "RAILS_ENV"
@options[:environment] ||= :production
@options[:path] = Shellwords.shellescape(@options[:path] || Whenever.path)
end
def output
job = process_template(@template, @options)
out = process_template(@job_template, @options.merge(:job => job))
out.gsub(/%/, '\%')
end
def has_role?(role)
roles.empty? || roles.include?(role)
end
protected
def process_template(template, options)
template.gsub(/:\w+/) do |key|
before_and_after = [$`[-1..-1], $'[0..0]]
option = options[key.sub(':', '').to_sym] || key
if before_and_after.all? { |c| c == "'" }
escape_single_quotes(option)
elsif before_and_after.all? { |c| c == '"' }
escape_double_quotes(option)
else
option
end
end.gsub(/\s+/m, " ").strip
end
def escape_single_quotes(str)
str.gsub(/'/) { "'\\''" }
end
def escape_double_quotes(str)
str.gsub(/"/) { '\"' }
end
end
end
|