module NeuronCheck
ユーザーが利用するメインモジュール。extend処理や、有効化/無効化などに使用する
Public Class Methods
check(value, &expected_block)
click to toggle source
単体チェック
# File lib/neuroncheck/kernel.rb, line 518 def self.check(value, &expected_block) # 宣言ブロック実行用のコンテキストを作成 context = NeuronCheckSystem::DeclarationContext.new # 宣言ブロックの内容を実行 expected = context.instance_eval(&expected_block) matcher = NeuronCheckSystem.get_appropriate_matcher(expected, []) unless matcher.match?(value, nil) then raise NeuronCheckError, matcher.get_error_message(nil, 'value', value), (NeuronCheck.debug? ? caller : caller(1)) end end
debug()
click to toggle source
# File lib/neuroncheck/kernel.rb, line 470 def self.debug; @debug; end
debug=(v)
click to toggle source
# File lib/neuroncheck/kernel.rb, line 472 def self.debug=(v); @debug = v; end
debug?()
click to toggle source
# File lib/neuroncheck/kernel.rb, line 471 def self.debug?; @debug; end
disable() { || ... }
click to toggle source
無効化
# File lib/neuroncheck/kernel.rb, line 475 def self.disable if block_given? then # ブロックが渡された場合は、ブロック実行中のみチェックを無効化 begin disable yield ensure enable end else @enabled = false NeuronCheckSystem::TRACE_POINT.disable # メソッド呼び出しフックを無効化 end end
enable() { || ... }
click to toggle source
無効化されたチェックを、再度有効化
# File lib/neuroncheck/kernel.rb, line 491 def self.enable if block_given? then # ブロックが渡された場合は、ブロック実行中のみチェックを有効か begin enable yield ensure disable end else @enabled = true NeuronCheckSystem::TRACE_POINT.enable # メソッド呼び出しフックを有効化 end end
enable_plugin(plugin_name)
click to toggle source
プラグイン有効化
# File lib/neuroncheck/plugin.rb, line 146 def self.enable_plugin(plugin_name) require "neuroncheck/plugin/#{plugin_name}" end
enabled?()
click to toggle source
# File lib/neuroncheck/kernel.rb, line 466 def self.enabled?; @enabled; end
extended(mod_or_class)
click to toggle source
extend時処理
# File lib/neuroncheck/kernel.rb, line 570 def self.extended(mod_or_class) # extend対象がモジュールでもクラスでもなければエラー unless mod_or_class.kind_of?(Module) then raise ScriptError, "NeuronCheck can be extended only to Class or Module" end # 2回目以降のextendであれば何もせずにスルー if mod_or_class.instance_variable_get(:@__neuron_check_extended) then return end # まずはNeuronCheck用の初期化 NeuronCheckSystem.initialize_module_for_neuron_check(mod_or_class) # 対象のModule/Classに対する処理 mod_or_class.instance_eval do # Module/Classに対して宣言用のメソッドを追加する extend NeuronCheckSystem::DeclarationMethods # extend済みフラグON @__neuron_check_extended = true end end
get_declarations_as_json(ignore_unnamed_modules: false)
click to toggle source
宣言情報の出力
# File lib/neuroncheck/kernel.rb, line 531 def self.get_declarations_as_json(ignore_unnamed_modules: false) re = {'instance_methods' => {}, 'singleton_methods' => {}, 'attributes' => {}} NeuronCheckSystem::METHOD_DECLARATIONS.each_pair do |cls_or_mod, data| data.each_pair do |method_name, decl| method_type = (decl.assinged_to_singleton_method? ? 'singleton_methods' : 'instance_methods') target_mod_or_class = (decl.assinged_to_singleton_method? ? decl.assigned_singleton_original_class : decl.assigned_class_or_module) key = target_mod_or_class.name # 無名モジュール/クラスの場合の対応 if key.nil? and not ignore_unnamed_modules then key = target_mod_or_class.inspect end if key then re[method_type][key] ||= {} re[method_type][key][method_name.to_s] = decl.meta_info_as_json end end end NeuronCheckSystem::ATTR_DECLARATIONS.each_pair do |cls_or_mod, data| key = cls_or_mod.name # 無名モジュール/クラスの場合の対応 if key.nil? and not ignore_unnamed_modules then key = cls_or_mod.inspect end data.each_pair do |method_name, decl| re['attributes'][key] ||= {} re['attributes'][key][method_name.to_s] = decl.meta_info_as_json end end re end
match?(value, &expected_block)
click to toggle source
単体チェック
# File lib/neuroncheck/kernel.rb, line 507 def self.match?(value, &expected_block) # 宣言ブロック実行用のコンテキストを作成 context = NeuronCheckSystem::DeclarationContext.new # 宣言ブロックの内容を実行 expected = context.instance_eval(&expected_block) matcher = NeuronCheckSystem.get_appropriate_matcher(expected, []) return matcher.match?(value, nil) end