Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Middlemanで「変更なし」「作成」「削除」「変更」の状態を取る

静的サイトジェネレーターのMiddlemanでサイトをビルドすると、ビルドされたファイル名が「変更なし」「作成した」「削除した」「変更した」といった状態変化とともに並びますよね。
Middlemanでビルドするとファイルの状態変化も表示される
ビルドしたファイルをS3に上げてウェブサイトとしてホストさせてたりすると、余計な通信を減らすためにもこの情報を有効活用したいものです。

公式サイトのドキュメントを見ていてもその方法は載っていないのですが、カスタム拡張を作ることで簡単にこれを取得できます。

この状態変化の情報は、ビルダーのon_build_eventというタイミングのコールバックで取得できます。このコールバックはカスタム拡張のbefore_buildメソッド内で設定できます。

class CatchChange < ::Middleman::Extension
  def before_build(builder)
    @mode = mode = Hash.new {|mode, event_type| mode[event_type] = []}

    builder.on_build_event do |event_type, target, extra|
      p event_type # => :identicalなど
      p target     # => #<Pathname:build/2015/11/06.amp.html>など、出力先のパス
      p extra      # => nil 「on_build_event」では常にnil

      case event_type
      when :identical
        # 変更なし
      when :created
        # 新規作成
      when :deleted
        # 削除
      when :updated
        # 内容の変更
      end

      # こうしておくとafter_buildなんかで@modeを参照することでこの情報を使える
      mode[event_type] << target
    end
  end
end

検索エンジンに情報を入れるために、更新したか否かを知りたくて調べてました。でも使わないことにしたので、コードに残らず、忘れてしまいそうなので残しておきます。ただ、アンドキュメンテドなので、予告なく変わったり無くなったりするかも知れません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?