annotate vendor/plugins/redmine_bibliography/app/models/authorship.rb @ 1169:492ff72268e3 bug_521

Close obsolete branch bug_521
author Chris Cannam
date Thu, 18 Oct 2012 10:42:48 +0100
parents b1debf464389
children 7d62d2f497c5
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@686 9
luis@686 10 validates_presence_of :name_on_paper
luis@483 11
luis@597 12 attr_accessor :is_user, :author_user_id, :search_name, :identify_author, :search_results
luis@563 13 before_save :associate_author_user
luis@591 14
luis@601 15 named_scope :like_unique, lambda {|q|
luis@601 16 s = "%#{q.to_s.strip.downcase}%"
luis@601 17 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@601 18 :order => 'name_on_paper',
luis@601 19 :group => "name_on_paper, institution, email"
luis@601 20 }
luis@601 21 }
luis@601 22
luis@591 23 named_scope :like, lambda {|q|
luis@591 24 s = "%#{q.to_s.strip.downcase}%"
luis@601 25 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@591 26 :order => 'name_on_paper'
luis@591 27 }
luis@591 28 }
luis@591 29
luis@592 30 def name
luis@592 31 return self.name_on_paper
luis@592 32 end
luis@591 33
luis@591 34 def <=>(authorship)
luis@592 35 name.downcase <=> authorship.name.downcase
luis@592 36 end
luis@592 37
luis@592 38 def mail
luis@592 39 return self.email
luis@591 40 end
luis@530 41
luis@563 42 protected
luis@563 43 def associate_author_user
luis@601 44 case self.identify_author
luis@601 45 when "no"
luis@601 46 author = Author.new
luis@601 47 author.save
luis@601 48 self.author_id = author.id
luis@601 49 else
luis@601 50 selected = self.search_results
luis@601 51 selected_classname = Kernel.const_get(selected.split('_')[0])
luis@601 52 selected_id = selected.split('_')[1]
luis@601 53 object = selected_classname.find(selected_id)
luis@563 54
luis@601 55 if object.respond_to? :name_on_paper
luis@601 56 # Authorship
luis@601 57 self.author_id = object.author.id
luis@601 58 else
luis@601 59 # User
luis@601 60 unless object.author.nil?
luis@601 61 self.author_id = object.author.id
luis@601 62 else
luis@601 63 author = Author.new
luis@601 64 object.author = author
luis@601 65 object.save
luis@601 66 self.author_id = object.author.id
luis@601 67 end
luis@601 68 end
luis@601 69 end
luis@518 70 end
luis@328 71 end