Class: Ast::Merge::SectionTyping::CompositeClassifier

Inherits:
Classifier
  • Object
show all
Defined in:
lib/ast/merge/section_typing.rb

Overview

A composite classifier that tries multiple classifiers in order.

Useful when a file may contain multiple types of sections (e.g., both ‘appraise` blocks and `group` blocks).

Examples:

Combining classifiers

composite = CompositeClassifier.new(
  AppraisalClassifier.new,
  GemGroupClassifier.new
)
sections = composite.classify_all(children)

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Classifier

#classifies?, #classify_all

Constructor Details

#initialize(*classifiers) ⇒ CompositeClassifier

Initialize with multiple classifiers.

Parameters:

  • classifiers (Array<Classifier>)

    Classifiers to try



217
218
219
# File 'lib/ast/merge/section_typing.rb', line 217

def initialize(*classifiers)
  @classifiers = classifiers.flatten
end

Instance Attribute Details

#classifiersArray<Classifier> (readonly)

Returns Classifiers to try in order.

Returns:

  • (Array<Classifier>)

    Classifiers to try in order



212
213
214
# File 'lib/ast/merge/section_typing.rb', line 212

def classifiers
  @classifiers
end

Instance Method Details

#classify(node) ⇒ TypedSection?

Try each classifier until one matches.

Parameters:

  • node (Object)

    Node to classify

Returns:



225
226
227
228
229
230
231
232
# File 'lib/ast/merge/section_typing.rb', line 225

def classify(node)
  classifiers.each do |classifier|
    if (section = classifier.classify(node))
      return section
    end
  end
  nil
end