class VcoWorkflows::WorkflowParameter
WorkflowParameter
is an object wrapper for workflow input and output parameters.
Attributes
Parameter name @return [String] parameter name
Parameter subtype (used when type is 'Array') @return [String] parameter subtype
Parameter type @return [String] parameter type
Parameter value @return [Object] parameter value
Public Class Methods
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
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
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
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 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
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
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
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