lib/milestoner/builders/web.rb in milestoner-17.11.0 vs lib/milestoner/builders/web.rb in milestoner-18.0.0

- old
+ new

@@ -2,42 +2,72 @@ require "refinements/pathname" module Milestoner module Builders - # Builds web page output (i.e. HTML and CSS). + # Builds web output (i.e. HTML and CSS). class Web - include Milestoner::Import[:input] + include Milestoner::Import[:settings, :logger] using Refinements::Pathname - def initialize(view: Views::Milestones::Show.new, enricher: Commits::Enricher.new, **) + def initialize(tagger: Commits::Tagger.new, view: Views::Milestones::Show.new, **) + @tagger = tagger @view = view - @enricher = enricher super(**) end def call - input.build_root.tap do |path| - stylesheet_path.copy path.make_path.join("page.css") - write path - end + settings.build_root.make_path + copy_stylesheet + + tagger.call + .fmap { |tags| build tags } + .alt_map { |message| failure message } end private - attr_reader :view, :enricher + attr_reader :tagger, :view + def build tags + tags.each { |tag| write tag } + settings.build_root + end + + def copy_stylesheet + return unless settings.build_stylesheet + + stylesheet_template.copy stylesheet_path + logger.info { "Built: #{stylesheet_path}." } + end + + def stylesheet_template + settings.build_template_paths + .map { |path| path.join "public/page.css.erb" } + .find(&:exist?) + .copy settings.build_root.make_path.join stylesheet_path + end + def stylesheet_path - input.build_template_paths - .map { |path| path.join "public/page.css.erb" } - .find(&:exist?) + settings.build_root.join "#{Pathname(settings.build_stylesheet).name}.css" end - def write path - enricher.call.fmap do |commits| - path.join("index.html").write view.call commits:, layout: input.build_layout - end + def write tag + path = make_path tag + + path.write view.call(tag:, layout: settings.build_layout) + logger.info { "Built: #{path}." } + end + + def make_path tag + version = settings.build_max == 1 ? "" : tag.version + settings.build_root.join(version, settings.build_basename).make_ancestors.sub_ext ".html" + end + + def failure message + logger.error { message } + message end end end end