module Scheduled

Constants

Job
VERSION

Public Instance Methods

every(interval, &block) click to toggle source
# File lib/scheduled.rb, line 10
def every(interval, &block)
  if interval.is_a?(Integer)
    task = Concurrent::TimerTask.new(execution_interval: interval, run_now: true) do
      block.call
    end

    task.execute

  elsif interval.is_a?(String)
    run = ->() {
      parsed_cron = CronParser.new(interval)
      next_tick_delay = parsed_cron.next(Time.now) - Time.now

      task = Concurrent::ScheduledTask.execute(next_tick_delay) do
        block.call
        run.call
      end

      task.execute
    }

    run.call

  elsif interval.respond_to?(:call)
    job = Job.new

    task = Concurrent::TimerTask.new(execution_interval: 1, run_now: true) do |timer_task|
      case interval.call(job)
      when true
        block.call

        job.last_run = Time.now
      when :cancel
        timer_task.shutdown
      end
    end

    task.execute
  else
    raise ArgumentError, "Unsupported value for interval"
  end
end
wait() click to toggle source
# File lib/scheduled.rb, line 53
def wait
  trap("INT") { exit }

  loop do
    sleep 1
  end
end