class OptionsResolver
Public Class Methods
new()
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 8 def initialize @defined_options = [] @required_options = [] @default_values = {} @allowed_types = {} @allowed_values = {} @normalizers = {} @previous_default_values = {} end
Public Instance Methods
get_allowed_types(option_key = nil)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 101 def get_allowed_types option_key = nil return @allowed_types unless option_key @allowed_types[option_key] end
get_allowed_values(option_key = nil)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 113 def get_allowed_values option_key = nil return @allowed_values unless option_key @allowed_values end
get_default_values(option_key = nil)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 89 def get_default_values option_key = nil return @default_values unless option_key @default_values[option_key] end
get_defined_options()
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 28 def get_defined_options @defined_options end
get_missing_options()
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 60 def get_missing_options @required_options.map do |required_key| next if @default_values.include?(required_key) required_key end.compact end
get_required_options()
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 48 def get_required_options @required_options end
is_defined?(option_key)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 32 def is_defined? option_key @defined_options.include? option_key end
is_missing?(option_key)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 56 def is_missing? option_key !@default_values.include? option_key end
is_required?(option_key)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 52 def is_required? option_key @required_options.include? option_key end
resolve(data_object)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 125 def resolve data_object raise InvalidParameter unless data_object.is_a? Hash # Unique @defined_options @defined_options.uniq! # Stringify hash keys data_object = data_object.stringify_keys # Check undefined options check_undefined_options data_object.keys # Set default values data_object = set_options_default data_object # Check missing required options check_missing_required_options data_object # Check invalid options type check_invalid_options_type data_object # Check invalid options value check_invalid_options_value data_object # Normalizer options value data_object = normalizer_options_value data_object data_object end
set_allowed_types(option_key, option_value_types)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 95 def set_allowed_types option_key, option_value_types @allowed_types[option_key] = option_value_types self end
set_allowed_values(option_key, option_allowed_value)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 107 def set_allowed_values option_key, option_allowed_value @allowed_values[option_key] = option_allowed_value self end
set_default(option_key, default_value)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 67 def set_default option_key, default_value @previous_default_values[option_key] = @default_values[option_key] if @default_values.include? option_key @default_values[option_key] = default_value self.set_defined option_key self end
set_defaults(option_default_values)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 77 def set_defaults option_default_values raise InvalidParameter unless option_default_values.is_a? Hash option_default_values.each do |opt_key, opt_value| opt_key = opt_key.to_s self.set_default(opt_key, opt_value).set_defined opt_key end self end
set_defined(defined_keys)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 18 def set_defined defined_keys if defined_keys.is_a?(Array) @defined_options.concat defined_keys else @defined_options.push defined_keys end self end
set_normalizer(option_key, normalizer_value)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 119 def set_normalizer option_key, normalizer_value @normalizers[option_key] = normalizer_value self end
set_required(required_keys)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 36 def set_required required_keys if required_keys.is_a?(Array) @required_options.concat required_keys @defined_options.concat required_keys else @required_options.push required_keys @defined_options.push required_keys end self end
Private Instance Methods
check_invalid_options_type(data_object)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 177 def check_invalid_options_type data_object @allowed_types.each do |option_key, allowed_type| option_key = option_key.to_s option_value = data_object[option_key] case allowed_type.downcase when "int", "integer" throw_invalid_options_exception option_key, option_value, "int" unless option_value.is_a? Integer when "str", "string" throw_invalid_options_exception option_key, option_value, "str" unless option_value.is_a? String when "arr", "array" throw_invalid_options_exception option_key, option_value, "array" unless option_value.is_a? Array when "bool", "boolean" throw_invalid_options_exception option_key, option_value, "boolean" unless [true, false].include? option_value when "float" throw_invalid_options_exception option_key, option_value, "float" unless option_value.is_a? Float when "hash" throw_invalid_options_exception option_key, option_value, "hash" unless option_value.is_a? Hash when "sym", "symbol" throw_invalid_options_exception option_key, option_value, "symbol" unless option_value.is_a? Symbol when "range" throw_invalid_options_exception option_key, option_value, "range" unless option_value.is_a? Range when "regexp" throw_invalid_options_exception option_key, option_value, "regexp" unless option_value.is_a? Regexp when "proc" throw_invalid_options_exception option_key, option_value, "proc" unless option_value.is_a? Proc end end end
check_invalid_options_value(data_object)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 207 def check_invalid_options_value data_object @allowed_values.each do |option_key, allowed_value| option_key = option_key.to_s option_value = data_object[option_key] is_valid_value = true accepted_value_msg = "" if allowed_value.is_a? Array is_valid_value = allowed_value.include? option_value accepted_value_msg = " Accepted values are \"#{allowed_value.join("\", \"")}\"" elsif allowed_value.is_a? Proc is_valid_value = allowed_value.call option_value else is_valid_value = (option_value == allowed_value) end raise "The option \"#{option_key}\" with value \"#{option_value}\" is invalid.#{accepted_value_msg}" unless is_valid_value end end
check_missing_required_options(data_object)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 169 def check_missing_required_options data_object @required_options.each do |required_key| next if data_object[required_key.to_s] raise MissingOptions, "The required options \"#{required_key}\" is missing." end end
check_undefined_options(option_keys)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 149 def check_undefined_options option_keys know_options_str = "\"#{@defined_options.join("\", \"")}\"" option_keys.each do |opt_key| raise UndefinedOptions, "The option \"#{opt_key}\" does not exist. Know options are: #{know_options_str}" unless @defined_options.include? opt_key.to_s end end
normalizer_options_value(data_object)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 227 def normalizer_options_value data_object @normalizers.each do |option_key, normalizer_method| raise InvalidParameter "Normalizer for key \"#{option_key}\" has invalid method." unless normalizer_method.is_a? Proc option_value = data_object[option_key] data_object[option_key] = normalizer_method.call data_object, option_value end data_object end
set_options_default(data_object)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 158 def set_options_default data_object @default_values.each do |option_key, default_value| next unless data_object[option_key].nil? previous_default_value = @previous_default_values[option_key] data_object[option_key] = default_value.is_a?(Proc) ? default_value.call(data_object, previous_default_value) : default_value end data_object end
throw_invalid_options_exception(key, val, expected_type)
click to toggle source
# File lib/optionsresolver/optionsresolver.rb, line 238 def throw_invalid_options_exception key, val, expected_type msg = "The option \"#{key}\" with \"#{val}\" is expected to be of type \"#{expected_type}\"" raise InvalidOptions, msg end