9684: add workflow resource to api server
[arvados.git] / services / api / app / models / workflow.rb
1 class Workflow < ArvadosModel
2   include HasUuid
3   include KindAndEtag
4   include CommonApiTemplate
5
6   validate :validate_workflow
7   after_save :set_name_and_description
8
9   api_accessible :user, extend: :common do |t|
10     t.add :name
11     t.add :description
12     t.add :workflow
13   end
14
15   def validate_workflow
16     begin
17       @workflow_yaml = YAML.load self.workflow if !workflow.blank?
18     rescue
19       errors.add :validate_workflow, "#{self.workflow} is not valid yaml"
20     end
21   end
22
23   def set_name_and_description
24     begin
25       old_wf = []
26       old_wf = YAML.load self.workflow_was if !self.workflow_was.blank?
27       changes = self.changes
28       need_save = false
29       ['name', 'description'].each do |a|
30         if !changes.include?(a)
31           v = self.read_attribute(a)
32           if !v.present? or v == old_wf[a]
33             self[a] = @workflow_yaml[a]
34           end
35         end
36       end
37     rescue => e
38       errors.add :set_name_and_description, "#{e.message}"
39     end
40   end
41 end