2017-01-21 3 views
0

Я ищу возможность объявить константу Magick :: StyleType в файле .yml, а затем загрузить эту константу в файл ruby. Или, если это невозможно, мне нужно знать, как преобразовать String в константу Magick :: StyleType в ruby.Как объявить константу ruby ​​(RMagick) в файле YAML

Вот подробности:

Я пытаюсь написать программу рубин, который помещает текст на картинке, и я использую интерфейс RMagick для него. В моей рубиновой программе у меня есть метод, который задает разные свойства текста, такие как font-family или font-style. Этот метод включает в себя строку:

self.font_style = ItalicStyle 

Теперь я хочу, чтобы хранить все изменяемые параметры в YAML-файле конфигурации (config.yml), так что это config.yml включает в себя следующие строки:

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

сейчас Я загрузить config.yml в моем файле рубинового и упомянутые выше линии в моем методе читает прямо сейчас

self.font_style = config_file[:font_style] 

Когда я запускаю мой файл рубинового теперь я получаю сообщение об ошибке:

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

Так после того, как ищется немного об этой теме я изменил мой config.yml первым

:font_style: !/ruby/constant ItalicStyle 

, который получил меня такое же сообщение об ошибке, как описано выше, а затем я попытался это:

:font_style: !/ruby/symbol :ItalicStyle 

и получил сообщение об ошибке:

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

п я проверил в IRB:

require 'rmagick' => true 

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

Итак, наконец-то я получаю на мой вопрос: Как мне нужно изменить линии

:font_style: !/ruby/symbol :ItalicStyle 

в моем файле config.yml так, что при загрузке в мой рубин Файл ItalicStyle будет распознан как константа Magick :: StyleType?

Или когда я уезжаю

:font_style: ItalicStyle 

в config.yml и загрузите ItalicStyle в виде строки в мой файл рубина: есть возможность, чтобы преобразовать ItalicStyle из строки в Магик: StyleType константа в рубиновый файл напрямую?

Я был бы очень рад, если бы кто-то мог помочь. Я пытался в течение нескольких дней найти решение, и мне это действительно нужно для моего проекта.

+0

Что случилось с ** сбросом ** значений по умолчанию в yaml для изучения того, как они должны выглядеть? Для правильного решения см. Ответ by @spickermann ниже. – mudasobwa

ответ

1

Я бы просто хранить в файле YAML в String, потому что легче писать и читать:

:font_style: ItalicStyle 

чем я хотел бы получить константу по имени настроить Magick:

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

Большое вам спасибо! Это сработало. – Njutik

+0

Если вы не возражаете, у меня возникает еще один вопрос: я попытался использовать метод const_get в irb, ранее предшествующий опубликованию вопроса. Но вот что я не понимаю: – Njutik

+0

В моей рубиновой программе работает строка «self.font_style = Object.const_get (config_file [: font_style])». Но когда я запускаю irb и набираю там «require» rmagick », а затем« Object.const_get («ItalicStyle»), то я получаю сообщение об ошибке «NameError: uninitialized constant ItalicStyle». Почему это? – Njutik

Смежные вопросы