はじめに
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 を実行するには以下の作業が必要となります。
- Create a file upload
Create a file upload Send a file upload
Send a file uploadComplete a file upload Complete a file upload
- 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 データを準備する必要があるので、それなりに時間がかかりそうです。