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