fretboard 1.4.3 → 1.5.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2aeb1806f3f22ec8707add870368e8485214f99090e6c19c219ae6771d96a9a
4
- data.tar.gz: 6cb78c994692eeb29d30f366a15020114608e2cf3c1f82170ca1fff17be8e630
3
+ metadata.gz: 032557dece35cf1703114d36c92d5c5cd24bff99f3b359423559503630dcd5f6
4
+ data.tar.gz: 622a072b59c2d7f0e232e20032bd454651ffe89a25f5c0efb1686372c9416873
5
5
  SHA512:
6
- metadata.gz: c45b527d086a79808cd21a980ca863446c434825bfb194aaf5a6fd1c17e90d82e121175da5fb797b4e963af96aa4ca98a6395d0c9602db8230c603b777c3da6b
7
- data.tar.gz: 33762c5bea84f8609e430313e7791998ef0c7d430b8f70f1955d3b3ceb671e2bb37fb5d3ada4b32bc86820b6127951a9de58a478d0acc1abb97d709faac7eb4e
6
+ metadata.gz: 37ef216fad26e45060ac600273bc4a078fa677b13231b8aed014814c27bfbad5e15543136593823ab0e2262ee366ab958e982cefb0bfc88e8b3a8fa6294c3a71
7
+ data.tar.gz: 5744d31b2ab94f6307d42e02362c40288744780cd1056fcc1837bbd1225205a8c3bf191beb1f7b88d36c4897d5c1941764a4f790b756fd2e3234c08af495d46a
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Fretboard for Guitar
1
+ # Fretboard
2
2
 
3
3
  Tools for working with the guitar fretboard.
4
4
 
@@ -7,7 +7,7 @@ Tools for working with the guitar fretboard.
7
7
  ## Installation
8
8
 
9
9
  ```ruby
10
- gem 'fretboard'
10
+ gem "fretboard"
11
11
  ```
12
12
 
13
13
  ## Using
@@ -15,12 +15,12 @@ gem 'fretboard'
15
15
  ### Creates a fretboard with the specified tuning
16
16
 
17
17
  ```ruby
18
- fretboard = Fretboard::Builder.new(:standart)
18
+ fretboard = Fretboard::Builder.new(:standard)
19
19
  # or
20
- fretboard = Fretboard::Builder.standart
20
+ fretboard = Fretboard::Builder.standard
21
21
  ```
22
22
 
