annotate plugins/redmine_bibliography/app/models/authorship.rb @ 1327:287f201c2802 redmine-2.2-integration

Add italic
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Wed, 19 Jun 2013 20:56:22 +0100
parents 2805873c0147
children 855b4ae5ecdd
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@563 13 before_save :associate_author_user
luis@591 14
luis@1317 15 acts_as_list
luis@1317 16
luis@1124 17 # todo: review usage of scope --lf.20130108
luis@1123 18 scope :like_unique, lambda {|q|
luis@601 19 s = "%#{q.to_s.strip.downcase}%"
luis@601 20 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@601 21 :order => 'name_on_paper',
luis@601 22 :group => "name_on_paper, institution, email"
luis@601 23 }
luis@601 24 }
luis@601 25
luis@1124 26 # todo: review usage of scope --lf.20130108
luis@1123 27 scope :like, lambda {|q|
luis@591 28 s = "%#{q.to_s.strip.downcase}%"
luis@601 29 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@591 30 :order => 'name_on_paper'
luis@591 31 }
luis@591 32 }
luis@1123 33
luis@592 34 def name
luis@592 35 return self.name_on_paper
luis@592 36 end
luis@1123 37
luis@591 38 def <=>(authorship)
luis@592 39 name.downcase <=> authorship.name.downcase
luis@592 40 end
luis@1123 41
luis@592 42 def mail
luis@592 43 return self.email
luis@591 44 end
luis@1123 45
luis@1123 46 protected
luis@1123 47 def associate_author_user
luis@1286 48 case self.search_author_class
luis@1286 49 when "User"
luis@601 50 author = Author.new
luis@601 51 author.save
luis@601 52 self.author_id = author.id
luis@601 53 else
luis@601 54 selected = self.search_results
luis@1286 55 selected_classname = Kernel.const_get(self.search_author_class)
luis@1286 56 selected_id = self.search_author_id
luis@601 57 object = selected_classname.find(selected_id)
luis@563 58
luis@601 59 if object.respond_to? :name_on_paper
luis@601 60 # Authorship
luis@601 61 self.author_id = object.author.id
luis@601 62 else
luis@601 63 # User
luis@601 64 unless object.author.nil?
luis@601 65 self.author_id = object.author.id
luis@601 66 else
luis@601 67 author = Author.new
luis@601 68 object.author = author
luis@601 69 object.save
luis@601 70 self.author_id = object.author.id
luis@601 71 end
luis@601 72 end
luis@1123 73 end
luis@518 74 end
luis@328 75 end