はじめに
NotionRubyMapping 解説の第18回目です。今日は昨日の Heading1Blockなど のトグル版である ToggleHeading1Block などを解説します。今日紹介する Toggle heading block も TextSubBlockColorBaseBlock
というクラスの子クラスです。今日の作業ページはこちらです。
あらかじめページを取得しておきます。
irb(main):002> page = Page.find "https://hkob.notion.site/ToggleHeadingBlock-18-00d93ff4dd954ed2be2400518bfaf3ce?pvs=4" => NotionRubyMapping::Page-00d93ff4dd954ed2be2400518bfaf3ce
ToggleHeading1Block
Heading1Block
は見出し1を示すテキストブロックです。 text_info
と color
が設定できるのは ParagraphBlock
と同様です。Heading1Block はカラーを設定しないとエラーになっていましたが、ToggleHeading1Block は問題ありませんでした。Heading1Block
は sub_blocks
を受け付けないように initializer
をオーバーライトした時にエンバグしたようです。
irb(main):003> th1 = page.append_block_children ToggleHeading1Block.new("H1") => NotionRubyMapping::Heading1Block-4a7d28e7f67742c3b39432d9258291ff
実行した結果以下のような見出しが用意されました。トグルがついていることがわかります。
トグルがついているので、append_block_children を実行してみましたが、エラーになってしまいました。
irb(main):016> th1.append_block_children NumberedListItemBlock.new("First"), NumberedListItemBlock.new("Second") /Users/hkob/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/notion_ruby_mapping-0.8.3/lib/notion_ruby_mapping/blocks/base.rb:127:in `append_block_children': This block can have no children. (StandardError) from (irb):16:in `<main>' from <internal:kernel>:187:in `loop' from /Users/hkob/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/irb-1.11.1/exe/irb:9:in `<top (required)>' from /Users/hkob/.rbenv/versions/3.3.0/bin/irb:25:in `load' from /Users/hkob/.rbenv/versions/3.3.0/bin/irb:25:in `<main>'
確認すると、作成した th1 のクラスが Heading1Block になっていました。
irb(main):017> th1.class => NotionRubyMapping::Heading1Block
コードを確認すると、返却された JSON の children
が空かどうかを確認していて、存在した時には、ToggleHeading1Block
で作成するようにしていたようです。Notion API が出た当時は、判断基準がそれしかなかったためです。現在は、is_toggleable
属性があるので、それを確認するように変換すべきだと思います。これは修正候補に入れておきます。
せっかくなので、ToggleHeading2Block は sub_blocks を渡して作成してみます。sub_blocks があると、ちゃんと ToggleHeading2Block になっていることがわかります。
irb(main):018> th2 = page.append_block_children ToggleHeading2Block.new("H2", sub_blocks: [NumberedListItemBlock.new("First"), NumberedListItemBlock.new("Second")]) => NotionRubyMapping::ToggleHeading2Block-a80991c5fbc84fce8c0ec8a7b4b90bf1
結果は以下のようになりました。
ToggleHeading3Block は色も設定してみます。
irb(main):019> th3 = page.append_block_children ToggleHeading3Block.new("H3", color: "purple", sub_blocks: [QuoteBlock.new("Quote")]) => NotionRubyMapping::ToggleHeading3Block-ba0adf71caa145a2b4fa63af10e9addc
th2 の色も後から変更してみます。
irb(main):021> th2.color = "brown" => "brown" irb(main):022> th2.save => NotionRubyMapping::ToggleHeading2Block-a80991c5fbc84fce8c0ec8a7b4b90bf1
h1 は色を変えるとテキストの色も変わりましたが、ToggleHeading2Block はトグルだけが色が変わりました。
th2 の rich_text_array の最初のものの色を合わせてみます。
irb(main):023> th2.rich_text_array.first.color = "brown" => "brown" irb(main):024> th2.save => NotionRubyMapping::ToggleHeading2Block-a80991c5fbc84fce8c0ec8a7b4b90bf1
無事、テキストの色も揃いました。
おわりに
今回は ToggleHeadingNBlock
を解説してみました。要素が存在しないと ToggleHeadingXBlock にならないので、append_block_children ができない状況です。これは問題なので、後で直しておきます。
ToggleHeading1Block のマニュアルはこちら。