23
- [Available tunings](#available-tunings)
23
+ [Supported guitar tunings](#supported-guitar-tunings)
24
24
 
25
25
  Creating the fretboard data:
26
26
 
@@ -55,17 +55,80 @@ fretboard.draw
55
55
 
56
56
  ### Using from the console
57
57
 
58
+ #### Drawing the fretboard
59
+
58
60
  ```
59
- bundle exec fretboard --draw-tuning standart
61
+ bundle exec fretboard --draw-tuning standard
60
62
  ```
61
63
 
62
- ## Available tunings
64
+ <details>
65
+ <summary>Result</summary>
66
+
67
+ ```
68
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
69
+ | № | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
70
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
71
+ | 1 | E | F | F#/Gb | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D | D#/Eb | E |
72
+ | 2 | B | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G | G#/Ab | A | A#/Bb | B |
73
+ | 3 | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G |
74
+ | 4 | D | D#/Eb | E | F | F#/Gb | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D |
75
+ | 5 | A | A#/Bb | B | C | C#/Db | D | D#/Eb | E | F | F#/Gb | G | G#/Ab | A |
76
+ | 6 | E | F | F#/Gb | G | G#/Ab | A | A#/Bb | B | C | C#/Db | D | D#/Eb | E |
77
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
78
+ ```
79
+ </details>
80
+
81
+ #### Getting a list of supported guitar tunings
82
+
83
+ ```
84
+ bundle exec fretboard --draw-tuning standard
85
+ ```
86
+
87
+ <details>
88
+ <summary>Result</summary>
89
+
90
+ ```
91
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
92
+ | Tuning | Notes |
93
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
94
+ | STANDARD | E, B, G, D, A, E |
95
+ | TUNING_A | A, E, C, G, D, A |
96
+ | OPEN_A | E, A, E, C#/Db, A, E |
97
+ | DROP_A | B, F#/Gb, D, A, E, A |
98
+ | DROP_A_SHARP | C, G, D#/Eb, A#/Bb, F, A#/Bb |
99
+ | DROP_A_FLAT | A#/Bb, F, C#/Db, G#/Ab, D#/Eb, G#/Ab |
100
+ | TUNING_B | B, F#/Gb, D, A, E, B |
101
+ | OPEN_B | D#/Eb, B, F#/Gb, B, F#/Gb, B |
102
+ | DROP_B | C#/Db, G#/Ab, E, B, F#/Gb, B |
103
+ | DROP_B_FLAT | C, G, D#/Eb, A#/Bb, F, A#/Bb |
104
+ | TUNING_C | C, G, D#/Eb, A#/Bb, F, C |
105
+ | OPEN_C | E, C, G, C, G, C |
106
+ | DROP_C | D, A, F, C, G, C |
107
+ | TUNING_D | D, A, F, C, G, D |
108
+ | OPEN_D | D, A, F#/Gb, D, A, D |
109
+ | OPEN_D_MINOR | D, A, F, D, A, D |
110
+ | DROP_D | E, B, G, D, A, D |
111
+ | DOUBLE_DROP_D | D, B, G, D, A, D |
112
+ | MODAL_D | D, A, G, D, A, D |
113
+ | OPEN_E | E, B, G#/Ab, E, B, E |
114
+ | TUNING_F | F, C, G#/Ab, D#/Eb, A#/Bb, F |
115
+ | TUNING_G | G, D, A#/Bb, F, C, G |
116
+ | OPEN_F | F, C, F, C, A, F |
117
+ | OPEN_G | D, B, G, D, G, D |
118
+ | OPEN_G_MINOR | D, A#/Bb, G, D, G, D |
119
+ | DROP_G_SHARP | A#/Bb, F, C#/Db, G#/Ab, D#/Eb, G#/Ab |
120
+ | MODAL_G | D, C, G, D, G, D |
121
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
122
+ ```
123
+ </details>
124
+
125
+ ## Supported guitar tunings
63
126
 
64
127
  <details>
65
- <summary>Standart (standart)</summary>
128
+ <summary>Standard (standard)</summary>
66
129
 
67
130
  ```
68
- bundle exec fretboard --draw-tuning standart
131
+ bundle exec fretboard --draw-tuning standard
69
132
  ```
70
133
 
71
134
  ```
data/bin/fretboard CHANGED
@@ -1,14 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- unless File.exist?('./Gemfile')
5
- abort 'Please run fretboard from the root of the project'
6
- end
4
+ abort "Please run fretboard from the root of the project" unless File.exist?("./Gemfile")
7
5
 
8
- require 'rubygems'
6
+ require "rubygems"
9
7
 
10
8
  begin
11
- require 'bundler'
9
+ require "bundler"
12
10
  Bundler.setup
13
11
  rescue StandardError
14
12
  # ...
@@ -16,6 +14,6 @@ end
16
14
 
17
15
  $LOAD_PATH << "#{__dir__}/../lib"
18
16
 
19
- require 'fretboard/parser'
17
+ require "fretboard/parser"
20
18
 
21
19
  Fretboard::Parser.parse(ARGV)
@@ -2,12 +2,12 @@
2
2
 
3
3
  # require 'active_support/core_ext/hash'
4
4
 
5
- require 'fretboard/console'
5
+ require "fretboard/console"
6
6
 
7
7
  module Fretboard
8
- class Builder # rubocop:disable Style/Documentation, Metrics/ClassLength
9
- # fretboard = Fretboard::Builder.new(:standart)
10
- # fretboard = Fretboard::Builder.standart
8
+ class Builder # rubocop:disable Metrics/ClassLength
9
+ # fretboard = Fretboard::Builder.new(:standard)
10
+ # fretboard = Fretboard::Builder.standard
11
11
  # fretboard = Fretboard::Builder.tuning_a
12
12
  # fretboard = Fretboard::Builder.open_a
13
13
  # fretboard = Fretboard::Builder.drop_a
@@ -42,7 +42,7 @@ module Fretboard
42
42
  DEFAULT_NUMBER_OF_FRETS = 12
43
43
 
44
44
  # METHODS_NAMES = %i[
45
- # standart
45
+ # standard
46
46
  # tuning_a
47
47
  # open_a
48
48
  # drop_a
@@ -79,8 +79,8 @@ module Fretboard
79
79
  # end
80
80
  # end
81
81
 
82
- def self.standart(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
83
- new(:standart, number_of_frets)
82
+ def self.standard(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
83
+ new(:standard, number_of_frets)
84
84
  end
85
85
 
86
86
  def self.tuning_a(number_of_frets = DEFAULT_NUMBER_OF_FRETS)
@@ -196,24 +196,24 @@ module Fretboard
196
196
 
197
197
  def build(sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
198
198
  unless Fretboard::Tunings.exists?(@tuning)
199
- Fretboard::Console.danger('Unable to detect guitar tuning')
199
+ Fretboard::Console.danger("Unable to detect guitar tuning")
200
200
  return
201
201
  end
202
202
 
203
- tuning = Fretboard::Tunings.get(@tuning)
203
+ tuning = Fretboard::Tunings.fetch(@tuning)
204
204
  strings = tuning[:STRINGS]
205
205
  number_of_strings = strings.size
206
206
 
207
207
  (1..number_of_strings).each do |string_number|
208
- puts
209
- puts "String: #{string_number}"
210
- puts
208
+ # puts
209
+ # puts "String: #{string_number}"
210
+ # puts
211
211
 
212
212
  current_note = strings[string_number][:NOTE]
213
213
 
214
214
  @data[string_number] = {}
215
215
 
216
- puts "Fret: 0 (#{current_note})"
216
+ # puts "Fret: 0 (#{current_note})"
217
217
 
218
218
  @data[string_number][0] = current_note
219
219
 
@@ -223,7 +223,7 @@ module Fretboard
223
223
  sharp_or_flat: sharp_or_flat
224
224
  )
225
225
 
226
- puts "Fret: #{fret} (#{next_note})"
226
+ # puts "Fret: #{fret} (#{next_note})"
227
227
 
228
228
  @data[string_number][fret] = next_note
229
229
 
@@ -231,13 +231,13 @@ module Fretboard
231
231
  end
232
232
  end
233
233
 
234
- puts
235
- puts 'done'
234
+ # puts
235
+ # puts 'done'
236
236
  end
237
237
 
238
238
  def draw(sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
239
239
  unless @data.any?
240
- Fretboard::Console.danger('Create the data')
240
+ Fretboard::Console.danger("Build the guitar fretboard data for drawing")
241
241
  return
242
242
  end
243
243
 
@@ -247,7 +247,7 @@ module Fretboard
247
247
  @data.each_pair do |string_number, string_notes|
248
248
  row = []
249
249
 
250
- headings << ''
250
+ headings << ""
251
251
  row << string_number
252
252
 
253
253
  headings << 0
@@ -257,7 +257,7 @@ module Fretboard
257
257
  if open_note.is_a?(Array)
258
258
  open_note = case sharp_or_flat
259
259
  when :both
260
- open_note.join('/')
260
+ open_note.join("/")
261
261
  when :sharp
262
262
  open_note.first
263
263
  else
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'colorize'
4
- require 'terminal-table'
3
+ require "colorize"
4
+ require "terminal-table"
5
5
 
6
6
  module Fretboard
7
- class Console # rubocop:disable Style/Documentation
7
+ class Console
8
8
  def self.log(text)
9
9
  new(text, nil).print
10
10
  end
@@ -25,7 +25,7 @@ module Fretboard
25
25
  table = Terminal::Table.new(
26
26
  headings: headings,
27
27
  rows: rows,
28
- style: { border_x: '~', border_i: '~' }
28
+ style: { border_x: "~", border_i: "~" }
29
29
  )
30
30
 
31
31
  new(table.to_s, nil).print
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fretboard/notes'
3
+ require "fretboard/notes"
4
4
 
5
5
  module Fretboard
6
- class Note # rubocop:disable Style/Documentation
6
+ class Note
7
7
  # Fretboard::Note.next_for('C')
8
8
  # Fretboard::Note.next_for(['F#', 'Gb'])
9
9
  # Fretboard::Note.next_for('F#/Gb')
@@ -14,7 +14,7 @@ module Fretboard
14
14
  if note.is_a?(Array)
15
15
  note = case sharp_or_flat
16
16
  when :both
17
- note.join('/')
17
+ note.join("/")
18
18
  when :sharp
19
19
  note.first
20
20
  else
@@ -1,34 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fretboard
4
- class Notes # rubocop:disable Style/Documentation
4
+ class Notes
5
5
  # Fretboard::Notes.all(:both)
6
6
  # Fretboard::Notes.all(:sharp)
7
7
  # Fretboard::Notes.all(:flat)
8
8
 
9
- BASIS_NOTES = {
10
- 1 => 'C',
11
- 2 => ['C#', 'Db'],
12
- 3 => 'D',
13
- 4 => ['D#', 'Eb'],
14
- 5 => 'E',
15
- 6 => 'F',
16
- 7 => ['F#', 'Gb'],
17
- 8 => 'G',
18
- 9 => ['G#', 'Ab'],
19
- 10 => 'A',
20
- 11 => ['A#', 'Bb'],
21
- 12 => 'B'
9
+ BASIC_NOTES = {
10
+ 1 => "C",
11
+ 2 => %w[C# Db],
12
+ 3 => "D",
13
+ 4 => %w[D# Eb],
14
+ 5 => "E",
15
+ 6 => "F",
16
+ 7 => %w[F# Gb],
17
+ 8 => "G",
18
+ 9 => %w[G# Ab],
19
+ 10 => "A",
20
+ 11 => %w[A# Bb],
21
+ 12 => "B"
22
22
  }.freeze
23
23
 
24
24
  def self.all(sharp_or_flat = :sharp) # rubocop:disable Metrics/MethodLength
25
- BASIS_NOTES.map do |_key, value|
25
+ BASIC_NOTES.map do |_key, value|
26
26
  result = value
27
27
 
28
28
  if value.is_a?(Array)
29
29
  result = case sharp_or_flat
30
30
  when :both
31
- value.join('/')
31
+ value.join("/")
32
32
  when :sharp
33
33
  value.first
34
34
  else
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/core_ext/object/blank'
4
- require 'optparse'
3
+ require "active_support/core_ext/object/blank"
4
+ require "optparse"
5
5
 
6
- require 'fretboard/builder'
7
- require 'fretboard/console'
8
- require 'fretboard/note'
9
- require 'fretboard/tunings'
6
+ require "fretboard/builder"
7
+ require "fretboard/console"
8
+ require "fretboard/note"
9
+ require "fretboard/tunings"
10
10
 
11
11
  module Fretboard
12
- class Parser # rubocop:disable Style/Documentation
12
+ class Parser
13
13
  attr_reader :args
14
14
 
15
15
  def self.parse(args)
@@ -30,23 +30,27 @@ module Fretboard
30
30
 
31
31
  def parser # rubocop:disable Metrics/MethodLength
32
32
  OptionParser.new do |opts|
33
- opts.banner = 'Usage: fretboard [options]'
33
+ opts.banner = "Usage: fretboard [options]"
34
34
 
35
- opts.on('-v', '--version', 'The current version of the gem') do
35
+ opts.on("-v", "--version", "The current version of the gem") do
36
36
  Fretboard::Console.log(Fretboard::VERSION)
37
37
  exit
38
38
  end
39
39
 
40
- opts.on('-h', '--help', 'Prints this help') do
40
+ opts.on("-h", "--help", "Prints this help") do
41
41
  Fretboard::Console.log(opts.to_s)
42
42
  exit
43
43
  end
44
44
 
45
- opts.on('--draw-tuning CODE', 'Build a guitar tuning') do |code|
45
+ opts.on("-d", "--draw-tuning CODE", "Build a guitar tuning") do |code|
46
46
  fretboard = Fretboard::Builder.new(code.to_sym)
47
47
  fretboard.build
48
48
  fretboard.draw
49
49
  end
50
+
51
+ opts.on("-l", "--tunings-list", "List of supported guitar tunings") do
52
+ Fretboard::Tunings.draw_list
53
+ end
50
54
  end
51
55
  end
52
56
  end
@@ -1,311 +1,345 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fretboard
4
- class Tunings # rubocop:disable Style/Documentation, Metrics/ClassLength
5
- # Fretboard::Tunings.get(:standart)
6
- # Fretboard::Tunings.exists?(:standart)
4
+ class Tunings # rubocop:disable Metrics/ClassLength
5
+ # Fretboard::Tunings.fetch(:standard)
6
+ # Fretboard::Tunings.exists?(:standard)
7
7
 
8
8
  TUNINGS = {
9
- STANDART: {
9
+ STANDARD: {
10
10
  STRINGS: {
11
- 1 => { NOTE: 'E' },
12
- 2 => { NOTE: 'B' },
13
- 3 => { NOTE: 'G' },
14
- 4 => { NOTE: 'D' },
15
- 5 => { NOTE: 'A' },
16
- 6 => { NOTE: 'E' }
11
+ 1 => { NOTE: "E" },
12
+ 2 => { NOTE: "B" },
13
+ 3 => { NOTE: "G" },
14
+ 4 => { NOTE: "D" },
15
+ 5 => { NOTE: "A" },
16
+ 6 => { NOTE: "E" }
17
17
  }
18
18
  },
19
19
 
20
20
  TUNING_A: {
21
21
  STRINGS: {
22
- 1 => { NOTE: 'A' },
23
- 2 => { NOTE: 'E' },
24
- 3 => { NOTE: 'C' },
25
- 4 => { NOTE: 'G' },
26
- 5 => { NOTE: 'D' },
27
- 6 => { NOTE: 'A' }
22
+ 1 => { NOTE: "A" },
23
+ 2 => { NOTE: "E" },
24
+ 3 => { NOTE: "C" },
25
+ 4 => { NOTE: "G" },
26
+ 5 => { NOTE: "D" },
27
+ 6 => { NOTE: "A" }
28
28
  }
29
29
  },
30
30
 
31
31
  OPEN_A: {
32
32
  STRINGS: {
33
- 1 => { NOTE: 'E' },
34
- 2 => { NOTE: 'A' },
35
- 3 => { NOTE: 'E' },
36
- 4 => { NOTE: ['C#', 'Db'] },
37
- 5 => { NOTE: 'A' },
38
- 6 => { NOTE: 'E' }
33
+ 1 => { NOTE: "E" },
34
+ 2 => { NOTE: "A" },
35
+ 3 => { NOTE: "E" },
36
+ 4 => { NOTE: %w[C# Db] },
37
+ 5 => { NOTE: "A" },
38
+ 6 => { NOTE: "E" }
39
39
  }
40
40
  },
41
41
 
42
42
  DROP_A: {
43
43
  STRINGS: {
44
- 1 => { NOTE: 'B' },
45
- 2 => { NOTE: ['F#', 'Gb'] },
46
- 3 => { NOTE: 'D' },
47
- 4 => { NOTE: 'A' },
48
- 5 => { NOTE: 'E' },
49
- 6 => { NOTE: 'A' }
44
+ 1 => { NOTE: "B" },
45
+ 2 => { NOTE: %w[F# Gb] },
46
+ 3 => { NOTE: "D" },
47
+ 4 => { NOTE: "A" },
48
+ 5 => { NOTE: "E" },
49
+ 6 => { NOTE: "A" }
50
50
  }
51
51
  },
52
52
 
53
53
  DROP_A_SHARP: {
54
54
  STRINGS: {
55
- 1 => { NOTE: 'C' },
56
- 2 => { NOTE: 'G' },
57
- 3 => { NOTE: ['D#', 'Eb'] },
58
- 4 => { NOTE: ['A#', 'Bb'] },
59
- 5 => { NOTE: 'F' },
60
- 6 => { NOTE: ['A#', 'Bb'] }
55
+ 1 => { NOTE: "C" },
56
+ 2 => { NOTE: "G" },
57
+ 3 => { NOTE: %w[D# Eb] },
58
+ 4 => { NOTE: %w[A# Bb] },
59
+ 5 => { NOTE: "F" },
60
+ 6 => { NOTE: %w[A# Bb] }
61
61
  }
62
62
  },
63
63
 
64
64
  DROP_A_FLAT: {
65
65
  STRINGS: {
66
- 1 => { NOTE: ['A#', 'Bb'] },
67
- 2 => { NOTE: 'F' },
68
- 3 => { NOTE: ['C#', 'Db'] },
69
- 4 => { NOTE: ['G#', 'Ab'] },
70
- 5 => { NOTE: ['D#', 'Eb'] },
71
- 6 => { NOTE: ['G#', 'Ab'] }
66
+ 1 => { NOTE: %w[A# Bb] },
67
+ 2 => { NOTE: "F" },
68
+ 3 => { NOTE: %w[C# Db] },
69
+ 4 => { NOTE: %w[G# Ab] },
70
+ 5 => { NOTE: %w[D# Eb] },
71
+ 6 => { NOTE: %w[G# Ab] }
72
72
  }
73
73
  },
74
74
 
75
75
  TUNING_B: {
76
76
  STRINGS: {
77
- 1 => { NOTE: 'B' },
78
- 2 => { NOTE: ['F#', 'Gb'] },
79
- 3 => { NOTE: 'D' },
80
- 4 => { NOTE: 'A' },
81
- 5 => { NOTE: 'E' },
82
- 6 => { NOTE: 'B' }
77
+ 1 => { NOTE: "B" },
78
+ 2 => { NOTE: %w[F# Gb] },
79
+ 3 => { NOTE: "D" },
80
+ 4 => { NOTE: "A" },
81
+ 5 => { NOTE: "E" },
82
+ 6 => { NOTE: "B" }
83
83
  }
84
84
  },
85
85
 
86
86
  OPEN_B: {
87
87
  STRINGS: {
88
- 1 => { NOTE: ['D#', 'Eb'] },
89
- 2 => { NOTE: 'B' },
90
- 3 => { NOTE: ['F#', 'Gb'] },
91
- 4 => { NOTE: 'B' },
92
- 5 => { NOTE: ['F#', 'Gb'] },
93
- 6 => { NOTE: 'B' }
88
+ 1 => { NOTE: %w[D# Eb] },
89
+ 2 => { NOTE: "B" },
90
+ 3 => { NOTE: %w[F# Gb] },
91
+ 4 => { NOTE: "B" },
92
+ 5 => { NOTE: %w[F# Gb] },
93
+ 6 => { NOTE: "B" }
94
94
  }
95
95
  },
96
96
 
97
97
  DROP_B: {
98
98
  STRINGS: {
99
- 1 => { NOTE: ['C#', 'Db'] },
100
- 2 => { NOTE: ['G#', 'Ab'] },
101
- 3 => { NOTE: 'E' },
102
- 4 => { NOTE: 'B' },
103
- 5 => { NOTE: ['F#', 'Gb'] },
104
- 6 => { NOTE: 'B' }
99
+ 1 => { NOTE: %w[C# Db] },
100
+ 2 => { NOTE: %w[G# Ab] },
101
+ 3 => { NOTE: "E" },
102
+ 4 => { NOTE: "B" },
103
+ 5 => { NOTE: %w[F# Gb] },
104
+ 6 => { NOTE: "B" }
105
105
  }
106
106
  },
107
107
 
108
108
  DROP_B_FLAT: {
109
109
  STRINGS: {
110
- 1 => { NOTE: 'C' },
111
- 2 => { NOTE: 'G' },
112
- 3 => { NOTE: ['D#', 'Eb'] },
113
- 4 => { NOTE: ['A#', 'Bb'] },
114
- 5 => { NOTE: 'F' },
115
- 6 => { NOTE: ['A#', 'Bb'] }
110
+ 1 => { NOTE: "C" },
111
+ 2 => { NOTE: "G" },
112
+ 3 => { NOTE: %w[D# Eb] },
113
+ 4 => { NOTE: %w[A# Bb] },
114
+ 5 => { NOTE: "F" },
115
+ 6 => { NOTE: %w[A# Bb] }
116
116
  }
117
117
  },
118
118
 
119
119
  TUNING_C: {
120
120
  STRINGS: {
121
- 1 => { NOTE: 'C' },
122
- 2 => { NOTE: 'G' },
123
- 3 => { NOTE: ['D#', 'Eb'] },
124
- 4 => { NOTE: ['A#', 'Bb'] },
125
- 5 => { NOTE: 'F' },
126
- 6 => { NOTE: 'C' }
121
+ 1 => { NOTE: "C" },
122
+ 2 => { NOTE: "G" },
123
+ 3 => { NOTE: %w[D# Eb] },
124
+ 4 => { NOTE: %w[A# Bb] },
125
+ 5 => { NOTE: "F" },
126
+ 6 => { NOTE: "C" }
127
127
  }
128
128
  },
129
129
 
130
130
  OPEN_C: {
131
131
  STRINGS: {
132
- 1 => { NOTE: 'E' },
133
- 2 => { NOTE: 'C' },
134
- 3 => { NOTE: 'G' },
135
- 4 => { NOTE: 'C' },
136
- 5 => { NOTE: 'G' },
137
- 6 => { NOTE: 'C' }
132
+ 1 => { NOTE: "E" },
133
+ 2 => { NOTE: "C" },
134
+ 3 => { NOTE: "G" },
135
+ 4 => { NOTE: "C" },
136
+ 5 => { NOTE: "G" },
137
+ 6 => { NOTE: "C" }
138
138
  }
139
139
  },
140
140
 
141
141
  DROP_C: {
142
142
  STRINGS: {
143
- 1 => { NOTE: 'D' },
144
- 2 => { NOTE: 'A' },
145
- 3 => { NOTE: 'F' },
146
- 4 => { NOTE: 'C' },
147
- 5 => { NOTE: 'G' },
148
- 6 => { NOTE: 'C' }
143
+ 1 => { NOTE: "D" },
144
+ 2 => { NOTE: "A" },
145
+ 3 => { NOTE: "F" },
146
+ 4 => { NOTE: "C" },
147
+ 5 => { NOTE: "G" },
148
+ 6 => { NOTE: "C" }
149
149
  }
150
150
  },
151
151
 
152
152
  TUNING_D: {
153
153
  STRINGS: {
154
- 1 => { NOTE: 'D' },
155
- 2 => { NOTE: 'A' },
156
- 3 => { NOTE: 'F' },
157
- 4 => { NOTE: 'C' },
158
- 5 => { NOTE: 'G' },
159
- 6 => { NOTE: 'D' }
154
+ 1 => { NOTE: "D" },
155
+ 2 => { NOTE: "A" },
156
+ 3 => { NOTE: "F" },
157
+ 4 => { NOTE: "C" },
158
+ 5 => { NOTE: "G" },
159
+ 6 => { NOTE: "D" }
160
160
  }
161
161
  },
162
162
 
163
163
  OPEN_D: {
164
164
  STRINGS: {
165
- 1 => { NOTE: 'D' },
166
- 2 => { NOTE: 'A' },
167
- 3 => { NOTE: ['F#', 'Gb'] },
168
- 4 => { NOTE: 'D' },
169
- 5 => { NOTE: 'A' },
170
- 6 => { NOTE: 'D' }
165
+ 1 => { NOTE: "D" },
166
+ 2 => { NOTE: "A" },
167
+ 3 => { NOTE: %w[F# Gb] },
168
+ 4 => { NOTE: "D" },
169
+ 5 => { NOTE: "A" },
170
+ 6 => { NOTE: "D" }
171
171
  }
172
172
  },
173
173
 
174
174
  OPEN_D_MINOR: {
175
175
  STRINGS: {
176
- 1 => { NOTE: 'D' },
177
- 2 => { NOTE: 'A' },
178
- 3 => { NOTE: 'F' },
179
- 4 => { NOTE: 'D' },
180
- 5 => { NOTE: 'A' },
181
- 6 => { NOTE: 'D' }
176
+ 1 => { NOTE: "D" },
177
+ 2 => { NOTE: "A" },
178
+ 3 => { NOTE: "F" },
179
+ 4 => { NOTE: "D" },
180
+ 5 => { NOTE: "A" },
181
+ 6 => { NOTE: "D" }
182
182
  }
183
183
  },
184
184
 
185
185
  DROP_D: {
186
186
  STRINGS: {
187
- 1 => { NOTE: 'E' },
188
- 2 => { NOTE: 'B' },
189
- 3 => { NOTE: 'G' },
190
- 4 => { NOTE: 'D' },
191
- 5 => { NOTE: 'A' },
192
- 6 => { NOTE: 'D' }
187
+ 1 => { NOTE: "E" },
188
+ 2 => { NOTE: "B" },
189
+ 3 => { NOTE: "G" },
190
+ 4 => { NOTE: "D" },
191
+ 5 => { NOTE: "A" },
192
+ 6 => { NOTE: "D" }
193
193
  }
194
194
  },
195
195
 
196
196
  DOUBLE_DROP_D: {
197
197
  STRINGS: {
198
- 1 => { NOTE: 'D' },
199
- 2 => { NOTE: 'B' },
200
- 3 => { NOTE: 'G' },
201
- 4 => { NOTE: 'D' },
202
- 5 => { NOTE: 'A' },
203
- 6 => { NOTE: 'D' }
198
+ 1 => { NOTE: "D" },
199
+ 2 => { NOTE: "B" },
200
+ 3 => { NOTE: "G" },
201
+ 4 => { NOTE: "D" },
202
+ 5 => { NOTE: "A" },
203
+ 6 => { NOTE: "D" }
204
204
  }
205
205
  },
206
206
 
207
207
  MODAL_D: {
208
208
  STRINGS: {
209
- 1 => { NOTE: 'D' },
210
- 2 => { NOTE: 'A' },
211
- 3 => { NOTE: 'G' },
212
- 4 => { NOTE: 'D' },
213
- 5 => { NOTE: 'A' },
214
- 6 => { NOTE: 'D' }
209
+ 1 => { NOTE: "D" },
210
+ 2 => { NOTE: "A" },
211
+ 3 => { NOTE: "G" },
212
+ 4 => { NOTE: "D" },
213
+ 5 => { NOTE: "A" },
214
+ 6 => { NOTE: "D" }
215
215
  }
216
216
  },
217
217
 
218
218
  OPEN_E: {
219
219
  STRINGS: {
220
- 1 => { NOTE: 'E' },
221
- 2 => { NOTE: 'B' },
222
- 3 => { NOTE: ['G#', 'Ab'] },
223
- 4 => { NOTE: 'E' },
224
- 5 => { NOTE: 'B' },
225
- 6 => { NOTE: 'E' }
220
+ 1 => { NOTE: "E" },
221
+ 2 => { NOTE: "B" },
222
+ 3 => { NOTE: %w[G# Ab] },
223
+ 4 => { NOTE: "E" },
224
+ 5 => { NOTE: "B" },
225
+ 6 => { NOTE: "E" }
226
226
  }
227
227
  },
228
228
 
229
229
  TUNING_F: {
230
230
  STRINGS: {
231
- 1 => { NOTE: 'F' },
232
- 2 => { NOTE: 'C' },
233
- 3 => { NOTE: ['G#', 'Ab'] },
234
- 4 => { NOTE: ['D#', 'Eb'] },
235
- 5 => { NOTE: ['A#', 'Bb'] },
236
- 6 => { NOTE: 'F' }
231
+ 1 => { NOTE: "F" },
232
+ 2 => { NOTE: "C" },
233
+ 3 => { NOTE: %w[G# Ab] },
234
+ 4 => { NOTE: %w[D# Eb] },
235
+ 5 => { NOTE: %w[A# Bb] },
236
+ 6 => { NOTE: "F" }
237
237
  }
238
238
  },
239
239
 
240
240
  TUNING_G: {
241
241
  STRINGS: {
242
- 1 => { NOTE: 'G' },
243
- 2 => { NOTE: 'D' },
244
- 3 => { NOTE: ['A#', 'Bb'] },
245
- 4 => { NOTE: 'F' },
246
- 5 => { NOTE: 'C' },
247
- 6 => { NOTE: 'G' }
242
+ 1 => { NOTE: "G" },
243
+ 2 => { NOTE: "D" },
244
+ 3 => { NOTE: %w[A# Bb] },
245
+ 4 => { NOTE: "F" },
246
+ 5 => { NOTE: "C" },
247
+ 6 => { NOTE: "G" }
248
248
  }
249
249
  },
250
250
 
251
251
  OPEN_F: {
252
252
  STRINGS: {
253
- 1 => { NOTE: 'F' },
254
- 2 => { NOTE: 'C' },
255
- 3 => { NOTE: 'F' },
256
- 4 => { NOTE: 'C' },
257
- 5 => { NOTE: 'A' },
258
- 6 => { NOTE: 'F' }
253
+ 1 => { NOTE: "F" },
254
+ 2 => { NOTE: "C" },
255
+ 3 => { NOTE: "F" },
256
+ 4 => { NOTE: "C" },
257
+ 5 => { NOTE: "A" },
258
+ 6 => { NOTE: "F" }
259
259
  }
260
260
  },
261
261
 
262
262
  OPEN_G: {
263
263
  STRINGS: {
264
- 1 => { NOTE: 'D' },
265
- 2 => { NOTE: 'B' },
266
- 3 => { NOTE: 'G' },
267
- 4 => { NOTE: 'D' },
268
- 5 => { NOTE: 'G' },
269
- 6 => { NOTE: 'D' }
264
+ 1 => { NOTE: "D" },
265
+ 2 => { NOTE: "B" },
266
+ 3 => { NOTE: "G" },
267
+ 4 => { NOTE: "D" },
268
+ 5 => { NOTE: "G" },
269
+ 6 => { NOTE: "D" }
270
270
  }
271
271
  },
272
272
 
273
273
  OPEN_G_MINOR: {
274
274
  STRINGS: {
275
- 1 => { NOTE: 'D' },
276
- 2 => { NOTE: ['A#', 'Bb'] },
277
- 3 => { NOTE: 'G' },
278
- 4 => { NOTE: 'D' },
279
- 5 => { NOTE: 'G' },
280
- 6 => { NOTE: 'D' }
275
+ 1 => { NOTE: "D" },
276
+ 2 => { NOTE: %w[A# Bb] },
277
+ 3 => { NOTE: "G" },
278
+ 4 => { NOTE: "D" },
279
+ 5 => { NOTE: "G" },
280
+ 6 => { NOTE: "D" }
281
281
  }
282
282
  },
283
283
 
284
284
  DROP_G_SHARP: {
285
285
  STRINGS: {
286
- 1 => { NOTE: ['A#', 'Bb'] },
287
- 2 => { NOTE: 'F' },
288
- 3 => { NOTE: ['C#', 'Db'] },
289
- 4 => { NOTE: ['G#', 'Ab'] },
290
- 5 => { NOTE: ['D#', 'Eb'] },
291
- 6 => { NOTE: ['G#', 'Ab'] }
286
+ 1 => { NOTE: %w[A# Bb] },
287
+ 2 => { NOTE: "F" },
288
+ 3 => { NOTE: %w[C# Db] },
289
+ 4 => { NOTE: %w[G# Ab] },
290
+ 5 => { NOTE: %w[D# Eb] },
291
+ 6 => { NOTE: %w[G# Ab] }
292
292
  }
293
293
  },
294
294
 
295
295
  MODAL_G: {
296
296
  STRINGS: {
297
- 1 => { NOTE: 'D' },
298
- 2 => { NOTE: 'C' },
299
- 3 => { NOTE: 'G' },
300
- 4 => { NOTE: 'D' },
301
- 5 => { NOTE: 'G' },
302
- 6 => { NOTE: 'D' }
297
+ 1 => { NOTE: "D" },
298
+ 2 => { NOTE: "C" },
299
+ 3 => { NOTE: "G" },
300
+ 4 => { NOTE: "D" },
301
+ 5 => { NOTE: "G" },
302
+ 6 => { NOTE: "D" }
303
303
  }
304
304
  }
305
305
  }.freeze
306
306
 
307
- def self.get(tuning_name)
308
- new(tuning_name).get
307
+ private_constant :TUNINGS
308
+
309
+ def self.list
310
+ TUNINGS
311
+ end
312
+
313
+ def self.draw_list # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
314
+ headings = []
315
+ rows = []
316
+
317
+ headings << "Tuning"
318
+ headings << "Notes"
319
+
320
+ list.each do |tuning_code, tuning_data|
321
+ row = []
322
+
323
+ row << tuning_code
324
+
325
+ prepared_string_notes = tuning_data[:STRINGS].map do |_string_number, string_notes|
326
+ note = string_notes[:NOTE]
327
+
328
+ note.is_a?(Array) ? note.join("/") : note
329
+ end.join(", ")
330
+
331
+ row << prepared_string_notes
332
+
333
+ rows << row
334
+ end
335
+
336
+ Fretboard::Console.print_table(headings.uniq, rows)
337
+
338
+ nil
339
+ end
340
+
341
+ def self.fetch(tuning_name)
342
+ new(tuning_name).fetch
309
343
  end
310
344
 
311
345
  def self.exists?(tuning_name)
@@ -316,7 +350,7 @@ module Fretboard
316
350
  @tuning_name = tuning_name.upcase.to_sym
317
351
  end
318
352
 
319
- def get
353
+ def fetch
320
354
  TUNINGS[@tuning_name]
321
355
  end
322
356
 
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fretboard
4
- MAJOR = 1
5
- MINOR = 4
6
- PATCH = 3
4
+ module VERSION
5
+ MAJOR = 1
6
+ MINOR = 5
7
+ PATCH = 1
7
8
 
8
- VERSION = [
9
- MAJOR,
10
- MINOR,
11
- PATCH
12
- ].join('.')
9
+ STRING = [MAJOR, MINOR, PATCH].join(".")
10
+ end
13
11
  end
data/lib/fretboard.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fretboard/builder'
3
+ require "fretboard/builder"
4
4
  # require 'fretboard/constants'
5
- require 'fretboard/note'
6
- require 'fretboard/notes'
7
- require 'fretboard/tunings'
5
+ require "fretboard/note"
6
+ require "fretboard/notes"
7
+ require "fretboard/tunings"
8
8
 
9
9
  module Fretboard
10
10
  # extend Constants
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fretboard
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Sokolov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-20 00:00:00.000000000 Z
11
+ date: 2023-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,69 +16,80 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 7.0.3
19
+ version: '7.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 7.0.3
26
+ version: '7.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: colorize
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.8.1
33
+ version: '0.8'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.8.1
40
+ version: '0.8'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: terminal-table
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 3.0.1
47
+ version: '3.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 3.0.1
54
+ version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.29.1
61
+ version: '1.50'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.29.1
68
+ version: '1.50'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-performance
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.17'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.17'
69
83
  description: Tools for working with the guitar fretboard
70
84
  email:
71
- - anton@sokolov.digital
85
+ - profox.rus@gmail.com
72
86
  executables:
73
87
  - fretboard
74
88
  extensions: []
75
89
  extra_rdoc_files: []
76
90
  files:
77
- - LICENSE.md
78
91
  - README.md
79
- - RELEASE.md
80
92
  - bin/fretboard
81
- - fretboard.gemspec
82
93
  - lib/fretboard.rb
83
94
  - lib/fretboard/builder.rb
84
95
  - lib/fretboard/console.rb
@@ -91,7 +102,12 @@ files:
91
102
  homepage: https://github.com/afuno/fretboard
92
103
  licenses:
93
104
  - MIT
94
- metadata: {}
105
+ metadata:
106
+ homepage_uri: https://github.com/afuno/fretboard
107
+ documentation_uri: https://github.com/afuno/fretboard
108
+ source_code_uri: https://github.com/afuno/fretboard
109
+ bug_tracker_uri: https://github.com/afuno/fretboard/issues
110
+ rubygems_mfa_required: 'true'
95
111
  post_install_message:
96
112
  rdoc_options: []
97
113
  require_paths:
@@ -100,7 +116,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
100
116
  requirements:
101
117
  - - ">="
102
118
  - !ruby/object:Gem::Version
103
- version: 3.1.0
119
+ version: 2.7.0
104
120
  required_rubygems_version: !ruby/object:Gem::Requirement
105
121
  requirements:
106
122
  - - ">="
data/LICENSE.md DELETED
@@ -1,21 +0,0 @@
1
- # MIT LICENSE
2
-
3
- Copyright (c) 2020 Anton Sokolov <anton@sokolov.digital>
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
data/RELEASE.md DELETED
@@ -1,7 +0,0 @@
1
- ```shell
2
- gem build fretboard.gemspec
3
-
4
- gem push fretboard-1.4.3.gem
5
-
6
- gem push --key github --host https://rubygems.pkg.github.com/afuno fretboard-1.4.3.gem
7
- ```
data/fretboard.gemspec DELETED
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- lib = File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
-
6
- require 'fretboard/version'
7
-
8
- Gem::Specification.new do |spec|
9
- spec.name = 'fretboard'
10
- spec.version = Fretboard::VERSION
11
- spec.platform = Gem::Platform::RUBY
12
- spec.authors = ['Anton Sokolov']
13
- spec.email = ['anton@sokolov.digital']
14
- spec.homepage = 'https://github.com/afuno/fretboard'
15
- spec.licenses = ['MIT']
16
- spec.summary = 'Tools for working with the guitar fretboard'
17
- spec.description = 'Tools for working with the guitar fretboard'
18
-
19
- spec.files = `git ls-files -z *.md *.gemspec bin lib`.split("\x0")
20
- spec.require_paths = ['lib']
21
-
22
- spec.executables = ['fretboard']
23
-
24
- spec.required_ruby_version = '>= 3.1.0'
25
-
26
- spec.add_dependency 'activesupport', '~> 7.0.3'
27
- spec.add_dependency 'colorize', '~> 0.8.1'
28
- spec.add_dependency 'terminal-table', '~> 3.0.1'
29
- spec.add_development_dependency 'rubocop', '~> 1.29.1'
30
- end