class Xronor::DSL

Constants

DEFAULT_CRON_TIMEZONE
DEFAULT_JOB_TEMPLATE
DEFAULT_PREFIX
DEFAULT_TIMEZONE

Public Class Methods

eval(body) click to toggle source
# File lib/xronor/dsl.rb, line 11
def eval(body)
  self.new(body)
end
new(body) click to toggle source
# File lib/xronor/dsl.rb, line 20
def initialize(body)
  @result = OpenStruct.new(
    jobs: {},
    options: {
      prefix: DEFAULT_PREFIX,
      timezone: DEFAULT_TIMEZONE,
      cron_timezone: DEFAULT_CRON_TIMEZONE,
      job_template: DEFAULT_JOB_TEMPLATE,
    },
  )

  instance_eval(body)
end
seconds(number, units) click to toggle source
# File lib/xronor/dsl.rb, line 15
def seconds(number, units)
  Xronor::DSL::NumericSeconds.seconds(number, units)
end

Public Instance Methods

default(&block) click to toggle source
# File lib/xronor/dsl.rb, line 34
def default(&block)
  @result.options.merge!(Xronor::DSL::Default.new(&block).result.to_h)
end
every(frequency, options = {}, &block) click to toggle source
# File lib/xronor/dsl.rb, line 38
def every(frequency, options = {}, &block)
  job = Xronor::DSL::Job.new(frequency, @result.options.merge(options), &block).result
  raise Xronor::DSL::DuplicatedError, "Job \"#{job.name}\" already exists" if @result.jobs[job.name]
  @result.jobs[job.name] = job
end
job_template(template) click to toggle source
# File lib/xronor/dsl.rb, line 44
def job_template(template)
  @result.options[:job_template] = template
end
job_type(name, template) click to toggle source
# File lib/xronor/dsl.rb, line 48
def job_type(name, template)
  Xronor::DSL::Job.class_eval do
    define_method(name) do |task, *args|
      options = { task: task }
      options.merge!(args[0]) if args[0].is_a? Hash
      job = process_template(template, options)
      @result.command = process_template(@options[:job_template], options.merge({ job: job }))
    end
  end
end
result() click to toggle source
# File lib/xronor/dsl.rb, line 59
def result
  @result
end