You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

banner.rb 1.7 kB

2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. require 'cucumber/term/ansicolor'
  2. module Cucumber
  3. module Term
  4. module Banner
  5. def display_banner(lines, io, border_modifiers = nil)
  6. BannerMaker.new.display_banner(lines, io, border_modifiers || %i[green bold])
  7. end
  8. class BannerMaker
  9. include Term::ANSIColor
  10. def display_banner(lines, io, border_modifiers)
  11. lines = lines.split("\n") if lines.is_a? String
  12. longest_line_length = lines.map { |line| line_length(line) }.max
  13. io.puts apply_modifiers("┌#{'─' * (longest_line_length + 2)}┐", border_modifiers)
  14. lines.map do |line|
  15. padding = ' ' * (longest_line_length - line_length(line))
  16. io.puts "#{apply_modifiers('│', border_modifiers)} #{display_line(line)}#{padding} #{apply_modifiers('│', border_modifiers)}"
  17. end
  18. io.puts apply_modifiers("└#{'─' * (longest_line_length + 2)}┘", border_modifiers)
  19. end
  20. private
  21. def display_line(line)
  22. line.is_a?(Array) ? line.map { |span| display_span(span) }.join : line
  23. end
  24. def display_span(span)
  25. return apply_modifiers(span.shift, span) if span.is_a?(Array)
  26. span
  27. end
  28. def apply_modifiers(str, modifiers)
  29. display = str
  30. modifiers.each { |modifier| display = send(modifier, display) }
  31. display
  32. end
  33. def line_length(line)
  34. if line.is_a?(Array)
  35. line.map { |span| span_length(span) }.sum
  36. else
  37. line.length
  38. end
  39. end
  40. def span_length(span)
  41. span.is_a?(Array) ? span[0].length : span.length
  42. end
  43. end
  44. end
  45. end
  46. end

No Description

Contributors (1)