class Xronor::DSL::Job

Public Class Methods

new(frequency, options, &block) click to toggle source
# File lib/xronor/dsl/job.rb, line 6
def initialize(frequency, options, &block)
  @frequency = frequency
  @options = options

  schedule = case frequency
             when String # cron expression
               frequency
             when Symbol, Numeric # DSL (:hour, 1.min, 1.hour, ...)
               Xronor::DSL::ScheduleConverter.convert(frequency, options)
             else
               raise ArgumentError, "Invalid frequency #{frequency}"
             end

  @result = OpenStruct.new(
    description: nil,
    name: "",
    schedule: schedule,
    command: "",
  )

  instance_eval(&block)
end

Public Instance Methods

process_template(template, options) click to toggle source
# File lib/xronor/dsl/job.rb, line 35
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
result() click to toggle source
# File lib/xronor/dsl/job.rb, line 50
def result
  required(:name, @result.name)
  @result
end

Private Instance Methods

escape_double_quotes(str) click to toggle source
# File lib/xronor/dsl/job.rb, line 61
def escape_double_quotes(str)
  str.gsub(/"/) { '\"' }
end
escape_single_quotes(str) click to toggle source
# File lib/xronor/dsl/job.rb, line 57
def escape_single_quotes(str)
  str.gsub(/'/) { "'\\''" }
end