class ChartPrinter

Public Class Methods

new() click to toggle source
# File lib/chord_finder/chart_printer.rb, line 2
def initialize; end

Public Instance Methods

build_output(position, open_notes) click to toggle source
# File lib/chord_finder/chart_printer.rb, line 9
def build_output(position, open_notes)
  output = ""
  fret_nums = position.fret_nums
  lowest_fret = position.lowest_fret_num
  highest_fret = position.highest_fret_num

  first_row =
    fret_nums.map do |fret_num|
      case fret_num
      when -1 then "X"
      when  0 then "O"
      else " "
      end
    end

  fret_line = "-----------"

  output << " #{first_row.join(" ")}\n"
  output << " #{fret_line}\n"
  if lowest_fret < 3
    (1..highest_fret).each do |fret_num|
      row = (0..5).map { |string_num|
        fret_nums[string_num] == fret_num ? "●" : "|" }.join(" ")
      output << " #{row}\n"
      output << " #{fret_line}\n"
    end
  else
    (lowest_fret..highest_fret).each do |fret_num|
      left_char = "#{fret_num == lowest_fret ? lowest_fret : " "}"
      row = (0..5).map { |string_num|
        fret_nums[string_num] == fret_num ? "●" : "|" }.join(" ")
      output << "#{left_char}#{row}\n"
      output << " #{fret_line}\n"
    end
  end
  output << " #{open_notes.join(" ")}\n"
  output << "     #{position.chord.name}     \n\n"
  output
end
call(position, open_notes) click to toggle source
# File lib/chord_finder/chart_printer.rb, line 4
def call(position, open_notes)
  output = build_output(position, open_notes)
  puts output
end