Module: NeuronCheck
- Defined in:
- lib/neuroncheck/kernel.rb,
lib/neuroncheck/plugin.rb
Overview
ユーザーが利用するメインモジュール。extend処理や、有効化/無効化などに使用する
Class Method Summary collapse
-
.check(value, &expected_block) ⇒ Object
単体チェック.
- .debug ⇒ Object
- .debug=(v) ⇒ Object
- .debug? ⇒ Boolean
-
.disable ⇒ Object
無効化.
-
.enable ⇒ Object
無効化されたチェックを、再度有効化.
-
.enable_plugin(plugin_name) ⇒ Object
プラグイン有効化.
- .enabled? ⇒ Boolean
-
.extended(mod_or_class) ⇒ Object
extend時処理.
-
.get_declarations_as_json(ignore_unnamed_modules: false) ⇒ Object
宣言情報の出力.
-
.match?(value, &expected_block) ⇒ Boolean
単体チェック.
Class Method Details
.check(value, &expected_block) ⇒ Object
単体チェック
518 519 520 521 522 523 524 525 526 527 528 |
# 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.(nil, 'value', value), (NeuronCheck.debug? ? caller : caller(1)) end end |
.debug ⇒ Object
470 |
# File 'lib/neuroncheck/kernel.rb', line 470 def self.debug; @debug; end |
.debug=(v) ⇒ Object
472 |
# File 'lib/neuroncheck/kernel.rb', line 472 def self.debug=(v); @debug = v; end |
.debug? ⇒ Boolean
471 |
# File 'lib/neuroncheck/kernel.rb', line 471 def self.debug?; @debug; end |
.disable ⇒ Object
無効化
475 476 477 478 479 480 481 482 483 484 485 486 487 488 |
# 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 ⇒ Object
無効化されたチェックを、再度有効化
491 492 493 494 495 496 497 498 499 500 501 502 503 504 |
# 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) ⇒ Object
プラグイン有効化
146 147 148 |
# File 'lib/neuroncheck/plugin.rb', line 146 def self.enable_plugin(plugin_name) require "neuroncheck/plugin/#{plugin_name}" end |
.enabled? ⇒ Boolean
466 |
# File 'lib/neuroncheck/kernel.rb', line 466 def self.enabled?; @enabled; end |
.extended(mod_or_class) ⇒ Object
extend時処理
570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 |
# 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) ⇒ Object
宣言情報の出力
531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 |
# 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. 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. end end re end |
.match?(value, &expected_block) ⇒ Boolean
単体チェック
507 508 509 510 511 512 513 514 515 |
# 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 |