Can we please get a "raw" loader?
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
Piste de recherche
Commencez par YAML.load, safe_load et le point d’entrée proposé Psych.set_parse_mode, puis comparez les deux exemples YAML de l’issue. Définissez les règles de conversion du mode raw et la manière dont il doit différer du mode objets natifs ; le travail est considéré comme terminé lorsque la sortie hash-tree demandée est spécifiée et couverte par des tests d’implémentation.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
There are times when we need to load a YAML file but for various reasons, we do not want or care about the serialization/native dataclass conversions. We want to load the data in as a hash-tree object, as if the object classifier were not there.
Now it seems to me based on the long discussion related to the safe_load method, that safe_load does not, in fact, do what is requested here. It seems to me that several sane voices were a bit shuoted down in that discussion. But whatever.
What is needed is essentially to load YAML files as if they were dumb JSON files. As if the following code were implemented before the #load
yamltext = File.read("somefile","r")
yamltext.sub!(/^--- \!.*$/,'---')
purehash = YAML.load(yamltext)
Given the following YAML:
--- !ruby/object:Some::Custom::Type::User::Has::No::Gem::For
node: "string"
array:
- "string"
- unquoted text
- "12.5"
- 12.5
- subarray:
option: true
nottrue: "false"
We get back from #load:
{"node"=>"string", "array"=>["string", "unquoted text", "12.5", 12.5, {"subarray"=>{"option"=>true, "nottrue"=>"false"}}]}
I propose an implementation that is cleaner, that uses YAML.load() but based on the parser-personality. The personalities might be a kind of a "raw" mode and "native-object" mode. Raw mode only sees Hash, Array, String. Native-object mode also sees numeric, boolean (and..?)
Psych.set_parse_mode(:native_object_conversion)
purehash=YAML.load(yamltext)
Produces the inspected output, above. Whereas:
Psych.set_parse_mode(:no_object_conversion)
purehash=YAML.load(yamltext)
produces (subtly different):
{"node"=>"string", "array"=>["string", "unquoted text", "12.5", "12.5", {"subarray"=>{"option"=>"true", "nottrue"=>"false"}}]}
- Langage dominant
- Ruby
- Étoiles
- 596
- Forks
- 224
- Merge moyen
- 5 h 50 min
- PR mergées (30 j)
- 3
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de ruby/psych
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Documentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
-
Psych.dump raises Encoding::CompatibilityError for UTF-16/UTF-32 stringsPeut-être pris @Halvanhelv l’a pris il y a 39 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 55/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 68/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
Toutes les issues de ruby/psych
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Homebrew/homebrew-cask#295450 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 Une demi-journée Accessibilité débutants 72/100
TheOdinProject/curriculum#31479 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
taskcluster/taskcluster#9284 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Class option relations are appended to the command on every runPeut-être pris @auraseb l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100