class BibSync::Actions::Validate

Public Class Methods

new(options) click to toggle source
# File lib/bibsync/actions/validate.rb, line 7
def initialize(options)
  raise 'Option --bib is required' unless @bib = options[:bib]
end

Public Instance Methods

run() click to toggle source
# File lib/bibsync/actions/validate.rb, line 11
def run
  notice 'Check validity'
  titles, arxivs, dois = {}, {}, {}

  @bib.each do |entry|
    next if entry.comment?

    w = []

    file = entry.file

    missing = []
    missing << :file unless file && File.file?(file[:path])
    missing += [:title, :author, :year, :abstract].reject {|k| entry[k] }
    w << "Missing #{missing.map(&:to_s).sort.join(', ')}" unless missing.empty?

    w << 'File name does not match entry key' if name_without_ext(file[:name]) != entry.key if file

    if entry[:arxiv]
      id = arxiv_id(entry, version: false, prefix: true)
      if arxivs.include?(id)
        w << "ArXiv duplicate of '#{arxivs[id]}'"
      else
        arxivs[id] = entry.key
      end
    end

    if id = entry[:doi]
      if dois.include?(id)
        w << "DOI duplicate of '#{dois[id]}'"
      else
        dois[id] = entry.key
      end
    end

    if entry[:title]
      if titles.include?(entry[:title])
        w << "Title duplicate of '#{titles[entry[:title]]}'"
      else
        titles[entry[:title]] = entry.key
      end
    end

    warning(w.join('; '), key: entry) unless w.empty?
  end
end