feat: show a simple FAQ

This commit is contained in:
Colin Darie 2024-04-22 16:42:12 +02:00
parent 66b4a1f8b8
commit 9af2c4f244
No known key found for this signature in database
GPG key ID: 4FB865FDBCA4BCC4
7 changed files with 94 additions and 0 deletions

View file

@ -0,0 +1,27 @@
# frozen_string_literal: true
class FAQController < ApplicationController
before_action :load_faq_data, only: :show
def show
@renderer = Redcarpet::Markdown.new(
Redcarpet::BareRenderer.new(class_names_map: { list: 'fr-ol-content--override' })
)
end
private
def loader_service
@loader_service ||= FAQsLoaderService.new
end
def load_faq_data
path = "#{params[:category]}/#{params[:slug]}"
faq_data = loader_service.find(path)
@content = faq_data.content
@metadata = faq_data.front_matter.symbolize_keys
rescue KeyError
raise ActionController::RoutingError.new("FAQ not found: #{path}")
end
end

View file

@ -0,0 +1,32 @@
# frozen_string_literal: true
class FAQsLoaderService
PATH = Rails.root.join('doc', 'faqs').freeze
ORDER = ['usager', 'instructeur', 'administrateur'].freeze
def initialize
@faqs_by_path ||= Rails.cache.fetch("faqs_data", expires_in: 1.day) do
load_faqs
end
end
def find(path)
file_path = @faqs_by_path.fetch(path).fetch(:file_path)
FrontMatterParser::Parser.parse_file(file_path)
end
private
def load_faqs
Dir.glob("#{PATH}/**/*.md").each_with_object({}) do |file_path, faqs_by_path|
parsed = FrontMatterParser::Parser.parse_file(file_path)
front_matter = parsed.front_matter.symbolize_keys
faq_data = front_matter.slice(:slug, :title, :category, :subcategory, :locale, :keywords).merge(file_path: file_path)
path = front_matter.fetch(:category) + '/' + front_matter.fetch(:slug)
faqs_by_path[path] = faq_data
end
end
end

View file

@ -0,0 +1,6 @@
- content_for(:title, @metadata[:title])
.fr-container.fr-my-4w
.fr-grid-row
.fr-col-12.fr-col-md-8.fr-py-12v
= @renderer.render(@content).html_safe

View file

@ -18,6 +18,8 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym 'URL'
inflect.acronym 'SVA'
inflect.acronym 'SVR'
inflect.acronym 'FAQ'
inflect.acronym 'FAQs'
inflect.irregular 'type_de_champ', 'types_de_champ'
inflect.irregular 'type_de_champ_private', 'types_de_champ_private'
inflect.irregular 'procedure_revision_type_de_champ', 'procedure_revision_types_de_champ'

View file

@ -0,0 +1,9 @@
fr:
faq:
administrateur:
name: Administrateur (création dun formulaire)
description: Informations pour les administrateurs sur la configuration de la plateforme ou la création de démarches.
subcategories:
create_procedure:
name: Je veux créer une démarche en ligne
description: Comment créer une nouvelle démarche ?

View file

@ -715,6 +715,8 @@ Rails.application.routes.draw do
resources :release_notes, only: [:index]
get '/faq/:category/:slug', to: 'faq#show', as: :faq
get '/404', to: 'errors#not_found'
get '/422', to: 'errors#unprocessable_entity'
get '/500', to: 'errors#internal_server_error'

View file

@ -0,0 +1,16 @@
---
category: "administrateur"
subcategory: "create_procedure"
slug: "comment-creer-ma-demarche"
locale: "fr"
keywords: "création démarche, tutoriel, guide bonnes pratiques, administrateur"
title: "Comment créer ma démarche ?"
---
# Comment créer ma démarche ?
Envie de vous lancer dans laventure ? Bravo ! Pour vous accompagner tout au long de la création de votre démarche, nous avons préparé un petit tutoriel spécialement pour vous :
[Tutoriel Administrateur](https://doc.demarches-simplifiees.fr/tutoriels/tutoriel-administrateur)
Pour compléter cette prise en main de loutil, nhésitez pas à consulter [notre guide de bonnes pratiques](https://456404736-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L7_aKvpAJdAIEfxHudA%2Fuploads%2FGJm7S7LVjHPKVlMCE36e%2FGuide%20des%20bonnes%20pratiques%20démarches-simplifiees.pdf?alt=media&token=228e63c7-a168-4656-9cda-3f53a10645c2).