Class: Fretboard::Builder
- Inherits:
-
Object
- Object
- Fretboard::Builder
- Defined in:
- lib/fretboard/builder.rb
Overview
rubocop:disable Metrics/ClassLength
Constant Summary collapse
- DEFAULT_NUMBER_OF_FRETS =
fretboard.build fretboard.data fretboard.draw
12
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
METHODS_NAMES = %i[ standard 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.
Class Method Summary collapse
- .double_drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .drop_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .drop_a_flat(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .drop_a_sharp(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .drop_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .drop_b_flat(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .drop_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .drop_g_sharp(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .modal_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .modal_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .open_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .open_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .open_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .open_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .open_d_minor(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .open_e(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .open_f(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .open_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .open_g_minor(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
-
.standard(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
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.
- .tuning_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .tuning_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .tuning_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .tuning_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .tuning_f(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
- .tuning_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
Instance Method Summary collapse
-
#build(sharp_or_flat: :both) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize.
-
#draw(sharp_or_flat: :both) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize.
-
#initialize(tuning, number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Builder
constructor
A new instance of Builder.
Constructor Details
#initialize(tuning, number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Builder
Returns a new instance of Builder.
186 187 188 189 190 191 |
# File 'lib/fretboard/builder.rb', line 186 def initialize(tuning, number_of_frets = DEFAULT_NUMBER_OF_FRETS) @tuning = tuning.upcase.to_sym @number_of_frets = number_of_frets @data = {} end |
Instance Attribute Details
#data ⇒ Object (readonly)
METHODS_NAMES = %i[
standard
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
70 71 72 |
# File 'lib/fretboard/builder.rb', line 70 def data @data end |
Class Method Details
.double_drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
146 147 148 |
# File 'lib/fretboard/builder.rb', line 146 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) ⇒ Object
90 91 92 |
# File 'lib/fretboard/builder.rb', line 90 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) ⇒ Object
98 99 100 |
# File 'lib/fretboard/builder.rb', line 98 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) ⇒ Object
94 95 96 |
# File 'lib/fretboard/builder.rb', line 94 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) ⇒ Object
110 111 112 |
# File 'lib/fretboard/builder.rb', line 110 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) ⇒ Object
114 115 116 |
# File 'lib/fretboard/builder.rb', line 114 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) ⇒ Object
126 127 128 |
# File 'lib/fretboard/builder.rb', line 126 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) ⇒ Object
142 143 144 |
# File 'lib/fretboard/builder.rb', line 142 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) ⇒ Object
178 179 180 |
# File 'lib/fretboard/builder.rb', line 178 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) ⇒ Object
150 151 152 |
# File 'lib/fretboard/builder.rb', line 150 def self.modal_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS) new(:modal_d, number_of_frets) end |
.modal_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
182 183 184 |
# File 'lib/fretboard/builder.rb', line 182 def self.modal_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS) new(:modal_g, number_of_frets) end |
.open_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
86 87 88 |
# File 'lib/fretboard/builder.rb', line 86 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) ⇒ Object
106 107 108 |
# File 'lib/fretboard/builder.rb', line 106 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) ⇒ Object
122 123 124 |
# File 'lib/fretboard/builder.rb', line 122 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) ⇒ Object
134 135 136 |
# File 'lib/fretboard/builder.rb', line 134 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) ⇒ Object
138 139 140 |
# File 'lib/fretboard/builder.rb', line 138 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) ⇒ Object
154 155 156 |
# File 'lib/fretboard/builder.rb', line 154 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) ⇒ Object
162 163 164 |
# File 'lib/fretboard/builder.rb', line 162 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) ⇒ Object
170 171 172 |
# File 'lib/fretboard/builder.rb', line 170 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) ⇒ Object
174 175 176 |
# File 'lib/fretboard/builder.rb', line 174 def self.open_g_minor(number_of_frets = DEFAULT_NUMBER_OF_FRETS) new(:open_g_minor, number_of_frets) end |
.standard(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
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
78 79 80 |
# File 'lib/fretboard/builder.rb', line 78 def self.standard(number_of_frets = DEFAULT_NUMBER_OF_FRETS) new(:standard, number_of_frets) end |
.tuning_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS) ⇒ Object
82 83 84 |
# File 'lib/fretboard/builder.rb', line 82 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) ⇒ Object
102 103 104 |
# File 'lib/fretboard/builder.rb', line 102 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) ⇒ Object
118 119 120 |
# File 'lib/fretboard/builder.rb', line 118 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) ⇒ Object
130 131 132 |
# File 'lib/fretboard/builder.rb', line 130 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) ⇒ Object
158 159 160 |
# File 'lib/fretboard/builder.rb', line 158 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) ⇒ Object
166 167 168 |
# File 'lib/fretboard/builder.rb', line 166 def self.tuning_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS) new(:tuning_g, number_of_frets) end |
Instance Method Details
#build(sharp_or_flat: :both) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'lib/fretboard/builder.rb', line 193 def build(sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize unless Fretboard::Tunings.exists?(@tuning) Fretboard::Console.danger("Unable to detect guitar tuning") return end tuning = Fretboard::Tunings.fetch(@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) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 |
# File 'lib/fretboard/builder.rb', line 234 def draw(sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize unless @data.any? Fretboard::Console.danger("Build the guitar fretboard data for drawing") 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 |