annotate plugins/redmine_bibliography/app/models/authorship.rb @ 1395:0e4c6c2f400e biblio_alt_search_auth

Fixed teh way the model is accessing the virtual attributes.
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Sat, 28 Sep 2013 16:04:04 +0100
parents 0f918e37e1d6
children bf2db886a543
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@1395 12 attr_writer :search_author_id , :search_author_class
luis@1394 13 attr_writer :search_author_tie
luis@1364 14
luis@1394 15 ### attr_accessor :search_results, :identify_author
luis@1394 16 ## attr_writer :search_author_class
luis@1394 17
luis@1395 18 before_save :set_author
luis@1367 19 before_update :delete_publication_cache
luis@591 20
luis@1363 21 # tod: review scope of ordering
luis@1363 22 acts_as_list :column => 'auth_order'
luis@1317 23
luis@1124 24 # todo: review usage of scope --lf.20130108
luis@1123 25 scope :like_unique, lambda {|q|
luis@601 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@601 28 :order => 'name_on_paper',
luis@601 29 :group => "name_on_paper, institution, email"
luis@601 30 }
luis@601 31 }
luis@601 32
luis@1124 33 # todo: review usage of scope --lf.20130108
luis@1123 34 scope :like, lambda {|q|
luis@591 35 s = "%#{q.to_s.strip.downcase}%"
luis@601 36 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@591 37 :order => 'name_on_paper'
luis@591 38 }
luis@591 39 }
luis@1123 40
luis@1394 41 def search_author_class
luis@1394 42 # Authorship must always have an Author
luis@1394 43 # unless it hasn't been saved yet
luis@1394 44 # using default setter (attr_writer)
luis@1394 45
luis@1394 46 if self.author.nil?
luis@1395 47 @search_author_class = ""
luis@1394 48 else
luis@1395 49 @search_author_class = "Author"
luis@1394 50 end
luis@1395 51
luis@1395 52 @search_author_class
luis@1394 53 end
luis@1394 54
luis@1395 55 # def search_author_class=(search_author_class)
luis@1395 56 # @search_author_class = search_author_class
luis@1395 57 # end
luis@1395 58
luis@1394 59 def search_author_id
luis@1394 60 if self.author.nil?
luis@1395 61 "xxx"
luis@1394 62 else
luis@1395 63 author_id
luis@1394 64 end
luis@1394 65 end
luis@1394 66
luis@1394 67 def search_author_tie
luis@1394 68 if self.author.nil?
luis@1394 69 return false
luis@1394 70 else
luis@1394 71 return true
luis@1394 72 end
luis@1394 73
luis@1394 74 end
luis@1394 75
luis@592 76 def name
luis@592 77 return self.name_on_paper
luis@592 78 end
luis@1123 79
luis@591 80 def <=>(authorship)
luis@592 81 name.downcase <=> authorship.name.downcase
luis@592 82 end
luis@1123 83
luis@592 84 def mail
luis@592 85 return self.email
luis@591 86 end
luis@1123 87
luis@1123 88 protected
luis@1367 89
luis@1367 90 def delete_publication_cache
luis@1367 91 publication = Publication.find(self.publication_id)
luis@1367 92 Rails.cache.delete "publication-#{publication.id}-ieee"
luis@1367 93 Rails.cache.delete "publication-#{publication.id}-bibtex"
luis@1367 94 end
luis@1367 95
luis@1395 96 private
luis@1395 97
luis@1394 98 def set_author
luis@1394 99 # if an author, simply associates with it
luis@1394 100 # if an user, checks if it has already an author associated with it
luis@1394 101 # if so, assicoates with that author
luis@1394 102 # otherwise, creates a new author
luis@1394 103
luis@1394 104 logger.error { "%%%%%%%%%%%%%%% Associate Author User %%%%%%%%%%%%%%" }
luis@1394 105
luis@1395 106 logger.error { "Me #{self.to_yaml}" }
luis@1395 107 logger.error { "Class: #{@search_author_class}" }
luis@1395 108 logger.error { "ID #{@search_author_id}" }
luis@1394 109
luis@1395 110 case @search_author_class
luis@1366 111 when ""
luis@1394 112 logger.debug { "Adding new author to the database." }
luis@1366 113 author = Author.new
luis@1366 114 author.save
luis@1394 115
luis@1394 116 when "User"
luis@1394 117 # get user id
luis@1395 118 user = User.find(@search_author_id)
luis@1394 119 logger.error { "Found user with this ID: #{user.id}" }
luis@1394 120
luis@1394 121 if user.author.nil?
luis@1394 122 logger.error { "The user has no author... creating one!" }
luis@1394 123
luis@1394 124 # User w/o author:
luis@1394 125 # create new author and update user
luis@1394 126 author = Author.new
luis@1394 127 author.save
luis@1394 128 user << author
luis@1394 129 else
luis@1394 130 logger.error { "found an author!" }
luis@1394 131 author = user.author
luis@1394 132 end
luis@1366 133
luis@1366 134 when "Author"
luis@1395 135 author = Author.find(@search_author_id)
luis@1394 136 end
luis@1366 137
luis@1394 138 self.author = author
luis@518 139 end
luis@328 140 end