はじめに
NotionRubyMapping 解説の第6回目です。これまで解説してきた中で RichTextArray というものが頻繁に出現していました。これは複数の RichText Object を要素にもつクラスでした。今回は、RichText Object のうちの一つである Text Object を解説します。今日の作業ページはこちらです。
段落ブロックの取得 (復習)
上のページにこんな感じで段落ブロックを置いてみました。
このブロックでブロックのリンクを取得とすると以下のような URL になります。
https://www.notion.so/hkob/TextObject-6-1c93e27ccef1446d998568c22fc6bd4a?pvs=4#3bce1441431d4c8590b095a6d9b50155
昨日の復習としてこのブロックを取得してみます。
irb(main):002> block = Block.find "https://www.notion.so/hkob/TextObject-6-1c93e 27ccef1446d998568c22fc6bd4a?pvs=4#3bce1441431d4c8590b095a6d9b50155" => NotionRubyMapping::ParagraphBlock-3bce1441431d4c8590b095a6d9b50155
NotionRubyMapping::ParagraphBlock のオブジェクトが取得できていることがわかります。
RichTextArray
この ParagraphBlock に対して、 rich_text_array
メソッドでリッチテキスト配列オブジェクトを取得してみます。RichTextArray は内部に @rich_text_objects
という配列要素を持っており、この中に RichText クラスのサブクラスのオブジェクトが登録されます。
irb(main):003> block.rich_text_array => #<NotionRubyMapping::RichTextArray:0x00000001297bac58 @key="rich_text", @rich_text_objects= [#<NotionRubyMapping::TextObject:0x0000000129468438 @options= {"plain_text"=>"normal", "bold"=>false, "italic"=>false, "strikethrough"=>false, "underline"=>false, "code"=>false, "color"=>"default", "href"=>nil}, @text="normal", @type="text", @will_update=false>], @will_update=false>
RichTextArray は配列に関する多くのメソッドが上記 @rich_text_array
に delegate するように設定してあります。今回、 first メソッドで今回取り扱う TextObject を取り出してみます。
to = block.rich_text_array.first
=>
#<NotionRubyMapping::TextObject:0x0000000129468438
...
TextObject オブジェクトに対するメソッド
1. text, text = a_text: テキストを取得、テキストを設定
text
はテキストを取得するメソッドです。今回の場合は normal という文字列が取得できます。
irb(main):006> to.text => "normal" irb(main):007> to.text = "full" => "full"
2. options: 装飾オプションを取得
options
は TextObject の装飾情報を取得できます。先ほど text を書き換えたので、plain_text の部分が full に変わっています。
irb(main):008> to.options => {"plain_text"=>"full", "bold"=>false, "italic"=>false, "strikethrough"=>false, "underline"=>false, "code"=>false, "color"=>"default", "href"=>nil}
4. bold = flag, italic = flag, strikethrough = flag, under_line = flag, code = flag, color = a_color, href = a_url
上記 options の情報はそれぞれの代入コマンドで変更できます。
irb(main):012> to.bold = true => true irb(main):013> to.italic = true => true irb(main):014> to.strikethrough = true => true irb(main):015> to.underline = true => true irb(main):016> to.code = true => true irb(main):017> to.color = "green" => "green" irb(main):018> to.href = "https://www.google.com" => "https://www.google.com"
ここまで設定して block を保存するとテキスト情報が書き変わります。
irb(main):019> block.save => NotionRubyMapping::ParagraphBlock-3bce1441431d4c8590b095a6d9b50155
全て設定するとよくわからない状態になっていました。
せっかくなので、もう少し意味ある処理をしてみましょう。options の文字列をテキストに持つ TextObject を作成し、それぞれのオプションを send で設定します。RichTextArray には <<
で RichTextObject を追加できるので、作成した TextObject を追加しています。追加が終わって block を保存すると段落ブロックが書き変わります。
irb(main):020* %w[bold italic strikethrough underline code].each do |key| irb(main):021* to = TextObject.new key irb(main):022* to.send "#{key}=", true irb(main):023* block.rich_text_array << to irb(main):024> end => ["bold", "italic", "strikethrough", "underline", "code"] irb(main):025> block.save => NotionRubyMapping::ParagraphBlock-3bce1441431d4c8590b095a6d9b50155
それぞれのオプションが設定された TextObject が並んでいることがわかります。
おわりに
昨日説明した ParagraphBlock を使って、TextObject の使い方を解説してみました。JSON で書くと非常に面倒な TextObject ですが、NotionRubyMapping だとほとんど気にしないで記述できるかと思います。options がない簡単な文字列であれば、「TextObject.new 文字列
」だけで生成できるのは楽なのではないでしょうか。
TextObject のマニュアルはこちら。