Class: Xronor::DSL

Inherits:
Object
  • Object
show all
Defined in:
lib/xronor/dsl.rb,
lib/xronor/dsl/job.rb,
lib/xronor/dsl/checker.rb,
lib/xronor/dsl/default.rb,
lib/xronor/dsl/numeric_seconds.rb,
lib/xronor/dsl/schedule_converter.rb

Defined Under Namespace

Modules: Checker Classes: Default, DuplicatedError, Job, NumericSeconds, ScheduleConverter

Constant Summary collapse

DEFAULT_PREFIX =
"scheduler-"
DEFAULT_TIMEZONE =
"UTC"
DEFAULT_CRON_TIMEZONE =
"UTC"
DEFAULT_JOB_TEMPLATE =
":job"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(body) ⇒ DSL

Returns a new instance of DSL.



20
21
22
23
24
25
26
27
28
29
30
31
32
# 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

Class Method Details

.eval(body) ⇒ Object



11
12
13
# File 'lib/xronor/dsl.rb', line 11

def eval(body)
  self.new(body)
end

.seconds(number, units) ⇒ Object



15
16
17
# File 'lib/xronor/dsl.rb', line 15

def seconds(number, units)
  Xronor::DSL::NumericSeconds.seconds(number, units)
end

Instance Method Details

#default(&block) ⇒ Object



34
35
36
# 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) ⇒ Object



38
39
40
41
42
# 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) ⇒ Object



44
45
46
# File 'lib/xronor/dsl.rb', line 44

def job_template(template)
  @result.options[:job_template] = template
end

#job_type(name, template) ⇒ Object



48
49
50
51
52
53
54
55
56
57
# 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

#resultObject



59
60
61
# File 'lib/xronor/dsl.rb', line 59

def result
  @result
end