annotate plugins/redmine_bibliography/app/models/authorship.rb @ 1142:7c3de6c7b7f5 redmine-2.2-integration

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