NotionRubyMapping のアップデート(4) : hkob の雑記録 (159)

はじめに

hkob の雑記録の第159回目は、昨日の Symbol 化の修正と、今後のファイルアップロードに対する NotionRubyMapping の方針を解説します。

テストの修正

昨日、全ての項目を Symbol 化したのですが、value の方まで Symbolize してしまいました。ここは文字列に戻しました。

     describe "set_icon" do
       before { payload.set_icon(**params) }

       context "for emoji icon" do
         let(:params) { {emoji: "😀"} }

         it "update icon (emoji)" do
-          expect(subject).to eq({icon: {type: :emoji, emoji: "😀"}})
+          expect(subject).to eq({icon: {type: "emoji", emoji: "😀"}})
         end
       end

実装の修正

実装も同じように設定しました。その他の場所でも TYPE には :text のような Symbol を設定しておき、 type: TYPE.to_s, TYPE => {} のような記載にすることにしました。

     def set_icon(emoji: nil, url: nil)
       payload = if emoji
-                  {type: :emoji, emoji: emoji}
+                  {type: "emoji", emoji: emoji}
                 elsif url
-                  {type: :external, external: {url: url}}
+                  {type: "external", external: {url: url}}
                 else
                   {}
                 end
-      @json["icon"] = payload
+      @json[:icon] = payload
       self
     end

NotionRubyMapping における File upload 対応

Notion で File upload を実行するには以下の作業が必要となります。

  1. Create a file upload
    Create a file upload
  2. Send a file upload
    Send a file upload

  3. Complete a file upload Complete a file upload

  4. Update page properties など Update page properties

これをそのまま NotionRubyMapping から使わせるのはハードルが高いと思っています。先ほどの set_icon を例にすると以下のようなインターフェースを考えています。

     def set_icon(emoji: nil, url: nil, file_name: nil)

file_name が設定された場合には、上の 4 つの手続きを裏で実施するようにするつもりです。FileUpload クラスは作成はしますが、公式にはインターフェースは公開しない方向です。

おわりに

File に関する部分は全て FileObject が関与しているので、実装の修正点はあまり多くないと思います。ただし、テストはファイルが使える全ての場所での入出力の JSON データを準備する必要があるので、それなりに時間がかかりそうです。

hkob.notion.site