graphql-rubyにコミットした

業務でgraphql-rubyを色々いじってたら「おや?」と思う挙動があった。調べてみると同じ内容でissueを立てている人がいた。

github.com

graphql-rubyでは_idといった引数を受け取った時にloadsオプションを指定しているとHogeSchema.object_from_idを呼んでレコードを取り出す動作を簡潔に書くことができる。 だけど実はこれはinput_object(いくつかの引数の型をまとめて定義したもの)として定義しないと使えなかった。(Mutaionでも引数につかえるのだけれどMutationの引数は実質input_objectの定義なので同じ。)

前回graphql-rubyをふんわり読んで色々脳内地図があり、issue内でもオーナーのrmosolgo氏が修正することに前向きそうだったのでPRを出した。

github.com

内容はinput_type内の処理をそのままfiledの引数の処理に持ってきたのと、内部で使っているload_application_objectが呼び出し元の@contextのリーダーメソッドに依存していたので外部から注入できるように変更したというもの。

rmosolgo氏が色々レビューをしてくれてありがたかった。(最後に氏みずからinput_object内の処理も少し書き換えるコミットを積んでくれた。不要にlodasに対して実行されていたコードが減ったので、PRの主目的以外の恩恵もあると思う)

GraphQLは仕事で使い始めたばかりだけれどテストコードやらみると色々勉強になって良い。