@@ -338,23 +338,24 @@ def self.usage(options, banner: nil)
338338 # Execute one or more commands, parsing input as necessary
339339 #
340340 # @param [Array<String>] args
341+ # @param [IO] output
342+ # @param [Hash{Symbol => Object}] options
341343 # @return [Boolean]
342- def self . exec ( args , options = { } )
343- out = options [ :output ] || $stdout
344- out . set_encoding ( Encoding ::UTF_8 ) if out . respond_to? ( :set_encoding ) && RUBY_PLATFORM == "java"
344+ def self . exec ( args , output : $stdout, option_parser : self . options , **options )
345+ output . set_encoding ( Encoding ::UTF_8 ) if output . respond_to? ( :set_encoding ) && RUBY_PLATFORM == "java"
345346 cmds , args = args . partition { |e | commands . include? ( e . to_s ) }
346347
347348 if cmds . empty?
348- usage ( options . fetch ( : option_parser, self . options ) )
349+ usage ( option_parser )
349350 abort "No command given"
350351 end
351352
352353 if cmds . first == 'help'
353354 on_cmd = cmds [ 1 ]
354355 if on_cmd && COMMANDS . fetch ( on_cmd . to_sym , { } ) [ :help ]
355- usage ( options . fetch ( : option_parser, self . options ) , banner : "Usage: #{ self . basename . split ( '/' ) . last } #{ COMMANDS [ on_cmd . to_sym ] [ :help ] } " )
356+ usage ( option_parser , banner : "Usage: #{ self . basename . split ( '/' ) . last } #{ COMMANDS [ on_cmd . to_sym ] [ :help ] } " )
356357 else
357- usage ( options . fetch ( : option_parser, self . options ) )
358+ usage ( option_parser )
358359 end
359360 return
360361 end
@@ -374,7 +375,7 @@ def self.exec(args, options = {})
374375
375376 # Run each command in sequence
376377 cmds . each do |command |
377- COMMANDS [ command . to_sym ] [ :lambda ] . call ( args , options )
378+ COMMANDS [ command . to_sym ] [ :lambda ] . call ( args , output : output , ** options )
378379 end
379380 rescue ArgumentError => e
380381 abort e . message
@@ -409,7 +410,7 @@ def self.commands
409410 # @yieldparam [Array<String>] argv
410411 # @yieldparam [Hash] opts
411412 # @yieldreturn [void]
412- def self . add_command ( command , options = { } , &block )
413+ def self . add_command ( command , ** options , &block )
413414 options [ :lambda ] = block if block_given?
414415 COMMANDS [ command . to_sym ] ||= options
415416 end
@@ -431,20 +432,25 @@ def self.formats(reader: false, writer: false)
431432 # yielding a reader
432433 #
433434 # @param [Array<String>] files
435+ # @param [String] evaluate from command-line, rather than referenced file
436+ # @param [Symbol] format (:ntriples) Reader symbol for finding reader
437+ # @param [Encoding] encoding set on the input
438+ # @param [Hash{Symbol => Object}] options sent to reader
434439 # @yield [reader]
435440 # @yieldparam [RDF::Reader]
436441 # @return [nil]
437- def self . parse ( files , options = { } , &block )
442+ def self . parse ( files , evaluate : nil , format : :ntriples , encoding : Encoding :: UTF_8 , ** options , &block )
438443 if files . empty?
439444 # If files are empty, either use options[:execute]
440- input = options [ : evaluate] ? StringIO . new ( options [ : evaluate] ) : $stdin
441- input . set_encoding ( options . fetch ( : encoding, Encoding :: UTF_8 ) )
442- r = RDF ::Reader . for ( options [ : format] || :ntriples )
445+ input = evaluate ? StringIO . new ( evaluate ) : $stdin
446+ input . set_encoding ( encoding )
447+ r = RDF ::Reader . for ( format )
443448 ( @readers ||= [ ] ) << r
444449 r . new ( input , options ) do |reader |
445450 yield ( reader )
446451 end
447452 else
453+ options [ :format ] = format if format
448454 files . each do |file |
449455 RDF ::Reader . open ( file , options ) do |reader |
450456 ( @readers ||= [ ] ) << reader . class . to_s
0 commit comments