Skip to content
Snippets Groups Projects
menu.rb 1.44 KiB
Newer Older
Sébastien Gaya's avatar
Sébastien Gaya committed
# == Schema Information
#
# Table name: communication_website_menus
#
Sébastien Gaya's avatar
Sébastien Gaya committed
#  id                       :uuid             not null, primary key
Sébastien Gaya's avatar
Sébastien Gaya committed
#  github_path              :text
Sébastien Gaya's avatar
Sébastien Gaya committed
#  identifier               :string
#  title                    :string
#  created_at               :datetime         not null
#  updated_at               :datetime         not null
#  communication_website_id :uuid             not null
#  university_id            :uuid             not null
Sébastien Gaya's avatar
Sébastien Gaya committed
#
# Indexes
#
Sébastien Gaya's avatar
Sébastien Gaya committed
#  idx_comm_website_menus_on_communication_website_id  (communication_website_id)
Sébastien Gaya's avatar
Sébastien Gaya committed
#  index_communication_website_menus_on_university_id  (university_id)
#
# Foreign Keys
#
Sébastien Gaya's avatar
Sébastien Gaya committed
#  fk_rails_...  (communication_website_id => communication_websites.id)
Sébastien Gaya's avatar
Sébastien Gaya committed
#  fk_rails_...  (university_id => universities.id)
#
class Communication::Website::Menu < ApplicationRecord
Sébastien Gaya's avatar
Sébastien Gaya committed
  include WithGithub

Sébastien Gaya's avatar
Sébastien Gaya committed
  belongs_to :university
Sébastien Gaya's avatar
Sébastien Gaya committed
  belongs_to :website, foreign_key: :communication_website_id
  has_many :items, class_name: 'Communication::Website::Menu::Item', dependent: :destroy

  validates :title, :identifier, presence: true
  validates :identifier, uniqueness: { scope: :communication_website_id }

Sébastien Gaya's avatar
Sébastien Gaya committed
  after_touch :publish_to_github

Sébastien Gaya's avatar
Sébastien Gaya committed
  scope :ordered, -> { order(created_at: :asc) }

  def to_s
    "#{title}"
  end
Sébastien Gaya's avatar
Sébastien Gaya committed

  def github_path_generated
Sébastien Gaya's avatar
Sébastien Gaya committed
    "_data/menus.yml"
Sébastien Gaya's avatar
Sébastien Gaya committed
  end

  def to_jekyll
    website.menus.map { |menu|
Sébastien Gaya's avatar
Sébastien Gaya committed
      [menu.identifier, menu.items.root.ordered.map(&:to_jekyll_hash)]
    }.to_h.to_yaml
Sébastien Gaya's avatar
Sébastien Gaya committed
  end
Sébastien Gaya's avatar
Sébastien Gaya committed
end