diff options
author | Shinya Maeda <gitlab.shinyamaeda@gmail.com> | 2017-04-04 12:44:25 +0300 |
---|---|---|
committer | Shinya Maeda <gitlab.shinyamaeda@gmail.com> | 2017-04-06 17:46:58 +0300 |
commit | 914bef671f54c04a0d36d8e0f8c9830d6dea7b03 (patch) | |
tree | 46067eb41371f1b5a1cbc9a27444ecbc40c45043 /lib/gitlab/ci/cron_parser.rb | |
parent | 27f981b2901098f894e587bbd96b09e2a0f0c404 (diff) |
Move Ci::CronParser to Gitlab::Ci::CronParser
Diffstat (limited to 'lib/gitlab/ci/cron_parser.rb')
-rw-r--r-- | lib/gitlab/ci/cron_parser.rb | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/gitlab/ci/cron_parser.rb b/lib/gitlab/ci/cron_parser.rb new file mode 100644 index 00000000000..01f37142510 --- /dev/null +++ b/lib/gitlab/ci/cron_parser.rb @@ -0,0 +1,38 @@ +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) + if cron_line.present? + cron_line.next_time(time).in_time_zone(Time.zone) + else + nil + end + 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
\ No newline at end of file |