Sha256: d8491de8ca610d3e917de466424546dfa8d3eec703116c06d8e174ef4f586f00

Contents?: true

Size: 985 Bytes

Versions: 2

Compression:

Stored size: 985 Bytes

Contents

# frozen_string_literal: true

require "refinements/pathname"

module Milestoner
  module Builders
    # Builds syndicated feed output.
    class Feed
      include Milestoner::Import[:settings, :logger]

      using Refinements::Pathname

      def initialize(tagger: Commits::Tagger.new, syndicator: Syndication::Builder.new, **)
        @tagger = tagger
        @syndicator = syndicator
        super(**)
      end

      def call
        tagger.call
              .bind { |tags| syndicator.call tags }
              .fmap { |body| write body }
              .alt_map { |message| failure message }
      end

      private

      attr_reader :tagger, :syndicator

      def write body
        root = settings.build_root
        path = root.join(settings.build_basename).make_ancestors.sub_ext(".xml").write body

        logger.info { "Built: #{path}." }
        root
      end

      def failure message
        logger.error { message }
        message
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
milestoner-18.12.0 lib/milestoner/builders/feed.rb
milestoner-18.11.0 lib/milestoner/builders/feed.rb