ClearBlog/lib/post/builder.rb

57 lines
1.4 KiB
Ruby

require "fileutils"
require_relative "../core_ext"
require "colorize"
module Post
class Builder
def initialize(options:)
@options = options
end
def filepath
@options.date ? _filepath_date : _filepath_title
end
private def _filepath_date
"blog/posts/dates/#{@options.date}.md"
end
private def _filepath_title
# topics_amount = File["blog/posts/topics/*"].size
# "blog/posts/topics/#{topics_amount}.md"
"blog/posts/topics/#{@options.title.slugify}.md"
end
def input_to_body
@options.date ? _input_to_body_date : _input_to_body_title
end
private def _input_to_body_date
@options.input
end
private def _input_to_body_title
"# #{@options.title}\n\n#{@options.input}"
end
def write!
String.disable_colorization true if !@options.colorize
filepath = filepath()
dirpath = File.dirname filepath
FileUtils.mkdir_p dirpath
new_body = input_to_body
old_body = File.read(filepath) if File.exist?(filepath)
body = [old_body, new_body].compact.join("\n---\n\n")
# we could use "a" mode for optimisation but it's overkill
File.write filepath, body
puts "Wrote the file #{filepath}".green
puts "Kept the content of the old post".yellow
new_lines_amount = new_body.count "\n"
puts "Wrote #{new_lines_amount} lines".yellow
end
end
end