Class: Henitai::SubjectSelection
- Inherits:
-
Object
- Object
- Henitai::SubjectSelection
- Defined in:
- lib/henitai/subject_selection.rb,
sig/henitai.rbs
Overview
Turns a list of source files into the subjects a run mutates, applying any CLI subject patterns.
With no patterns every resolved subject is kept. With patterns, each is
applied independently and the results concatenated, so overlapping patterns
can name the same subject twice — hence the de-duplication on
[expression, source_file] rather than on object identity. Expression alone
is not enough: the same expression can legitimately appear in two files.
Instance Method Summary collapse
-
#initialize(subject_resolver:, patterns:) ⇒ SubjectSelection
constructor
A new instance of SubjectSelection.
- #pattern_expressions ⇒ Array[String]
- #resolve(source_files) ⇒ Array[Subject]
- #unique(subjects) ⇒ Array[Subject]
Constructor Details
#initialize(subject_resolver:, patterns:) ⇒ SubjectSelection
Returns a new instance of SubjectSelection.
13 14 15 16 |
# File 'lib/henitai/subject_selection.rb', line 13 def initialize(subject_resolver:, patterns:) @subject_resolver = subject_resolver @patterns = patterns end |
Instance Method Details
#pattern_expressions ⇒ Array[String]
31 |
# File 'lib/henitai/subject_selection.rb', line 31 def pattern_expressions = Array(@patterns).map(&:expression) |
#resolve(source_files) ⇒ Array[Subject]
18 19 20 21 22 23 |
# File 'lib/henitai/subject_selection.rb', line 18 def resolve(source_files) subjects = @subject_resolver.resolve_from_files(source_files) return subjects if pattern_expressions.empty? unique(pattern_expressions.flat_map { |expression| @subject_resolver.apply_pattern(subjects, expression) }) end |
#unique(subjects) ⇒ Array[Subject]
25 26 27 |
# File 'lib/henitai/subject_selection.rb', line 25 def unique(subjects) subjects.uniq { |subject| [subject.expression, subject.source_file] } end |