lib/anyway/config.rb in anyway_config-1.4.0 vs lib/anyway/config.rb in anyway_config-1.4.1
- old
+ new
@@ -1,16 +1,18 @@
# frozen_string_literal: true
require 'anyway/ext/deep_dup'
require 'anyway/ext/deep_freeze'
require 'anyway/ext/hash'
+require 'anyway/ext/string_serialize'
require 'anyway/option_parser_builder'
module Anyway # :nodoc:
using Anyway::Ext::DeepDup
using Anyway::Ext::DeepFreeze
using Anyway::Ext::Hash
+ using Anyway::Ext::StringSerialize
# Base config class
# Provides `attr_config` method to describe
# configuration parameters and set defaults
class Config
@@ -36,30 +38,37 @@
@config_name = underscore_name unless defined?(@config_name)
@config_name
end
def ignore_options(*args)
- @ignore_options ||= []
- @ignore_options |= args
+ args.each do |name|
+ option_parser_descriptors[name.to_s][:ignore] = true
+ end
end
def describe_options(**hargs)
- @option_parser_descriptions ||= {}
- @option_parser_descriptions.merge!(hargs.stringify_keys!)
+ hargs.each do |name, desc|
+ option_parser_descriptors[name.to_s][:desc] = desc
+ end
end
+ def flag_options(*args)
+ args.each do |name|
+ option_parser_descriptors[name.to_s][:flag] = true
+ end
+ end
+
def extend_options(&block)
@option_parser_extension = block
end
def option_parser_options
- ignored_options = @ignore_options || []
- descriptions = @option_parser_descriptions || {}
config_attributes.each_with_object({}) do |key, result|
- next if ignored_options.include?(key.to_sym)
+ descriptor = option_parser_descriptors[key.to_s]
+ next if descriptor[:ignore] == true
- result[key] ||= descriptions[key.to_s]
+ result[key] = descriptor
end
end
def env_prefix(val = nil)
return (@env_prefix = val.to_s) unless val.nil?
@@ -77,10 +86,14 @@
new(name: name, load: false).load_from_sources
end
private
+ def option_parser_descriptors
+ @option_parser_descriptors ||= Hash.new { |h, k| h[k] = {} }
+ end
+
def underscore_name
return unless name
word = name[/^(\w+)/]
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
@@ -150,12 +163,12 @@
end
def option_parser
@option_parser ||= begin
parser = OptionParserBuilder.call(self.class.option_parser_options) do |key, arg|
- set_value(key, arg)
+ set_value(key, arg.is_a?(String) ? arg.serialize : arg)
end
- self.class.option_parser_extension&.call(parser) || parser
+ self.class.option_parser_extension&.call(parser, self) || parser
end
end
def parse_options!(options)
option_parser.parse!(options)