fretboard 1.4.3 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
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