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 do
bin/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コマンドのソースが簡単だったので、対応できて良かった。

Published: 2013-09-08  /  Tags: CMS  /  Share: X