module NeuronCheckSystem::Plugin
Constants
- KEYWORD_CLASSES
NeuronCheckへ登録したキーワード(Symbol)と、それに対応するKeywordクラスの対応を格納したマップ
Public Class Methods
__define_keyword_method_to_module(name, keyword_class)
click to toggle source
キーワード用のメソッドをKeywordモジュールへ定義する
# File lib/neuroncheck/plugin.rb, line 58 def self.__define_keyword_method_to_module(name, keyword_class) Keywords.module_eval do define_method(name) do |*params| # キーワードを生成 kw = keyword_class.new # そのキーワードのon_callメソッドを実行 kw.on_call(*params) # キーワードを返す kw end end end
add_keyword(name, &block)
click to toggle source
キーワードの追加
# File lib/neuroncheck/plugin.rb, line 12 def self.add_keyword(name, &block) # すでに予約済みのキーワードであればエラー if KEYWORD_CLASSES[name] then raise PluginError, "the `#{name}' keyword has been already reserved" end # キーワードを表すクラスを作成 keyword_class = Class.new(Keyword, &block) # 必要なインスタンスメソッドが全て定義されているかどうかを確認 if not keyword_class.method_defined?(:on_call) or not keyword_class.method_defined?(:match?) or not keyword_class.method_defined?(:expected_caption) then raise PluginError, "##{__callee__} requires 3 method definitions - `on_call', `match?' and `expected_caption'" end # キーワードを登録 keyword_class.instance_variable_set(:@keyword_name, name) KEYWORD_CLASSES[name] = keyword_class # キーワードメソッドを定義 __define_keyword_method_to_module(name, keyword_class) end
alias_keyword(name, original_keyword_name)
click to toggle source
キーワードの別名を定義
# File lib/neuroncheck/plugin.rb, line 37 def self.alias_keyword(name, original_keyword_name) # すでに予約済みのキーワードであればエラー if KEYWORD_CLASSES[name] then raise PluginError, "the `#{name}' keyword has been already reserved" end # 元キーワードが、自分が追加したキーワードの中になければエラー unless KEYWORD_CLASSES[original_keyword_name] then raise PluginError, "the `#{original_keyword_name}' keyword hasn't been reserved yet" end # 継承して別名クラスを作成 keyword_class = Class.new(KEYWORD_CLASSES[original_keyword_name]) keyword_class.instance_variable_set(:@keyword_name, name) KEYWORD_CLASSES[name] = keyword_class # キーワードメソッドを定義 __define_keyword_method_to_module(name, keyword_class) end
remove_keyword(name)
click to toggle source
キーワードの削除
# File lib/neuroncheck/plugin.rb, line 74 def self.remove_keyword(name) # 自分が追加したキーワードの中になければエラー unless KEYWORD_CLASSES[name] then raise PluginError, "the `#{name}' keyword hasn't been reserved yet" end # 組み込みキーワードを削除使用とした場合はエラー if KEYWORD_CLASSES[name].builtin_keyword? then raise PluginError, "the `#{name}' keyword cannot be removed because it is NeuronCheck builtin keyword" end # キーワードを表すクラスを削除 KEYWORD_CLASSES.delete(name) # キーワードメソッドの定義を削除 Keywords.module_eval do remove_method(name) end end