class Fretboard::Builder

Constants

DEFAULT_NUMBER_OF_FRETS

fretboard.build fretboard.data fretboard.draw

Attributes

data[R]

METHODS_NAMES = %i[

standart
tuning_a
open_a
drop_a
drop_a_sharp
drop_a_flat
tuning_b
open_b
drop_b
drop_b_flat
tuning_c
open_c
drop_c
tuning_d
open_d
open_d_minor
drop_d
double_drop_d
modal_d
open_e
tuning_f
open_f
tuning_g
open_g
open_g_minor
drop_g_sharp
modal_g

].freeze

Public Class Methods

double_drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 150
def self.double_drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:double_drop_d, number_of_frets)
end
drop_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 94
def self.drop_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:drop_a, number_of_frets)
end
drop_a_flat(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 102
def self.drop_a_flat(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:drop_a_flat, number_of_frets)
end
drop_a_sharp(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 98
def self.drop_a_sharp(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:drop_a_sharp, number_of_frets)
end
drop_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 114
def self.drop_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:drop_b, number_of_frets)
end
drop_b_flat(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 118
def self.drop_b_flat(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:drop_b_flat, number_of_frets)
end
drop_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 130
def self.drop_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:drop_c, number_of_frets)
end
drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 146
def self.drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:drop_d, number_of_frets)
end
drop_g_sharp(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 182
def self.drop_g_sharp(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:drop_g_sharp, number_of_frets)
end
modal_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
modal_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
new(tuning, number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 190
def initialize(tuning, number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  @tuning = tuning.upcase.to_sym
  @number_of_frets = number_of_frets

  @data = {}
end
open_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 90
def self.open_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:open_a, number_of_frets)
end
open_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 110
def self.open_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:open_b, number_of_frets)
end
open_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 126
def self.open_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:open_c, number_of_frets)
end
open_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 138
def self.open_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:open_d, number_of_frets)
end
open_d_minor(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 142
def self.open_d_minor(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:open_d_minor, number_of_frets)
end
open_e(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 158
def self.open_e(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:open_e, number_of_frets)
end
open_f(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 166
def self.open_f(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:open_f, number_of_frets)
end
open_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 174
def self.open_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:open_g, number_of_frets)
end
open_g_minor(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 178
def self.open_g_minor(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:open_g_minor, number_of_frets)
end
standart(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source

METHODS_NAMES.each do |method_name|

define_method(method_name) do |number_of_frets = DEFAULT_NUMBER_OF_FRETS|
  new(method_name, number_of_frets)
end

end

# File lib/fretboard/builder.rb, line 82
def self.standart(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:standart, number_of_frets)
end
tuning_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 86
def self.tuning_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:tuning_a, number_of_frets)
end
tuning_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 106
def self.tuning_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:tuning_b, number_of_frets)
end
tuning_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 122
def self.tuning_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:tuning_c, number_of_frets)
end
tuning_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 134
def self.tuning_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:tuning_d, number_of_frets)
end
tuning_f(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 162
def self.tuning_f(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:tuning_f, number_of_frets)
end
tuning_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS) click to toggle source
# File lib/fretboard/builder.rb, line 170
def self.tuning_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
  new(:tuning_g, number_of_frets)
end

Public Instance Methods

build(sharp_or_flat: :both) click to toggle source
# File lib/fretboard/builder.rb, line 197
def build(sharp_or_flat: :both)
  unless Fretboard::Tunings.exists?(@tuning)
    Fretboard::Console.danger('Unable to detect guitar tuning')
    return
  end

  tuning = Fretboard::Tunings.get(@tuning)
  strings = tuning[:STRINGS]
  number_of_strings = strings.size

  (1..number_of_strings).each do |string_number|
    puts
    puts "String: #{string_number}"
    puts

    current_note = strings[string_number][:NOTE]

    @data[string_number] = {}

    puts "Fret: 0 (#{current_note})"

    @data[string_number][0] = current_note

    (1..@number_of_frets).each do |fret|
      next_note = Fretboard::Note.next_for(
        current_note,
        sharp_or_flat: sharp_or_flat
      )

      puts "Fret: #{fret} (#{next_note})"

      @data[string_number][fret] = next_note

      current_note = next_note
    end
  end

  puts
  puts 'done'
end
draw(sharp_or_flat: :both) click to toggle source
# File lib/fretboard/builder.rb, line 238
def draw(sharp_or_flat: :both)
  unless @data.any?
    Fretboard::Console.danger('Create the data')
    return
  end

  headings = []
  rows = []

  @data.each_pair do |string_number, string_notes|
    row = []

    headings << '№'
    row << string_number

    headings << 0

    open_note = string_notes[0]

    if open_note.is_a?(Array)
      open_note = case sharp_or_flat
                  when :both
                    open_note.join('/')
                  when :sharp
                    open_note.first
                  else
                    open_note.last
                  end
    end

    row << open_note

    string_notes.except(0).each_pair do |fret, note|
      headings << fret
      row << note
    end

    rows << row
  end

  Fretboard::Console.print_table(headings.uniq, rows)

  nil
end