플러그인에서 내 검증기를 어떻게 사용하나요?

도와주세요 여러분
플러그인에서 검증기(validator)를 어떻게 사용해야 하나요?

플러그인에 파일을 추가했습니다

lib/validators/plugin_ldap_setting_validator.rb 

settings.yml에서 사용

  forum_ldap_validation:
    default: 'system'
    validator: 'PluginLdapSettingValidator' 

plugin.rb에서 파일 로드

load File.expand_path('../lib/validators/plugin_ldap_setting_validator.rb', __FILE__) 

에러가 발생합니다

! Unable to load application: NoMethodError: undefined method `lazy' for nil:NilClass
bundler: failed to load command: puma (/home/smart/.rbenv/versions/2.6.5/bin/puma)
NoMethodError: undefined method `lazy' for nil:NilClass
  /home/smart/discourse/lib/plugin_initialization_guard.rb:9:in `rescue in plugin_initialization_guard'
  /home/smart/discourse/lib/plugin_initialization_guard.rb:3:in `plugin_initialization_guard'
  /home/smart/discourse/config/application.rb:269:in `<class:Application>'
  /home/smart/discourse/config/application.rb:59:in `<module:Discourse>'
  /home/smart/discourse/config/application.rb:58:in `<top (required)>'
  /home/smart/discourse/config/environment.rb:4:in `require'
  /home/smart/discourse/config/environment.rb:4:in `<top (required)>'
  config.ru:6:in `require'
  config.ru:6:in `block in <main>'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/rack-2.0.8/lib/rack/builder.rb:55:in `instance_eval'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/rack-2.0.8/lib/rack/builder.rb:55:in `initialize'
  config.ru:in `new'
  config.ru:in `<main>'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/rack-2.0.8/lib/rack/builder.rb:49:in `eval'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/rack-2.0.8/lib/rack/builder.rb:49:in `new_from_string'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/rack-2.0.8/lib/rack/builder.rb:40:in `parse_file'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/puma-4.3.1/lib/puma/configuration.rb:321:in `load_rackup'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/puma-4.3.1/lib/puma/configuration.rb:246:in `app'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/puma-4.3.1/lib/puma/runner.rb:155:in `load_and_bind'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/puma-4.3.1/lib/puma/single.rb:98:in `run'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/puma-4.3.1/lib/puma/launcher.rb:172:in `run'
  /home/smart/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/puma-

거기에 키를 ‘validator’로 사용해야 합니다

그리고 심지어 이런 예제도 작동합니다

plugins:
  my_custom_username_validation:
    default: 'system'
    validator: 'UsernameSettingValidator'

파일을 discourse/lib/validators/ldap_setting_validator.rb에 배치했고 작동했습니다.

 forum_ldap_validation:
    default: 'system'
    validator: 'LdapSettingValidator'   

플러그인에서 코드를 작동시키는 방법은 무엇인가요?

성공했습니다!

plugin.rb 안의 코드

def forum_require(path)
  require Rails.root.join('plugins', 'forum', 'app', path).to_s
end

after_initialize do

  forum_require 'lib/ldap_setting_validator'
//code
end

ldap_setting_validator.rb → 경로 → myplugin/app/lib/ldap_setting_validator.rb

예제 감사합니다 → babble/plugin.rb at master · gdpelican/babble · GitHub

어제 이 작업을 수행하는 방법에 대한 예시를 찾아보고 있었습니다. Discourse 저장소에서 찾은 예시는 여기 있습니다: GitHub - discourse/discourse-chat-integration · GitHub. 해당 플러그인의 plugin.rb 파일에서 검증기 클래스가 다음 명령으로 require되는 것을 볼 수 있습니다:

require_relative "lib/discourse_chat/provider/slack/slack_enabled_setting_validator"

Discourse가 검증기를 찾도록 하려면 after_initialize 호출 전에 포함해야 합니다.