92 lines
1.7 KiB
Ruby
92 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
require "delegate"
|
|
module GitHubChangelogGenerator
|
|
class Options < SimpleDelegator
|
|
UnsupportedOptionError = Class.new(ArgumentError)
|
|
|
|
KNOWN_OPTIONS = [
|
|
: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,
|
|
:exclude_labels,
|
|
:exclude_tags,
|
|
:exclude_tags_regex,
|
|
:filter_issues_by_milestone,
|
|
:frontmatter,
|
|
:future_release,
|
|
:git_remote,
|
|
:github_endpoint,
|
|
:github_site,
|
|
:header,
|
|
:http_cache,
|
|
:include_labels,
|
|
:issue_prefix,
|
|
:issues,
|
|
:max_issues,
|
|
:merge_prefix,
|
|
:output,
|
|
:project,
|
|
:pulls,
|
|
:release_branch,
|
|
:release_url,
|
|
:simple_list,
|
|
:since_tag,
|
|
:token,
|
|
:unreleased,
|
|
:unreleased_label,
|
|
:unreleased_only,
|
|
:user,
|
|
:usernames_as_github_logins,
|
|
:verbose
|
|
]
|
|
|
|
THESE_ARE_DIFFERENT = [
|
|
:tag1,
|
|
:tag2
|
|
]
|
|
|
|
def initialize(values)
|
|
super(values)
|
|
unsupported_options.any? && raise(UnsupportedOptionError, unsupported_options.inspect)
|
|
end
|
|
|
|
def []=(key, val)
|
|
supported_option?(key) || raise(UnsupportedOptionError, key.inspect)
|
|
values[key] = val
|
|
end
|
|
|
|
def to_hash
|
|
values
|
|
end
|
|
|
|
private
|
|
|
|
def values
|
|
__getobj__
|
|
end
|
|
|
|
def unsupported_options
|
|
values.keys - supported_options
|
|
end
|
|
|
|
def supported_option?(key)
|
|
supported_options.include?(key)
|
|
end
|
|
|
|
def supported_options
|
|
KNOWN_OPTIONS + THESE_ARE_DIFFERENT
|
|
end
|
|
end
|
|
end
|