luis@328: class Authorship < ActiveRecord::Base luis@1123: unloadable luis@1123: luis@328: belongs_to :author luis@328: belongs_to :publication luis@1123: luis@483: accepts_nested_attributes_for :author luis@483: accepts_nested_attributes_for :publication luis@686: luis@686: validates_presence_of :name_on_paper luis@1123: luis@1286: attr_accessor :search_author_class, :search_author_id, :search_name, :search_results, :identify_author luis@563: before_save :associate_author_user luis@591: luis@1124: # todo: review usage of scope --lf.20130108 luis@1123: scope :like_unique, lambda {|q| luis@601: s = "%#{q.to_s.strip.downcase}%" luis@601: {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}], luis@601: :order => 'name_on_paper', luis@601: :group => "name_on_paper, institution, email" luis@601: } luis@601: } luis@601: luis@1124: # todo: review usage of scope --lf.20130108 luis@1123: scope :like, lambda {|q| luis@591: s = "%#{q.to_s.strip.downcase}%" luis@601: {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}], luis@591: :order => 'name_on_paper' luis@591: } luis@591: } luis@1123: luis@592: def name luis@592: return self.name_on_paper luis@592: end luis@1123: luis@591: def <=>(authorship) luis@592: name.downcase <=> authorship.name.downcase luis@592: end luis@1123: luis@592: def mail luis@592: return self.email luis@591: end luis@1123: luis@1123: protected luis@1123: def associate_author_user luis@1286: case self.search_author_class luis@1286: when "User" luis@601: author = Author.new luis@601: author.save luis@601: self.author_id = author.id luis@601: else luis@601: selected = self.search_results luis@1286: selected_classname = Kernel.const_get(self.search_author_class) luis@1286: selected_id = self.search_author_id luis@601: object = selected_classname.find(selected_id) luis@563: luis@601: if object.respond_to? :name_on_paper luis@601: # Authorship luis@601: self.author_id = object.author.id luis@601: else luis@601: # User luis@601: unless object.author.nil? luis@601: self.author_id = object.author.id luis@601: else luis@601: author = Author.new luis@601: object.author = author luis@601: object.save luis@601: self.author_id = object.author.id luis@601: end luis@601: end luis@1123: end luis@518: end luis@328: end