From 44bbd9ca01aa15df7a7b78da545f5f2c2529fc5d Mon Sep 17 00:00:00 2001 From: Olle Jonsson Date: Thu, 17 Mar 2016 20:39:49 +0100 Subject: [PATCH] Parse options file options - this proof-of-concept code duplicates OptionParser information to get something going - take care to respect the type of each option from the OptionParser --- lib/github_changelog_generator/parser_file.rb | 22 ++++++++++++++++--- spec/unit/parse_file_spec.rb | 1 - 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/github_changelog_generator/parser_file.rb b/lib/github_changelog_generator/parser_file.rb index 3bf505f..1dbae70 100644 --- a/lib/github_changelog_generator/parser_file.rb +++ b/lib/github_changelog_generator/parser_file.rb @@ -23,9 +23,7 @@ module GitHubChangelogGenerator def parse_line!(line) key_sym, value = extract_pair(line) - value = true if value =~ /^(true|t|yes|y|1)$/i - value = false if value =~ /^(false|f|no|n|0)$/i - @options[key_sym] = value + @options[key_sym] = convert_value(value, key_sym) rescue raise ParserError, "Config file #{file} is incorrect in line \"#{line.gsub(/[\n\r]+/, '')}\"" end @@ -38,5 +36,23 @@ module GitHubChangelogGenerator key, value = line.split("=", 2) [key.sub("-", "_").to_sym, value.gsub(/[\n\r]+/, "")] end + + KNOWN_ARRAY_KEYS = [:exclude_labels, :include_labels, :bug_labels, + :enhancement_labels, :between_tags, :exclude_tags] + KNOWN_INTEGER_KEYS = [:max_issues] + + def convert_value(value, key_sym) + if KNOWN_ARRAY_KEYS.include?(key_sym) + value.split(",") + elsif KNOWN_INTEGER_KEYS.include?(key_sym) + value.to_i + elsif value =~ /^(true|t|yes|y|1)$/i + true + elsif value =~ /^(false|f|no|n|0)$/i + false + else + value + end + end end end diff --git a/spec/unit/parse_file_spec.rb b/spec/unit/parse_file_spec.rb index f130d34..99c6477 100644 --- a/spec/unit/parse_file_spec.rb +++ b/spec/unit/parse_file_spec.rb @@ -44,7 +44,6 @@ describe GitHubChangelogGenerator::ParserFile do } end it "reads exclude_labels into an Array" do - pending("Related with Bug #327.") expect { parse.parse! }.to change { options[:exclude_labels] } .from(nil) .to(["73a91042-da6f-11e5-9335-1040f38d7f90", "7adf83b4-da6f-11e5-ae18-1040f38d7f90"])