Skip to content
Snippets Groups Projects
block.rb 1.85 KiB
Newer Older
Arnaud Levy's avatar
Arnaud Levy committed
# == Schema Information
#
# Table name: communication_blocks
#
#  id            :uuid             not null, primary key
#  about_type    :string           indexed => [about_id]
#  data          :jsonb
#  position      :integer          default(0), not null
Arnaud Levy's avatar
Arnaud Levy committed
#  template_kind :integer          default(NULL), not null
#  title         :string
Arnaud Levy's avatar
Arnaud Levy committed
#  created_at    :datetime         not null
#  updated_at    :datetime         not null
#  about_id      :uuid             indexed => [about_type]
#  university_id :uuid             not null, indexed
#
# Indexes
#
#  index_communication_blocks_on_university_id  (university_id)
#  index_communication_website_blocks_on_about  (about_type,about_id)
#
# Foreign Keys
#
#  fk_rails_18291ef65f  (university_id => universities.id)
#
class Communication::Block < ApplicationRecord
Arnaud Levy's avatar
Arnaud Levy committed
  include WithUniversity
Arnaud Levy's avatar
Arnaud Levy committed
  include WithPosition

  belongs_to :about, polymorphic: true

  has_many_attached :template_images

Arnaud Levy's avatar
Arnaud Levy committed
  enum template_kind: {
Arnaud Levy's avatar
Arnaud Levy committed
    chapter: 50,
Arnaud Levy's avatar
Arnaud Levy committed
    organization_chart: 100,
Arnaud Levy's avatar
Arnaud Levy committed
    partners: 200,
Arnaud Levy's avatar
Arnaud Levy committed
    gallery: 300,
alexisben's avatar
alexisben committed
    testimonials: 400,
alexisben's avatar
alexisben committed
    posts: 500,
alexisben's avatar
alexisben committed
    pages: 600,
alexisben's avatar
alexisben committed
    timeline: 700,
alexisben's avatar
alexisben committed
    definitions: 800,
    call_to_action: 900,
  before_save :update_template_images
Sébastien Gaya's avatar
Sébastien Gaya committed
  after_commit :save_and_sync_about, on: [:update, :destroy]
Arnaud Levy's avatar
Arnaud Levy committed
  def data=(value)
    value = JSON.parse value if value.is_a? String
    super(value)
  end

  def git_dependencies
Arnaud Levy's avatar
Arnaud Levy committed
    template.git_dependencies
Arnaud Levy's avatar
Arnaud Levy committed
  end

  def last_ordered_element
    about.blocks.ordered.last
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def template
    @template ||= "Communication::Block::Template::#{template_kind.classify}".constantize.new self
Arnaud Levy's avatar
Arnaud Levy committed
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def to_s
    title.blank?  ? "Block #{position}"
                  : "#{title}"
Arnaud Levy's avatar
Arnaud Levy committed
  end
Sébastien Gaya's avatar
Sébastien Gaya committed
    about&.save_and_sync unless about&.destroyed?
  end

  def update_template_images
    self.template_images = template.active_storage_blobs
  end
Arnaud Levy's avatar
Arnaud Levy committed
end