mirror of
https://github.com/samsonjs/samhuri.net.git
synced 2026-04-03 10:25:46 +00:00
69 lines
1.8 KiB
Ruby
69 lines
1.8 KiB
Ruby
require_relative '../plugin'
|
||
require_relative '../utils/file_writer'
|
||
require_relative '../views/layout'
|
||
require_relative '../views/projects_view'
|
||
require_relative '../views/project_view'
|
||
require_relative 'models'
|
||
|
||
module Pressa
|
||
module Projects
|
||
class Plugin < Pressa::Plugin
|
||
def initialize(projects: [])
|
||
@projects = projects
|
||
end
|
||
|
||
def setup(site:, source_path:)
|
||
end
|
||
|
||
def render(site:, target_path:)
|
||
write_projects_index(site:, target_path:)
|
||
|
||
@projects.each do |project|
|
||
write_project_page(project:, site:, target_path:)
|
||
end
|
||
end
|
||
|
||
private
|
||
|
||
def write_projects_index(site:, target_path:)
|
||
content_view = Views::ProjectsView.new(projects: @projects, site:)
|
||
|
||
html = render_layout(
|
||
site:,
|
||
page_title: "Projects – #{site.title}",
|
||
canonical_url: site.url_for('/projects/'),
|
||
content: content_view
|
||
)
|
||
|
||
file_path = File.join(target_path, 'projects', 'index.html')
|
||
Utils::FileWriter.write(path: file_path, content: html)
|
||
end
|
||
|
||
def write_project_page(project:, site:, target_path:)
|
||
content_view = Views::ProjectView.new(project:, site:)
|
||
|
||
html = render_layout(
|
||
site:,
|
||
page_title: "#{project.title} – #{site.title}",
|
||
canonical_url: site.url_for(project.path),
|
||
content: content_view
|
||
)
|
||
|
||
file_path = File.join(target_path, 'projects', project.name, 'index.html')
|
||
Utils::FileWriter.write(path: file_path, content: html)
|
||
end
|
||
|
||
def render_layout(site:, page_title:, canonical_url:, content:)
|
||
layout = Views::Layout.new(
|
||
site:,
|
||
page_title:,
|
||
canonical_url:
|
||
)
|
||
|
||
layout.call do
|
||
content.call
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|