Skip to content
Snippets Groups Projects
article.rb 2.26 KiB
Newer Older
Arnaud Levy's avatar
Arnaud Levy committed
# == Schema Information
#
# Table name: research_journal_articles
#
#  id                         :uuid             not null, primary key
Arnaud Levy's avatar
Arnaud Levy committed
#  abstract                   :text
Arnaud Levy's avatar
Arnaud Levy committed
#  github_path                :text
Arnaud Levy's avatar
Arnaud Levy committed
#  keywords                   :text
Arnaud Levy's avatar
Arnaud Levy committed
#  published_at               :date
Arnaud Levy's avatar
Arnaud Levy committed
#  references                 :text
Arnaud Levy's avatar
Arnaud Levy committed
#  text                       :text
#  title                      :string
#  created_at                 :datetime         not null
Arnaud Levy's avatar
Arnaud Levy committed
#  updated_at                 :date             not null
Arnaud Levy's avatar
Arnaud Levy committed
#  research_journal_id        :uuid             not null
#  research_journal_volume_id :uuid
#  university_id              :uuid             not null
Arnaud Levy's avatar
Arnaud Levy committed
#  updated_by_id              :uuid
Arnaud Levy's avatar
Arnaud Levy committed
#
# Indexes
#
#  index_research_journal_articles_on_research_journal_id         (research_journal_id)
#  index_research_journal_articles_on_research_journal_volume_id  (research_journal_volume_id)
#  index_research_journal_articles_on_university_id               (university_id)
Arnaud Levy's avatar
Arnaud Levy committed
#  index_research_journal_articles_on_updated_by_id               (updated_by_id)
Arnaud Levy's avatar
Arnaud Levy committed
#
# Foreign Keys
#
#  fk_rails_...  (research_journal_id => research_journals.id)
#  fk_rails_...  (research_journal_volume_id => research_journal_volumes.id)
#  fk_rails_...  (university_id => universities.id)
Arnaud Levy's avatar
Arnaud Levy committed
#  fk_rails_...  (updated_by_id => users.id)
Arnaud Levy's avatar
Arnaud Levy committed
#
class Research::Journal::Article < ApplicationRecord
Arnaud Levy's avatar
Arnaud Levy committed
  include WithGithub

Arnaud Levy's avatar
Arnaud Levy committed
  belongs_to :university
  belongs_to :journal, foreign_key: :research_journal_id
  belongs_to :volume, foreign_key: :research_journal_volume_id, optional: true
Arnaud Levy's avatar
Arnaud Levy committed
  belongs_to :updated_by, class_name: 'User'
Arnaud Levy's avatar
Arnaud Levy committed
  has_and_belongs_to_many :researchers, class_name: 'Research::Researcher'
Arnaud Levy's avatar
Arnaud Levy committed

Arnaud Levy's avatar
Arnaud Levy committed
  after_commit :update_researchers
Arnaud Levy's avatar
Arnaud Levy committed

Arnaud Levy's avatar
Arnaud Levy committed
  has_one_attached :pdf

  scope :ordered, -> { order(:published_at, :created_at) }

Arnaud Levy's avatar
Arnaud Levy committed
  def pdf_path
    "/assets/articles/#{id}/#{pdf.filename}"
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def website
    journal.website
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def to_s
    "#{ title }"
  end
Arnaud Levy's avatar
Arnaud Levy committed

  protected

Arnaud Levy's avatar
Arnaud Levy committed
  def github_path_generated
    "_articles/#{id}.html"
  end

  def to_jekyll
    ApplicationController.render(
      template: 'admin/research/journal/articles/jekyll',
      layout: false,
      assigns: { article: self }
    )
  end

  def update_researchers
Arnaud Levy's avatar
Arnaud Levy committed
    researchers.each do |researcher|
Arnaud Levy's avatar
Arnaud Levy committed
      researcher.publish_to_website(journal.website)
Arnaud Levy's avatar
Arnaud Levy committed
    end
Arnaud Levy's avatar
Arnaud Levy committed
  end
Arnaud Levy's avatar
Arnaud Levy committed
end