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@1397
|
47 aclass = ""
|
luis@1394
|
48 else
|
luis@1397
|
49 aclass = "Author"
|
luis@1394
|
50 end
|
luis@1395
|
51
|
luis@1397
|
52 @search_author_class || aclass
|
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@1398
|
61 authid = ""
|
luis@1394
|
62 else
|
luis@1397
|
63 authid = author_id
|
luis@1394
|
64 end
|
luis@1397
|
65
|
luis@1397
|
66 @search_author_id || authid
|
luis@1394
|
67 end
|
luis@1394
|
68
|
luis@1394
|
69 def search_author_tie
|
luis@1394
|
70 if self.author.nil?
|
luis@1397
|
71 auth_tie = false
|
luis@1394
|
72 else
|
luis@1397
|
73 auth_tie = true
|
luis@1394
|
74 end
|
luis@1394
|
75
|
luis@1397
|
76 @search_author_tie || auth_tie
|
luis@1394
|
77 end
|
luis@1394
|
78
|
luis@592
|
79 def name
|
luis@592
|
80 return self.name_on_paper
|
luis@592
|
81 end
|
luis@1123
|
82
|
luis@591
|
83 def <=>(authorship)
|
luis@592
|
84 name.downcase <=> authorship.name.downcase
|
luis@592
|
85 end
|
luis@1123
|
86
|
luis@592
|
87 def mail
|
luis@592
|
88 return self.email
|
luis@591
|
89 end
|
luis@1123
|
90
|
luis@1123
|
91 protected
|
luis@1367
|
92
|
luis@1367
|
93 def delete_publication_cache
|
luis@1367
|
94 publication = Publication.find(self.publication_id)
|
luis@1367
|
95 Rails.cache.delete "publication-#{publication.id}-ieee"
|
luis@1367
|
96 Rails.cache.delete "publication-#{publication.id}-bibtex"
|
luis@1367
|
97 end
|
luis@1367
|
98
|
luis@1395
|
99 private
|
luis@1395
|
100
|
luis@1394
|
101 def set_author
|
luis@1394
|
102 # if an author, simply associates with it
|
luis@1394
|
103 # if an user, checks if it has already an author associated with it
|
luis@1394
|
104 # if so, assicoates with that author
|
luis@1394
|
105 # otherwise, creates a new author
|
luis@1394
|
106
|
luis@1394
|
107 logger.error { "%%%%%%%%%%%%%%% Associate Author User %%%%%%%%%%%%%%" }
|
luis@1394
|
108
|
luis@1395
|
109 logger.error { "Me #{self.to_yaml}" }
|
luis@1395
|
110 logger.error { "Class: #{@search_author_class}" }
|
luis@1395
|
111 logger.error { "ID #{@search_author_id}" }
|
luis@1394
|
112
|
luis@1395
|
113 case @search_author_class
|
luis@1366
|
114 when ""
|
luis@1394
|
115 logger.debug { "Adding new author to the database." }
|
luis@1366
|
116 author = Author.new
|
luis@1366
|
117 author.save
|
luis@1394
|
118
|
luis@1394
|
119 when "User"
|
luis@1394
|
120 # get user id
|
luis@1395
|
121 user = User.find(@search_author_id)
|
luis@1394
|
122 logger.error { "Found user with this ID: #{user.id}" }
|
luis@1394
|
123
|
luis@1394
|
124 if user.author.nil?
|
luis@1394
|
125 logger.error { "The user has no author... creating one!" }
|
luis@1394
|
126
|
luis@1394
|
127 # User w/o author:
|
luis@1394
|
128 # create new author and update user
|
luis@1394
|
129 author = Author.new
|
luis@1394
|
130 author.save
|
luis@1399
|
131 user.author = author
|
luis@1399
|
132 user.save
|
luis@1394
|
133 else
|
luis@1394
|
134 logger.error { "found an author!" }
|
luis@1394
|
135 author = user.author
|
luis@1394
|
136 end
|
luis@1366
|
137
|
luis@1366
|
138 when "Author"
|
luis@1395
|
139 author = Author.find(@search_author_id)
|
luis@1394
|
140 end
|
luis@1366
|
141
|
luis@1394
|
142 self.author = author
|
luis@518
|
143 end
|
luis@328
|
144 end
|