Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cron_parser.rb « ci « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 2d9ea26faf08b2b0f3248928e0e1ce96fec6b14b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module Gitlab
  module Ci
    class CronParser
      VALID_SYNTAX_SAMPLE_TIME_ZONE = 'UTC'.freeze
      VALID_SYNTAX_SAMPLE_CRON = '* * * * *'.freeze

      def initialize(cron, cron_time_zone = 'UTC')
        @cron = cron
        @cron_time_zone = cron_time_zone
      end

      def next_time_from(time)
        cron_line = try_parse_cron(@cron, @cron_time_zone)
        cron_line.next_time(time).in_time_zone(Time.zone) if cron_line.present?
      end

      def validation
        is_valid_cron = try_parse_cron(@cron, VALID_SYNTAX_SAMPLE_TIME_ZONE).present?
        is_valid_cron_time_zone = try_parse_cron(VALID_SYNTAX_SAMPLE_CRON, @cron_time_zone).present?
        return is_valid_cron, is_valid_cron_time_zone
      end

      private

      def try_parse_cron(cron, cron_time_zone)
        begin
          Rufus::Scheduler.parse("#{cron} #{cron_time_zone}")
        rescue
          nil
        end
      end
    end
  end
end