annotate vendor/plugins/redmine_bibliography/app/models/authorship.rb @ 657:a4775b8e352f feature_36

Merge from 655:1ee95265342f
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Fri, 09 Sep 2011 14:55:14 +0100
parents 1608b3cb50cd
children b1debf464389
rev   line source
luis@328 1 class Authorship < ActiveRecord::Base
luis@562 2 unloadable
luis@562 3
luis@328 4 belongs_to :author
luis@328 5 belongs_to :publication
luis@393 6
luis@483 7 accepts_nested_attributes_for :author
luis@483 8 accepts_nested_attributes_for :publication
luis@483 9
luis@597 10 attr_accessor :is_user, :author_user_id, :search_name, :identify_author, :search_results
luis@563 11 before_save :associate_author_user
luis@591 12
luis@601 13 named_scope :like_unique, lambda {|q|
luis@601 14 s = "%#{q.to_s.strip.downcase}%"
luis@601 15 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@601 16 :order => 'name_on_paper',
luis@601 17 :group => "name_on_paper, institution, email"
luis@601 18 }
luis@601 19 }
luis@601 20
luis@591 21 named_scope :like, lambda {|q|
luis@591 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@591 24 :order => 'name_on_paper'
luis@591 25 }
luis@591 26 }
luis@591 27
luis@592 28 def name
luis@592 29 return self.name_on_paper
luis@592 30 end
luis@591 31
luis@591 32 def <=>(authorship)
luis@592 33 name.downcase <=> authorship.name.downcase
luis@592 34 end
luis@592 35
luis@592 36 def mail
luis@592 37 return self.email
luis@591 38 end
luis@530 39
luis@563 40 protected
luis@563 41 def associate_author_user
luis@601 42 case self.identify_author
luis@601 43 when "no"
luis@601 44 author = Author.new
luis@601 45 author.save
luis@601 46 self.author_id = author.id
luis@601 47 else
luis@601 48 selected = self.search_results
luis@601 49 selected_classname = Kernel.const_get(selected.split('_')[0])
luis@601 50 selected_id = selected.split('_')[1]
luis@601 51 object = selected_classname.find(selected_id)
luis@563 52
luis@601 53 if object.respond_to? :name_on_paper
luis@601 54 # Authorship
luis@601 55 self.author_id = object.author.id
luis@601 56 else
luis@601 57 # User
luis@601 58 unless object.author.nil?
luis@601 59 self.author_id = object.author.id
luis@601 60 else
luis@601 61 author = Author.new
luis@601 62 object.author = author
luis@601 63 object.save
luis@601 64 self.author_id = object.author.id
luis@601 65 end
luis@601 66 end
luis@601 67 end
luis@518 68 end
luis@328 69 end