皆様、こんにちは。
Plugin::Instance のこのメソッドについて作業を進めています:discourse/lib/plugin/instance.rb at 06c60b017c86ddab489fd3d30c951c10b5c4d281 · ayampenyetan/discourse · GitHub
Discourse のコードベースや GitHub 上でこのメソッドの既存の利用例を検索してみましたが、パブリックにアクセス可能なコードの範囲では、テストケース以外で実際に使用されているようには見えませんでした。
以下の点についてご教示いただけますでしょうか。
- プラグイン内でこのメソッドを呼び出せるように、
Plugin::Instanceのインスタンスを取得する正しい方法は何か。 - 上記のメソッドを呼び出す適切なタイミングは何か。プラグイン内で新しいエンドポイントを登録する場合、その呼び出しはエンドポイントの登録後に行うべきか、それとも
after_initializeの前か中に行うべきか。 - 以下のコードはスコープを登録しているように見えるが、そのスコープを持つ管理者用 API キーで登録したエンドポイントにアクセスすると、アクションが見つからないというエラーが発生する。一方、すべてのスコープを持つ管理者用 API キーでアクセスするとエンドポイントは正常に動作する。なぜこのように動作しないのか、何が間違っているのか。
actionsにurlsエントリを追加してみたが、反映されていないようだ。この構造に対して、スコープが適用される URL のリストを正常に追加するにはどうすればよいか。
after_initialize do
module ::ApiKeyScopeTest
class Engine < ::Rails::Engine
engine_name "api_key_scope_test"
isolate_namespace ApiKeyScopeTest
end
end
class ApiKeyScopeTest::ApiKeyScopeTestController < ::ApplicationController
def action
...
end
end
ApiKeyScopeTest::Engine.routes.draw do
post "/admin/plugins/api-key-scope-test" => "api_key_scope_test#action", constraints: AdminConstraint.new
end
Discourse::Application.routes.append do
mount ::ApiKeyScopeTest::Engine, at: "/"
end
plugin = Plugin::Instance.new # 注:これが正しいかは不明
plugin.add_api_key_scope(
:test_scope,
{
post: {
actions: %w[api_key_scope_test#action]
}
}
)
end