가드

2016-08-17 2 views
0
을 사용하여 상대 HAML 렌더링

내 파일 구조는 다음과 같습니다가드

Guardfile 

resolution1/menu/page1.haml 

resolution1/menu/some_partial.haml 

resolution2/... 

resolution3/... 

이제 page1.haml 안에 내가 그 안에 부분 HAML 렌더링 할 선을 (내가 레일을 사용하고 있지 않다)

이 Guardfile이 자리하고있는 곳입니다 내 작업 디렉토리이기 때문에

Error: No such file or directory @ rb_sysopen - ./some_partial.haml 

:

= Haml::Engine.new(File.read("./some_partial.haml")).render 

그것은 실패합니다.

= Haml::Engine.new(File.read("#{__dir__}/some_partial.haml")).render 

또는 내가 필사적 기분 경우에도이 내가 원하는대로

= Haml::Engine.new(File.read("#{File.expand_path(File.dirname(__FILE__))}/some_partial.haml")).render 

그러나이 작동하지 않습니다 (파일 절대 경로를 얻을 수) : 작동합니다 해결 방법이이었다 에.

File.expand_path(File.dirname(__FILE__)) 

(작업 디렉토리를 고려하지 않고) 파일의 절대 경로를 지정하는 대신, 작업 디렉토리의 절대 경로를 제공합니다.

나는 물론 작동 할 경로를 지정할 수 있지만 모든 렌더링에 내 대상 해상도를 포함하고 싶지 않습니다.

Guardfile 나는 윈도우, 내 인생을 저주 사용하고

guard :haml, output: '../package/www' do 
    watch(/^.+(\.haml)$/) 
end 

. 어떤 제안? 나는 단지 같은 디렉토리 내의 파일로부터 파일을 얻는 것만으로 충분하다.

답변

1

이것은 Guard :: Haml이 템플릿을 처리하는 방법 때문에 발생합니다. It (currently) does this는 :

content = File.new(file).read 
engine = ::Haml::Engine.new(content, (options[:haml_options] || {})) 

그것은 문자열로 템플릿을 읽은 다음 HAML에 해당 문자열을 전달합니다. 즉, Haml은 문자열을 볼 때 어떤 파일을 연관시켜야하는지 알 길이 없습니다.

Haml에는 파일 이름을 Haml에 전달할 수있는 :filename option이 있습니다. 이렇게하면 __FILE____dir__이 올바르게 작동하지만 Guard :: Haml은 현재이 기능을 사용하지 않습니다.

나는 pull request that adds this feature을 만들었습니다. 병합되기 전에 해당 코드를 시험해보고 싶다면 새로운 버전이 만들어지면 (그것이 받아 들여 졌다고 가정하면), 나의 저장소에있는 지사를 사용할 수 있습니다. 이를 위해 변경하려면 Gemfile에 :

gem 'guard-haml', :github => "mattwildig/guard-haml", :branch => 'filename_option' 

(나는 그것이 "아이"템플릿 중 하나가 변경되면이 설정이 자동으로 "부모"파일을 다시하지 않을 것이라는 지적 또한 가치가 있다고 생각).

+0

당신은 최고입니다. –