From 2e73b0756851016f6f9dadfdac352b9b68b348b1 Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Sun, 19 Jun 2022 09:14:46 +0200 Subject: [PATCH] dependencies --- app/models/communication/block.rb | 4 +++- app/models/communication/block/component/base.rb | 4 ---- .../communication/block/component/category.rb | 6 +----- app/models/communication/block/component/file.rb | 5 ++--- .../block/component/organization.rb | 4 ++++ app/models/communication/block/component/page.rb | 4 ++++ .../communication/block/component/person.rb | 4 ++++ app/models/communication/block/component/post.rb | 12 ++++++------ app/models/communication/block/template/base.rb | 16 +++++----------- app/models/communication/block/template/page.rb | 15 +++++++++------ app/models/communication/block/template/post.rb | 4 ++-- .../admin/communication/blocks/_list.html.erb | 3 +++ .../admin/communication/blocks/edit.html.erb | 6 ++++++ .../admin/communication/blocks/show.html.erb | 11 ++++++----- 14 files changed, 55 insertions(+), 43 deletions(-) diff --git a/app/models/communication/block.rb b/app/models/communication/block.rb index 788027d4e..5c07c25e3 100644 --- a/app/models/communication/block.rb +++ b/app/models/communication/block.rb @@ -105,8 +105,10 @@ class Communication::Block < ApplicationRecord "Communication::Block::Template::#{template_kind.classify}".constantize end + # FIXME @sebou + # Could not find or build blob: expected attachable, got #<ActiveStorage::Blob id: "f4c78657-5062-416b-806f-0b80fb66f9cd", key: "gri33wtop0igur8w3a646llel3sd", filename: "logo.svg", content_type: "image/svg+xml", metadata: {"identified"=>true, "width"=>709, "height"=>137, "analyzed"=>true}, service_name: "scaleway", byte_size: 4137, checksum: "aZqqTYabP5+72ZeddcZ/2Q==", created_at: "2022-05-05 12:17:33.941505000 +0200", university_id: "ebf2d273-ffc9-4d9f-a4ee-a2146913d617"> def attach_template_blobs - self.template_images = template.active_storage_blobs + # self.template_images = template.active_storage_blobs end def save_and_sync_about diff --git a/app/models/communication/block/component/base.rb b/app/models/communication/block/component/base.rb index 798e61e84..0637e0ada 100644 --- a/app/models/communication/block/component/base.rb +++ b/app/models/communication/block/component/base.rb @@ -26,10 +26,6 @@ class Communication::Block::Component::Base end def git_dependencies - active_storage_blobs - end - - def active_storage_blobs [] end diff --git a/app/models/communication/block/component/category.rb b/app/models/communication/block/component/category.rb index e11cd06a5..a7db68fa1 100644 --- a/app/models/communication/block/component/category.rb +++ b/app/models/communication/block/component/category.rb @@ -6,11 +6,7 @@ class Communication::Block::Component::Category < Communication::Block::Componen end def git_dependencies - active_storage_blobs + - [category] + [category, category&.best_featured_image&.blob] end - def active_storage_blobs - category&.active_storage_blobs || [] - end end diff --git a/app/models/communication/block/component/file.rb b/app/models/communication/block/component/file.rb index 230b018e0..3cb698ec2 100644 --- a/app/models/communication/block/component/file.rb +++ b/app/models/communication/block/component/file.rb @@ -11,9 +11,8 @@ class Communication::Block::Component::File < Communication::Block::Component::B } end - def active_storage_blobs - # If blob is nil, compact will remove it and the method will return an empty array - [blob].compact + def git_dependencies + [blob] end end diff --git a/app/models/communication/block/component/organization.rb b/app/models/communication/block/component/organization.rb index f92062893..72f8e2d40 100644 --- a/app/models/communication/block/component/organization.rb +++ b/app/models/communication/block/component/organization.rb @@ -4,4 +4,8 @@ class Communication::Block::Component::Organization < Communication::Block::Comp template.block.university.organizations.find_by(id: data) end + def git_dependencies + [organization, organization&.logo&.blob] + end + end diff --git a/app/models/communication/block/component/page.rb b/app/models/communication/block/component/page.rb index 61978e9b8..2f5617ad6 100644 --- a/app/models/communication/block/component/page.rb +++ b/app/models/communication/block/component/page.rb @@ -5,4 +5,8 @@ class Communication::Block::Component::Page < Communication::Block::Component::B website.pages.published.find_by(id: data) end + def git_dependencies + [page, page&.best_featured_image&.blob] + end + end diff --git a/app/models/communication/block/component/person.rb b/app/models/communication/block/component/person.rb index f15ddb44e..e082a0139 100644 --- a/app/models/communication/block/component/person.rb +++ b/app/models/communication/block/component/person.rb @@ -4,4 +4,8 @@ class Communication::Block::Component::Person < Communication::Block::Component: template.block.university.people.find_by(id: data) end + def git_dependencies + [person, person&.picture&.blob] + end + end diff --git a/app/models/communication/block/component/post.rb b/app/models/communication/block/component/post.rb index 0a653a7ea..8b08eb17d 100644 --- a/app/models/communication/block/component/post.rb +++ b/app/models/communication/block/component/post.rb @@ -6,12 +6,12 @@ class Communication::Block::Component::Post < Communication::Block::Component::B end def git_dependencies - active_storage_blobs + - [post, post.author, post.author.author] - end - - def active_storage_blobs - post&.author&.active_storage_blobs || [] + [ + post, + post&.author, + post&.author&.author, + post&.author&.picture&.blob + ] end end diff --git a/app/models/communication/block/template/base.rb b/app/models/communication/block/template/base.rb index 68dd8061e..b69b73cf6 100644 --- a/app/models/communication/block/template/base.rb +++ b/app/models/communication/block/template/base.rb @@ -98,23 +98,17 @@ class Communication::Block::Template::Base add_dependency element.git_dependencies end add_custom_git_dependencies + @git_dependencies.compact! @git_dependencies.uniq! end @git_dependencies end def active_storage_blobs - unless @active_storage_blobs - @active_storage_blobs = [] - components.each do |component| - @active_storage_blobs += component.active_storage_blobs - end - elements.each do |element| - @active_storage_blobs += element.active_storage_blobs - end - @active_storage_blobs.uniq! - end - @active_storage_blobs + @active_storage_blobs ||= git_dependencies.select { |dependency| + # dependency.is_a? ActiveStorage::Blob misses some occurrences + dependency.class.name == 'ActiveStorage::Blob' + }.uniq end def default_element(data = nil) diff --git a/app/models/communication/block/template/page.rb b/app/models/communication/block/template/page.rb index 69678611b..f47841368 100644 --- a/app/models/communication/block/template/page.rb +++ b/app/models/communication/block/template/page.rb @@ -21,19 +21,22 @@ class Communication::Block::Template::Page < Communication::Block::Template::Bas !website.nil? end - protected - - def kind - @kind ||= data['kind'] || 'selection' + def add_custom_git_dependencies + selected_pages.each do |page| + add_dependency page + add_dependency page.active_storage_blobs.to_a + end end + protected + def selected_pages_selection elements.map { |element| element.page }.compact end def selected_pages_children - return [] unless main_page - main_page.children.published.ordered + return [] unless page + page.children.published.ordered end end diff --git a/app/models/communication/block/template/post.rb b/app/models/communication/block/template/post.rb index 22f772ae3..379e53772 100644 --- a/app/models/communication/block/template/post.rb +++ b/app/models/communication/block/template/post.rb @@ -8,10 +8,10 @@ class Communication::Block::Template::Post < Communication::Block::Template::Bas def add_custom_git_dependencies selected_posts.each do |post| add_dependency post - add_dependency post.active_storage_blobs + add_dependency post.active_storage_blobs.to_a if post.author.present? add_dependency [post.author, post.author.author] - add_dependency post.author.active_storage_blobs + add_dependency post.author.active_storage_blobs.to_a end end end diff --git a/app/views/admin/communication/blocks/_list.html.erb b/app/views/admin/communication/blocks/_list.html.erb index 479ed06b8..1993d41ba 100644 --- a/app/views/admin/communication/blocks/_list.html.erb +++ b/app/views/admin/communication/blocks/_list.html.erb @@ -37,6 +37,9 @@ </p> </td> <td class="text-end"> + <%= link_to 'Dependencies', + [:admin, block], + class: button_classes('btn-light') if current_user.server_admin? %> <%= edit_link block %> </td> </tr> diff --git a/app/views/admin/communication/blocks/edit.html.erb b/app/views/admin/communication/blocks/edit.html.erb index dbd8da901..959fa68d7 100644 --- a/app/views/admin/communication/blocks/edit.html.erb +++ b/app/views/admin/communication/blocks/edit.html.erb @@ -23,6 +23,12 @@ <textarea name="communication_block[data]" rows="20" cols="200" class="d-none"> {{ JSON.stringify(data) }} </textarea> + <% content_for :action_bar_left do %> + <%= destroy_link @block %> + <%= link_to 'Dependencies', + [:admin, @block], + class: button_classes('btn-light') if current_user.server_admin? %> + <% end %> <% content_for :action_bar_right do %> <%= submit f %> <% end %> diff --git a/app/views/admin/communication/blocks/show.html.erb b/app/views/admin/communication/blocks/show.html.erb index 0902341bf..6b358527c 100644 --- a/app/views/admin/communication/blocks/show.html.erb +++ b/app/views/admin/communication/blocks/show.html.erb @@ -4,14 +4,15 @@ <table class="table"> <thead> <tr> + <th>Id</th> <th>Class</th> <th>Name</th> - <th>Id</th> </tr> </thead> <tbody> <% @block.template.git_dependencies.each do |dependency| %> <tr> + <td><%= dependency.id %></td> <td><%= dependency.class %></td> <td><%= dependency.to_s %></td> </tr> @@ -23,15 +24,15 @@ <table class="table"> <thead> <tr> - <th>Filename</th> <th>Id</th> + <th>Filename</th> </tr> </thead> <tbody> - <% @block.template.active_storage_blobs.each do |attachment| %> + <% @block.template.active_storage_blobs.each do |blob| %> <tr> - <td><%= attachment.to_s %></td> - <td><%= attachment.id %></td> + <td><%= blob.id %></td> + <td><%= blob.filename %></td> </tr> <% end %> </tbody> -- GitLab