class RDF::Raptor::CLI::Writer
CLI
writer implementation.
Public Class Methods
new(output = $stdout, base_uri: nil, **options, &block)
click to toggle source
Initializes the CLI
writer instance.
@param [IO, File] output @param [Hash{Symbol => Object}] options
any additional options (see `RDF::Writer#initialize`)
@yield [writer] ‘self` @yieldparam [RDF::Writer] writer @yieldreturn [void]
Calls superclass method
# File lib/rdf/raptor/cli.rb, line 138 def initialize(output = $stdout, base_uri: nil, **options, &block) raise RDF::WriterError, "`rapper` binary not found" unless RDF::Raptor.available? format = self.class.format.rapper_format case output when File, IO, StringIO, Tempfile @command = "#{RAPPER} -q -i turtle -o #{format} file:///dev/stdin" @command << " '#{base_uri}'" if options.has_key?(:base_uri) @rapper = IO.popen(@command, 'rb+') else raise ArgumentError, "unsupported output type: #{output.inspect}" end @writer = RDF::NTriples::Writer.new(@rapper, **options) super(output, base_uri: base_uri, **options, &block) end
Protected Instance Methods
output_transit(may_block)
click to toggle source
Feeds any available ‘rapper` output to the destination.
@param [Boolean] may_block @return [void]
# File lib/rdf/raptor/cli.rb, line 188 def output_transit(may_block) unless @rapper.closed? chunk_size = @options[:chunk_size] || 4096 # bytes begin loop do @output.write(may_block ? @rapper.sysread(chunk_size) : @rapper.read_nonblock(chunk_size)) end rescue EOFError => e @rapper.close rescue Errno::EAGAIN, Errno::EINTR # eat end end end
write_epilogue()
click to toggle source
@return [void] @see RDF::Writer#write_epilogue
# File lib/rdf/raptor/cli.rb, line 178 def write_epilogue @rapper.close_write unless @rapper.closed? output_transit(true) end
write_prologue()
click to toggle source
@return [void] @see RDF::Writer#write_prologue
Calls superclass method
# File lib/rdf/raptor/cli.rb, line 159 def write_prologue super end
write_triple(subject, predicate, object)
click to toggle source
@param [RDF::Resource] subject @param [RDF::URI] predicate @param [RDF::Term] object @return [void] @see RDF::Writer#write_triple
# File lib/rdf/raptor/cli.rb, line 169 def write_triple(subject, predicate, object) output_transit(false) @writer.write_triple(subject, predicate, object) output_transit(false) end