A class to represent an output port data value.
The mime-type we use for an empty value. Note that an empty value is not simply an empty string. It is the complete absence of a value.
The mime-type we use for an error value.
The URI reference of this port value as a String.
The size (in bytes) of the port value.
The mime type of this port value as a String.
Is this port value empty?
# File lib/t2-server/port.rb, line 548 def empty? @type == EMPTY_TYPE end
Does this port represent an error?
# File lib/t2-server/port.rb, line 540 def error? @error end
Return a printable representation of this port value for debugging purposes.
# File lib/t2-server/port.rb, line 560 def inspect @@to_s.bind(self).call.sub!(%r>\z/) { " @value=#{value.inspect}, " + "@type=#{type.inspect}, @size=#{size.inspect}>" } end
Stream this port value directly into another stream. The stream passed in
may be anything that provides a write
method; instances of IO
and File, for example. No data is cached by this method.
The number of bytes written to the stream is returned.
# File lib/t2-server/port.rb, line 509 def stream_value(stream, range = 0...@size) raise ArgumentError, "Stream passed in must provide a write method" unless stream.respond_to? :write bytes = 0 value(range) do |chunk| bytes += stream.write(chunk) end bytes end
Get the value of this port from the server.
If no parameters are supplied then this method will simply download and return all the data.
Passing in a block will allow access to the underlying data stream so the data is not stored in memory:
run.output_port("port") do |chunk| print chunk end
In both cases supplying a Range will download and return the data in that range.
This method does not cache any data.
If this port is an error then this value will be the error message.
# File lib/t2-server/port.rb, line 480 def value(range = 0...@size, &block) # The following block is a workaround for Taverna Server versions prior # to 2.4.1 and can be removed when support for those versions is no # longer required. if error? && @size == 0 value = @port.download(@reference) @size = value.size range = 0...@size if range.min.nil? return value[range] end return "" if @type == EMPTY_TYPE # Check that the range provided is sensible range = 0..range.max if range.min < 0 range = range.min...@size if range.max >= @size @port.download(@reference, range, &block) end
Stream this port value directly to a file. If a range is supplied then just that range of data is downloaded from the server. No data is cached by this method.
# File lib/t2-server/port.rb, line 530 def write_value_to_file(filename, range = 0...@size) File.open(filename, "wb") do |file| stream_value(file, range) end end