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