NeuronCheckには簡易なプラグイン機構があり、標準で使用できるキーワードrespondable
, any
, except
, array_of
, hash_of
, block
の他に、ユーザーが独自の宣言用キーワードを追加することができます。
たとえば、新しくboolean
というキーワードを追加したい場合には、下記のように記述してください。
require 'neuroncheck'
NeuronCheckSystem::Plugin.add_keyword(:boolean) do
# キーワードを使用したときに呼び出されるメソッド
# respondable(:each) のように引数付きでキーワードを呼んだ場合は、それもon_callメソッドの引数として渡される
def on_call
end
# 実際のチェック処理を実行するメソッド。trueかfalseのいずれかを返す必要がある
def match?(value)
value.equal?(true) or value.equal?(false)
end
# そのキーワードの内容を表す文字列。エラーメッセージで使用される
def expected_caption
"boolean value"
end
end
NeuronCheckSystem::Plugin.add_keyword
ブロックの中では、Rubyの通常のクラス定義と同様に、メソッドを定義することができます。
そして、その中で上記の3種類のメソッドを定義することで、キーワードの動作を規定することができます。
上記のようにして登録したキーワードは、ndecl
ブロック内で他のキーワードと同じように使うことが可能です。
module Foo
extend NeuronCheck
ndecl {
args boolean
}
def self.foo_func(flag: false)
end
end
Foo.foo_func
Foo.foo_func(flag: 'invalid')
#=> script.rb:30:in `<main>': argument `flag' of `Foo.foo_func' must be boolean value, but was "invalid" (NeuronCheckError)
# got: "invalid"
# signature: Foo.foo_func(flag:boolean value)
# declared at: script.rb:22:in `block in <module:Foo>'
#
標準で使用できるrespondable
, any
, except
などのキーワードも、上記のプラグイン機構を用いて定義されています。(ただし、上記で説明がないメソッドを使っているところもあります)
実装の内容を見たい場合は、ソースファイル neuroncheck/builtin_keyword.rb を参照してください。
なお、NeuronCheckSystem::Plugin.add_keyword
の他に、下記の2つのメソッドも使用可能です。
require 'neuroncheck'
# booleanキーワードのエイリアス (別名) として、新しくboolキーワードを定義
NeuronCheckSystem::Plugin.alias_keyword(:bool, :boolean)
# 前に定義した boolean キーワードを削除する
NeuronCheckSystem::Plugin.remove_keyword(:boolean)