Skip to content
Snippets Groups Projects
website.rb 2.61 KiB
Newer Older
Arnaud Levy's avatar
Arnaud Levy committed
# == Schema Information
#
pabois's avatar
pabois committed
# Table name: communication_websites
Arnaud Levy's avatar
Arnaud Levy committed
#
#  id               :uuid             not null, primary key
#  about_type       :string           indexed => [about_id]
#  access_token     :string
#  git_branch       :string
#  git_endpoint     :string
#  git_provider     :integer          default("github")
#  in_production    :boolean          default(FALSE)
#  name             :string
Arnaud Levy's avatar
Arnaud Levy committed
#  plausible_url    :string
#  repository       :string
#  style            :text
#  style_updated_at :date
#  url              :string
#  created_at       :datetime         not null
#  updated_at       :datetime         not null
#  about_id         :uuid             indexed => [about_type]
#  university_id    :uuid             not null, indexed
Arnaud Levy's avatar
Arnaud Levy committed
#
# Indexes
#
Arnaud Levy's avatar
Arnaud Levy committed
#  index_communication_websites_on_about          (about_type,about_id)
pabois's avatar
pabois committed
#  index_communication_websites_on_university_id  (university_id)
Arnaud Levy's avatar
Arnaud Levy committed
#
# Foreign Keys
#
Arnaud Levy's avatar
Arnaud Levy committed
#  fk_rails_bb6a496c08  (university_id => universities.id)
Arnaud Levy's avatar
Arnaud Levy committed
#
Arnaud Levy's avatar
Arnaud Levy committed
class Communication::Website < ApplicationRecord
Sébastien Gaya's avatar
Sébastien Gaya committed
  self.filter_attributes += [ :access_token ]

Arnaud Levy's avatar
Arnaud Levy committed
  include WithUniversity
pabois's avatar
pabois committed
  include WithAbouts
pabois's avatar
pabois committed
  include WithConfigs
pabois's avatar
pabois committed
  include WithDependencies
Arnaud Levy's avatar
Arnaud Levy committed
  include WithGit
pabois's avatar
pabois committed
  include WithGitRepository
Arnaud Levy's avatar
Arnaud Levy committed
  include WithImport
Arnaud Levy's avatar
Arnaud Levy committed
  include WithMenuItems
pabois's avatar
pabois committed
  include WithProgramCategories
pabois's avatar
pabois committed
  include WithSpecialPages
  include WithStyle
Arnaud Levy's avatar
Arnaud Levy committed

pabois's avatar
pabois committed
  enum git_provider: {
    github: 0,
    gitlab: 1
  }

pabois's avatar
pabois committed
  has_and_belongs_to_many :languages,
                          class_name: 'Language',
                          join_table: 'communication_websites_languages',
                          foreign_key: 'communication_website_id',
                          association_foreign_key: 'language_id'

pabois's avatar
pabois committed
  scope :ordered, -> { order(:name) }
  scope :in_production, -> { where(in_production: true) }
pabois's avatar
pabois committed
  scope :for_search_term, -> (term) {
    where("
      unaccent(communication_websites.name) ILIKE unaccent(:term) OR
      unaccent(communication_websites.url) ILIKE unaccent(:term)
    ", term: "%#{sanitize_sql_like(term)}%")
Sébastien Gaya's avatar
Sébastien Gaya committed
  def to_s
    "#{name}"
  end

  def git_path(website)
Arnaud Levy's avatar
Arnaud Levy committed
    "data/website.yml"
pabois's avatar
pabois committed
  end
pabois's avatar
pabois committed

  def git_dependencies(website)
pabois's avatar
pabois committed
    dependencies = [self, config_permalinks, config_base_url] + menus
    dependencies += pages + pages.map(&:active_storage_blobs).flatten
    dependencies += posts + posts.map(&:active_storage_blobs).flatten
    dependencies += people_with_facets + people.map(&:active_storage_blobs).flatten
    dependencies += organizations_in_blocks + organizations_in_blocks.map(&:active_storage_blobs).flatten
    dependencies += categories
    dependencies += about.git_dependencies(website) if about.present?
    dependencies
  end
Arnaud Levy's avatar
Arnaud Levy committed
end