module ApnClient class NamedArgs def self.assert_valid!(arguments, options) arguments ||= {} options[:optional] ||= [] options[:required] ||= [] assert_allowed!(arguments, options[:optional] + options[:required]) assert_present!(arguments, options[:required]) end def self.assert_allowed!(arguments, allowed_keys) invalid_keys = arguments.keys.select { |key| !allowed_keys.include?(key) } unless invalid_keys.empty? raise "Invalid arguments: #{invalid_keys.join(', ')}. Must be one of #{allowed_keys.join(', ')}" end end def self.assert_present!(arguments, required_keys) missing_keys = required_keys.select { |key| !arguments.keys.include?(key) } unless missing_keys.empty? raise "Missing required arguments: #{missing_keys.join(', ')}" end end end end