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