jekyll-serveでpublished:falseのpostも表示するようにした
2013-09-08 / CMS
jekyll serve –draft を使うと、_posts配下のファイルに加えて、_drafts配下のファイルも表示の対象になる。下書きを書きつつ、実際の出力も確認するという場合にとても便利。
なんだけど、自分の場合は_draftsを使わずに、published:falseのファイルを_posts配下に置いたまま編集していて、この場合は表示の対象に含まれない。
jekyllのコード見てみたら、投稿はJekyll::Postが該当するらしく、Post#published?が下のように定義されている。
{% highlight ruby %}
def published?
if self.data.has_key?(‘published’) && self.data[‘published’] == false
false
else
true
end
end
{% endhighlight %}
ちょっと不便なので、Rakefileのタスクでごにょごにょしてみた。
{% highlight ruby %}
task :default => “serve:draft”
desc ‘Jekyll serve’
task :serve dobin/jekyll serve --safe -w
end
require ‘jekyll’
namespace :serve do
desc ‘Jekyll serve with drafts(including unpublished post in _posts)’
task :draft do
Jekyll::Post.class_eval do
def published?
true
end
end
options_hash = {:safe => true, :drafts => true, :watch => true, :serving => true}
options = Jekyll.configuration(options_hash)
Jekyll::Commands::Build.process(options)
Jekyll::Commands::Serve.process(options)
end
end
{% endhighlight %}
class_evalでPost#published?を全部trueで返すように変更した。で、その状態のままserveが出来るように直接Jekyll::Commands::Serveの実行まで行うようにした。
jekyllコマンドのソースが簡単だったので、対応できて良かった。