2017-01-21 11 views
0

.yml 파일에서 Magick :: StyleType 상수를 선언하고이 상수를 루비 파일에로드 할 가능성을 찾고 있습니다. 아니면 불가능하다면 String을 Magick :: StyleType 상수로 변환하는 방법을 알아야합니다.YAML 파일에서 루비 상수 (RMagick)를 선언하는 방법

여기에 세부 사항은 다음과 같습니다 제가 사진에 텍스트를 배치 루비 프로그램을 작성하는 것을 시도하고있다

나는 그것을 위해 RMagick 인터페이스를 사용합니다. 루비 프로그램에는 font-family 또는 font-style과 같은 텍스트의 여러 속성을 지정하는 메서드가 있습니다. 이 방법은 라인이 포함

self.font_style = ItalicStyle 

지금 내가 YAML-config 파일 (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) 

그래서 가진 후 나는 위와 같이 나에게 같은 오류 메시지를 받았습니다

:font_style: !/ruby/constant ItalicStyle 

먼저 내 config.yml을 변경 한 주제에 대해 약간의 검색 후, 나는이 시도 :

:font_style: !/ruby/symbol :ItalicStyle 

이 오류 메시지를 받았습니다 :

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

N 내가 IRB 체크 :

require 'rmagick' => true 

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

그래서 결국 나는 내 질문에 도착 : 어떻게 내 루비에로드 할 때 수 있도록 내 config.yml 파일에 라인을

:font_style: !/ruby/symbol :ItalicStyle 

를 변경해야합니까 파일 ItalicStyle은 Magick :: StyleType 상수로 인식됩니까? 나는 config.yml에서

:font_style: ItalicStyle 

을 떠나 내 루비 파일에 String로서 ItalicStyle를로드 할 때

또는 : 가능성은 마법 (magick) 캐릭터 라인으로부터 ItalicStyle 변환,이 :에 StyleType 상수 직접 루비 파일?

누군가가 도울 수 있다면 정말 행복 할 것입니다. 나는 해결책을 찾기 위해 며칠 째 노력했고, 나는 나의 프로젝트를 위해 그것을 정말로 필요로한다.즉 쓰기 및 읽기 쉽기 때문에

+0

yaml에 기본값을 덤핑하여 잘못된 모양을 확인하는 것이 잘못된 이유는 무엇입니까? 적절한 해결책은 아래의 @spickermann의 답을 참조하십시오. – mudasobwa

답변

1

난 단지의 YAML 파일에 String를 저장하는 것입니다 :

:font_style: ItalicStyle 

I 구성 이름으로 상수를 얻을 것보다 Magick :

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

정말 고마워요! 그것은 효과가 있었다. – Njutik

+0

괜찮 으면 한 가지 더 질문이 있습니다. 질문을 게시하기 전에 이미 irb에서 const_get 메소드를 시도했습니다. 그러나 여기에 내가 이해하지 못하는 것이있다. – Njutik

+0

루비 프로그램에서 "self.font_style = Object.const_get (config_file [: font_style])"행이 작동한다. 그러나 irb를 시작하고 "rmagick '을 입력 한 다음"Object.const_get ("ItalicStyle") "을 입력하면"NameError : 초기화되지 않은 상수 ItalicStyle "오류가 발생합니다. 왜 그런가요? – Njutik