annotate plugins/redmine_bibliography/app/models/authorship.rb @ 1386:e4c393cebb1a luisf

Merger from testing branch.
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Tue, 24 Sep 2013 16:25:05 +0100
parents a2e51c0a7860
children 0f918e37e1d6
rev   line source
luis@328 1 class Authorship < ActiveRecord::Base
luis@1123 2 unloadable
luis@1123 3
luis@328 4 belongs_to :author
luis@328 5 belongs_to :publication
luis@1123 6
luis@483 7 accepts_nested_attributes_for :author
luis@483 8 accepts_nested_attributes_for :publication
luis@686 9
luis@686 10 validates_presence_of :name_on_paper
luis@1123 11
luis@1286 12 attr_accessor :search_author_class, :search_author_id, :search_name, :search_results, :identify_author
luis@1364 13
luis@1364 14 before_create :associate_author_user
luis@1367 15 before_update :delete_publication_cache
luis@591 16
luis@1363 17 # tod: review scope of ordering
luis@1363 18 acts_as_list :column => 'auth_order'
luis@1317 19
luis@1124 20 # todo: review usage of scope --lf.20130108
luis@1123 21 scope :like_unique, lambda {|q|
luis@601 22 s = "%#{q.to_s.strip.downcase}%"
luis@601 23 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@601 24 :order => 'name_on_paper',
luis@601 25 :group => "name_on_paper, institution, email"
luis@601 26 }
luis@601 27 }
luis@601 28
luis@1124 29 # todo: review usage of scope --lf.20130108
luis@1123 30 scope :like, lambda {|q|
luis@591 31 s = "%#{q.to_s.strip.downcase}%"
luis@601 32 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@591 33 :order => 'name_on_paper'
luis@591 34 }
luis@591 35 }
luis@1123 36
luis@592 37 def name
luis@592 38 return self.name_on_paper
luis@592 39 end
luis@1123 40
luis@591 41 def <=>(authorship)
luis@592 42 name.downcase <=> authorship.name.downcase
luis@592 43 end
luis@1123 44
luis@592 45 def mail
luis@592 46 return self.email
luis@591 47 end
luis@1123 48
luis@1123 49 protected
luis@1367 50
luis@1367 51 def delete_publication_cache
luis@1367 52 publication = Publication.find(self.publication_id)
luis@1367 53 Rails.cache.delete "publication-#{publication.id}-ieee"
luis@1367 54 Rails.cache.delete "publication-#{publication.id}-bibtex"
luis@1367 55 end
luis@1367 56
luis@1123 57 def associate_author_user
luis@1286 58 case self.search_author_class
luis@1366 59 when ""
luis@1366 60 logger.debug { "Unknown Author to be added..." }
luis@1366 61 when "User"
luis@1366 62 author = Author.new
luis@1366 63 author.save
luis@1366 64 self.author_id = author.id
luis@1366 65
luis@1366 66 when "Author"
luis@1366 67 selected = self.search_results
luis@1366 68 selected_classname = Kernel.const_get(self.search_author_class)
luis@1366 69 selected_id = self.search_author_id
luis@1366 70 object = selected_classname.find(selected_id)
luis@1366 71
luis@1366 72 if object.respond_to? :name_on_paper
luis@1366 73 # Authorship
luis@1366 74 self.author_id = object.author.id
luis@601 75 else
luis@1366 76 # User
luis@1366 77 unless object.author.nil?
luis@601 78 self.author_id = object.author.id
luis@601 79 else
luis@1366 80 author = Author.new
luis@1366 81 object.author = author
luis@1366 82 object.save
luis@1366 83 self.author_id = object.author.id
luis@601 84 end
luis@1366 85 end
luis@1123 86 end
luis@518 87 end
luis@328 88 end