class BibSync::Command

Public Class Methods

new(args) click to toggle source
# File lib/bibsync/command.rb, line 6
def initialize(args)
  @args = args
  @options = {}
end

Public Instance Methods

run() click to toggle source
# File lib/bibsync/command.rb, line 11
def run
  @opts = OptionParser.new(&method(:set_opts))
  @opts.parse!(@args)
  process
  exit 0
rescue Exception => ex
  raise ex if Log.trace || SystemExit === ex
  $stderr.print "#{ex.class}: " if ex.class != RuntimeError
  $stderr.puts ex.message
  $stderr.puts '  Use --trace for backtrace.'
  exit 1
end

Private Instance Methods

process() click to toggle source
# File lib/bibsync/command.rb, line 88
def process
  if @args.size != 0
    puts 'Too many arguments'
    puts @opts
    exit
  end

  if @options[:bib]
    bib = @options[:bib] = Bibliography.new(@options[:bib])
    bib.transform_hook = Transformer.new
    bib.format_hook = JabRefFormatter.new if @options[:jabref]
    at_exit { bib.save }
  end

  actions = []
  actions << :FetchFromArXiv if @options[:fetch]
  actions << :CheckArXivVersions if @options[:check_versions] || @options[:update]
  actions << :SynchronizeFiles << :DetermineArXivDOI << :SynchronizeMetadata if @options[:sync] || @options[:resync]
  actions << :FindMyCitations if @options[:citedbyme]
  actions << :Validate if @options[:bib]

  if actions.empty?
    puts "Please specify actions! See #{$0} --help"
    exit
  end

  actions.map {|a| Actions.const_get(a).new(@options) }.each {|a| a.run }
end
set_opts(opts) click to toggle source
# File lib/bibsync/command.rb, line 26
def set_opts(opts)
  opts.banner = "Usage: #{$0} [options]"

  opts.on('-b', '--bib bibfile.bib', 'Set bibliography') do |bib|
    @options[:bib] = bib
  end

  opts.on('-d', '--dir directory', 'Set directory') do |dir|
    @options[:dir] = dir
  end

  opts.on('-n', '--non-recursive', 'Don\'t scan recursively') do |dir|
    @options[:non_recursive] = true
  end

  opts.on('-v', '--check-versions', 'Check for updated arXiv papers') do
    @options[:check_versions] = true
  end

  opts.on('-u', '--update', 'Update arXiv papers') do
    @options[:update] = true
  end

  opts.on('-s', '--sync', 'Synchronize missing metadata') do
    @options[:sync] = true
  end

  opts.on('-r', '--resync', 'Force synchronization with arXiv and DOI') do
    @options[:resync] = true
  end

  opts.on('-m', '--citedbyme directory', 'Find my citations in my TeX files') do |dir|
    @options[:citedbyme] = dir
  end

  opts.on('-j', '--jabref', 'Format bibliography file with JabRef') do
    @options[:jabref] = true
  end

  opts.on('-f', '--fetch url', 'Fetch arXiv paper as PDF file') do |url|
    (@options[:fetch] ||= []) << url
  end

  opts.on('-V', '--verbose', 'Verbose output') do
    Log.level = :debug
  end

  opts.on('--trace', 'Show a full traceback on error') do
    Log.trace = true
  end

  opts.on('-h', '--help', 'Display this help') do
    puts opts
    exit
  end

  opts.on('--version', 'Display version information') do
    puts "BibSync Version #{BibSync::VERSION}"
    exit
  end
end