module TavernaPlayer::Concerns::Models::RunPort

Constants

MAXIMUM_DATABASE_VALUE_SIZE

Public Instance Methods

deep_value(index) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 84
def deep_value(index)
  # Need to mangle the path here in two ways:
  # * Files are indexed from 1 (not zero) in the output zip files.
  # * Errors are saved to a file with a '.error' suffix.
  path = index.map { |i| i + 1 }.join("/")
  path += ".error" if value_is_error?(index)

  read_file_from_zip(file.path, path)
end
delete_value() click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 57
def delete_value
  self[:value] = nil
end
display_name() click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 112
def display_name
  name.gsub('_', ' ')
end
filename() click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 116
def filename
  port_file = depth == 0 ? name : "#{name}.zip"
  "#{run.name}-#{port_file}"
end
path(*indices) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 168
def path(*indices)
  index = [*indices].flatten
  path = index.empty? ? "" : "/" + index.join("/")
  file_url_via_run + path
end
process_value() click to toggle source

If the value is too big to fit in the database then overflow it into a file.

# File lib/taverna_player/concerns/models/run_port.rb, line 63
def process_value
  v = self[:value]

  if !v.blank? && v.size > MAXIMUM_DATABASE_VALUE_SIZE
    self[:value] = v[0...MAXIMUM_DATABASE_VALUE_SIZE]
    save_value_to_file(v)
  else
    self.file = nil unless file.path.blank?
  end
end
save_value_to_file(v) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 74
def save_value_to_file(v)
  Dir.mktmpdir("#{id}", Rails.root.join("tmp")) do |tmp_dir|
    tmp_file_name = File.join(tmp_dir, "#{name}.txt")

    File.write(tmp_file_name, v.force_encoding("UTF-8"))

    self.file = File.new(tmp_file_name)
  end
end
set_value_metadata(field, value) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 100
def set_value_metadata(field, value)
  return unless depth == list_depth(value)

  md = metadata
  md = Hash.new if md.nil?
  md[field] = value
  self.metadata = md
  save
end
value(*indices) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 150
def value(*indices)
  file_path = file.path
  if depth == 0
    if file_path.blank?
      self[:value]
    else
      value_is_text? ? File.read(file_path) : File.binread(file_path)
    end
  else
    index = [*indices].flatten
    index.empty? ? File.binread(file_path) : deep_value(index)
  end
end
value=(v) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 164
def value=(v)
  self[:value] = v.force_encoding("BINARY")
end
value_is_error?(*indices) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 134
def value_is_error?(*indices)
  value_type(*indices) == "application/x-error"
end
value_is_text?(*indices) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 129
def value_is_text?(*indices)
  type = value_type(*indices)
  type.starts_with?("text")
end
value_metadata(field, *indices) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 94
def value_metadata(field, *indices)
  return if metadata.nil?
  index = [*indices].flatten
  recurse_into_lists(metadata[field], index)
end
value_preview() click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 146
def value_preview
  self[:value]
end
value_size(*indices) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 138
def value_size(*indices)
  value_metadata(:size, *indices)
end
value_size=(size) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 142
def value_size=(size)
  set_value_metadata(:size, size)
end
value_type(*indices) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 121
def value_type(*indices)
  value_metadata(:type, *indices) || "text/plain"
end
value_type=(type) click to toggle source
# File lib/taverna_player/concerns/models/run_port.rb, line 125
def value_type=(type)
  set_value_metadata(:type, type)
end