YOSHINO日記

プログラミングに関すること

何かをした後にインスタンスを生成したい時は、tap×tapする

ActiveStorageの例

以下の例は、ActiveStorageのコードの一部である。

  class << self

    def build_after_upload(data:, filename:, content_type: nil, metadata: nil)
      new.tap do |blob|
        blob.filename = filename
        blob.content_type = content_type
        blob.upload data  # ここでアップロードしている。
      end
    end

    def create_after_upload!(data:, filename:, content_type: nil, metadata: nil)
      build_after_upload(data: data, filename: filename, content_type: content_type, metadata: metadata).tap(&:save!)
    end
  end

この処理はblobを保存する前に、dataを実に美しくアップロードしている。

before_saveとかのコールバックはあまり使わないほうが良い。

便利ではあるけれど、before_saveとかのコールバックは、初めのうちは良いけれど時間が経つとその存在を忘れたりして、人為的なミスを誘発しやすくするように感じる。

tap×tapを使おうと思う。