fretboard 1.6.0 → 2.0.0
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 +109 -35
- data/bin/fretboard +1 -14
- data/lib/fretboard/builder.rb +13 -209
- data/lib/fretboard/console.rb +2 -5
- data/lib/fretboard/exceptions/base.rb +7 -0
- data/lib/fretboard/exceptions/not_built.rb +11 -0
- data/lib/fretboard/exceptions/unknown_note.rb +13 -0
- data/lib/fretboard/exceptions/unknown_tuning.rb +13 -0
- data/lib/fretboard/note.rb +5 -22
- data/lib/fretboard/note_formatter.rb +15 -0
- data/lib/fretboard/notes.rb +2 -19
- data/lib/fretboard/parser.rb +4 -12
- data/lib/fretboard/tunings.rb +3 -3
- data/lib/fretboard/version.rb +2 -2
- data/lib/fretboard.rb +8 -9
- metadata +18 -72
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8fe73d0ec9fe65459863a1d69c89db528176f618484ade07d35b171662e337a2
|
|
4
|
+
data.tar.gz: 50a49bb50600ddeb7921d09188339a750a83657dcd453e051c2acab32ac5eb98
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 01bdd0af72cb6b621dd6a9232397253f5aceed7aafd416863bdcf4e61a4d6505b0a4df6987f3000ed17e1c7e99a46fdbef3ff787d8288fce41fe2cef597957eb
|
|
7
|
+
data.tar.gz: fd464320449062acd34e8da6218297fa8787783b0812506980db6ce595291bd836f7514e31cef832831135c0de00d53ac118242cc3c1014b98e28c57eaef188b
|
data/README.md
CHANGED
|
@@ -1,18 +1,40 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
1
3
|
# Fretboard
|
|
2
4
|
|
|
3
5
|
Tools for working with the guitar fretboard.
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<div align="center">
|
|
10
|
+
|
|
11
|
+
[](https://rubygems.org/gems/fretboard)
|
|
12
|
+
[](https://github.com/afuno/fretboard/releases)
|
|
13
|
+
[](https://rubygems.org/gems/fretboard)
|
|
14
|
+
[](https://github.com/afuno/fretboard)
|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
## 💡 Why Fretboard?
|
|
19
|
+
|
|
20
|
+
- 🎸 **27 Guitar Tunings** — Standard, Open, Drop, Modal and more
|
|
21
|
+
- 🎹 **Chromatic Notes** — Full sharp/flat notation support
|
|
22
|
+
- 📊 **Visual Fretboard** — ASCII table rendering in console
|
|
23
|
+
- ⚡ **CLI Tool** — Draw any tuning from the command line
|
|
24
|
+
- 🔧 **Ruby API** — Programmable fretboard data builder
|
|
25
|
+
- 🛤️ **Rails Ready** — Built-in Rails::Engine for integration
|
|
26
|
+
|
|
27
|
+
## 🚀 Quick Start
|
|
6
28
|
|
|
7
|
-
|
|
29
|
+
### Installation
|
|
8
30
|
|
|
9
31
|
```ruby
|
|
10
32
|
gem "fretboard"
|
|
11
33
|
```
|
|
12
34
|
|
|
13
|
-
|
|
35
|
+
### Ruby API
|
|
14
36
|
|
|
15
|
-
|
|
37
|
+
Creates a fretboard with the specified tuning:
|
|
16
38
|
|
|
17
39
|
```ruby
|
|
18
40
|
fretboard = Fretboard::Builder.new(:standard)
|
|
@@ -20,7 +42,7 @@ fretboard = Fretboard::Builder.new(:standard)
|
|
|
20
42
|
fretboard = Fretboard::Builder.standard
|
|
21
43
|
```
|
|
22
44
|
|
|
23
|
-
[Supported guitar tunings](
|
|
45
|
+
[Supported guitar tunings](#-supported-guitar-tunings)
|
|
24
46
|
|
|
25
47
|
Creating the fretboard data:
|
|
26
48
|
|
|
@@ -53,9 +75,9 @@ fretboard.draw
|
|
|
53
75
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
54
76
|
```
|
|
55
77
|
|
|
56
|
-
###
|
|
78
|
+
### CLI
|
|
57
79
|
|
|
58
|
-
|
|
80
|
+
Drawing the fretboard:
|
|
59
81
|
|
|
60
82
|
```
|
|
61
83
|
bundle exec fretboard --draw-tuning standard
|
|
@@ -78,7 +100,7 @@ bundle exec fretboard --draw-tuning standard
|
|
|
78
100
|
```
|
|
79
101
|
</details>
|
|
80
102
|
|
|
81
|
-
|
|
103
|
+
Getting a list of supported guitar tunings:
|
|
82
104
|
|
|
83
105
|
```
|
|
84
106
|
bundle exec fretboard --tunings-list
|
|
@@ -122,7 +144,39 @@ bundle exec fretboard --tunings-list
|
|
|
122
144
|
```
|
|
123
145
|
</details>
|
|
124
146
|
|
|
125
|
-
## Supported
|
|
147
|
+
## 🎵 Supported Guitar Tunings
|
|
148
|
+
|
|
149
|
+
| Tuning | Notes |
|
|
150
|
+
|--------|-------|
|
|
151
|
+
| Standard | E, B, G, D, A, E |
|
|
152
|
+
| Tuning A | A, E, C, G, D, A |
|
|
153
|
+
| Open A | E, A, E, C#/Db, A, E |
|
|
154
|
+
| Drop A | B, F#/Gb, D, A, E, A |
|
|
155
|
+
| Drop A# | C, G, D#/Eb, A#/Bb, F, A#/Bb |
|
|
156
|
+
| Drop Ab | A#/Bb, F, C#/Db, G#/Ab, D#/Eb, G#/Ab |
|
|
157
|
+
| Tuning B | B, F#/Gb, D, A, E, B |
|
|
158
|
+
| Open B | D#/Eb, B, F#/Gb, B, F#/Gb, B |
|
|
159
|
+
| Drop B | C#/Db, G#/Ab, E, B, F#/Gb, B |
|
|
160
|
+
| Drop Bb | C, G, D#/Eb, A#/Bb, F, A#/Bb |
|
|
161
|
+
| Tuning C | C, G, D#/Eb, A#/Bb, F, C |
|
|
162
|
+
| Open C | E, C, G, C, G, C |
|
|
163
|
+
| Drop C | D, A, F, C, G, C |
|
|
164
|
+
| Tuning D | D, A, F, C, G, D |
|
|
165
|
+
| Open D | D, A, F#/Gb, D, A, D |
|
|
166
|
+
| Open D Minor | D, A, F, D, A, D |
|
|
167
|
+
| Drop D | E, B, G, D, A, D |
|
|
168
|
+
| Double Drop D | D, B, G, D, A, D |
|
|
169
|
+
| Modal D | D, A, G, D, A, D |
|
|
170
|
+
| Open E | E, B, G#/Ab, E, B, E |
|
|
171
|
+
| Tuning F | F, C, G#/Ab, D#/Eb, A#/Bb, F |
|
|
172
|
+
| Tuning G | G, D, A#/Bb, F, C, G |
|
|
173
|
+
| Open F | F, C, F, C, A, F |
|
|
174
|
+
| Open G | D, B, G, D, G, D |
|
|
175
|
+
| Open G Minor | D, A#/Bb, G, D, G, D |
|
|
176
|
+
| Drop G# | A#/Bb, F, C#/Db, G#/Ab, D#/Eb, G#/Ab |
|
|
177
|
+
| Modal G | D, C, G, D, G, D |
|
|
178
|
+
|
|
179
|
+
### Fretboard Diagrams
|
|
126
180
|
|
|
127
181
|
<details>
|
|
128
182
|
<summary>Standard (standard)</summary>
|
|
@@ -146,7 +200,7 @@ bundle exec fretboard --tunings-list
|
|
|
146
200
|
</details>
|
|
147
201
|
|
|
148
202
|
<details>
|
|
149
|
-
<summary>A
|
|
203
|
+
<summary>Tuning A (tuning_a)</summary>
|
|
150
204
|
|
|
151
205
|
```
|
|
152
206
|
bundle exec fretboard --draw-tuning tuning_a
|
|
@@ -251,7 +305,7 @@ bundle exec fretboard --tunings-list
|
|
|
251
305
|
</details>
|
|
252
306
|
|
|
253
307
|
<details>
|
|
254
|
-
<summary>B
|
|
308
|
+
<summary>Tuning B (tuning_b)</summary>
|
|
255
309
|
|
|
256
310
|
```
|
|
257
311
|
bundle exec fretboard --draw-tuning tuning_b
|
|
@@ -335,7 +389,7 @@ bundle exec fretboard --tunings-list
|
|
|
335
389
|
</details>
|
|
336
390
|
|
|
337
391
|
<details>
|
|
338
|
-
<summary>C
|
|
392
|
+
<summary>Tuning C (tuning_c)</summary>
|
|
339
393
|
|
|
340
394
|
```
|
|
341
395
|
bundle exec fretboard --draw-tuning tuning_c
|
|
@@ -398,7 +452,7 @@ bundle exec fretboard --tunings-list
|
|
|
398
452
|
</details>
|
|
399
453
|
|
|
400
454
|
<details>
|
|
401
|
-
<summary>D
|
|
455
|
+
<summary>Tuning D (tuning_d)</summary>
|
|
402
456
|
|
|
403
457
|
```
|
|
404
458
|
bundle exec fretboard --draw-tuning tuning_d
|
|
@@ -545,7 +599,7 @@ bundle exec fretboard --tunings-list
|
|
|
545
599
|
</details>
|
|
546
600
|
|
|
547
601
|
<details>
|
|
548
|
-
<summary>F
|
|
602
|
+
<summary>Tuning F (tuning_f)</summary>
|
|
549
603
|
|
|
550
604
|
```
|
|
551
605
|
bundle exec fretboard --draw-tuning tuning_f
|
|
@@ -565,6 +619,27 @@ bundle exec fretboard --tunings-list
|
|
|
565
619
|
```
|
|
566
620
|
</details>
|
|
567
621
|
|
|
622
|
+
<details>
|
|
623
|
+
<summary>Tuning G (tuning_g)</summary>
|
|
624
|
+
|
|
625
|
+
```
|
|
626
|
+
bundle exec fretboard --draw-tuning tuning_g
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
```
|
|
630
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
631
|
+
| № | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|
|
632
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
633
|
+
| 1 | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G |
|
|
634
|
+
| 2 | D | D#/Eb | E | F | F#/Gb | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D |
|
|
635
|
+
| 3 | A#/Bb | B | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G | G#/Ab | A | A#/Bb |
|
|
636
|
+
| 4 | F | F#/Gb | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D | D#/Eb | E | F |
|
|
637
|
+
| 5 | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G | G#/Ab | A | A#/Bb | B | C |
|
|
638
|
+
| 6 | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G |
|
|
639
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
640
|
+
```
|
|
641
|
+
</details>
|
|
642
|
+
|
|
568
643
|
<details>
|
|
569
644
|
<summary>Open F (open_f)</summary>
|
|
570
645
|
|
|
@@ -586,27 +661,6 @@ bundle exec fretboard --tunings-list
|
|
|
586
661
|
```
|
|
587
662
|
</details>
|
|
588
663
|
|
|
589
|
-
<details>
|
|
590
|
-
<summary>G Tuning (tuning_g)</summary>
|
|
591
|
-
|
|
592
|
-
```
|
|
593
|
-
bundle exec fretboard --draw-tuning tuning_g
|
|
594
|
-
```
|
|
595
|
-
|
|
596
|
-
```
|
|
597
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
598
|
-
| № | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|
|
599
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
600
|
-
| 1 | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G |
|
|
601
|
-
| 2 | D | D#/Eb | E | F | F#/Gb | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D |
|
|
602
|
-
| 3 | A#/Bb | B | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G | G#/Ab | A | A#/Bb |
|
|
603
|
-
| 4 | F | F#/Gb | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D | D#/Eb | E | F |
|
|
604
|
-
| 5 | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G | G#/Ab | A | A#/Bb | B | C |
|
|
605
|
-
| 6 | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G |
|
|
606
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
607
|
-
```
|
|
608
|
-
</details>
|
|
609
|
-
|
|
610
664
|
<details>
|
|
611
665
|
<summary>Open G (open_g)</summary>
|
|
612
666
|
|
|
@@ -690,3 +744,23 @@ bundle exec fretboard --tunings-list
|
|
|
690
744
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
691
745
|
```
|
|
692
746
|
</details>
|
|
747
|
+
|
|
748
|
+
## 🤝 Contributing
|
|
749
|
+
|
|
750
|
+
We welcome contributions! Here are some ways you can help:
|
|
751
|
+
|
|
752
|
+
- 🐛 Report bugs and issues
|
|
753
|
+
- 💡 Suggest new features
|
|
754
|
+
- 📝 Improve documentation
|
|
755
|
+
- 🧪 Add test cases
|
|
756
|
+
- 🔧 Submit pull requests
|
|
757
|
+
|
|
758
|
+
Please read our [Contributing Guide](./CONTRIBUTING.md) before submitting a pull request.
|
|
759
|
+
|
|
760
|
+
## 🙏 Acknowledgments
|
|
761
|
+
|
|
762
|
+
Thank you to all [contributors](https://github.com/afuno/fretboard/graphs/contributors) who have helped make Fretboard better!
|
|
763
|
+
|
|
764
|
+
## 📄 License
|
|
765
|
+
|
|
766
|
+
Fretboard is available as open source under the terms of the [MIT License](./LICENSE.md).
|
data/bin/fretboard
CHANGED
|
@@ -1,19 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
require "rubygems"
|
|
7
|
-
|
|
8
|
-
begin
|
|
9
|
-
require "bundler"
|
|
10
|
-
Bundler.setup
|
|
11
|
-
rescue StandardError
|
|
12
|
-
# ...
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
$LOAD_PATH << "#{__dir__}/../lib"
|
|
16
|
-
|
|
17
|
-
require "fretboard/parser"
|
|
4
|
+
require "fretboard"
|
|
18
5
|
|
|
19
6
|
Fretboard::Parser.parse(ARGV)
|
data/lib/fretboard/builder.rb
CHANGED
|
@@ -1,186 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Fretboard
|
|
4
|
-
class Builder
|
|
5
|
-
# fretboard = Fretboard::Builder.new(:standard)
|
|
6
|
-
# fretboard = Fretboard::Builder.standard
|
|
7
|
-
# fretboard = Fretboard::Builder.tuning_a
|
|
8
|
-
# fretboard = Fretboard::Builder.open_a
|
|
9
|
-
# fretboard = Fretboard::Builder.drop_a
|
|
10
|
-
# fretboard = Fretboard::Builder.drop_a_sharp
|
|
11
|
-
# fretboard = Fretboard::Builder.drop_a_flat
|
|
12
|
-
# fretboard = Fretboard::Builder.tuning_b
|
|
13
|
-
# fretboard = Fretboard::Builder.open_b
|
|
14
|
-
# fretboard = Fretboard::Builder.drop_b
|
|
15
|
-
# fretboard = Fretboard::Builder.drop_b_flat
|
|
16
|
-
# fretboard = Fretboard::Builder.tuning_c
|
|
17
|
-
# fretboard = Fretboard::Builder.open_c
|
|
18
|
-
# fretboard = Fretboard::Builder.drop_c
|
|
19
|
-
# fretboard = Fretboard::Builder.tuning_d
|
|
20
|
-
# fretboard = Fretboard::Builder.open_d
|
|
21
|
-
# fretboard = Fretboard::Builder.open_d_minor
|
|
22
|
-
# fretboard = Fretboard::Builder.drop_d
|
|
23
|
-
# fretboard = Fretboard::Builder.double_drop_d
|
|
24
|
-
# fretboard = Fretboard::Builder.modal_d
|
|
25
|
-
# fretboard = Fretboard::Builder.open_e
|
|
26
|
-
# fretboard = Fretboard::Builder.tuning_f
|
|
27
|
-
# fretboard = Fretboard::Builder.open_f
|
|
28
|
-
# fretboard = Fretboard::Builder.tuning_g
|
|
29
|
-
# fretboard = Fretboard::Builder.open_g
|
|
30
|
-
# fretboard = Fretboard::Builder.open_g_minor
|
|
31
|
-
# fretboard = Fretboard::Builder.drop_g_sharp
|
|
32
|
-
# fretboard = Fretboard::Builder.modal_g
|
|
33
|
-
|
|
34
|
-
# fretboard.build
|
|
35
|
-
# fretboard.data
|
|
36
|
-
# fretboard.draw
|
|
37
|
-
|
|
4
|
+
class Builder
|
|
38
5
|
DEFAULT_NUMBER_OF_FRETS = 12
|
|
39
6
|
|
|
40
|
-
# METHODS_NAMES = %i[
|
|
41
|
-
# standard
|
|
42
|
-
# tuning_a
|
|
43
|
-
# open_a
|
|
44
|
-
# drop_a
|
|
45
|
-
# drop_a_sharp
|
|
46
|
-
# drop_a_flat
|
|
47
|
-
# tuning_b
|
|
48
|
-
# open_b
|
|
49
|
-
# drop_b
|
|
50
|
-
# drop_b_flat
|
|
51
|
-
# tuning_c
|
|
52
|
-
# open_c
|
|
53
|
-
# drop_c
|
|
54
|
-
# tuning_d
|
|
55
|
-
# open_d
|
|
56
|
-
# open_d_minor
|
|
57
|
-
# drop_d
|
|
58
|
-
# double_drop_d
|
|
59
|
-
# modal_d
|
|
60
|
-
# open_e
|
|
61
|
-
# tuning_f
|
|
62
|
-
# open_f
|
|
63
|
-
# tuning_g
|
|
64
|
-
# open_g
|
|
65
|
-
# open_g_minor
|
|
66
|
-
# drop_g_sharp
|
|
67
|
-
# modal_g
|
|
68
|
-
# ].freeze
|
|
69
|
-
|
|
70
7
|
attr_reader :data
|
|
71
8
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
# end
|
|
77
|
-
|
|
78
|
-
def self.standard(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
79
|
-
new(:standard, number_of_frets)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def self.tuning_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
83
|
-
new(:tuning_a, number_of_frets)
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def self.open_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
87
|
-
new(:open_a, number_of_frets)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def self.drop_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
91
|
-
new(:drop_a, number_of_frets)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def self.drop_a_sharp(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
95
|
-
new(:drop_a_sharp, number_of_frets)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def self.drop_a_flat(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
99
|
-
new(:drop_a_flat, number_of_frets)
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def self.tuning_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
103
|
-
new(:tuning_b, number_of_frets)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def self.open_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
107
|
-
new(:open_b, number_of_frets)
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def self.drop_b(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
111
|
-
new(:drop_b, number_of_frets)
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
def self.drop_b_flat(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
115
|
-
new(:drop_b_flat, number_of_frets)
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
def self.tuning_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
119
|
-
new(:tuning_c, number_of_frets)
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def self.open_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
123
|
-
new(:open_c, number_of_frets)
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def self.drop_c(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
127
|
-
new(:drop_c, number_of_frets)
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def self.tuning_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
131
|
-
new(:tuning_d, number_of_frets)
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
def self.open_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
135
|
-
new(:open_d, number_of_frets)
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
def self.open_d_minor(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
139
|
-
new(:open_d_minor, number_of_frets)
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
def self.drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
143
|
-
new(:drop_d, number_of_frets)
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
def self.double_drop_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
147
|
-
new(:double_drop_d, number_of_frets)
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
def self.modal_d(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
151
|
-
new(:modal_d, number_of_frets)
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
def self.open_e(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
155
|
-
new(:open_e, number_of_frets)
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
def self.tuning_f(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
159
|
-
new(:tuning_f, number_of_frets)
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
def self.open_f(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
163
|
-
new(:open_f, number_of_frets)
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def self.tuning_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
167
|
-
new(:tuning_g, number_of_frets)
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def self.open_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
171
|
-
new(:open_g, number_of_frets)
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
def self.open_g_minor(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
175
|
-
new(:open_g_minor, number_of_frets)
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
def self.drop_g_sharp(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
179
|
-
new(:drop_g_sharp, number_of_frets)
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
def self.modal_g(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
183
|
-
new(:modal_g, number_of_frets)
|
|
9
|
+
Fretboard::Tunings.list.each_key do |tuning_name|
|
|
10
|
+
define_singleton_method(tuning_name.downcase) do |number_of_frets = DEFAULT_NUMBER_OF_FRETS|
|
|
11
|
+
new(tuning_name, number_of_frets)
|
|
12
|
+
end
|
|
184
13
|
end
|
|
185
14
|
|
|
186
15
|
def initialize(tuning, number_of_frets = DEFAULT_NUMBER_OF_FRETS)
|
|
@@ -191,51 +20,37 @@ module Fretboard
|
|
|
191
20
|
end
|
|
192
21
|
|
|
193
22
|
def build(sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
194
|
-
unless Fretboard::Tunings.exists?(@tuning)
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
end
|
|
23
|
+
raise Fretboard::Exceptions::UnknownTuning, @tuning unless Fretboard::Tunings.exists?(@tuning)
|
|
24
|
+
|
|
25
|
+
@sharp_or_flat = sharp_or_flat
|
|
198
26
|
|
|
199
27
|
tuning = Fretboard::Tunings.fetch(@tuning)
|
|
200
28
|
strings = tuning[:STRINGS]
|
|
201
29
|
number_of_strings = strings.size
|
|
202
30
|
|
|
203
31
|
(1..number_of_strings).each do |string_number|
|
|
204
|
-
# puts
|
|
205
|
-
# puts "String: #{string_number}"
|
|
206
|
-
# puts
|
|
207
|
-
|
|
208
32
|
current_note = strings[string_number][:NOTE]
|
|
209
33
|
|
|
210
34
|
@data[string_number] = {}
|
|
211
|
-
|
|
212
|
-
# puts "Fret: 0 (#{current_note})"
|
|
213
|
-
|
|
214
35
|
@data[string_number][0] = current_note
|
|
215
36
|
|
|
216
37
|
(1..@number_of_frets).each do |fret|
|
|
217
38
|
next_note = Fretboard::Note.next_for(
|
|
218
39
|
current_note,
|
|
219
|
-
sharp_or_flat:
|
|
40
|
+
sharp_or_flat:
|
|
220
41
|
)
|
|
221
42
|
|
|
222
|
-
# puts "Fret: #{fret} (#{next_note})"
|
|
223
|
-
|
|
224
43
|
@data[string_number][fret] = next_note
|
|
225
44
|
|
|
226
45
|
current_note = next_note
|
|
227
46
|
end
|
|
228
47
|
end
|
|
229
48
|
|
|
230
|
-
|
|
231
|
-
# puts 'done'
|
|
49
|
+
self
|
|
232
50
|
end
|
|
233
51
|
|
|
234
|
-
def draw(sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
235
|
-
unless @data.any?
|
|
236
|
-
Fretboard::Console.danger("Build the guitar fretboard data for drawing")
|
|
237
|
-
return
|
|
238
|
-
end
|
|
52
|
+
def draw(sharp_or_flat: @sharp_or_flat || :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
53
|
+
raise Fretboard::Exceptions::NotBuilt unless @data.any?
|
|
239
54
|
|
|
240
55
|
headings = []
|
|
241
56
|
rows = []
|
|
@@ -248,18 +63,7 @@ module Fretboard
|
|
|
248
63
|
|
|
249
64
|
headings << 0
|
|
250
65
|
|
|
251
|
-
open_note = string_notes[0]
|
|
252
|
-
|
|
253
|
-
if open_note.is_a?(Array)
|
|
254
|
-
open_note = case sharp_or_flat
|
|
255
|
-
when :both
|
|
256
|
-
open_note.join("/")
|
|
257
|
-
when :sharp
|
|
258
|
-
open_note.first
|
|
259
|
-
else
|
|
260
|
-
open_note.last
|
|
261
|
-
end
|
|
262
|
-
end
|
|
66
|
+
open_note = Fretboard::NoteFormatter.format(string_notes[0], sharp_or_flat:)
|
|
263
67
|
|
|
264
68
|
row << open_note
|
|
265
69
|
|
data/lib/fretboard/console.rb
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "colorize"
|
|
4
|
-
require "terminal-table"
|
|
5
|
-
|
|
6
3
|
module Fretboard
|
|
7
4
|
class Console
|
|
8
5
|
def self.log(text)
|
|
@@ -23,8 +20,8 @@ module Fretboard
|
|
|
23
20
|
|
|
24
21
|
def self.print_table(headings, rows)
|
|
25
22
|
table = Terminal::Table.new(
|
|
26
|
-
headings
|
|
27
|
-
rows
|
|
23
|
+
headings:,
|
|
24
|
+
rows:,
|
|
28
25
|
style: { border_x: "~", border_i: "~" }
|
|
29
26
|
)
|
|
30
27
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Fretboard
|
|
4
|
+
module Exceptions
|
|
5
|
+
class UnknownTuning < Base
|
|
6
|
+
def initialize(tuning_name = nil)
|
|
7
|
+
message = "Unable to detect guitar tuning"
|
|
8
|
+
message = "#{message}: #{tuning_name}" if tuning_name
|
|
9
|
+
super(message)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
data/lib/fretboard/note.rb
CHANGED
|
@@ -1,38 +1,21 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "fretboard/notes"
|
|
4
|
-
|
|
5
3
|
module Fretboard
|
|
6
4
|
class Note
|
|
7
|
-
|
|
8
|
-
# Fretboard::Note.next_for(['F#', 'Gb'])
|
|
9
|
-
# Fretboard::Note.next_for('F#/Gb')
|
|
10
|
-
|
|
11
|
-
def self.next_for(note, sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength
|
|
5
|
+
def self.next_for(note, sharp_or_flat: :both)
|
|
12
6
|
all_notes = Fretboard::Notes.all(sharp_or_flat)
|
|
13
7
|
|
|
14
|
-
|
|
15
|
-
note = case sharp_or_flat
|
|
16
|
-
when :both
|
|
17
|
-
note.join("/")
|
|
18
|
-
when :sharp
|
|
19
|
-
note.first
|
|
20
|
-
else
|
|
21
|
-
note.last
|
|
22
|
-
end
|
|
23
|
-
end
|
|
8
|
+
note = Fretboard::NoteFormatter.format(note, sharp_or_flat:)
|
|
24
9
|
|
|
25
10
|
current_index = all_notes.find_index(note)
|
|
11
|
+
raise Fretboard::Exceptions::UnknownNote, note if current_index.nil?
|
|
12
|
+
|
|
26
13
|
next_index = current_index + 1
|
|
27
14
|
|
|
28
15
|
next_note = all_notes[next_index]
|
|
29
|
-
next_note = all_notes.first if next_note.
|
|
16
|
+
next_note = all_notes.first if next_note.nil?
|
|
30
17
|
|
|
31
18
|
next_note
|
|
32
19
|
end
|
|
33
|
-
|
|
34
|
-
def initialize(note)
|
|
35
|
-
@note = note
|
|
36
|
-
end
|
|
37
20
|
end
|
|
38
21
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Fretboard
|
|
4
|
+
module NoteFormatter
|
|
5
|
+
def self.format(note, sharp_or_flat: :both)
|
|
6
|
+
return note unless note.is_a?(Array)
|
|
7
|
+
|
|
8
|
+
case sharp_or_flat
|
|
9
|
+
when :both then note.join("/")
|
|
10
|
+
when :sharp then note.first
|
|
11
|
+
else note.last
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/fretboard/notes.rb
CHANGED
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
module Fretboard
|
|
4
4
|
class Notes
|
|
5
|
-
# Fretboard::Notes.all(:both)
|
|
6
|
-
# Fretboard::Notes.all(:sharp)
|
|
7
|
-
# Fretboard::Notes.all(:flat)
|
|
8
|
-
|
|
9
5
|
BASIC_NOTES = {
|
|
10
6
|
1 => "C",
|
|
11
7
|
2 => %w[C# Db],
|
|
@@ -21,22 +17,9 @@ module Fretboard
|
|
|
21
17
|
12 => "B"
|
|
22
18
|
}.freeze
|
|
23
19
|
|
|
24
|
-
def self.all(sharp_or_flat = :sharp)
|
|
20
|
+
def self.all(sharp_or_flat = :sharp)
|
|
25
21
|
BASIC_NOTES.map do |_key, value|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if value.is_a?(Array)
|
|
29
|
-
result = case sharp_or_flat
|
|
30
|
-
when :both
|
|
31
|
-
value.join("/")
|
|
32
|
-
when :sharp
|
|
33
|
-
value.first
|
|
34
|
-
else
|
|
35
|
-
value.last
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
result
|
|
22
|
+
Fretboard::NoteFormatter.format(value, sharp_or_flat:)
|
|
40
23
|
end
|
|
41
24
|
end
|
|
42
25
|
|
data/lib/fretboard/parser.rb
CHANGED
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "active_support/core_ext/object/blank"
|
|
4
|
-
require "active_support/core_ext/hash/except"
|
|
5
|
-
|
|
6
|
-
require "optparse"
|
|
7
|
-
|
|
8
|
-
require "fretboard/builder"
|
|
9
|
-
require "fretboard/console"
|
|
10
|
-
require "fretboard/note"
|
|
11
|
-
require "fretboard/tunings"
|
|
12
|
-
|
|
13
3
|
module Fretboard
|
|
14
4
|
class Parser
|
|
15
5
|
attr_reader :args
|
|
@@ -24,8 +14,10 @@ module Fretboard
|
|
|
24
14
|
|
|
25
15
|
def parse
|
|
26
16
|
parser.parse!(args)
|
|
17
|
+
rescue Fretboard::Exceptions::Base, OptionParser::ParseError => e
|
|
18
|
+
Fretboard::Console.danger(e.message)
|
|
27
19
|
rescue StandardError => e
|
|
28
|
-
Fretboard::Console.danger("
|
|
20
|
+
Fretboard::Console.danger("Unexpected error: #{e.message}")
|
|
29
21
|
end
|
|
30
22
|
|
|
31
23
|
private
|
|
@@ -35,7 +27,7 @@ module Fretboard
|
|
|
35
27
|
opts.banner = "Usage: fretboard [options]"
|
|
36
28
|
|
|
37
29
|
opts.on("-v", "--version", "The current version of the gem") do
|
|
38
|
-
Fretboard::Console.log(Fretboard::VERSION)
|
|
30
|
+
Fretboard::Console.log(Fretboard::VERSION::STRING)
|
|
39
31
|
exit
|
|
40
32
|
end
|
|
41
33
|
|
data/lib/fretboard/tunings.rb
CHANGED
|
@@ -31,9 +31,9 @@ module Fretboard
|
|
|
31
31
|
OPEN_A: {
|
|
32
32
|
STRINGS: {
|
|
33
33
|
1 => { NOTE: "E" },
|
|
34
|
-
2 => { NOTE:
|
|
35
|
-
3 => { NOTE: "
|
|
36
|
-
4 => { NOTE:
|
|
34
|
+
2 => { NOTE: %w[C# Db] },
|
|
35
|
+
3 => { NOTE: "A" },
|
|
36
|
+
4 => { NOTE: "E" },
|
|
37
37
|
5 => { NOTE: "A" },
|
|
38
38
|
6 => { NOTE: "E" }
|
|
39
39
|
}
|
data/lib/fretboard/version.rb
CHANGED
data/lib/fretboard.rb
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "
|
|
4
|
-
require "active_support/core_ext/hash/except"
|
|
3
|
+
require "zeitwerk"
|
|
5
4
|
|
|
6
|
-
require "
|
|
7
|
-
require "
|
|
8
|
-
require "
|
|
9
|
-
require "fretboard/tunings"
|
|
5
|
+
require "colorize"
|
|
6
|
+
require "optparse"
|
|
7
|
+
require "terminal-table"
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
loader = Zeitwerk::Loader.for_gem
|
|
10
|
+
loader.setup
|
|
11
|
+
|
|
12
|
+
module Fretboard; end
|
|
14
13
|
|
|
15
14
|
require "fretboard/engine" if defined?(Rails::Engine)
|
metadata
CHANGED
|
@@ -1,29 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fretboard
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Anton Sokolov
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: activesupport
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '5.1'
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '5.1'
|
|
27
12
|
- !ruby/object:Gem::Dependency
|
|
28
13
|
name: colorize
|
|
29
14
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -44,28 +29,28 @@ dependencies:
|
|
|
44
29
|
requirements:
|
|
45
30
|
- - ">="
|
|
46
31
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
32
|
+
version: '4.0'
|
|
48
33
|
type: :runtime
|
|
49
34
|
prerelease: false
|
|
50
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
36
|
requirements:
|
|
52
37
|
- - ">="
|
|
53
38
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
39
|
+
version: '4.0'
|
|
55
40
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
41
|
+
name: zeitwerk
|
|
57
42
|
requirement: !ruby/object:Gem::Requirement
|
|
58
43
|
requirements:
|
|
59
44
|
- - ">="
|
|
60
45
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '2.
|
|
62
|
-
type: :
|
|
46
|
+
version: '2.6'
|
|
47
|
+
type: :runtime
|
|
63
48
|
prerelease: false
|
|
64
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
50
|
requirements:
|
|
66
51
|
- - ">="
|
|
67
52
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '2.
|
|
53
|
+
version: '2.6'
|
|
69
54
|
- !ruby/object:Gem::Dependency
|
|
70
55
|
name: rake
|
|
71
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -95,61 +80,19 @@ dependencies:
|
|
|
95
80
|
- !ruby/object:Gem::Version
|
|
96
81
|
version: '3.12'
|
|
97
82
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: rubocop
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - ">="
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '1.57'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - ">="
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '1.57'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: rubocop-performance
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - ">="
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: '1.19'
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - ">="
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '1.19'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: rubocop-rake
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - ">="
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0.6'
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - ">="
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '0.6'
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: rubocop-rspec
|
|
83
|
+
name: servactory-rubocop
|
|
141
84
|
requirement: !ruby/object:Gem::Requirement
|
|
142
85
|
requirements:
|
|
143
86
|
- - ">="
|
|
144
87
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
88
|
+
version: '0.9'
|
|
146
89
|
type: :development
|
|
147
90
|
prerelease: false
|
|
148
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
92
|
requirements:
|
|
150
93
|
- - ">="
|
|
151
94
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '
|
|
95
|
+
version: '0.9'
|
|
153
96
|
description: Tools for working with the guitar fretboard
|
|
154
97
|
email:
|
|
155
98
|
- profox.rus@gmail.com
|
|
@@ -165,7 +108,12 @@ files:
|
|
|
165
108
|
- lib/fretboard/builder.rb
|
|
166
109
|
- lib/fretboard/console.rb
|
|
167
110
|
- lib/fretboard/engine.rb
|
|
111
|
+
- lib/fretboard/exceptions/base.rb
|
|
112
|
+
- lib/fretboard/exceptions/not_built.rb
|
|
113
|
+
- lib/fretboard/exceptions/unknown_note.rb
|
|
114
|
+
- lib/fretboard/exceptions/unknown_tuning.rb
|
|
168
115
|
- lib/fretboard/note.rb
|
|
116
|
+
- lib/fretboard/note_formatter.rb
|
|
169
117
|
- lib/fretboard/notes.rb
|
|
170
118
|
- lib/fretboard/parser.rb
|
|
171
119
|
- lib/fretboard/tunings.rb
|
|
@@ -179,7 +127,6 @@ metadata:
|
|
|
179
127
|
source_code_uri: https://github.com/afuno/fretboard
|
|
180
128
|
bug_tracker_uri: https://github.com/afuno/fretboard/issues
|
|
181
129
|
rubygems_mfa_required: 'true'
|
|
182
|
-
post_install_message:
|
|
183
130
|
rdoc_options: []
|
|
184
131
|
require_paths:
|
|
185
132
|
- lib
|
|
@@ -187,15 +134,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
187
134
|
requirements:
|
|
188
135
|
- - ">="
|
|
189
136
|
- !ruby/object:Gem::Version
|
|
190
|
-
version: 2
|
|
137
|
+
version: '3.2'
|
|
191
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
139
|
requirements:
|
|
193
140
|
- - ">="
|
|
194
141
|
- !ruby/object:Gem::Version
|
|
195
142
|
version: '0'
|
|
196
143
|
requirements: []
|
|
197
|
-
rubygems_version:
|
|
198
|
-
signing_key:
|
|
144
|
+
rubygems_version: 4.0.6
|
|
199
145
|
specification_version: 4
|
|
200
146
|
summary: Tools for working with the guitar fretboard
|
|
201
147
|
test_files: []
|