Pourquoi le traitement des convertisseurs d'en-tête arrêtez avec le premier non String
qui est renvoyé par un convertisseur d'en-tête ?
Détails
Après l'intégration :symbol
Le convertisseur d'en-tête est déclenché, aucun autre convertisseur ne sera traité. Il semble que le traitement des convertisseurs d'en-tête arrête avec le premier convertisseur qui retourne quelque chose qui n'est pas un String
(c.-à-d. le même comportement si vous écrivez un convertisseur d'en-tête personnalisé qui renvoie un fichier Fixnum
ou autre).
Ce code fonctionne comme prévu en lançant l'exception dans :throw_an_exception
require 'csv'
CSV::HeaderConverters[:throw_an_exception] = lambda do |header|
raise 'Exception triggered.'
end
csv_str = "Numbers\n" +
"1\n" +
"4\n" +
"7"
puts CSV.parse(
csv_str,
{
headers: true,
header_converters: [
:throw_an_exception,
:symbol
]
}
)
Cependant, si vous changez l'ordre des convertisseurs d'en-tête de façon à ce que l'option :symbol
Le convertisseur vient en premier, le :throw_an_exception
lambda n'est jamais appelé.
...
header_converters: [
:symbol,
:throw_an_exception
]
...