Skip to content
Snippets Groups Projects
post.rb 1.75 KiB
Newer Older
Arnaud Levy's avatar
Arnaud Levy committed
class Communication::Block::Template::Post < Communication::Block::Template::Base
Arnaud Levy's avatar
wip
Arnaud Levy committed
  def build_git_dependencies
Arnaud Levy's avatar
Arnaud Levy committed
    add_dependency category unless category.nil?
    add_dependency selected_posts
Arnaud Levy's avatar
Arnaud Levy committed
    selected_posts.each do |post|
Arnaud Levy's avatar
Arnaud Levy committed
      add_dependency post.active_storage_blobs
      if post.author.present?
        add_dependency [post.author, post.author.author]
Arnaud Levy's avatar
Arnaud Levy committed
        add_dependency post.author.active_storage_blobs
Arnaud Levy's avatar
Arnaud Levy committed
      end
    end
Arnaud Levy's avatar
wip
Arnaud Levy committed
  end

  def category
Arnaud Levy's avatar
Arnaud Levy committed
    @category ||= block.about&.website
                              .categories
                              .find_by(id: data['category_id'])
Arnaud Levy's avatar
wip
Arnaud Levy committed
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def selected_posts
Arnaud Levy's avatar
Arnaud Levy committed
    # kind could be: selection, category, or all
Arnaud Levy's avatar
Arnaud Levy committed
    @selected_posts ||= send "selected_posts_#{kind}"
Arnaud Levy's avatar
wip
Arnaud Levy committed
  end

  protected

alexisben's avatar
alexisben committed
  def kind
    @kind ||= data['kind'] || 'all'
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def selected_posts_all
alexisben's avatar
alexisben committed
    quantity = data['posts_quantity'] || 3
Arnaud Levy's avatar
Arnaud Levy committed
    block.about&.website
                .posts
                .published
                .ordered
                .limit(quantity)
alexisben's avatar
alexisben committed
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def selected_posts_category
    quantity = data['posts_quantity'] || 3
Sébastien Gaya's avatar
Sébastien Gaya committed
    category_ids = [category.id, category.descendants.map(&:id)].flatten
    university.communication_website_posts.joins(:categories)
                                          .where(categories: { id: category_ids })
                                          .distinct
Arnaud Levy's avatar
Arnaud Levy committed
                                          .published
Sébastien Gaya's avatar
Sébastien Gaya committed
                                          .ordered
                                          .limit(quantity)
Arnaud Levy's avatar
wip
Arnaud Levy committed
  end

  def selected_posts_selection
Arnaud Levy's avatar
Arnaud Levy committed
    elements.map { |element|
      post(element['id'])
    }.compact
Arnaud Levy's avatar
wip
Arnaud Levy committed
  end
Arnaud Levy's avatar
Arnaud Levy committed

  def post(id)
    return if id.blank?
Arnaud Levy's avatar
Arnaud Levy committed
    block.about&.website
                .posts
                .published
                .find_by(id: id)
Arnaud Levy's avatar
Arnaud Levy committed
  end
Arnaud Levy's avatar
wip
Arnaud Levy committed
end