Options: a class to wrap Hash-accessing options choices
- protects against bad names
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# frozen_string_literal: true
|
||||
require 'delegate'
|
||||
module GitHubChangelogGenerator
|
||||
class Options < SimpleDelegator
|
||||
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)
|
||||
if unsupported_options.any?
|
||||
raise ArgumentError, "Unsupported options #{unsupported_options}"
|
||||
end
|
||||
end
|
||||
|
||||
def to_hash
|
||||
values
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def values
|
||||
__getobj__
|
||||
end
|
||||
|
||||
def unsupported_options
|
||||
values.keys - (KNOWN_OPTIONS + THESE_ARE_DIFFERENT)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -187,7 +187,7 @@ module GitHubChangelogGenerator
|
||||
|
||||
# @return [Hash] Default options
|
||||
def self.default_options
|
||||
{
|
||||
Options.new(
|
||||
tag1: nil,
|
||||
tag2: nil,
|
||||
date_format: "%Y-%m-%d",
|
||||
@@ -217,7 +217,7 @@ module GitHubChangelogGenerator
|
||||
http_cache: true,
|
||||
cache_file: "/tmp/github-changelog-http-cache",
|
||||
cache_log: "/tmp/github-changelog-logger.log"
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
# If `:user` or `:project` not set in options, try setting them
|
||||
|
||||
Reference in New Issue
Block a user