Module: Transpec::Syntax::Dispatcher

Included in:
Converter, Transpec::SpecSuite
Defined in:
lib/transpec/syntax.rb

Instance Method Summary collapse

Instance Method Details

#dispatch_node(node, runtime_data = nil, project = nil, source_rewriter = nil, report = nil) ⇒ Object

rubocop:disable LineLength



58
59
60
61
62
63
# File 'lib/transpec/syntax.rb', line 58

def dispatch_node(node, runtime_data = nil, project = nil, source_rewriter = nil, report = nil)
  Syntax.standalone_syntaxes.find do |syntax_class|
    syntax = syntax_class.new(node, runtime_data, project, source_rewriter, report)
    dispatch_syntax(syntax)
  end
end

#dispatch_syntax(syntax) ⇒ Object

rubocop:enable LineLength



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/transpec/syntax.rb', line 66

def dispatch_syntax(syntax)
  return false unless syntax.conversion_target?

  invoke_handler(syntax.class, syntax)

  included_mixins = syntax.class.included_modules & Syntax.mixins
  included_mixins.each do |mixin|
    invoke_handler(mixin, syntax)
  end

  syntax.dependent_syntaxes.each do |dependent_syntax|
    dispatch_syntax(dependent_syntax)
  end

  true
end

#handler_namesObject



88
89
90
91
92
93
# File 'lib/transpec/syntax.rb', line 88

def handler_names
  @handler_names_cache ||= Hash.new do |hash, klass|
    class_name = ModuleUtil.snake_case_name(klass.name)
    hash[klass] = "process_#{class_name}"
  end
end

#invoke_handler(klass, syntax) ⇒ Object



83
84
85
86
# File 'lib/transpec/syntax.rb', line 83

def invoke_handler(klass, syntax)
  handler_name = handler_names[klass]
  send(handler_name, syntax) if respond_to?(handler_name, true)
end