Lokkaのルーティング

lib/lokka/app/entriesを鑑賞。

@theme_types << :index
@theme_types << :entries

@theme_typesはどこがつかっているんだろう。
テーマの中かな。

layout.erbで使っているけど、bodyのclass属性を設定しているだけ。
helpersがあやしい。

    %w[index search category tag yearly monthly daily post page entry entries].each do |name|
      define_method("#{name}?") do
        @theme_types.include?(name.to_sym)
      end
    end

またメソッドを作っているね。
@theme_typesにindexが入っているかどうかを調べる、index?とかのメソッドができるのか。

erbにunless index?とか書いてあるものがあるね。


なーるーほーどー。
index?で新だったら、別なページが出せるんだ!!

あと、
entriesのget '/'で

render_detect :index, :entries

は、

    def render_detect(*names)
      render_detect_with_options(names)
    end

    def render_detect_with_options(names, options = {})
      ret = ''
      names.each do |name|
        out = render_any(name, options)
        unless out.blank?
          ret = out
          break
        end
      end

      if ret.blank?
        raise Lokka::NoTemplateError, "Template not found. #{[names.join(', ')]}"
      else
        ret
      end
    end

引数の*namesってなんだっけ?

irb(main):008:0> def hoge(*names)
irb(main):009:1>   puts names.class
irb(main):010:1> end
=> nil
irb(main):011:0> hoge :test
Array
=> nil

・・・なるほど。つまり、entriesの前にindexを探すのね。

ぢゃ、entriesはどうやって指定?
常にindexが優先されるようにみえる。

entriesは、何もなかった時のデフォルトなのかな。

現状の理解を整理する。やりたいことは、

  • get '/'にはentriesを出さない。
  • get '/blog'にentriesを出したい。

だから、

  1. get '/'は、:index、:entriesの順に調べる。
  2. :indexをつくれば、:entriesはでない。
  3. ページのslagに'/blog'を設定
  4. ページの中にentriesを出す。

こんな感じか。

あああああ
index.hamlをつくったら、

layout.hamlでyieldしたときに、entriesの代わりに呼ばれる!!!
かなり理解できたよ。