Module: NeuronCheck

Defined in:
lib/neuroncheck/kernel.rb,
lib/neuroncheck/plugin.rb

Overview

ユーザーが利用するメインモジュール。extend処理や、有効化/無効化などに使用する

Class Method Summary collapse

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.get_error_message(nil, 'value', value), (NeuronCheck.debug? ? caller : caller(1))
  end
end

.debugObject



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

Returns:

  • (Boolean)


471
# File 'lib/neuroncheck/kernel.rb', line 471

def self.debug?; @debug; end

.disableObject

無効化



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

.enableObject

無効化されたチェックを、再度有効化



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

Returns:

  • (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.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) ⇒ Boolean

単体チェック

Returns:

  • (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