To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / plugins / redmine_bibliography / app / models / authorship.rb @ 1399:6106c49c5f50
History | View | Annotate | Download (3.29 KB)
| 1 | 328:aed18b463206 | luis | class Authorship < ActiveRecord::Base |
|---|---|---|---|
| 2 | 1123:48c5fdd6cf10 | luis | unloadable |
| 3 | |||
| 4 | 328:aed18b463206 | luis | belongs_to :author
|
| 5 | belongs_to :publication
|
||
| 6 | 1123:48c5fdd6cf10 | luis | |
| 7 | 483:cc267eb99115 | luis | accepts_nested_attributes_for :author
|
| 8 | accepts_nested_attributes_for :publication
|
||
| 9 | 686:b1debf464389 | luis | |
| 10 | validates_presence_of :name_on_paper
|
||
| 11 | 1123:48c5fdd6cf10 | luis | |
| 12 | 1395:0e4c6c2f400e | luis | attr_writer :search_author_id , :search_author_class |
| 13 | 1394:0f918e37e1d6 | luis | attr_writer :search_author_tie
|
| 14 | 1364:4d5d25039a5f | luis | |
| 15 | 1394:0f918e37e1d6 | luis | ### attr_accessor :search_results, :identify_author
|
| 16 | ## attr_writer :search_author_class
|
||
| 17 | |||
| 18 | 1395:0e4c6c2f400e | luis | before_save :set_author
|
| 19 | 1367:a2e51c0a7860 | luis | before_update :delete_publication_cache
|
| 20 | 591:9e866f13c984 | luis | |
| 21 | 1363:855b4ae5ecdd | luis | # tod: review scope of ordering
|
| 22 | acts_as_list :column => 'auth_order' |
||
| 23 | 1317:2805873c0147 | luis | |
| 24 | 1124:807426fa6017 | luis | # todo: review usage of scope --lf.20130108
|
| 25 | 1123:48c5fdd6cf10 | luis | scope :like_unique, lambda {|q|
|
| 26 | 601:1608b3cb50cd | luis | s = "%#{q.to_s.strip.downcase}%"
|
| 27 | {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
|
||
| 28 | :order => 'name_on_paper', |
||
| 29 | :group => "name_on_paper, institution, email" |
||
| 30 | } |
||
| 31 | } |
||
| 32 | |||
| 33 | 1124:807426fa6017 | luis | # todo: review usage of scope --lf.20130108
|
| 34 | 1123:48c5fdd6cf10 | luis | scope :like, lambda {|q|
|
| 35 | 591:9e866f13c984 | luis | s = "%#{q.to_s.strip.downcase}%"
|
| 36 | 601:1608b3cb50cd | luis | {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
|
| 37 | 591:9e866f13c984 | luis | :order => 'name_on_paper' |
| 38 | } |
||
| 39 | } |
||
| 40 | 1123:48c5fdd6cf10 | luis | |
| 41 | 1394:0f918e37e1d6 | luis | def search_author_class |
| 42 | # Authorship must always have an Author
|
||
| 43 | # unless it hasn't been saved yet
|
||
| 44 | # using default setter (attr_writer)
|
||
| 45 | |||
| 46 | if self.author.nil? |
||
| 47 | 1397:bf2db886a543 | luis | aclass = ""
|
| 48 | 1394:0f918e37e1d6 | luis | else
|
| 49 | 1397:bf2db886a543 | luis | aclass = "Author"
|
| 50 | 1394:0f918e37e1d6 | luis | end
|
| 51 | 1395:0e4c6c2f400e | luis | |
| 52 | 1397:bf2db886a543 | luis | @search_author_class || aclass
|
| 53 | 1394:0f918e37e1d6 | luis | end
|
| 54 | |||
| 55 | 1395:0e4c6c2f400e | luis | # def search_author_class=(search_author_class)
|
| 56 | # @search_author_class = search_author_class
|
||
| 57 | # end
|
||
| 58 | |||
| 59 | 1394:0f918e37e1d6 | luis | def search_author_id |
| 60 | if self.author.nil? |
||
| 61 | 1398:92d854be33d5 | luis | authid = ""
|
| 62 | 1394:0f918e37e1d6 | luis | else
|
| 63 | 1397:bf2db886a543 | luis | authid = author_id |
| 64 | 1394:0f918e37e1d6 | luis | end
|
| 65 | 1397:bf2db886a543 | luis | |
| 66 | @search_author_id || authid
|
||
| 67 | 1394:0f918e37e1d6 | luis | end
|
| 68 | |||
| 69 | def search_author_tie |
||
| 70 | if self.author.nil? |
||
| 71 | 1397:bf2db886a543 | luis | auth_tie = false
|
| 72 | 1394:0f918e37e1d6 | luis | else
|
| 73 | 1397:bf2db886a543 | luis | auth_tie = true
|
| 74 | 1394:0f918e37e1d6 | luis | end
|
| 75 | |||
| 76 | 1397:bf2db886a543 | luis | @search_author_tie || auth_tie
|
| 77 | 1394:0f918e37e1d6 | luis | end
|
| 78 | |||
| 79 | 592:68c6b060385c | luis | def name |
| 80 | return self.name_on_paper |
||
| 81 | end
|
||
| 82 | 1123:48c5fdd6cf10 | luis | |
| 83 | 591:9e866f13c984 | luis | def <=>(authorship) |
| 84 | 592:68c6b060385c | luis | name.downcase <=> authorship.name.downcase |
| 85 | end
|
||
| 86 | 1123:48c5fdd6cf10 | luis | |
| 87 | 592:68c6b060385c | luis | def mail |
| 88 | return self.email |
||
| 89 | 591:9e866f13c984 | luis | end
|
| 90 | 1123:48c5fdd6cf10 | luis | |
| 91 | protected |
||
| 92 | 1367:a2e51c0a7860 | luis | |
| 93 | def delete_publication_cache |
||
| 94 | publication = Publication.find(self.publication_id) |
||
| 95 | Rails.cache.delete "publication-#{publication.id}-ieee" |
||
| 96 | Rails.cache.delete "publication-#{publication.id}-bibtex" |
||
| 97 | end
|
||
| 98 | |||
| 99 | 1395:0e4c6c2f400e | luis | private |
| 100 | |||
| 101 | 1394:0f918e37e1d6 | luis | def set_author |
| 102 | # if an author, simply associates with it
|
||
| 103 | # if an user, checks if it has already an author associated with it
|
||
| 104 | # if so, assicoates with that author
|
||
| 105 | # otherwise, creates a new author
|
||
| 106 | |||
| 107 | logger.error { "%%%%%%%%%%%%%%% Associate Author User %%%%%%%%%%%%%%" }
|
||
| 108 | |||
| 109 | 1395:0e4c6c2f400e | luis | logger.error { "Me #{self.to_yaml}" }
|
| 110 | logger.error { "Class: #{@search_author_class}" }
|
||
| 111 | logger.error { "ID #{@search_author_id}" }
|
||
| 112 | 1394:0f918e37e1d6 | luis | |
| 113 | 1395:0e4c6c2f400e | luis | case @search_author_class |
| 114 | 1366:7e85f7988ab8 | luis | when "" |
| 115 | 1394:0f918e37e1d6 | luis | logger.debug { "Adding new author to the database." }
|
| 116 | 1366:7e85f7988ab8 | luis | author = Author.new
|
| 117 | author.save |
||
| 118 | 1394:0f918e37e1d6 | luis | |
| 119 | when "User" |
||
| 120 | # get user id
|
||
| 121 | 1395:0e4c6c2f400e | luis | user = User.find(@search_author_id) |
| 122 | 1394:0f918e37e1d6 | luis | logger.error { "Found user with this ID: #{user.id}" }
|
| 123 | |||
| 124 | if user.author.nil?
|
||
| 125 | logger.error { "The user has no author... creating one!" }
|
||
| 126 | |||
| 127 | # User w/o author:
|
||
| 128 | # create new author and update user
|
||
| 129 | author = Author.new
|
||
| 130 | author.save |
||
| 131 | 1399:6106c49c5f50 | luis | user.author = author |
| 132 | user.save |
||
| 133 | 1394:0f918e37e1d6 | luis | else
|
| 134 | logger.error { "found an author!" }
|
||
| 135 | author = user.author |
||
| 136 | end
|
||
| 137 | 1366:7e85f7988ab8 | luis | |
| 138 | when "Author" |
||
| 139 | 1395:0e4c6c2f400e | luis | author = Author.find(@search_author_id) |
| 140 | 1394:0f918e37e1d6 | luis | end
|
| 141 | 1366:7e85f7988ab8 | luis | |
| 142 | 1394:0f918e37e1d6 | luis | self.author = author
|
| 143 | 518:b24091590b63 | luis | end
|
| 144 | 328:aed18b463206 | luis | end |