before_validation :bootstrap_components
before_validation :update_success
- before_create :verify_status
- before_save :verify_status
+ before_validation :verify_status
+ before_create :set_state_before_save
+ before_save :set_state_before_save
api_accessible :user, extend: :common do |t|
t.add :pipeline_template_uuid
end
# if all components have input, the pipeline is Ready
- def self.is_ready components
- if !components || components.empty? # is this correct?
- return true
+ def components_look_ready?
+ if !self.components || self.components.empty?
+ return false
end
all_components_have_input = true
- components.each do |name, component|
- component['script_parameters'].each do |parametername, parameter|
+ self.components.each do |name, component|
+ component['script_parameters'].andand.each do |parametername, parameter|
parameter = { 'value' => parameter } unless parameter.is_a? Hash
- if parameter['value'].nil? and
- ![false,'false',0,'0'].index parameter['required']
+ if parameter['value'].nil? and parameter['required']
if parameter['output_of']
next
end
if self.active
self.state = RunningOnServer
else
- if PipelineInstance.is_ready self.components
+ if self.components_look_ready?
self.state = Ready
else
self.state = New
end
elsif state_changed?
case self.state
- when New, Ready
+ when New, Ready, Paused
self.active = false
self.success = nil
when RunningOnServer
when Failed
self.active = false
self.success = false
+ self.state = Failed # before_validation will fail if false is returned in the previous line
when Complete
self.active = false
self.success = true
+ else
+ return false
end
- else # new object create or save
+ elsif components_changed?
if !self.state || self.state == New || !self.active
- if PipelineInstance.is_ready self.components
+ if self.components_look_ready?
self.state = Ready
else
self.state = New
end
end
+ def set_state_before_save
+ if !self.state || self.state == New
+ if self.active
+ self.state = RunningOnServer
+ elsif self.components_look_ready?
+ self.state = Ready
+ else
+ self.state = New
+ end
+ end
+ end
+
end