Sha256: 13fca85255e2ab36683cebfbaeb42c97c462b216eb634b610d52c5f8230401a5

Contents?: true

Size: 1.47 KB

Versions: 3

Compression:

Stored size: 1.47 KB

Contents

module Coltrane
  module Cli
    SPECIAL_FRETS = [3, 5, 7, 9, 12, 15, 17, 19]

    class Guitar < Representation
      def initialize(notes, flavor, tuning: %w[E A D G B E], frets: 22)
        @notes    = notes
        @tuning   = tuning.reverse
        @frets    = frets
        @flavor   = flavor
        @ref_note = @notes.first
      end

      def render
        [render_notes, render_special_frets, hint].join("\n"*2)
      end

      def render_notes
        @tuning.map do |string|
          string_note = Note[string]
          (@frets+2).times.map do |i|
            if i.zero?
              string
            else
              fret = i - 1
              note = string_note + fret
              m = (@notes.include?(note) ? place_mark(note) : "--")
              fret.zero? ? (m + " |") : m
            end
          end.join(' ')
        end.join("\n")
      end

      def render_special_frets
        (@frets+1).times.map do |fret|
          m = SPECIAL_FRETS.include?(fret) ? fret.to_s.rjust(2, 0.to_s) : '  '
          "#{m}#{'  ' if fret.zero?}"
        end.join(' ')
      end

      def render_dotted_frets
      end

      def place_mark(note)
        case @flavor
        when :notes     then note.pretty_name.ljust(2, "\u266E")
        when :intervals then (@ref_note - note).name.ljust(2, '-')
        when :degrees   then @notes.degree(note).to_s.rjust(2, '0')
        when :marks     then '◼◼'
        else raise WrongFlavorError.new
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
coltrane-1.0.11 lib/cli/guitar.rb
coltrane-1.0.1 lib/cli/guitar.rb
coltrane-1.0.0 lib/cli/guitar.rb