mirror of
https://github.com/samsonjs/samhuri.net.git
synced 2026-03-25 09:05:47 +00:00
Replace the Swift site generator with a Ruby and Phlex implementation. Loads site and projects from TOML, derive site metadata from posts. Migrate from make to bake and add standardrb and code coverage tasks. Update CI and docs to match the new workflow, and remove unused assets/dependencies plus obsolete tooling.
53 lines
1.7 KiB
Ruby
53 lines
1.7 KiB
Ruby
require "builder"
|
|
require "pressa/utils/file_writer"
|
|
require "pressa/views/feed_post_view"
|
|
|
|
module Pressa
|
|
module Posts
|
|
class RSSFeedWriter
|
|
def initialize(site:, posts_by_year:)
|
|
@site = site
|
|
@posts_by_year = posts_by_year
|
|
end
|
|
|
|
def write_feed(target_path:, limit: 30)
|
|
recent = @posts_by_year.recent_posts(limit)
|
|
|
|
xml = Builder::XmlMarkup.new(indent: 2)
|
|
xml.instruct! :xml, version: "1.0", encoding: "UTF-8"
|
|
|
|
xml.rss :version => "2.0",
|
|
"xmlns:atom" => "http://www.w3.org/2005/Atom",
|
|
"xmlns:content" => "http://purl.org/rss/1.0/modules/content/" do
|
|
xml.channel do
|
|
xml.title @site.title
|
|
xml.link @site.url
|
|
xml.description @site.description
|
|
xml.pubDate recent.first.date.rfc822 if recent.any?
|
|
xml.tag! "atom:link", href: @site.url_for("/feed.xml"), rel: "self", type: "application/rss+xml"
|
|
|
|
recent.each do |post|
|
|
xml.item do
|
|
title = post.link_post? ? "→ #{post.title}" : post.title
|
|
permalink = @site.url_for(post.path)
|
|
xml.title title
|
|
xml.link permalink
|
|
xml.guid permalink, isPermaLink: "true"
|
|
xml.pubDate post.date.rfc822
|
|
xml.author post.author
|
|
xml.tag!("content:encoded") { xml.cdata!(render_feed_post(post)) }
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
file_path = File.join(target_path, "feed.xml")
|
|
Utils::FileWriter.write(path: file_path, content: xml.target!)
|
|
end
|
|
|
|
def render_feed_post(post)
|
|
Views::FeedPostView.new(post:, site: @site).call
|
|
end
|
|
end
|
|
end
|
|
end
|