1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
# frozen_string_literal: true
module Listen
class Options
def initialize(opts, defaults)
@options = {}
given_options = opts.dup
defaults.each_key do |key|
@options[key] = given_options.delete(key) || defaults[key]
end
given_options.empty? or raise ArgumentError, "Unknown options: #{given_options.inspect}"
end
# rubocop:disable Lint/MissingSuper
def respond_to_missing?(name, *_)
@options.has_key?(name)
end
def method_missing(name, *_)
respond_to_missing?(name) or raise NameError, "Bad option: #{name.inspect} (valid:#{@options.keys.inspect})"
@options[name]
end
# rubocop:enable Lint/MissingSuper
end
end
|