Skip to content
Snippets Groups Projects
Commit 69f5bae7 authored by Arnaud Levy's avatar Arnaud Levy
Browse files

blocks refactor

parent 6e518f43
No related branches found
No related tags found
No related merge requests found
......@@ -38,8 +38,7 @@ class Communication::Block < ApplicationRecord
end
def git_dependencies
m = "git_dependencies_for_#{template}"
respond_to?(m, true) ? send(m) : []
template_class.git_dependencies
end
def last_ordered_element
......@@ -52,32 +51,7 @@ class Communication::Block < ApplicationRecord
protected
def git_dependencies_for_organization_chart
dependencies = []
data['elements'].each do |element|
element['persons'].each do |person|
id = person['id']
next if id.blank?
person = university.people.find id
next if person.nil?
dependencies += [person]
dependencies += person.active_storage_blobs
end
end
dependencies.uniq
end
def git_dependencies_for_partners
dependencies = []
data['elements'].each do |element|
element['partners'].each do |partner|
id = partner.dig('logo', 'id')
next if id.blank?
blob = university.active_storage_blobs.find id
next if blob.nil?
dependencies += [blob]
end
end
dependencies.uniq
def template_class
@template_class ||= "Communication::Block::#{template.classify}".constantize.new self
end
end
class Communication::Block::OrganizationChart < Communication::Block::Template
def git_dependencies
dependencies = []
data['elements'].each do |element|
element['persons'].each do |person|
id = person['id']
next if id.blank?
person = university.people.find id
next if person.nil?
dependencies += [person]
dependencies += person.active_storage_blobs
end
end
dependencies.uniq
end
end
class Communication::Block::Partner < Communication::Block::Template
def git_dependencies
dependencies = []
data['elements'].each do |element|
element['partners'].each do |partner|
id = partner.dig('logo', 'id')
next if id.blank?
blob = university.active_storage_blobs.find id
next if blob.nil?
dependencies += [blob]
end
end
dependencies.uniq
end
end
class Communication::Block::Template
attr_reader :block
def initialize(block)
@block = block
end
def git_dependencies
[]
end
protected
def data
block.data
end
def university
block.university
end
end
......@@ -71,3 +71,26 @@ Attention, il faut 6 espaces pour respecter l'indentation du front-matter :
url: https://partner1.com
logo: "e09f3794-44e5-4b51-be02-0e384616e791"
```
### Dépendances
Il faut créer une classe pour chaque template, avec le nom au singulier (partners devient partner.rb, et la class Partner) :
```
models/communication/block/partner.rb
```
avec une structure de type :
```
class Communication::Block::Partner < Communication::Block::Template
def git_dependencies
...
end
end
```
## Pour créer un bloc
1. Déclarer le template dans l'enum du modèle block
2. Créer l'edit, le show et le static dans la vue du template
3. Créer la classe du template pour gérer les dépendances
4. Créer la vignette dans les images
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment