fretboard 1.5.0 → 1.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e986ef81e9af0a26b46ff706a6cd63cb4b9f9635eb61fe4a52c0b4e2056d2d63
4
- data.tar.gz: 07b4ef762cc5b654cae33669c91a9f96c32e2b1bc1e068328600ff2eefa874c4
3
+ metadata.gz: 9ee4a3406fd62fd65a73d9757d4e952de5946653855f5549352454e3b4336f89
4
+ data.tar.gz: 70d473d4f8c167dbcc5f238086e2e87b52a06bf94ae5de4fadebdec0b61aa15a
5
5
  SHA512:
6
- metadata.gz: c6fcfc957583acdc5208c9e1cb44d2ed4f1d3e0ea28399a55890388a772cca48cd6ef3a90ac27ff130e784de41cae9ab90a5b4085f6bce0b2c1346d25c18bf4f
7
- data.tar.gz: dceda2b4fa1cc80172c4f5ee060cd8d849613b5fd7c9bd676152e5ebf01f56639bb4b7e44f00aa78bd0879bb327b111cb671e15cdbdc6493b8be6398242fe785
6
+ metadata.gz: c13366e374fa78c5ba170d8ac00950ba6087c79fce439e0dec6c0bc3b841ad70940cef68501b9f81649bd18d586670629511b265a6ac8699b80fa9b208e5ac7d
7
+ data.tar.gz: a138bc584070c19e8edd654811fe754063a6c272f1ed22143224ff815f509ca34d478708b5609af0bab2488173cec21dbf8b03b17965af9c6e4b97e4b92830db
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
@@ -78,10 +78,10 @@ bundle exec fretboard --draw-tuning standard
78
78
  ```
79
79
  </details>
80
80
 
81
- #### Getting a list of supported guitar tunings.
81
+ #### Getting a list of supported guitar tunings
82
82
 
83
83
  ```
84
- bundle exec fretboard --draw-tuning standard
84
+ bundle exec fretboard --tunings-list
85
85
  ```
86
86
 
87
87
  <details>
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ require "rubocop/rake_task"
9
+
10
+ RuboCop::RakeTask.new
11
+
12
+ task default: %i[spec rubocop]
data/bin/fretboard CHANGED
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- abort 'Please run fretboard from the root of the project' unless File.exist?('./Gemfile')
4
+ abort "Please run fretboard from the root of the project" unless File.exist?("./Gemfile")
5
5
 
6
- require 'rubygems'
6
+ require "rubygems"
7
7
 
8
8
  begin
9
- require 'bundler'
9
+ require "bundler"
10
10
  Bundler.setup
11
11
  rescue StandardError
12
12
  # ...
@@ -14,6 +14,6 @@ end
14
14
 
15
15
  $LOAD_PATH << "#{__dir__}/../lib"
16
16
 
17
- require 'fretboard/parser'
17
+ require "fretboard/parser"
18
18
 
19
19
  Fretboard::Parser.parse(ARGV)
@@ -1,11 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # require 'active_support/core_ext/hash'
4
-
5
- require 'fretboard/console'
6
-
7
3
  module Fretboard
8
- class Builder # rubocop:disable Style/Documentation, Metrics/ClassLength
4
+ class Builder # rubocop:disable Metrics/ClassLength
9
5
  # fretboard = Fretboard::Builder.new(:standard)
10
6
  # fretboard = Fretboard::Builder.standard
11
7
  # fretboard = Fretboard::Builder.tuning_a
@@ -196,7 +192,7 @@ module Fretboard
196
192
 
197
193
  def build(sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
198
194
  unless Fretboard::Tunings.exists?(@tuning)
199
- Fretboard::Console.danger('Unable to detect guitar tuning')
195
+ Fretboard::Console.danger("Unable to detect guitar tuning")
200
196
  return
201
197
  end
202
198
 
@@ -220,7 +216,7 @@ module Fretboard
220
216
  (1..@number_of_frets).each do |fret|
221
217
  next_note = Fretboard::Note.next_for(
222
218
  current_note,
223
- sharp_or_flat:
219
+ sharp_or_flat: sharp_or_flat
224
220
  )
225
221
 
226
222
  # puts "Fret: #{fret} (#{next_note})"
@@ -237,7 +233,7 @@ module Fretboard
237
233
 
238
234
  def draw(sharp_or_flat: :both) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
239
235
  unless @data.any?
240
- Fretboard::Console.danger('Build the guitar fretboard data for drawing')
236
+ Fretboard::Console.danger("Build the guitar fretboard data for drawing")
241
237
  return
242
238
  end
243
239
 
@@ -247,7 +243,7 @@ module Fretboard
247
243
  @data.each_pair do |string_number, string_notes|
248
244
  row = []
249
245
 
250
- headings << ''
246
+ headings << ""
251
247
  row << string_number
252
248
 
253
249
  headings << 0
@@ -257,7 +253,7 @@ module Fretboard
257
253
  if open_note.is_a?(Array)
258
254
  open_note = case sharp_or_flat
259
255
  when :both
260
- open_note.join('/')
256
+ open_note.join("/")
261
257
  when :sharp
262
258
  open_note.first
263
259
  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
@@ -23,9 +23,9 @@ module Fretboard
23
23
 
24
24
  def self.print_table(headings, rows)
25
25
  table = Terminal::Table.new(
26
- headings:,
27
- rows:,
28
- style: { border_x: '~', border_i: '~' }
26
+ headings: headings,
27
+ rows: rows,
28
+ style: { border_x: "~", border_i: "~" }
29
29
  )
30
30
 
31
31
  new(table.to_s, nil).print
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fretboard
4
+ class Engine < Rails::Engine
5
+ isolate_namespace Fretboard
6
+ end
7
+ end
@@ -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,17 @@
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 "active_support/core_ext/hash/except"
5
5
 
6
- require 'fretboard/builder'
7
- require 'fretboard/console'
8
- require 'fretboard/note'
9
- require 'fretboard/tunings'
6
+ require "optparse"
7
+
8
+ require "fretboard/builder"
9
+ require "fretboard/console"
10
+ require "fretboard/note"
11
+ require "fretboard/tunings"
10
12
 
11
13
  module Fretboard
12
- class Parser # rubocop:disable Style/Documentation
14
+ class Parser
13
15
  attr_reader :args
14
16
 
15
17
  def self.parse(args)
@@ -30,25 +32,25 @@ module Fretboard
30
32
 
31
33
  def parser # rubocop:disable Metrics/MethodLength
32
34
  OptionParser.new do |opts|
33
- opts.banner = 'Usage: fretboard [options]'
35
+ opts.banner = "Usage: fretboard [options]"
34
36
 
35
- opts.on('-v', '--version', 'The current version of the gem') do
37
+ opts.on("-v", "--version", "The current version of the gem") do
36
38
  Fretboard::Console.log(Fretboard::VERSION)
37
39
  exit
38
40
  end
39
41
 
40
- opts.on('-h', '--help', 'Prints this help') do
42
+ opts.on("-h", "--help", "Prints this help") do
41
43
  Fretboard::Console.log(opts.to_s)
42
44
  exit
43
45
  end
44
46
 
45
- opts.on('-d', '--draw-tuning CODE', 'Build a guitar tuning') do |code|
47
+ opts.on("-d", "--draw-tuning CODE", "Build a guitar tuning") do |code|
46
48
  fretboard = Fretboard::Builder.new(code.to_sym)
47
49
  fretboard.build
48
50
  fretboard.draw
49
51
  end
50
52
 
51
- opts.on('-l', '--tunings-list', 'List of supported guitar tunings') do
53
+ opts.on("-l", "--tunings-list", "List of supported guitar tunings") do
52
54
  Fretboard::Tunings.draw_list
53
55
  end
54
56
  end
@@ -1,305 +1,305 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fretboard
4
- class Tunings # rubocop:disable Style/Documentation, Metrics/ClassLength
4
+ class Tunings # rubocop:disable Metrics/ClassLength
5
5
  # Fretboard::Tunings.fetch(:standard)
6
6
  # Fretboard::Tunings.exists?(:standard)
7
7
 
8
8
  TUNINGS = {
9
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
@@ -314,8 +314,8 @@ module Fretboard
314
314
  headings = []
315
315
  rows = []
316
316
 
317
- headings << 'Tuning'
318
- headings << 'Notes'
317
+ headings << "Tuning"
318
+ headings << "Notes"
319
319
 
320
320
  list.each do |tuning_code, tuning_data|
321
321
  row = []
@@ -325,8 +325,8 @@ module Fretboard
325
325
  prepared_string_notes = tuning_data[:STRINGS].map do |_string_number, string_notes|
326
326
  note = string_notes[:NOTE]
327
327
 
328
- note.is_a?(Array) ? note.join('/') : note
329
- end.join(', ')
328
+ note.is_a?(Array) ? note.join("/") : note
329
+ end.join(", ")
330
330
 
331
331
  row << prepared_string_notes
332
332
 
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fretboard
4
- MAJOR = 1
5
- MINOR = 5
6
- PATCH = 0
4
+ module VERSION
5
+ MAJOR = 1
6
+ MINOR = 6
7
+ PATCH = 0
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,11 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fretboard/builder'
4
- # require 'fretboard/constants'
5
- require 'fretboard/note'
6
- require 'fretboard/notes'
7
- require 'fretboard/tunings'
3
+ require "active_support/core_ext/object/blank"
4
+ require "active_support/core_ext/hash/except"
8
5
 
9
- module Fretboard # rubocop:disable Style/Documentation
6
+ require "fretboard/builder"
7
+ require "fretboard/note"
8
+ require "fretboard/notes"
9
+ require "fretboard/tunings"
10
+
11
+ module Fretboard
10
12
  # extend Constants
11
13
  end
14
+
15
+ require "fretboard/engine" if defined?(Rails::Engine)
metadata CHANGED
@@ -1,88 +1,170 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fretboard
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
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-10-29 00:00:00.000000000 Z
11
+ date: 2024-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 7.0.3
19
+ version: '5.1'
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: '5.1'
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.2
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.2
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: appraisal
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '2.5'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '2.5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '13.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '13.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '3.12'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '3.12'
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: rubocop
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
- - - "~>"
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
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
60
144
  - !ruby/object:Gem::Version
61
- version: 1.37.1
145
+ version: '2.24'
62
146
  type: :development
63
147
  prerelease: false
64
148
  version_requirements: !ruby/object:Gem::Requirement
65
149
  requirements:
66
- - - "~>"
150
+ - - ">="
67
151
  - !ruby/object:Gem::Version
68
- version: 1.37.1
152
+ version: '2.24'
69
153
  description: Tools for working with the guitar fretboard
70
154
  email:
71
- - anton@sokolov.digital
155
+ - profox.rus@gmail.com
72
156
  executables:
73
157
  - fretboard
74
158
  extensions: []
75
159
  extra_rdoc_files: []
76
160
  files:
77
- - LICENSE.md
78
161
  - README.md
79
- - RELEASE.md
162
+ - Rakefile
80
163
  - bin/fretboard
81
- - fretboard.gemspec
82
164
  - lib/fretboard.rb
83
165
  - lib/fretboard/builder.rb
84
166
  - lib/fretboard/console.rb
85
- - lib/fretboard/constants.rb
167
+ - lib/fretboard/engine.rb
86
168
  - lib/fretboard/note.rb
87
169
  - lib/fretboard/notes.rb
88
170
  - lib/fretboard/parser.rb
@@ -92,6 +174,10 @@ homepage: https://github.com/afuno/fretboard
92
174
  licenses:
93
175
  - MIT
94
176
  metadata:
177
+ homepage_uri: https://github.com/afuno/fretboard
178
+ documentation_uri: https://github.com/afuno/fretboard
179
+ source_code_uri: https://github.com/afuno/fretboard
180
+ bug_tracker_uri: https://github.com/afuno/fretboard/issues
95
181
  rubygems_mfa_required: 'true'
96
182
  post_install_message:
97
183
  rdoc_options: []
@@ -101,14 +187,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
187
  requirements:
102
188
  - - ">="
103
189
  - !ruby/object:Gem::Version
104
- version: 3.1.0
190
+ version: 2.7.0
105
191
  required_rubygems_version: !ruby/object:Gem::Requirement
106
192
  requirements:
107
193
  - - ">="
108
194
  - !ruby/object:Gem::Version
109
195
  version: '0'
110
196
  requirements: []
111
- rubygems_version: 3.3.7
197
+ rubygems_version: 3.5.6
112
198
  signing_key:
113
199
  specification_version: 4
114
200
  summary: Tools for working with the guitar fretboard
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.5.0.gem
5
-
6
- gem push --key github --host https://rubygems.pkg.github.com/afuno fretboard-1.5.0.gem
7
- ```
data/fretboard.gemspec DELETED
@@ -1,32 +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.metadata['rubygems_mfa_required'] = 'true'
25
-
26
- spec.required_ruby_version = '>= 3.1.0'
27
-
28
- spec.add_dependency 'activesupport', '~> 7.0.3'
29
- spec.add_dependency 'colorize', '~> 0.8.1'
30
- spec.add_dependency 'terminal-table', '~> 3.0.2'
31
- spec.add_development_dependency 'rubocop', '~> 1.37.1'
32
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # module Fretboard
4
- # module Constants
5
- # # Fretboard::Constants.constants
6
- # end
7
- # end