cover image

graphql-deviseのmount_graphql_devise_forの処理を追う

カテゴリ
Tech
書いた人
Yuta Sano
公開日
2022/04/29
💡
概要

これは何か?

mount_graphql_devise_for の処理がブラックボックスでgraphql_deviseの理解が進まないため、理解を進めるために詳細な実装を追ったときのメモです。
 
🚀
記事はこちら!
graphql-deviseのmount_graphql_devise_forの処理を追う - Qiita
mount_graphql_devise_for の処理がブラックボックスでgraphql_deviseの理解が進まないため、理解を進めるために詳細な実装を追ったときのメモです。 graphql-devise v0.18.2 まだ、マイナーバージョンのgemで内部の構造は結構な頻度で変わっている模様で、これは2022/04/27時点の情報です。 間違っている箇所などあるかもしれません。間違いありましたら、優しくご指摘いただけると嬉しいです。 graphql-deviseで bundle exec rails generate graphql_devise:installを実行して routes.rb を見ると下記のコードが定義される。今回はこの処理が何をしているのかを追っていきたいと思います。 mount_graphql_devise_forは ActionDispatch::Routing::Mapper に定義されているメソッドです。 mount_graphql_devise_for 'User', at: 'graphql_auth'が実行されると、 mount_graphql_devise_for の引数には次のように値が渡されていました。 これらの引数は GraphqlDevise::ResourceLoader.newで引き渡されているので ResourceLoader#initialize の処理を見てみます。 GraphqlDevise::ResourceLoader.new(resource, options, true) した後のインスタンス変数には下記の値が入っていました。 @default_operationsには下記のように login、 logout のように各actionに対応するクラス名などの情報がhashで入っていました。 GraphqlDevise::ResourceLoaderのインスタンスが作られた後は、 call(GraphqlDevise::Types::QueryType, GraphqlDevise::Types::MutationType)しているので call メソッドの処理を追ってみます。 GraphqlDevise::MountMethod::OptionSanitizer.new(@options).call!