block.destroy: NotionRubyMapping 解説 (30)

はじめに

NotionRubyMapping 解説の第30回目です。これまで様々なブロックを紹介してきました。一通り終わったので、ブロックのアーカイブについて説明します。今日の作業ページはこちらです。

hkob.notion.site

あらかじめページを取得しておきます。

irb(main):002> page = Page.find "https://hkob.notion.site/block-destroy-213dc754543a4a5d97a8b16b667ea6de?pvs=4"
=> NotionRubyMapping::Page-213dc754543a4a5d97a8b16b667ea6de

block.destroy

ブロックの削除をテストするために事前にいつかのブロックをページに追加しておきます。

irb(main):003> b1 = page.append_block_children NumberedListItemBlock.new("First")
=> NotionRubyMapping::NumberedListItemBlock-20976035a15f41af85cc0fbe6ea734ef
irb(main):006> b2 = page.append_block_children NumberedListItemBlock.new("Second")
=> NotionRubyMapping::NumberedListItemBlock-7cf40bdfd2c64916a85c757c4745f558

実行した結果以下のような二つの番号付き箇条書きブロックが作成されています。

削除前

一つ目のブロックを削除するには、destroy メソッドを呼び出します。普段は返り値を気にすることはないので、再代入することはないのですが、設定によって内容が変わったことを確認するために b1 を上書きしました。

irb(main):007> b1 = b1.destroy
=> NotionRubyMapping::NumberedListItemBlock-20976035a15f41af85cc0fbe6ea734ef

実行すると以下のように First が消えています。

削除後

実は削除はすぐに消えるわけではなく、ブロックの archived 属性を true にするだけです。

irb(main):023> b1.archived
=> true

Notion API 的にはこのフラグを false に戻してアップデートするとブロックを復元することができます。ただ、NotionRubyMapping ではその仕組みを作っていませんでした。archived を false にして update するというのは一般の人にはわかりにくいので、せっかくなので、b1.restore くらいの専用メソッドを用意するのがよさそうです。これも ToDo に入れておきます。

おわりに

今回は block.destroy を解説してみました。削除したブロックの復元は NotionRubyMapping では実装していなかったので、後で restore メソッドを作成したいと思います。

block.destroy のマニュアルはこちらです。

www.notion.so

NotionRubyMapping解説