luis@328
|
1 class Authorship < ActiveRecord::Base
|
luis@562
|
2 unloadable
|
luis@562
|
3
|
luis@328
|
4 belongs_to :author
|
luis@328
|
5 belongs_to :publication
|
luis@393
|
6
|
luis@483
|
7 accepts_nested_attributes_for :author
|
luis@483
|
8 accepts_nested_attributes_for :publication
|
luis@483
|
9
|
luis@597
|
10 attr_accessor :is_user, :author_user_id, :search_name, :identify_author, :search_results
|
luis@563
|
11 before_save :associate_author_user
|
luis@591
|
12
|
luis@601
|
13 named_scope :like_unique, lambda {|q|
|
luis@601
|
14 s = "%#{q.to_s.strip.downcase}%"
|
luis@601
|
15 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
|
luis@601
|
16 :order => 'name_on_paper',
|
luis@601
|
17 :group => "name_on_paper, institution, email"
|
luis@601
|
18 }
|
luis@601
|
19 }
|
luis@601
|
20
|
luis@591
|
21 named_scope :like, lambda {|q|
|
luis@591
|
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@591
|
24 :order => 'name_on_paper'
|
luis@591
|
25 }
|
luis@591
|
26 }
|
luis@591
|
27
|
luis@592
|
28 def name
|
luis@592
|
29 return self.name_on_paper
|
luis@592
|
30 end
|
luis@591
|
31
|
luis@591
|
32 def <=>(authorship)
|
luis@592
|
33 name.downcase <=> authorship.name.downcase
|
luis@592
|
34 end
|
luis@592
|
35
|
luis@592
|
36 def mail
|
luis@592
|
37 return self.email
|
luis@591
|
38 end
|
luis@530
|
39
|
luis@563
|
40 protected
|
luis@563
|
41 def associate_author_user
|
luis@601
|
42 case self.identify_author
|
luis@601
|
43 when "no"
|
luis@601
|
44 author = Author.new
|
luis@601
|
45 author.save
|
luis@601
|
46 self.author_id = author.id
|
luis@601
|
47 else
|
luis@601
|
48 selected = self.search_results
|
luis@601
|
49 selected_classname = Kernel.const_get(selected.split('_')[0])
|
luis@601
|
50 selected_id = selected.split('_')[1]
|
luis@601
|
51 object = selected_classname.find(selected_id)
|
luis@563
|
52
|
luis@601
|
53 if object.respond_to? :name_on_paper
|
luis@601
|
54 # Authorship
|
luis@601
|
55 self.author_id = object.author.id
|
luis@601
|
56 else
|
luis@601
|
57 # User
|
luis@601
|
58 unless object.author.nil?
|
luis@601
|
59 self.author_id = object.author.id
|
luis@601
|
60 else
|
luis@601
|
61 author = Author.new
|
luis@601
|
62 object.author = author
|
luis@601
|
63 object.save
|
luis@601
|
64 self.author_id = object.author.id
|
luis@601
|
65 end
|
luis@601
|
66 end
|
luis@601
|
67 end
|
luis@518
|
68 end
|
luis@328
|
69 end
|