class Teneo::DataModel::IngestWorkflow

noinspection RailsParamDefResolve

Public Class Methods

from_hash(hash, id_tags = [:ingest_agreement_id, :name]) click to toggle source
Calls superclass method Teneo::DataModel::Base::from_hash
# File lib/teneo/data_model/ingest_workflow.rb, line 33
def self.from_hash(hash, id_tags = [:ingest_agreement_id, :name])
  agreement_name = hash.delete(:ingest_agreement)
  query = agreement_name ? {name: agreement_name} : {id: hash[:ingest_agreement_id]}
  ingest_agreement = record_finder Teneo::DataModel::IngestAgreement, query
  hash[:ingest_agreement_id] = ingest_agreement.id

  params = hash.delete(:parameters)
  tasks = hash.delete(:tasks)

  item = super(hash, id_tags) do |item, h|
    if (workflow = h.delete(:workflow))
      item.workflow = record_finder Teneo::DataModel::Workflow, name: workflow
    end
  end

  if params
    item.parameter_refs.clear
    params.each do |name, definition|
      item.parameter_refs <<
          Teneo::DataModel::ParameterRef.from_hash(definition.merge(name: name,
                                                                    with_param_refs_id: item.id,
                                                                    with_param_refs_type: item.class.name))
    end
    item.save!
  end

  if tasks
    item.ingest_tasks.clear
    tasks.each do |task|
      task[:ingest_workflow_id] = item.id
      item.ingest_tasks << Teneo::DataModel::IngestTask.from_hash(task)
    end
    item.save!
  end

  item
end

Public Instance Methods

parameter_def(param_name) click to toggle source
# File lib/teneo/data_model/ingest_workflow.rb, line 19
def parameter_def(param_name)
  ref = parameter_refs.find_by(name: param_name)
  return nil unless ref
  delegation = ref.delegation
  target, name = delegation.split(/[,\s]+/).first.split('#')
  task = ingest_tasks.find_by(stage: target)
  workflow = task.workflow
  result = workflow.parameter_def(name)
  if (param_value = task.parameter_values.find_by(name: name))
    result[:default] = param_value.value
  end
  result.merge(ref.to_hash.select {|k,_| [:description, :help, :default].include?(k)})
end