2012-08-27 2 views
0

결과 나를 위해 더 복잡한 하나 :매칭 일부 패턴은 여기

나는이가 지킬 포스트에 들어갔습니다 같은 내용이 있습니다

# Lorem ipsum dolor sit amet. 
Consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore. 
~ 
# Et dolore magna aliqua. 
Ut enim ad minim veniam, quis nostrud exercitation. 
~ 
# Ullamco laboris nisi. 
Ut aliquip ex ea commodo consequat. 
~ 

내가 좋아하는 내 레이아웃에이 당기는거야을 이 : {{ post.content | jekreged: 1 | markdownify }}

Jekreged는 ~을 기반으로 콘텐츠를 분할 한 다음 포함 할 부분을 지정하는 사용자 지정 액체 플러그인입니다. 레이아웃은 그런 게시물을 찢어 버릴 것을 요구합니다.

나는 이것을 액체 태그에서 특별히 호출 할 수있는 일치 명령의 하위 집합을 실행하기 위해 조정하려고합니다.

다음은 문제 해결을 위해 시도한 예입니다.

module Jekyll 
    module AssetFilter 
    def jekreged(input, chunk) 
     drugs = input.split("~")[chunk] 
     title = (drugs).match(/^#{1}.+$/) 
     jekreged = "#{title}" 
    end 
    end 
end 

Liquid::Template.register_filter(Jekyll::AssetFilter) 

출력이 없습니다. 필자가 이상적으로 생각하는 것은 액체 태그의 매개 변수로 "제목"을 지정할 수있게하는 것이지만 플러그인에 연결하는 방법을 모르겠습니다.

장거리 버전 I는 모든 도움을 제목처럼 뭔가 = 제목 regmatch, 몸 = ..., IMG = ...

감사해야합니다!

답변

0

(미래에는 일부 입력/출력 예제가 먼 길을 갈 것입니다.)

module Jekyll 
    module AssetFilter 
    def jekreged(input, matcher) 
     titles = input.split("\n~\n").select { |title| title.include? matcher } 
     if titles.size > 1 
     raise "Can't determine title from #{matcher.inspect}, found #{titles.inspect}" 
     elsif titles.size.zero? 
     raise "#{matcher.inspect} didn't match any of #{titles.inspect}" 
     end 
     titles.first 
    end 
    end 
end 

describe 'jekreged' do 
    include Jekyll::AssetFilter 
    let(:titles) { <<-TITLES.gsub /^ /, "" } 
    # Lorem ipsum dolor sit amet. 
    Consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore. 
    ~ 
    # Et dolore magna aliqua. 
    Ut enim ad minim veniam, quis nostrud exercitation. 
    ~ 
    # Ullamco laboris nisi. 
    Ut aliquip ex ea commodo consequat. 
    ~ 
    TITLES 

    it 'finds the title that has the string in it' do 
    jekreged(titles, "Consectetur").should == "# Lorem ipsum dolor sit amet.\nConsectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore." 
    jekreged(titles, "minim veniam").should == "# Et dolore magna aliqua.\nUt enim ad minim veniam, quis nostrud exercitation." 
    jekreged(titles, "aliquip" ).should == "# Ullamco laboris nisi.\nUt aliquip ex ea commodo consequat." 
    end 

    it 'raises an error if there is more than one title that matches' do 
    expect { jekreged titles, 'Ut' }.to raise_error /Can't determine title/ 
    end 

    it 'raises an error if there are no titles that match' do 
    expect { jekreged titles, 'asdfasdfasdf' }.to raise_error /didn't match/ 
    end 
end 
+0

입력 사항에 감사드립니다. 조금 다른 "hacky"변형이 있었지만 필자가 필요로하는 것과 약간 다른 변형이있었습니다. 나는이 구현을 좋아한다. – motleydev