class RayyanFormats::Command

Public Class Methods

new(args) click to toggle source
# File lib/rayyan-formats.rb, line 9
def initialize(args)
  # check arguments
  raise "Must provide input file name(s) as the first arguments followed by the output file name\n" +
        "USAGE: #{File.basename($0)} <input-file1> [<input-file2> [<input-file3> [...]]] <output-file>" \
        if args.length < 2

  @output_file = args.pop
  @input_files = args
  @ext = File.extname(@output_file).delete('.')

  raise "Output file name must have an extension" if @ext.empty?

  # configure RayyanFormats
  logger = Logger.new(STDERR)
  logger.level = Logger::WARN
  Base.logger = logger
  Base.plugins = Base.available_plugins
  Base.max_file_size = 1_073_741_824 # 1GB
end

Public Instance Methods

run() click to toggle source
# File lib/rayyan-formats.rb, line 29
def run
  begin
    plugin = Base.get_export_plugin(@ext)
    out, total, grand_total = File.open(@output_file, "w"), 0, 0
    @input_files.each do |input_filename|
      total = 0
      Base.import(Source.new(input_filename)) { |target|
        out.puts plugin.export(target, {include_abstracts: true})
        total += 1
      }
      grand_total += total
      $stdout.puts "Imported #{total} #{total == 1 ? 'entry' : 'entries'} from: #{input_filename}"
    end
    $stdout.puts "Exported #{grand_total} #{grand_total == 1 ? 'entry' : 'entries'} to: #{@output_file}"
  ensure
    out.close if out
  end
end