annotate plugins/redmine_bibliography/app/models/authorship.rb @ 1366:7e85f7988ab8 luisf

Fixes another possible cause for Bug #658 - was not saving publication when author was new...
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Mon, 19 Aug 2013 16:23:24 +0100
parents 4d5d25039a5f
children a2e51c0a7860
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@591 15
luis@1363 16 # tod: review scope of ordering
luis@1363 17 acts_as_list :column => 'auth_order'
luis@1317 18
luis@1124 19 # todo: review usage of scope --lf.20130108
luis@1123 20 scope :like_unique, lambda {|q|
luis@601 21 s = "%#{q.to_s.strip.downcase}%"
luis@601 22 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@601 23 :order => 'name_on_paper',
luis@601 24 :group => "name_on_paper, institution, email"
luis@601 25 }
luis@601 26 }
luis@601 27
luis@1124 28 # todo: review usage of scope --lf.20130108
luis@1123 29 scope :like, lambda {|q|
luis@591 30 s = "%#{q.to_s.strip.downcase}%"
luis@601 31 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@591 32 :order => 'name_on_paper'
luis@591 33 }
luis@591 34 }
luis@1123 35
luis@592 36 def name
luis@592 37 return self.name_on_paper
luis@592 38 end
luis@1123 39
luis@591 40 def <=>(authorship)
luis@592 41 name.downcase <=> authorship.name.downcase
luis@592 42 end
luis@1123 43
luis@592 44 def mail
luis@592 45 return self.email
luis@591 46 end
luis@1123 47
luis@1123 48 protected
luis@1123 49 def associate_author_user
luis@1366 50
luis@1366 51 logger.error { "search_author_class '#{self.search_author_class}'" }
luis@1366 52
luis@1286 53 case self.search_author_class
luis@1366 54 when ""
luis@1366 55 logger.debug { "Unknown Author to be added..." }
luis@1366 56 when "User"
luis@1366 57 author = Author.new
luis@1366 58 author.save
luis@1366 59 self.author_id = author.id
luis@1366 60
luis@1366 61 when "Author"
luis@1366 62 selected = self.search_results
luis@1366 63 selected_classname = Kernel.const_get(self.search_author_class)
luis@1366 64 selected_id = self.search_author_id
luis@1366 65 object = selected_classname.find(selected_id)
luis@1366 66
luis@1366 67 if object.respond_to? :name_on_paper
luis@1366 68 # Authorship
luis@1366 69 self.author_id = object.author.id
luis@601 70 else
luis@1366 71 # User
luis@1366 72 unless object.author.nil?
luis@601 73 self.author_id = object.author.id
luis@601 74 else
luis@1366 75 author = Author.new
luis@1366 76 object.author = author
luis@1366 77 object.save
luis@1366 78 self.author_id = object.author.id
luis@601 79 end
luis@1366 80 end
luis@1123 81 end
luis@518 82 end
luis@328 83 end