0

これは私にとってより複雑なものです:

次のようなコンテンツが jekyll の投稿に取り込まれています。

# 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 は、私が書いたカスタム Liquid プラグインで、に基づいてコンテンツを分割し、~含める部分を指定します。レイアウトには、そのような投稿を引き裂く必要があります。

これを適用して、特に Liquid タグから呼び出すことができる match コマンドのサブセットを実行しようとしています。

これが、トラブルシューティングしようとしている例 (および機能していないもの) です。

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)

これから出力が得られません。理想的には、「タイトル」を Liquid タグのパラメータとして指定できるようにしたいのですが、それをプラグインに接続する方法がわかりません。

長距離バージョン title = regmatch for title, body = ..., img = ... のようなものがあります

助けてくれてありがとう!

4

1 に答える 1

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
于 2012-08-28T00:50:06.250 に答える