Class: Kaisoku::Selector

Inherits:
Object
  • Object
show all
Defined in:
lib/kaisoku/selector.rb

Instance Method Summary collapse

Constructor Details

#initialize(test_map:, configuration: Configuration.new, checksum: Checksum.new, static_analyzer: StaticAnalysis::Analyzer.new(configuration: configuration), rails_integration: Rails::Integration.new(configuration: configuration), hybrid_policy: nil) ⇒ Selector

Returns a new instance of Selector.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/kaisoku/selector.rb', line 5

def initialize(
  test_map:,
  configuration: Configuration.new,
  checksum: Checksum.new,
  static_analyzer: StaticAnalysis::Analyzer.new(configuration: configuration),
  rails_integration: Rails::Integration.new(configuration: configuration),
  hybrid_policy: nil
)
  @test_map = test_map
  @configuration = configuration
  @checksum = checksum
  @static_analyzer = static_analyzer
  @method_map = MethodMap.new(configuration: configuration)
  @rails_integration = rails_integration
  @hybrid_policy = hybrid_policy || HybridPolicy.new(test_map: test_map, configuration: configuration)
end

Instance Method Details

#select(changed_paths:, all_entities:) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/kaisoku/selector.rb', line 22

def select(changed_paths:, all_entities:)
  entities = Array(all_entities)
  paths = Array(changed_paths).map { |path| @configuration.relative_path(path) }.uniq

  return Selection.all(entities: entities, reason: 'test map is empty') if @test_map.empty?

  invalidating = paths.select { |path| @configuration.invalidates_map?(path) }
  unless invalidating.empty?
    return Selection.all(
      entities: entities,
      reason: "map invalidating file changed: #{invalidating.join(', ')}",
      invalidate_map: true
    )
  end

  boot_files = paths.select { |path| @configuration.boot_impact_file?(path) }
  unless boot_files.empty?
    rails_selection = rails_boot_selection(boot_files, entities)
    return rails_selection if rails_selection

    return Selection.all(
      entities: entities,
      reason: "boot-impact file changed: #{boot_files.join(', ')}"
    )
  end

  select_from_known_changes(paths, entities)
end