2017-01-21 1 views
0

Je cherche une possibilité de déclarer une constante Magick :: StyleType dans un fichier .yml puis de charger cette constante dans un fichier ruby. Ou si ce n'est pas possible alors j'ai besoin de savoir comment convertir une chaîne en une constante Magick :: StyleType dans ruby.Comment déclarer une constante ruby ​​(RMagick) dans un fichier YAML

Voici les détails:

Je suis en train d'écrire un programme rubis, qui place un texte sur une image et j'utiliser l'interface RMagick pour elle. Dans mon programme ruby, j'ai une méthode qui spécifie différentes propriétés du texte comme font-family ou font-style. Cette méthode comprend la ligne:

self.font_style = ItalicStyle 

Maintenant, je veux enregistrer tous les paramètres modifiables dans un fichier YAML-config (config.yml), donc ce config.yml comprend ces lignes:

#font style (like bold, italic and so on) 
:font_style: ItalicStyle 

maintenant Je charge le config.yml dans mon dossier rubis et la ligne mentionnée ci-dessus dans ma méthode lit maintenant comme suit

self.font_style = config_file[:font_style] 

Quand je lance mon fichier ruby ​​maintenant je reçois le message d'erreur:

`font_style=': wrong enumeration type - expected Magick::StyleType, got String (TypeError) 

Ainsi, après avoir cherché un peu sur le sujet que je changé mon config.yml premier à

:font_style: !/ruby/constant ItalicStyle 

qui m'a comme ci-dessus le même message d'erreur et j'ai essayé ceci:

:font_style: !/ruby/symbol :ItalicStyle 

et a obtenu ce message d'erreur:

`font_style=': wrong enumeration type - expected Magick::StyleType, got Symbol (TypeError) 

Le n Je suis arrivé irb:

require 'rmagick' => true 

Magick.const_get(ItalicStyle) => ItalicStyle=2 
Magick.const_get(ItalicStyle).class => Magick::StyleType 

Alors, enfin je reçois à ma question: Comment puis-je changer la ligne

:font_style: !/ruby/symbol :ItalicStyle 

dans mon fichier config.yml de sorte que lorsqu'il est chargé dans mon rubis le fichier ItalicStyle sera reconnu comme une constante Magick :: StyleType?

Ou quand je quitte

:font_style: ItalicStyle 

dans le config.yml et charge le ItalicStyle en tant que chaîne dans mon fichier ruby: est-il possible, pour convertir ItalicStyle d'une chaîne à l'Magick: StyleType constante le fichier ruby ​​directement?

Je serais vraiment heureux si quelqu'un pouvait vous aider. J'ai essayé pendant des jours pour trouver une solution et j'en ai vraiment besoin pour mon projet.

+0

Quel est le problème avec ** dumping ** les valeurs par défaut dans yaml pour examiner à quoi elles devraient ressembler? Pour la solution appropriée, voir la réponse de @spickermann ci-dessous. – mudasobwa

Répondre

1

Je voudrais juste stocker un String dans le fichier YAML, car cela est plus facile à écrire et à lire:

:font_style: ItalicStyle 

Que je recevrais la constante par son nom pour configurer Magick:

self.font_style = Object.const_get(config_file[:font_style]) 
+0

Merci beaucoup! Ça a marché. – Njutik

+0

Si cela ne vous dérange pas, j'ai une autre question: j'ai déjà essayé la méthode const_get dans irb avant de poster la question. Mais voici ce que je ne comprends pas: – Njutik

+0

Dans mon programme ruby, la ligne "self.font_style = Object.const_get (config_file [: font_style])" fonctionne. Mais quand je commence irb et tapez là "require 'rmagick'" et puis "Object.const_get (" ItalicStyle ")" alors je reçois une erreur "NameError: constante non initialisée ItalicStyle". Pourquoi donc? – Njutik