class VcoWorkflows::WorkflowParameter

WorkflowParameter is an object wrapper for workflow input and output parameters.

Attributes

name[R]

Parameter name @return [String] parameter name

subtype[R]

Parameter subtype (used when type is 'Array') @return [String] parameter subtype

type[R]

Parameter type @return [String] parameter type

value[R]

Parameter value @return [Object] parameter value

Public Class Methods

new(name = nil, type = nil, options = {}) click to toggle source

Create a new workflow parameter object @param [String] name Name of the workflow parameter @param [String] type Data type of the parameter (according to vCO) @return [VcoWorkflows::WorkflowParameter]

# File lib/vcoworkflows/workflowparameter.rb, line 30
def initialize(name = nil, type = nil, options = {})
  # Merge provided options with our defaults
  options = {
    required: false,
    value: nil
  }.merge(options)

  @name = name

  case type
  when %r{\/}
    @type = type.gsub(%r{\/.*$}, '')
    @subtype = type.gsub(%r{^.*\/}, '')
  else
    @type = type
    @subtype = nil
  end

  @required = options[:required]

  # If value is supposed to be an array but we dont' have a value yet,
  # create an empty array. If it's not supposed to be an array, just
  # set the value, even if it's still nil.
  @value = if options[:value].nil?
             @type.eql?('Array') ? [] : nil
           else
             set(options[:value])
           end
end

Public Instance Methods

as_struct() click to toggle source

Hashify the parameter (primarily useful for converting to JSON or YAML) @return [Hash] Contents of this object as a hash

# File lib/vcoworkflows/workflowparameter.rb, line 133
def as_struct
  attributes = { type: @type, name: @name, scope: 'local' }

  # If the value is an array, we need to build it in the somewhat silly
  # manner that vCO requires it to be presented. Otherwise, just paste
  # it on the end of the hash.
  if @type.eql?('Array')
    raise(IOError, ERR[:wtf]) unless @value.is_a?(Array)
    attributes[:value] = { @type.downcase => { elements: [] } }
    @value.each { |val| attributes[:value][@type.downcase][:elements] << { @subtype => { value: val } } }
  else
    attributes[:value] = { @type => { value: @value } }
  end
  attributes
end
required(required = true) click to toggle source

Set whether or not this WorkflowParameter is required @param [Boolean] required Set this parameter as required (if not specified)

# File lib/vcoworkflows/workflowparameter.rb, line 88
def required(required = true)
  @required = required
end
required?() click to toggle source

Determine whether or not this WorkflowParameter has been marked as required @return [Boolean]

# File lib/vcoworkflows/workflowparameter.rb, line 96
def required?
  @required
end
set(value) click to toggle source

Set the parameter value @param [Object] value Value for the parameter

# File lib/vcoworkflows/workflowparameter.rb, line 63
def set(value)
  # Do some basic checking for Arrays.
  unless value.nil?
    case @type
    when 'Array'
      raise(IOError, ERR[:param_verify_failed]) unless value.is_a?(Array)
    end
  end
  @value = value
end
set?() click to toggle source

Has a value been set for this parameter? @return [Boolean]

# File lib/vcoworkflows/workflowparameter.rb, line 77
def set?
  case value.class
  when Array
    value.empty? ? false : true
  else
    value.nil? ? false : true
  end
end
to_json() click to toggle source

Public Return a JSON document representation of this object @return [String] JSON representation

# File lib/vcoworkflows/workflowparameter.rb, line 125
def to_json
  as_struct.to_json
end
to_s() click to toggle source

Return a string representation of the parameter @return [String] Pretty-formatted string

# File lib/vcoworkflows/workflowparameter.rb, line 104
def to_s
  string = @name.to_s
  # If value is either nil or an empty array
  if @value.nil? || @value.is_a?(Array) && @value.empty?
    string << " (#{@type}"
    string << "/#{@subtype}" if @subtype
    string << ')'
    string << ' [required]' if @required
  elsif @type.eql?('Array')
    string << ' ='
    @value.each { |v| string << "\n  - #{v}" }
  else
    string << " = #{@value}"
  end
  string << "\n"
end