Sha256: e83819ab26b49b0ad97101b16ea391bad45973d541b44c6dfe3b3bd2480a3be7

Contents?: true

Size: 673 Bytes

Versions: 2

Compression:

Stored size: 673 Bytes

Contents

require 'parse-cron'

module AwsCron

  # Cron runner that runs a schedule based on provided time_provider
  # You should avoid using this class directly
  class CronRunner
    def initialize(cron_str, time_provider=Time, leniency_secs=30*60)
      @cron = ::CronParser.new(cron_str, time_provider)
      @time_provider = time_provider
      @leniency_secs = leniency_secs
    end

    def run(time=@time_provider.now, &block)
      if should_run(time)
        yield
      end
    end

    def should_run(time)
      last_execution_time = @cron.last(time)

      time >= last_execution_time - @leniency_secs && time < last_execution_time + @leniency_secs
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
aws_cron-0.1.2 lib/aws_cron/runner.rb
aws_cron-0.1.1 lib/aws_cron/runner.rb