125 lines
2.8 KiB
Ruby
125 lines
2.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "delegate"
|
|
require "github_changelog_generator/helper"
|
|
|
|
module GitHubChangelogGenerator
|
|
# This class wraps Options, and knows a list of known options. Others options
|
|
# will raise exceptions.
|
|
class Options < SimpleDelegator
|
|
# Raised on intializing with unknown keys in the values hash,
|
|
# and when trying to store a value on an unknown key.
|
|
UnsupportedOptionError = Class.new(ArgumentError)
|
|
|
|
# List of valid option names
|
|
KNOWN_OPTIONS = %i[
|
|
add_issues_wo_labels
|
|
add_pr_wo_labels
|
|
author
|
|
base
|
|
between_tags
|
|
bug_labels
|
|
bug_prefix
|
|
cache_file
|
|
cache_log
|
|
compare_link
|
|
date_format
|
|
due_tag
|
|
enhancement_labels
|
|
enhancement_prefix
|
|
breaking_labels
|
|
breaking_prefix
|
|
exclude_labels
|
|
exclude_tags
|
|
exclude_tags_regex
|
|
filter_issues_by_milestone
|
|
frontmatter
|
|
future_release
|
|
github_endpoint
|
|
github_site
|
|
header
|
|
http_cache
|
|
include_labels
|
|
issue_prefix
|
|
issue_line_labels
|
|
issues
|
|
max_issues
|
|
merge_prefix
|
|
output
|
|
project
|
|
pulls
|
|
release_branch
|
|
release_url
|
|
require
|
|
simple_list
|
|
since_tag
|
|
ssl_ca_file
|
|
token
|
|
unreleased
|
|
unreleased_label
|
|
unreleased_only
|
|
user
|
|
usernames_as_github_logins
|
|
verbose
|
|
]
|
|
|
|
# @param values [Hash]
|
|
#
|
|
# @raise [UnsupportedOptionError] if given values contain unknown options
|
|
def initialize(values)
|
|
super(values)
|
|
unsupported_options.any? && raise(UnsupportedOptionError, unsupported_options.inspect)
|
|
end
|
|
|
|
# Set option key to val.
|
|
#
|
|
# @param key [Symbol]
|
|
# @param val [Object]
|
|
#
|
|
# @raise [UnsupportedOptionError] when trying to set an unknown option
|
|
def []=(key, val)
|
|
supported_option?(key) || raise(UnsupportedOptionError, key.inspect)
|
|
values[key] = val
|
|
end
|
|
|
|
# @return [Hash]
|
|
def to_hash
|
|
values
|
|
end
|
|
|
|
# Loads the configured Ruby files from the --require option.
|
|
def load_custom_ruby_files
|
|
self[:require].each { |f| require f }
|
|
end
|
|
|
|
# Pretty-prints a censored options hash, if :verbose.
|
|
def print_options
|
|
return unless self[:verbose]
|
|
Helper.log.info "Using these options:"
|
|
pp(censored_values)
|
|
puts ""
|
|
end
|
|
|
|
private
|
|
|
|
def values
|
|
__getobj__
|
|
end
|
|
|
|
# Returns a censored options hash.
|
|
#
|
|
# @return [Hash] The GitHub `:token` key is censored in the output.
|
|
def censored_values
|
|
values.clone.tap { |opts| opts[:token] = opts[:token].nil? ? "No token used" : "hidden value" }
|
|
end
|
|
|
|
def unsupported_options
|
|
values.keys - KNOWN_OPTIONS
|
|
end
|
|
|
|
def supported_option?(key)
|
|
KNOWN_OPTIONS.include?(key)
|
|
end
|
|
end
|
|
end
|