class Milestoner::Tags::Manifest

Manages build manifest.

def build_path = settings.build_output.join name

def build_path = settings.build_output.join name

def content_for tags

:reek:FeatureEnvy
def content_for tags
  generator.merge latest: tags.last.version, versions: tags.map(&:version)
end

def diff path = build_path

def diff path = build_path
  git.tags.value_or(Core::EMPTY_ARRAY).then do |tags|
    return Core::EMPTY_HASH if tags.empty?
    content_for(tags).diff read(path)
  end
end

def generator

def generator
  {generator: {label: settings.generator_label, version: settings.generator_version.to_s}}
end

def initialize(name: "manifest.json", **)

def initialize(name: "manifest.json", **)
  super(**)
  @name = name
end

def read(path = build_path) = JSON(path.read, {symbolize_names: true})

def read(path = build_path) = JSON(path.read, {symbolize_names: true})

def write(path = build_path, **)

def write(path = build_path, **)
  path.make_ancestors.write JSON.pretty_generate(generator.deep_merge(**))
end