class ADSP::Stream::Abstract
ADSP::Stream::Abstract
class.
Attributes
Encoding name for destination data.
Encoding name for source data.
Native stream.
Current offset for source data.
Native stream status info.
Current offset for source data.
Transcode options for native stream.
Public Class Methods
Initializes stream using io
native stream and options
. Option: :external_encoding
encoding name for destination data. Option: :internal_encoding
encoding name for source data. Option: :transcode_options
transcode options for data.
# File lib/adsp/stream/abstract.rb, line 46 def initialize(io, options = {}) @raw_stream = create_raw_stream @io = io @stat = Stat.new @io.stat if @io.respond_to? :stat set_encoding options[:external_encoding], options[:internal_encoding], options[:transcode_options] reset_buffer reset_io_advise @pos = 0 end
Public Instance Methods
Sets access mode for native stream, noop.
# File lib/adsp/stream/abstract.rb, line 86 def advise # Noop nil end
Closes stream.
# File lib/adsp/stream/abstract.rb, line 183 def close @io.close if @io.respond_to? :close nil end
Returns whether stream is closed.
# File lib/adsp/stream/abstract.rb, line 190 def closed? return false unless @raw_stream.closed? if @io.respond_to? :closed @io.closed? else true end end
Resets stream and source position. Returns zero (offset for source data).
# File lib/adsp/stream/abstract.rb, line 169 def rewind @raw_stream = create_raw_stream @io.rewind if @io.respond_to? :rewind reset_buffer reset_io_advise @pos = 0 0 end
Sets encoding for source and destination data. First argument: :external_encoding
encoding name for destination data. Second argument: :internal_encoding
encoding name for source data. Third argument: :transcode_options
transcode options for data.
# File lib/adsp/stream/abstract.rb, line 97 def set_encoding(*args) external_encoding, internal_encoding, transcode_options = process_set_encoding_arguments(*args) set_target_encoding :@external_encoding, external_encoding set_target_encoding :@internal_encoding, internal_encoding @transcode_options = transcode_options self end
Returns self object.
# File lib/adsp/stream/abstract.rb, line 201 def to_io self end
Protected Instance Methods
Creates raw stream.
# File lib/adsp/stream/abstract.rb, line 62 def create_raw_stream raise NotImplementedError end
Processes encoding for source and destination data. First argument: :external_encoding
encoding name for destination data. Second argument: :internal_encoding
encoding name for source data. Third argument: :transcode_options
transcode options for data.
# File lib/adsp/stream/abstract.rb, line 111 def process_set_encoding_arguments(*args) external_encoding = args[0] unless external_encoding.nil? || external_encoding.is_a?(::Encoding) Validation.validate_string external_encoding # First argument can be "external_encoding:internal_encoding". match = %r{(.+?):(.+)}.match external_encoding unless match.nil? external_encoding = match[0] internal_encoding = match[1] transcode_options = args[1] Validation.validate_hash transcode_options unless transcode_options.nil? return [external_encoding, internal_encoding, transcode_options] end end internal_encoding = args[1] unless internal_encoding.nil? || internal_encoding.is_a?(::Encoding) Validation.validate_string internal_encoding end transcode_options = args[2] Validation.validate_hash transcode_options unless transcode_options.nil? [external_encoding, internal_encoding, transcode_options] end
Resets internal source buffer.
# File lib/adsp/stream/abstract.rb, line 71 def reset_buffer @buffer = ::String.new :encoding => ::Encoding::BINARY end
Resets native stream advise.
# File lib/adsp/stream/abstract.rb, line 78 def reset_io_advise # Both compressor and decompressor need sequential io access. @io.advise :sequential if @io.respond_to? :advise rescue ::Errno::ESPIPE # ok end
Sets value
for encoding name
.
# File lib/adsp/stream/abstract.rb, line 143 def set_target_encoding(name, value) unless value.nil? || value.is_a?(::Encoding) begin value = ::Encoding.find value rescue ::ArgumentError raise ValidateError, "invalid #{name} encoding" end end instance_variable_set name, value end
Returns encoding for source data if defined. Returns encoding for destination data if encoding for source data is not defined. Returns binary encoding if encodings for source and destination dara are not defined.
# File lib/adsp/stream/abstract.rb, line 158 def target_encoding return @internal_encoding unless @internal_encoding.nil? return @external_encoding unless @external_encoding.nil? ::Encoding::BINARY end