Class: FactoryTrace::Processors::FindUnused

Inherits:
Object
  • Object
show all
Defined in:
lib/factory_trace/processors/find_unused.rb

Class Method Summary collapse

Class Method Details

.call(defined, used) ⇒ Array<Hash>

Finds unused factories and traits

Parameters:

Returns:

  • (Array<Hash>)


10
11
12
13
14
15
16
17
18
19
20
21
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
# File 'lib/factory_trace/processors/find_unused.rb', line 10

def self.call(defined, used)
  used_inherited_traits = used_inherited_traits(defined, used)
  used_child_factories = used_child_factories(defined, used)

  output = []

  defined.factories.each_value do |factory|
    unless used.factories[factory.name]
      if used_child_factories[factory.name]
        output << {code: :used_indirectly, factory_name: factory.name, child_factories_names: used_child_factories[factory.name]}
      else
        output << {code: :unused, factory_name: factory.name}
      end
    end

    factory.trait_names.each do |trait_name|
      unless trait_used?(used, factory.name, trait_name) || trait_used?(used_inherited_traits, factory.name, trait_name)
        output << {code: :unused, factory_name: factory.name, trait_name: trait_name}
      end
    end
  end

  defined.traits.each_value do |trait|
    unless used_inherited_traits.traits[trait.name]
      output << {code: :unused, trait_name: trait.name}
      next
    end
  end

  unused_count = output.count { |result| result[:code] == :unused }
  used_indirectly_count = output.count { |result| result[:code] == :used_indirectly }

  output.unshift(code: :unused, value: unused_count)
  output.unshift(code: :used_indirectly, value: used_indirectly_count)
  output.unshift(code: :used, value: defined.total - unused_count - used_indirectly_count)

  output
end