Sha256: bf92b6909e07323334887f45ff5bd396480106dc5e075286d3a7bf267dc14e2a

Contents?: true

Size: 1.36 KB

Versions: 33

Compression:

Stored size: 1.36 KB

Contents

module Bizside
  class CronValidator
    MIN_MINUTE  = 0
    MAX_MINUTE  = 59
    MIN_HOUR    = 0
    MAX_HOUR    = 23
    MIN_DAY     = 1
    MAX_DAY     = 31
    MIN_MONTH   = 1
    MAX_MONTH   = 12
    MIN_WEEKDAY = 0
    MAX_WEEKDAY = 7
    CRON_ATTR   = %w(minute hour day month weekday)

    def initialize(cron)
      @minute, @hour, @day, @month, @weekday = cron.split
    end

    def valid?
      valid_minute? &&
      valid_hour? &&
      valid_day? &&
      valid_month? &&
      valid_weekday?
    end

    CRON_ATTR.each do |attr|
      class_eval <<-EOS
        private

        def valid_#{attr}?
          valid_format?(@#{attr}) &&
          valid_range?(MIN_#{attr.upcase}, MAX_#{attr.upcase}, @#{attr})
        end
      EOS
    end

    private

    def valid_format?(value)
      value =~ /\A(\*(\/\d+)?|\d+(,\d+)*(-\d+)*(\/\d+)*)\Z/
    end

    def valid_range?(min, max, value)
      validate_values = remove_to_ignore_value(value).split(",")
      validate_values.reject do |v|
        if v.include?("-")
          range_v = v.split("-")
          (min..max).include?(range_v[0].to_i) &&
          (min..max).include?(range_v[1].to_i) &&
          range_v[0].to_i < range_v[1].to_i
        else
          (min..max).include? v.to_i
        end
      end.empty?
    end

    def remove_to_ignore_value(value)
      value.gsub(/(\/\d*|\*)/, "")
    end
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
bizside-2.3.6 lib/bizside/cron_validator.rb
bizside-2.3.5 lib/bizside/cron_validator.rb
bizside-2.3.4 lib/bizside/cron_validator.rb
bizside-2.3.3 lib/bizside/cron_validator.rb
bizside-2.3.2 lib/bizside/cron_validator.rb
bizside-2.3.1 lib/bizside/cron_validator.rb
bizside-2.3.0 lib/bizside/cron_validator.rb
bizside-2.2.3 lib/bizside/cron_validator.rb
bizside-2.2.2 lib/bizside/cron_validator.rb
bizside-2.2.1 lib/bizside/cron_validator.rb
bizside-2.2.0 lib/bizside/cron_validator.rb
bizside-2.1.12 lib/bizside/cron_validator.rb
bizside-2.1.11 lib/bizside/cron_validator.rb
bizside-2.1.10 lib/bizside/cron_validator.rb
bizside-2.1.9 lib/bizside/cron_validator.rb
bizside-2.1.8 lib/bizside/cron_validator.rb
bizside-2.1.7 lib/bizside/cron_validator.rb
bizside-2.1.6 lib/bizside/cron_validator.rb
bizside-2.1.5 lib/bizside/cron_validator.rb
bizside-2.1.4 lib/bizside/cron_validator.rb