namespace :fabrication do
desc 'Display all registered fabricators by class' task list: :environment do Fabrication.manager.load_definitions if Fabrication.manager.empty? if Fabrication.manager.schematics.none? puts 'No fabricators found' next end schematic_groups = Fabrication.manager.schematics.group_by do |_name, fabdef| fabdef.klass.name end fabricators = {} schematic_groups.sort_by { |klass, _| klass }.each do |klass, groups| fabricators[klass] = groups.map(&:first).sort.join(', ') end class_width = fabricators.keys.max_by(&:size).size + 3 # padding names_width = fabricators.values.max_by(&:size).size say = lambda do |f1, f2| printf "%-#{class_width}s%-#{names_width}s\n", f1, f2 end say['Class', 'Fabricator'] puts '-' * (names_width + class_width) fabricators.each { |klass, names| say[klass, names] } end
end