class BibTeX::Bibliography
Public Instance Methods
unify_interactively(field) { || ... }
click to toggle source
# File lib/bibtex_cleaner.rb, line 64 def unify_interactively(field) elements = entries.values todo = elements.clone elements.each do |prime| next unless todo.include?(prime) if prime.respond_to?(field) && prime.send(field) primevalue = prime.send(field).to_s todo.delete(prime) es = todo.select do |e| e.respond_to?(field) && Levenshtein.normalized_distance( e.send(field).to_s.downcase.gsub(/[^A-Za-z]/, "").split.sort.join(" "), primevalue.downcase.gsub(/[^A-Za-z]/, "").split.sort.join(" ")) < 0.4 end if (es + [prime]).uniq { |e| e.send(field).to_s }.size > 1 puts "#{field}: #{primevalue}" puts "These seem similar -- write (comma separated) which entries do belong in this list (or press return to skip all)" es.each_with_index do |e, i| puts "[#{i}] #{e.send(field)}" end answer = Readline.readline.strip unless answer.empty? rejects = answer.strip.split(",").map(&:strip).map(&:to_i) es = es.each_with_index.select do |(e, idx)| rejects.include? idx end.map(&:first) else es = [] end end puts "Now, enter the desired common writing for this, press return to keep all values as they are, enter '.' to apply the prime writing" puts "#{primevalue}" es.each_with_index do |e, i| puts "#{e.send(field)}" end answer = Readline.readline("", true).strip unless answer.empty? if answer == "." answer = primevalue else prime.send("#{field}=", answer) end es.each do |e| e.send("#{field}=", answer) todo.delete(e) end end puts "\n\n" yield if block_given? end end end