72 lines
1.8 KiB
Ruby
72 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Changelog
|
|
# Configuration settings used when generating changelogs.
|
|
class Config
|
|
# When rendering changelog entries, authors are not included.
|
|
AUTHORS_NONE = 'none'
|
|
|
|
# The path to the configuration file as stored in the project's Git
|
|
# repository.
|
|
FILE_PATH = '.gitlab/changelog_config.yml'
|
|
|
|
# The default date format to use for formatting release dates.
|
|
DEFAULT_DATE_FORMAT = '%Y-%m-%d'
|
|
|
|
# The default template to use for generating release sections.
|
|
DEFAULT_TEMPLATE = File.read(File.join(__dir__, 'template.tpl'))
|
|
|
|
attr_accessor :date_format, :categories, :template
|
|
|
|
def self.from_git(project)
|
|
if (yaml = project.repository.changelog_config)
|
|
from_hash(project, YAML.safe_load(yaml))
|
|
else
|
|
new(project)
|
|
end
|
|
end
|
|
|
|
def self.from_hash(project, hash)
|
|
config = new(project)
|
|
|
|
if (date = hash['date_format'])
|
|
config.date_format = date
|
|
end
|
|
|
|
if (template = hash['template'])
|
|
config.template = Parser.new.parse_and_transform(template)
|
|
end
|
|
|
|
if (categories = hash['categories'])
|
|
if categories.is_a?(Hash)
|
|
config.categories = categories
|
|
else
|
|
raise Error, 'The "categories" configuration key must be a Hash'
|
|
end
|
|
end
|
|
|
|
config
|
|
end
|
|
|
|
def initialize(project)
|
|
@project = project
|
|
@date_format = DEFAULT_DATE_FORMAT
|
|
@template = Parser.new.parse_and_transform(DEFAULT_TEMPLATE)
|
|
@categories = {}
|
|
end
|
|
|
|
def contributor?(user)
|
|
@project.team.contributor?(user)
|
|
end
|
|
|
|
def category(name)
|
|
@categories[name] || name
|
|
end
|
|
|
|
def format_date(date)
|
|
date.strftime(@date_format)
|
|
end
|
|
end
|
|
end
|
|
end
|