From b277106ed574654914058a4ec4474c01a796cf9e Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Wed, 1 Jan 2020 21:46:58 -0800 Subject: [PATCH] Shuffle some code around --- .../Posts/JSONFeed/JSONFeedWriter.swift | 30 +++++++++++-------- .../samhuri.net/Posts/Model/PostsByYear.swift | 2 +- .../samhuri.net/Posts/Model/YearPosts.swift | 5 ++++ .../samhuri.net/Posts/PostsPlugin.swift | 4 +-- .../Posts/RSSFeed/RSSFeedWriter.swift | 2 +- 5 files changed, 27 insertions(+), 16 deletions(-) diff --git a/samhuri.net/Sources/samhuri.net/Posts/JSONFeed/JSONFeedWriter.swift b/samhuri.net/Sources/samhuri.net/Posts/JSONFeed/JSONFeedWriter.swift index 9fed7c6..6dada83 100644 --- a/samhuri.net/Sources/samhuri.net/Posts/JSONFeed/JSONFeedWriter.swift +++ b/samhuri.net/Sources/samhuri.net/Posts/JSONFeed/JSONFeedWriter.swift @@ -20,8 +20,24 @@ final class JSONFeedWriter { self.fileWriter = fileWriter } - func writeFeed(_ posts: [Post], for site: Site, to targetURL: URL, with renderer: JSONFeedRendering) throws { - let feed = Feed( + func writeFeed(site: Site, posts: [Post], to targetURL: URL, with renderer: JSONFeedRendering) throws { + let feed = try buildFeed(site: site, posts: posts, renderer: renderer) + let encoder = JSONEncoder() + encoder.dateEncodingStrategy = .iso8601 +#if os(Linux) + encoder.outputFormatting = [.prettyPrinted] +#else + encoder.outputFormatting = [.prettyPrinted, .withoutEscapingSlashes] +#endif + let feedJSON = try encoder.encode(feed) + let feedURL = targetURL.appendingPathComponent(jsonFeed.path) + try fileWriter.write(data: feedJSON, to: feedURL) + } +} + +private extension JSONFeedWriter { + func buildFeed(site: Site, posts: [Post], renderer: JSONFeedRendering) throws -> Feed { + Feed( title: site.title, home_page_url: site.url.absoluteString, feed_url: site.url.appendingPathComponent(jsonFeed.path).absoluteString, @@ -46,16 +62,6 @@ final class JSONFeedWriter { ) } ) - let encoder = JSONEncoder() - encoder.dateEncodingStrategy = .iso8601 -#if os(Linux) - encoder.outputFormatting = [.prettyPrinted] -#else - encoder.outputFormatting = [.prettyPrinted, .withoutEscapingSlashes] -#endif - let feedJSON = try encoder.encode(feed) - let feedURL = targetURL.appendingPathComponent(jsonFeed.path) - try fileWriter.write(data: feedJSON, to: feedURL) } } diff --git a/samhuri.net/Sources/samhuri.net/Posts/Model/PostsByYear.swift b/samhuri.net/Sources/samhuri.net/Posts/Model/PostsByYear.swift index 61466a7..3731800 100644 --- a/samhuri.net/Sources/samhuri.net/Posts/Model/PostsByYear.swift +++ b/samhuri.net/Sources/samhuri.net/Posts/Model/PostsByYear.swift @@ -41,6 +41,6 @@ struct PostsByYear { /// Returns an array of all posts. func flattened() -> [Post] { - byYear.values.flatMap { $0.byMonth.values.flatMap { $0.posts } } + byYear.values.flatMap { $0.flattened() } } } diff --git a/samhuri.net/Sources/samhuri.net/Posts/Model/YearPosts.swift b/samhuri.net/Sources/samhuri.net/Posts/Model/YearPosts.swift index 8353040..919d7b9 100644 --- a/samhuri.net/Sources/samhuri.net/Posts/Model/YearPosts.swift +++ b/samhuri.net/Sources/samhuri.net/Posts/Model/YearPosts.swift @@ -32,4 +32,9 @@ struct YearPosts { byMonth[month] = newValue } } + + /// Returns an array of all posts. + func flattened() -> [Post] { + byMonth.values.flatMap { $0.posts } + } } diff --git a/samhuri.net/Sources/samhuri.net/Posts/PostsPlugin.swift b/samhuri.net/Sources/samhuri.net/Posts/PostsPlugin.swift index eff11b9..b11bef3 100644 --- a/samhuri.net/Sources/samhuri.net/Posts/PostsPlugin.swift +++ b/samhuri.net/Sources/samhuri.net/Posts/PostsPlugin.swift @@ -50,7 +50,7 @@ final class PostsPlugin: Plugin { try postWriter.writeArchive(posts: postRepo.posts, for: site, to: targetURL, with: renderer) try postWriter.writeYearIndexes(posts: postRepo.posts, for: site, to: targetURL, with: renderer) try postWriter.writeMonthRollups(posts: postRepo.posts, for: site, to: targetURL, with: renderer) - try jsonFeedWriter?.writeFeed(postRepo.postsForFeed, for: site, to: targetURL, with: renderer) - try rssFeedWriter?.writeFeed(postRepo.postsForFeed, for: site, to: targetURL, with: renderer) + try jsonFeedWriter?.writeFeed(site: site, posts: postRepo.postsForFeed, to: targetURL, with: renderer) + try rssFeedWriter?.writeFeed(site: site, posts: postRepo.postsForFeed, to: targetURL, with: renderer) } } diff --git a/samhuri.net/Sources/samhuri.net/Posts/RSSFeed/RSSFeedWriter.swift b/samhuri.net/Sources/samhuri.net/Posts/RSSFeed/RSSFeedWriter.swift index 7659a12..8c40d58 100644 --- a/samhuri.net/Sources/samhuri.net/Posts/RSSFeed/RSSFeedWriter.swift +++ b/samhuri.net/Sources/samhuri.net/Posts/RSSFeed/RSSFeedWriter.swift @@ -20,7 +20,7 @@ final class RSSFeedWriter { self.fileWriter = fileWriter } - func writeFeed(_ posts: [Post], for site: Site, to targetURL: URL, with renderer: RSSFeedRendering) throws { + func writeFeed(site: Site, posts: [Post], to targetURL: URL, with renderer: RSSFeedRendering) throws { let feedURL = site.url.appendingPathComponent(rssFeed.path) let feedXML = try renderer.renderRSSFeed(posts: posts, feedURL: feedURL, site: site) let feedFileURL = targetURL.appendingPathComponent(rssFeed.path)