summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorShinya Maeda <gitlab.shinyamaeda@gmail.com>2017-03-30 03:33:23 +0900
committerShinya Maeda <gitlab.shinyamaeda@gmail.com>2017-04-06 23:46:58 +0900
commit2a1a7310d04f6d64a983d2438fdcc515e7118d91 (patch)
tree6726a9c68d322a292665bceedd7df9fea212a74b /app/models
parent75f5e710434fbe6d709e6895c8c9328c9e92962e (diff)
downloadgitlab-ce-2a1a7310d04f6d64a983d2438fdcc515e7118d91.tar.gz
Add validation to Ci::TriggerSchedule (Halfway)
Diffstat (limited to 'app/models')
-rw-r--r--app/models/ci/trigger_schedule.rb35
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