fretboard 1.5.0 → 1.6.0

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: 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