0

私は Liquid は初めてですが、Ruby は初めてです。安全上の理由から、Liquid が必ずしも Ruby であるとは限らないことを知っています。しかし、Jekyll ブログで、次のコードをプラグインとして定義しようとしました。

module Jekyll
  class Person_Index < Liquid::Tag

    def initialize(tag_name, text, tokens)
      super
      @text = text
    end

    def render(context)
      for person in context.registers[:site].data["people"]

        if (person.index.to_s() == @text.to_s())
            return person.display
        end    
      end

      # We reach here, something's wrong anyway
      return "(( INDEX NOT FOUND #{@text} ))"
    end
  end
end

Liquid::Template.register_tag('Person_Index', Jekyll::Person_Index)

当然のことながら、これはドキュメントの生成中に失敗します。として呼び出すと、次の{% Person_Index 2 %}エラーが発生します。

Liquid Exception: wrong number of arguments (0 for 1) in _posts/2014-07-22-an-entry.md/#excerpt

きっと誰かが「バグのある抜粋世代に引っかかったのかもしれない」と思っていると思います。テストケースとして2番目の段落で書き直すだけで、その回避策を試しました。それでも同じエラーが発生します。#excerpt に含まれていないだけです。

render を直接変更してワンライナーにすることで、ためらうことなく実行され、「問題なく」出力されます (これは望ましい動作ではないため、引用符で囲みます)。

    def render(context)
      return "HOW ARE YOU BECAUSE I AM A POTATO"
    end

タグが呼び出される場所では、Portal 2 から持ち上げられた行が正常に出力されます。(はい、returnRuby では不要であることはわかっています。)

最初のものは失敗し、2番目のものは機能するのはなぜですか? 最初の人がやりたいと思われることを行う方法はありますか?

_data/people.yml次のように定義されます。

-   index: 1
    nick:    Guy
    display: That Guy
    name:
        first:  That
        middle: One
        last:   Guy
    account:
        github: greysondn

-   index: 2
    nick:    Galt
    display: Johnny
    name:
        first:  John
        middle: 
        last:   Galt
    account:
        github: 

前もって感謝します。

4

1 に答える 1