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