diff options
author | Shinya Maeda <gitlab.shinyamaeda@gmail.com> | 2017-03-30 03:33:23 +0900 |
---|---|---|
committer | Shinya Maeda <gitlab.shinyamaeda@gmail.com> | 2017-04-06 23:46:58 +0900 |
commit | 2a1a7310d04f6d64a983d2438fdcc515e7118d91 (patch) | |
tree | 6726a9c68d322a292665bceedd7df9fea212a74b /app/models | |
parent | 75f5e710434fbe6d709e6895c8c9328c9e92962e (diff) | |
download | gitlab-ce-2a1a7310d04f6d64a983d2438fdcc515e7118d91.tar.gz |
Add validation to Ci::TriggerSchedule (Halfway)
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/ci/trigger_schedule.rb | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/app/models/ci/trigger_schedule.rb b/app/models/ci/trigger_schedule.rb index 7efaa228a93..1b3b73971bb 100644 --- a/app/models/ci/trigger_schedule.rb +++ b/app/models/ci/trigger_schedule.rb @@ -7,15 +7,42 @@ module Ci belongs_to :project belongs_to :trigger + validates :trigger, presence: true + validates :cron, presence: true + validates :cron_time_zone, presence: true + validate :check_cron + validate :check_ref + + after_create :schedule_next_run! + def schedule_next_run! next_time = Ci::CronParser.new(cron, cron_time_zone).next_time_from_now if next_time.present? - update_attributes(next_run_at: next_time) + update!(next_run_at: next_time) end end - # def update_last_run! - # update_attributes(last_run_at: Time.now) - # end + private + + def check_cron + cron_parser = Ci::CronParser.new(cron, cron_time_zone) + is_valid_cron, is_valid_cron_time_zone = cron_parser.validation + + if !is_valid_cron + self.errors.add(:cron, " is invalid syntax") + elsif !is_valid_cron_time_zone + self.errors.add(:cron_time_zone, " is invalid timezone") + elsif (cron_parser.next_time_from_now - Time.now).abs < 1.hour + self.errors.add(:cron, " can not be less than 1 hour") + end + end + + def check_ref + if !trigger.ref.present? + self.errors.add(:ref, " is empty") + elsif trigger.project.repository.ref_exists?(trigger.ref) + self.errors.add(:ref, " does not exist") + end + end end end |