fretboard 1.3.0 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +568 -14
- data/RELEASE.md +7 -0
- data/bin/fretboard +2 -0
- data/fretboard.gemspec +4 -2
- data/lib/fretboard/builder.rb +116 -23
- data/lib/fretboard/console.rb +3 -1
- data/lib/fretboard/constants.rb +7 -5
- data/lib/fretboard/note.rb +8 -7
- data/lib/fretboard/notes.rb +12 -24
- data/lib/fretboard/parser.rb +4 -2
- data/lib/fretboard/tunings.rb +245 -231
- data/lib/fretboard/version.rb +4 -2
- data/lib/fretboard.rb +2 -0
- metadata +10 -9
data/lib/fretboard/builder.rb
CHANGED
@@ -1,21 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# require 'active_support/core_ext/hash'
|
2
4
|
|
3
5
|
require 'fretboard/console'
|
4
6
|
|
5
7
|
module Fretboard
|
6
|
-
class Builder
|
8
|
+
class Builder # rubocop:disable Style/Documentation, Metrics/ClassLength
|
7
9
|
# fretboard = Fretboard::Builder.new(:standart)
|
8
10
|
# fretboard = Fretboard::Builder.standart
|
9
|
-
# fretboard = Fretboard::Builder.
|
10
|
-
# fretboard = Fretboard::Builder.drop_d
|
11
|
-
# fretboard = Fretboard::Builder.double_drop_d
|
11
|
+
# fretboard = Fretboard::Builder.tuning_a
|
12
12
|
# fretboard = Fretboard::Builder.open_a
|
13
|
+
# fretboard = Fretboard::Builder.drop_a
|
14
|
+
# fretboard = Fretboard::Builder.drop_a_sharp
|
15
|
+
# fretboard = Fretboard::Builder.drop_a_flat
|
16
|
+
# fretboard = Fretboard::Builder.tuning_b
|
17
|
+
# fretboard = Fretboard::Builder.open_b
|
18
|
+
# fretboard = Fretboard::Builder.drop_b
|
19
|
+
# fretboard = Fretboard::Builder.drop_b_flat
|
20
|
+
# fretboard = Fretboard::Builder.tuning_c
|
13
21
|
# fretboard = Fretboard::Builder.open_c
|
22
|
+
# fretboard = Fretboard::Builder.drop_c
|
23
|
+
# fretboard = Fretboard::Builder.tuning_d
|
14
24
|
# fretboard = Fretboard::Builder.open_d
|
15
25
|
# fretboard = Fretboard::Builder.open_d_minor
|
26
|
+
# fretboard = Fretboard::Builder.drop_d
|
27
|
+
# fretboard = Fretboard::Builder.double_drop_d
|
28
|
+
# fretboard = Fretboard::Builder.modal_d
|
29
|
+
# fretboard = Fretboard::Builder.open_e
|
30
|
+
# fretboard = Fretboard::Builder.tuning_f
|
31
|
+
# fretboard = Fretboard::Builder.open_f
|
32
|
+
# fretboard = Fretboard::Builder.tuning_g
|
16
33
|
# fretboard = Fretboard::Builder.open_g
|
17
34
|
# fretboard = Fretboard::Builder.open_g_minor
|
18
|
-
# fretboard = Fretboard::Builder.
|
35
|
+
# fretboard = Fretboard::Builder.drop_g_sharp
|
19
36
|
# fretboard = Fretboard::Builder.modal_g
|
20
37
|
|
21
38
|
# fretboard.build
|
@@ -26,16 +43,31 @@ module Fretboard
|
|
26
43
|
|
27
44
|
# METHODS_NAMES = %i[
|
28
45
|
# standart
|
29
|
-
#
|
30
|
-
# drop_d
|
31
|
-
# double_drop_d
|
46
|
+
# tuning_a
|
32
47
|
# open_a
|
48
|
+
# drop_a
|
49
|
+
# drop_a_sharp
|
50
|
+
# drop_a_flat
|
51
|
+
# tuning_b
|
52
|
+
# open_b
|
53
|
+
# drop_b
|
54
|
+
# drop_b_flat
|
55
|
+
# tuning_c
|
33
56
|
# open_c
|
57
|
+
# drop_c
|
58
|
+
# tuning_d
|
34
59
|
# open_d
|
35
60
|
# open_d_minor
|
61
|
+
# drop_d
|
62
|
+
# double_drop_d
|
63
|
+
# modal_d
|
64
|
+
# open_e
|
65
|
+
# tuning_f
|
66
|
+
# open_f
|
67
|
+
# tuning_g
|
36
68
|
# open_g
|
37
69
|
# open_g_minor
|
38
|
-
#
|
70
|
+
# drop_g_sharp
|
39
71
|
# modal_g
|
40
72
|
# ].freeze
|
41
73
|
|
@@ -51,26 +83,58 @@ module Fretboard
|
|
51
83
|
new(:standart, number_of_frets)
|
52
84
|
end
|
53
85
|
|
54
|
-
def self.
|
55
|
-
new(:
|
86
|
+
def self.tuning_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
87
|
+
new(:tuning_a, number_of_frets)
|
56
88
|
end
|
57
89
|
|
58
|
-
def self.
|
59
|
-
new(:
|
90
|
+
def self.open_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
91
|
+
new(:open_a, number_of_frets)
|
60
92
|
end
|
61
93
|
|
62
|
-
def self.
|
63
|
-
new(:
|
94
|
+
def self.drop_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
95
|
+
new(:drop_a, number_of_frets)
|
64
96
|
end
|
65
97
|
|
66
|
-
def self.
|
67
|
-
new(:
|
98
|
+
def self.drop_a_sharp(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
99
|
+
new(:drop_a_sharp, number_of_frets)
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.drop_a_flat(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
103
|
+
new(:drop_a_flat, number_of_frets)
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.tuning_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
107
|
+
new(:tuning_b, number_of_frets)
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.open_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
111
|
+
new(:open_b, number_of_frets)
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.drop_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
115
|
+
new(:drop_b, number_of_frets)
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.drop_b_flat(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
119
|
+
new(:drop_b_flat, number_of_frets)
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.tuning_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
123
|
+
new(:tuning_c, number_of_frets)
|
68
124
|
end
|
69
125
|
|
70
126
|
def self.open_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
71
127
|
new(:open_c, number_of_frets)
|
72
128
|
end
|
73
129
|
|
130
|
+
def self.drop_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
131
|
+
new(:drop_c, number_of_frets)
|
132
|
+
end
|
133
|
+
|
134
|
+
def self.tuning_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
135
|
+
new(:tuning_d, number_of_frets)
|
136
|
+
end
|
137
|
+
|
74
138
|
def self.open_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
75
139
|
new(:open_d, number_of_frets)
|
76
140
|
end
|
@@ -79,6 +143,34 @@ module Fretboard
|
|
79
143
|
new(:open_d_minor, number_of_frets)
|
80
144
|
end
|
81
145
|
|
146
|
+
def self.drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
147
|
+
new(:drop_d, number_of_frets)
|
148
|
+
end
|
149
|
+
|
150
|
+
def self.double_drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
151
|
+
new(:double_drop_d, number_of_frets)
|
152
|
+
end
|
153
|
+
|
154
|
+
def self.modal_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
155
|
+
new(:modal_d, number_of_frets)
|
156
|
+
end
|
157
|
+
|
158
|
+
def self.open_e(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
159
|
+
new(:open_e, number_of_frets)
|
160
|
+
end
|
161
|
+
|
162
|
+
def self.tuning_f(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
163
|
+
new(:tuning_f, number_of_frets)
|
164
|
+
end
|
165
|
+
|
166
|
+
def self.open_f(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
167
|
+
new(:open_f, number_of_frets)
|
168
|
+
end
|
169
|
+
|
170
|
+
def self.tuning_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
171
|
+
new(:tuning_g, number_of_frets)
|
172
|
+
end
|
173
|
+
|
82
174
|
def self.open_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
83
175
|
new(:open_g, number_of_frets)
|
84
176
|
end
|
@@ -87,8 +179,8 @@ module Fretboard
|
|
87
179
|
new(:open_g_minor, number_of_frets)
|
88
180
|
end
|
89
181
|
|
90
|
-
def self.
|
91
|
-
new(:
|
182
|
+
def self.drop_g_sharp(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
183
|
+
new(:drop_g_sharp, number_of_frets)
|
92
184
|
end
|
93
185
|
|
94
186
|
def self.modal_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
@@ -102,7 +194,7 @@ module Fretboard
|
|
102
194
|
@data = {}
|
103
195
|
end
|
104
196
|
|
105
|
-
def build(sharp_or_flat: :both)
|
197
|
+
def build(sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
106
198
|
unless Fretboard::Tunings.exists?(@tuning)
|
107
199
|
Fretboard::Console.danger('Unable to detect guitar tuning')
|
108
200
|
return
|
@@ -143,7 +235,7 @@ module Fretboard
|
|
143
235
|
puts 'done'
|
144
236
|
end
|
145
237
|
|
146
|
-
def draw(sharp_or_flat: :both)
|
238
|
+
def draw(sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
147
239
|
unless @data.any?
|
148
240
|
Fretboard::Console.danger('Create the data')
|
149
241
|
return
|
@@ -163,9 +255,10 @@ module Fretboard
|
|
163
255
|
open_note = string_notes[0]
|
164
256
|
|
165
257
|
if open_note.is_a?(Array)
|
166
|
-
open_note =
|
258
|
+
open_note = case sharp_or_flat
|
259
|
+
when :both
|
167
260
|
open_note.join('/')
|
168
|
-
|
261
|
+
when :sharp
|
169
262
|
open_note.first
|
170
263
|
else
|
171
264
|
open_note.last
|
data/lib/fretboard/console.rb
CHANGED
data/lib/fretboard/constants.rb
CHANGED
data/lib/fretboard/note.rb
CHANGED
@@ -1,20 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fretboard/notes'
|
2
4
|
|
3
5
|
module Fretboard
|
4
|
-
class Note
|
6
|
+
class Note # rubocop:disable Style/Documentation
|
5
7
|
# Fretboard::Note.next_for('C')
|
6
8
|
# Fretboard::Note.next_for(['F#', 'Gb'])
|
7
9
|
# Fretboard::Note.next_for('F#/Gb')
|
8
10
|
|
9
|
-
def self.next_for(note, sharp_or_flat: :both)
|
10
|
-
all_notes = Fretboard::Notes.all(
|
11
|
-
sharp_or_flat
|
12
|
-
)
|
11
|
+
def self.next_for(note, sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength
|
12
|
+
all_notes = Fretboard::Notes.all(sharp_or_flat)
|
13
13
|
|
14
14
|
if note.is_a?(Array)
|
15
|
-
note =
|
15
|
+
note = case sharp_or_flat
|
16
|
+
when :both
|
16
17
|
note.join('/')
|
17
|
-
|
18
|
+
when :sharp
|
18
19
|
note.first
|
19
20
|
else
|
20
21
|
note.last
|
data/lib/fretboard/notes.rb
CHANGED
@@ -1,47 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Fretboard
|
2
|
-
class Notes
|
4
|
+
class Notes # rubocop:disable Style/Documentation
|
3
5
|
# Fretboard::Notes.all(:both)
|
4
6
|
# Fretboard::Notes.all(:sharp)
|
5
7
|
# Fretboard::Notes.all(:flat)
|
6
8
|
|
7
9
|
BASIS_NOTES = {
|
8
10
|
1 => 'C',
|
9
|
-
2 => [
|
10
|
-
'C#',
|
11
|
-
'Db'
|
12
|
-
],
|
11
|
+
2 => ['C#', 'Db'],
|
13
12
|
3 => 'D',
|
14
|
-
4 => [
|
15
|
-
'D#',
|
16
|
-
'Eb'
|
17
|
-
],
|
13
|
+
4 => ['D#', 'Eb'],
|
18
14
|
5 => 'E',
|
19
15
|
6 => 'F',
|
20
|
-
7 => [
|
21
|
-
'F#',
|
22
|
-
'Gb'
|
23
|
-
],
|
16
|
+
7 => ['F#', 'Gb'],
|
24
17
|
8 => 'G',
|
25
|
-
9 => [
|
26
|
-
'G#',
|
27
|
-
'Ab'
|
28
|
-
],
|
18
|
+
9 => ['G#', 'Ab'],
|
29
19
|
10 => 'A',
|
30
|
-
11 => [
|
31
|
-
'A#',
|
32
|
-
'Bb'
|
33
|
-
],
|
20
|
+
11 => ['A#', 'Bb'],
|
34
21
|
12 => 'B'
|
35
22
|
}.freeze
|
36
23
|
|
37
|
-
def self.all(sharp_or_flat = :sharp)
|
24
|
+
def self.all(sharp_or_flat = :sharp) # rubocop:disable Metrics/MethodLength
|
38
25
|
BASIS_NOTES.map do |_key, value|
|
39
26
|
result = value
|
40
27
|
|
41
28
|
if value.is_a?(Array)
|
42
|
-
result =
|
29
|
+
result = case sharp_or_flat
|
30
|
+
when :both
|
43
31
|
value.join('/')
|
44
|
-
|
32
|
+
when :sharp
|
45
33
|
value.first
|
46
34
|
else
|
47
35
|
value.last
|
data/lib/fretboard/parser.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/core_ext'
|
2
4
|
require 'optparse'
|
3
5
|
|
@@ -7,7 +9,7 @@ require 'fretboard/note'
|
|
7
9
|
require 'fretboard/tunings'
|
8
10
|
|
9
11
|
module Fretboard
|
10
|
-
class Parser
|
12
|
+
class Parser # rubocop:disable Style/Documentation
|
11
13
|
attr_reader :args
|
12
14
|
|
13
15
|
def self.parse(args)
|
@@ -26,7 +28,7 @@ module Fretboard
|
|
26
28
|
|
27
29
|
private
|
28
30
|
|
29
|
-
def parser
|
31
|
+
def parser # rubocop:disable Metrics/MethodLength
|
30
32
|
OptionParser.new do |opts|
|
31
33
|
opts.banner = 'Usage: fretboard [options]'
|
32
34
|
|