music 0.7.0 → 0.8.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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZWIwNTcyOWMxM2E5MmU1MWY2YTAxNDdmZWMyMGY3MzI4MDMwOWRiYg==
5
- data.tar.gz: !binary |-
6
- MTNmNjM2NjRiMzYyODcyMTYxNzRjZjA0YTlhMjM1ZTgwN2M2ODQ3YQ==
2
+ SHA256:
3
+ metadata.gz: 233bb144abfc81d9816b2136296a16c25a33b72a23c571d3e010fd947c8d8dda
4
+ data.tar.gz: 0ac2263fd0357000ee6c2a804bf6d44d5c37036b65403e36d5d066e8f521fe99
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YjU0ZjBjZDRiNTgyY2JkMDIxZGJjZmU2MzU1YTdmZDQyMGFmMDMwNGUxY2Jj
10
- MWIwMzA5OWY4ZmFiNDY0NTNhY2Y2NmUzMmM0MDM0NjI2OTYwN2E5YmViYTM0
11
- MWE4ODNiMGU0NTVmZDljNzE2ZjQyMzgwMzViMDQ1NDc5ZDdiM2U=
12
- data.tar.gz: !binary |-
13
- ZGQ0ZWE2ODNhOGFmMzg1YTJmNTZhOThlOTNmNmY5NjYwNGU3NGUwMDJlNDU2
14
- NWE1NWM5ZDlkMmJjOGE2MGE3MTdiM2U4ODc2MmQ1NDRmYzYyMzMwNGY0ZjE4
15
- ZmM3MDU0MTdhZDZlNGIzYjYxOTE3ZjU1ZDA0NzU3ZjRiMmJjYTI=
6
+ metadata.gz: 42e298406270084a5d7b0f544c699b94d1354c1b8751e4e910cb4a69ddf1c373e2288531520ae59f4987fb6527a5c2e7c8a32f1cfd1ef8c0c5f79582bc77e3bd
7
+ data.tar.gz: 2fc2e7fdb4f756f11cb20799434a5676f2f6506bfa155a1c5e419a41dfc9c5bf701fd29cf5b32605b01a356e9627140da49629a70d9ff13a8f5eea8152b8dc2a
data/.rubocop.yml ADDED
@@ -0,0 +1,72 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+
4
+
5
+ #---------------------------
6
+ # Style configuration
7
+ #---------------------------
8
+
9
+ # Cop supports --auto-correct.
10
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
11
+ Style/HashSyntax:
12
+ Enabled: true
13
+ EnforcedStyle: ruby19
14
+
15
+ # Cop supports --auto-correct.
16
+ Style/SpaceInsideHashLiteralBraces:
17
+ Enabled: true
18
+ EnforcedStyle: no_space
19
+
20
+ # I think this one is broken...
21
+ Style/FileName:
22
+ Enabled: false
23
+
24
+ #---------------------------
25
+ # Don't intend to fix these:
26
+ #---------------------------
27
+
28
+ # Cop supports --auto-correct.
29
+ # Reason: Double spaces can be useful for grouping code
30
+ Style/EmptyLines:
31
+ Enabled: false
32
+
33
+ # Cop supports --auto-correct.
34
+ # Reason: I have very big opinions on this one. See:
35
+ # https://github.com/bbatsov/ruby-style-guide/issues/329
36
+ # https://github.com/bbatsov/ruby-style-guide/pull/325
37
+ Style/NegatedIf:
38
+ Enabled: false
39
+
40
+ # Cop supports --auto-correct.
41
+ # Reason: I'm fine either way on this, but could maybe be convinced that this should be enforced
42
+ Style/Not:
43
+ Enabled: false
44
+
45
+ # Cop supports --auto-correct.
46
+ # Reason: I'm fine with this
47
+ Style/PerlBackrefs:
48
+ Enabled: false
49
+
50
+ # Configuration parameters: Methods.
51
+ # Reason: We should be able to specify full variable names, even if it's only one line
52
+ Style/SingleLineBlockParams:
53
+ Enabled: false
54
+
55
+ # Reason: Switched `extend self` to `module_function` in id_property.rb but that caused errors
56
+ Style/ModuleFunction:
57
+ Enabled: false
58
+
59
+ # Configuration parameters: AllowSafeAssignment.
60
+ # Reason: I'm a proud user of assignment in conditionals.
61
+ Lint/AssignmentInCondition:
62
+ Enabled: false
63
+
64
+ # Reason: Fine with any sort of lambda syntax
65
+ Style/Lambda:
66
+ Enabled: false
67
+
68
+ # Reason: I'm proud to be part of the double negative Ruby tradition
69
+ Style/DoubleNegation:
70
+ Enabled: false
71
+
72
+
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,47 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2015-01-19 01:03:42 +0200 using RuboCop version 0.28.0.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
7
+
8
+ # Offense count: 5
9
+ Metrics/AbcSize:
10
+ Max: 25
11
+
12
+ # Offense count: 1
13
+ # Configuration parameters: CountComments.
14
+ Metrics/ClassLength:
15
+ Max: 232
16
+
17
+ # Offense count: 2
18
+ Metrics/CyclomaticComplexity:
19
+ Max: 10
20
+
21
+ # Offense count: 53
22
+ # Configuration parameters: AllowURI, URISchemes.
23
+ Metrics/LineLength:
24
+ Max: 141
25
+
26
+ # Offense count: 4
27
+ # Configuration parameters: CountComments.
28
+ Metrics/MethodLength:
29
+ Max: 25
30
+
31
+ # Offense count: 1
32
+ Metrics/PerceivedComplexity:
33
+ Max: 9
34
+
35
+ # Offense count: 3
36
+ Style/Documentation:
37
+ Enabled: false
38
+
39
+ # Offense count: 2
40
+ # Configuration parameters: MinBodyLength.
41
+ Style/GuardClause:
42
+ Enabled: false
43
+
44
+ # Offense count: 29
45
+ # Cop supports --auto-correct.
46
+ Style/RedundantSelf:
47
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,8 +1,9 @@
1
+ script:
2
+ - "bundle exec rubocop"
1
3
  language: ruby
2
4
  rvm:
3
- - 1.8.7
4
- - 1.9.2
5
5
  - 1.9.3
6
- - jruby-18mode # JRuby in 1.8 mode
6
+ - 2.0.0
7
+ - 2.1.4
8
+ - 2.2.0
7
9
  - jruby-19mode # JRuby in 1.9 mode
8
- - rbx-2.2.3
data/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+
11
+ ## [0.8.0] - 2022-11-27
12
+
13
+ ### Added
14
+
15
+ - Support for parsing enharmonic notes such as 'E#5' (#9, thanks @stufro)
data/Gemfile CHANGED
@@ -1,9 +1,10 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  group :development do
5
5
  gem 'guard-bundler'
6
6
  gem 'guard-rspec'
7
+ gem 'guard-rubocop'
7
8
  gem 'rb-fsevent', '~> 0.9.1'
8
9
  end
9
10
 
data/Gemfile.lock CHANGED
@@ -1,46 +1,84 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- music (0.6.2)
4
+ music (0.7.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
- coderay (1.0.9)
10
- diff-lcs (1.2.1)
9
+ ast (2.0.0)
10
+ astrolabe (1.3.0)
11
+ parser (>= 2.2.0.pre.3, < 3.0)
12
+ celluloid (0.16.0)
13
+ timers (~> 4.0.0)
14
+ coderay (1.1.0)
15
+ diff-lcs (1.2.5)
16
+ ffi (1.9.6)
11
17
  ffi2-generators (0.1.1)
12
- guard (1.6.2)
13
- listen (>= 0.6.0)
14
- lumberjack (>= 1.0.2)
15
- pry (>= 0.9.10)
16
- terminal-table (>= 1.4.3)
17
- thor (>= 0.14.6)
18
- guard-bundler (1.0.0)
18
+ formatador (0.2.5)
19
+ guard (2.11.1)
20
+ formatador (>= 0.2.4)
21
+ listen (~> 2.7)
22
+ lumberjack (~> 1.0)
23
+ nenv (~> 0.1)
24
+ notiffany (~> 0.0)
25
+ pry (>= 0.9.12)
26
+ shellany (~> 0.0)
27
+ thor (>= 0.18.1)
28
+ guard-bundler (2.1.0)
19
29
  bundler (~> 1.0)
20
- guard (~> 1.1)
21
- guard-rspec (2.4.1)
22
- guard (>= 1.1)
23
- rspec (~> 2.11)
24
- listen (0.7.3)
25
- lumberjack (1.0.2)
26
- method_source (0.8.1)
27
- pry (0.9.12)
28
- coderay (~> 1.0.5)
29
- method_source (~> 0.8)
30
+ guard (~> 2.2)
31
+ guard-compat (~> 1.1)
32
+ guard-compat (1.2.1)
33
+ guard-rspec (4.5.0)
34
+ guard (~> 2.1)
35
+ guard-compat (~> 1.1)
36
+ rspec (>= 2.99.0, < 4.0)
37
+ guard-rubocop (1.2.0)
38
+ guard (~> 2.0)
39
+ rubocop (~> 0.20)
40
+ hitimes (1.2.2)
41
+ listen (2.8.5)
42
+ celluloid (>= 0.15.2)
43
+ rb-fsevent (>= 0.9.3)
44
+ rb-inotify (>= 0.9)
45
+ lumberjack (1.0.9)
46
+ method_source (0.8.2)
47
+ nenv (0.2.0)
48
+ notiffany (0.0.3)
49
+ nenv (~> 0.1)
50
+ shellany (~> 0.0)
51
+ parser (2.2.0.2)
52
+ ast (>= 1.1, < 3.0)
53
+ powerpack (0.0.9)
54
+ pry (0.10.1)
55
+ coderay (~> 1.1.0)
56
+ method_source (~> 0.8.1)
30
57
  slop (~> 3.4)
31
- psych (2.0.2)
32
- racc (1.4.11)
58
+ psych (2.0.10)
59
+ racc (1.4.12)
60
+ rainbow (2.0.0)
33
61
  rake (0.9.6)
34
- rb-fsevent (0.9.3)
35
- rspec (2.13.0)
36
- rspec-core (~> 2.13.0)
37
- rspec-expectations (~> 2.13.0)
38
- rspec-mocks (~> 2.13.0)
39
- rspec-core (2.13.0)
40
- rspec-expectations (2.13.0)
62
+ rb-fsevent (0.9.4)
63
+ rb-inotify (0.9.5)
64
+ ffi (>= 0.5.0)
65
+ rb-readline (0.5.2)
66
+ rspec (2.99.0)
67
+ rspec-core (~> 2.99.0)
68
+ rspec-expectations (~> 2.99.0)
69
+ rspec-mocks (~> 2.99.0)
70
+ rspec-core (2.99.2)
71
+ rspec-expectations (2.99.2)
41
72
  diff-lcs (>= 1.1.3, < 2.0)
42
- rspec-mocks (2.13.0)
43
- rubysl (2.0.15)
73
+ rspec-mocks (2.99.3)
74
+ rubocop (0.28.0)
75
+ astrolabe (~> 1.3)
76
+ parser (>= 2.2.0.pre.7, < 3.0)
77
+ powerpack (~> 0.0.6)
78
+ rainbow (>= 1.99.1, < 3.0)
79
+ ruby-progressbar (~> 1.4)
80
+ ruby-progressbar (1.7.1)
81
+ rubysl (2.1.0)
44
82
  rubysl-abbrev (~> 2.0)
45
83
  rubysl-base64 (~> 2.0)
46
84
  rubysl-benchmark (~> 2.0)
@@ -74,7 +112,7 @@ GEM
74
112
  rubysl-io-nonblock (~> 2.0)
75
113
  rubysl-io-wait (~> 2.0)
76
114
  rubysl-ipaddr (~> 2.0)
77
- rubysl-irb (~> 2.0)
115
+ rubysl-irb (~> 2.1)
78
116
  rubysl-logger (~> 2.0)
79
117
  rubysl-mathn (~> 2.0)
80
118
  rubysl-matrix (~> 2.0)
@@ -103,7 +141,6 @@ GEM
103
141
  rubysl-pstore (~> 2.0)
104
142
  rubysl-pty (~> 2.0)
105
143
  rubysl-rational (~> 2.0)
106
- rubysl-readline (~> 2.0)
107
144
  rubysl-resolv (~> 2.0)
108
145
  rubysl-rexml (~> 2.0)
109
146
  rubysl-rinda (~> 2.0)
@@ -145,14 +182,14 @@ GEM
145
182
  rubysl-csv (2.0.2)
146
183
  rubysl-english (~> 2.0)
147
184
  rubysl-curses (2.0.1)
148
- rubysl-date (2.0.6)
185
+ rubysl-date (2.0.8)
149
186
  rubysl-delegate (2.0.1)
150
187
  rubysl-digest (2.0.3)
151
188
  rubysl-drb (2.0.1)
152
189
  rubysl-e2mmap (2.0.0)
153
190
  rubysl-english (2.0.0)
154
191
  rubysl-enumerator (2.0.0)
155
- rubysl-erb (2.0.1)
192
+ rubysl-erb (2.0.2)
156
193
  rubysl-etc (2.0.3)
157
194
  ffi2-generators (~> 0.1)
158
195
  rubysl-expect (2.0.0)
@@ -170,12 +207,12 @@ GEM
170
207
  rubysl-io-nonblock (2.0.0)
171
208
  rubysl-io-wait (2.0.0)
172
209
  rubysl-ipaddr (2.0.0)
173
- rubysl-irb (2.0.4)
210
+ rubysl-irb (2.1.0)
211
+ rb-readline (~> 0.5)
174
212
  rubysl-e2mmap (~> 2.0)
175
213
  rubysl-mathn (~> 2.0)
176
- rubysl-readline (~> 2.0)
177
214
  rubysl-thread (~> 2.0)
178
- rubysl-logger (2.0.0)
215
+ rubysl-logger (2.1.0)
179
216
  rubysl-mathn (2.0.0)
180
217
  rubysl-matrix (2.1.0)
181
218
  rubysl-e2mmap (~> 2.0)
@@ -198,21 +235,20 @@ GEM
198
235
  rubysl-observer (2.0.0)
199
236
  rubysl-open-uri (2.0.0)
200
237
  rubysl-open3 (2.0.0)
201
- rubysl-openssl (2.1.0)
238
+ rubysl-openssl (2.2.1)
202
239
  rubysl-optparse (2.0.1)
203
240
  rubysl-shellwords (~> 2.0)
204
241
  rubysl-ostruct (2.0.4)
205
- rubysl-pathname (2.0.0)
206
- rubysl-prettyprint (2.0.2)
242
+ rubysl-pathname (2.1.0)
243
+ rubysl-prettyprint (2.0.3)
207
244
  rubysl-prime (2.0.1)
208
245
  rubysl-profile (2.0.0)
209
246
  rubysl-profiler (2.0.1)
210
247
  rubysl-pstore (2.0.0)
211
- rubysl-pty (2.0.2)
248
+ rubysl-pty (2.0.3)
212
249
  rubysl-rational (2.0.1)
213
- rubysl-readline (2.0.2)
214
- rubysl-resolv (2.0.0)
215
- rubysl-rexml (2.0.2)
250
+ rubysl-resolv (2.1.0)
251
+ rubysl-rexml (2.0.4)
216
252
  rubysl-rinda (2.0.1)
217
253
  rubysl-rss (2.0.0)
218
254
  rubysl-scanf (2.0.0)
@@ -224,14 +260,14 @@ GEM
224
260
  rubysl-stringio (2.0.0)
225
261
  rubysl-strscan (2.0.0)
226
262
  rubysl-sync (2.0.0)
227
- rubysl-syslog (2.0.1)
263
+ rubysl-syslog (2.1.0)
228
264
  ffi2-generators (~> 0.1)
229
265
  rubysl-tempfile (2.0.1)
230
266
  rubysl-thread (2.0.2)
231
267
  rubysl-thwait (2.0.0)
232
268
  rubysl-time (2.0.3)
233
269
  rubysl-timeout (2.0.0)
234
- rubysl-tmpdir (2.0.0)
270
+ rubysl-tmpdir (2.0.1)
235
271
  rubysl-tsort (2.0.1)
236
272
  rubysl-un (2.0.0)
237
273
  rubysl-fileutils (~> 2.0)
@@ -240,11 +276,13 @@ GEM
240
276
  rubysl-weakref (2.0.0)
241
277
  rubysl-webrick (2.0.0)
242
278
  rubysl-xmlrpc (2.0.0)
243
- rubysl-yaml (2.0.4)
279
+ rubysl-yaml (2.1.0)
244
280
  rubysl-zlib (2.0.1)
245
- slop (3.4.3)
246
- terminal-table (1.4.5)
247
- thor (0.17.0)
281
+ shellany (0.0.1)
282
+ slop (3.6.0)
283
+ thor (0.19.1)
284
+ timers (4.0.1)
285
+ hitimes
248
286
 
249
287
  PLATFORMS
250
288
  ruby
@@ -252,6 +290,7 @@ PLATFORMS
252
290
  DEPENDENCIES
253
291
  guard-bundler
254
292
  guard-rspec
293
+ guard-rubocop
255
294
  music!
256
295
  psych
257
296
  racc
data/Guardfile CHANGED
@@ -1,29 +1,16 @@
1
- # A sample Guardfile
2
- # More info at https://github.com/guard/guard#readme
3
-
4
1
  guard 'bundler' do
5
2
  watch('Gemfile')
6
3
  # Uncomment next line if Gemfile contain `gemspec' command
7
4
  # watch(/^.+\.gemspec/)
8
5
  end
9
6
 
10
- guard 'rspec', :version => 2, :rvm => ['1.9.3', '1.8.7', 'rbx'] do
11
- watch(%r{^spec/.+_spec\.rb$})
12
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
13
- watch('spec/spec_helper.rb') { "spec" }
7
+ guard :rubocop, cli: '--auto-correct --display-cop-names' do
8
+ watch(/.+\.rb$/)
9
+ watch(/(?:.+\/)?\.rubocop.*\.yml$/) { |m| File.dirname(m[0]) }
10
+ end
14
11
 
15
- # Rails example
16
- watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
17
- watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
18
- watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
19
- watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
20
- watch('config/routes.rb') { "spec/routing" }
21
- watch('app/controllers/application_controller.rb') { "spec/controllers" }
22
-
23
- # Capybara request specs
24
- watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
25
-
26
- # Turnip features and steps
27
- watch(%r{^spec/acceptance/(.+)\.feature$})
28
- watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
12
+ guard :rspec, cmd: 'bundle exec rspec' do
13
+ watch(/^spec\/.+_spec\.rb$/)
14
+ watch(/^lib\/(.+)\.rb/) { |m| "spec/lib/#{m[1]}_spec.rb" }
15
+ watch('spec/spec_helper.rb') { 'spec' }
29
16
  end
data/README.md CHANGED
@@ -5,9 +5,13 @@ The *music* gem provides a means on calculating notes and chords.
5
5
 
6
6
  [![Build Status](https://travis-ci.org/cheerfulstoic/music.png)](https://travis-ci.org/cheerfulstoic/music)
7
7
 
8
+ [![PullReview stats](https://www.pullreview.com/github/cheerfulstoic/music/badges/master.svg?)](https://www.pullreview.com/github/cheerfulstoic/music/reviews/master)
9
+
8
10
  Examples:
9
11
  ---------
10
12
 
13
+ All examples below assume that `include Music` has been called, though you can also use `Music::Note`, `Music::Chord`, etc...
14
+
11
15
  Creating notes:
12
16
 
13
17
  note = Note.new(698.46) # Creates a note object with the frequency 698.46
data/Rakefile CHANGED
@@ -1,13 +1,13 @@
1
1
  require 'rake'
2
2
  require 'rspec/core/rake_task'
3
3
 
4
- task :default => [:spec]
4
+ task default: [:spec]
5
5
 
6
- desc "Run all test"
7
- task :test => [:spec]
6
+ desc 'Run all test'
7
+ task test: [:spec]
8
8
 
9
9
  # RSpec tasks
10
- desc "Run all examples"
10
+ desc 'Run all examples'
11
11
  RSpec::Core::RakeTask.new(:spec) do |spec|
12
12
  spec.ruby_opts = '-I lib'
13
13
  spec.pattern = 'spec/**/*_spec.rb'
@@ -15,11 +15,10 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
15
15
  end
16
16
 
17
17
  # Gems tasks
18
- require "bundler"
18
+ require 'bundler'
19
19
  Bundler::GemHelper.install_tasks
20
20
 
21
- desc "Clean automatically generated files"
21
+ desc 'Clean automatically generated files'
22
22
  task :clean do
23
- FileUtils.rm_rf "pkg"
23
+ FileUtils.rm_rf 'pkg'
24
24
  end
25
-
data/lib/music/chord.rb CHANGED
@@ -1,21 +1,24 @@
1
+ require 'set'
2
+
1
3
  module Music
2
4
  class Chord
3
-
4
- def eql?(other_chord)
5
- @notes == other_chord.notes
5
+ def eql?(other)
6
+ @notes == other.notes
6
7
  end
8
+
7
9
  def hash
8
10
  @notes.hash
9
11
  end
10
- def ==(other_chord)
11
- self.eql?(other_chord)
12
+
13
+ def ==(other)
14
+ self.eql?(other)
12
15
  end
13
16
 
14
17
  attr_reader :notes
15
18
 
16
19
  def initialize(notes)
17
- raise ArgumentError, 'Chords must have at least two notes' if notes.size < 2
18
- @notes = Set.new(notes) do |note|
20
+ fail ArgumentError, 'Chords must have at least two notes' if notes.size < 2
21
+ @notes = ::Set.new(notes) do |note|
19
22
  if note.is_a?(Note)
20
23
  note
21
24
  else
@@ -28,7 +31,7 @@ module Music
28
31
  # def to_i
29
32
 
30
33
  def note_strings
31
- Set.new(@notes.collect(&:note_string))
34
+ ::Set.new(@notes.collect(&:note_string))
32
35
  end
33
36
 
34
37
  def describe
@@ -38,25 +41,25 @@ module Music
38
41
  end
39
42
 
40
43
  quality = case distances
41
- when [4, 7]
42
- :major
43
- when [3, 7]
44
- :minor
45
- when [3, 6]
46
- :diminished
47
- when [4, 8]
48
- :augmented
49
- when [4, 7, 11]
50
- :major_7
51
- when [3, 7, 10]
52
- :minor_7
53
- when [3, 6, 9]
54
- :diminished_7
55
- when [3, 6, 10]
56
- :half_diminished_7
57
- when [4, 8, 10]
58
- :augmented_7
59
- end
44
+ when [4, 7]
45
+ :major
46
+ when [3, 7]
47
+ :minor
48
+ when [3, 6]
49
+ :diminished
50
+ when [4, 8]
51
+ :augmented
52
+ when [4, 7, 11]
53
+ :major_7
54
+ when [3, 7, 10]
55
+ :minor_7
56
+ when [3, 6, 9]
57
+ :diminished_7
58
+ when [3, 6, 10]
59
+ :half_diminished_7
60
+ when [4, 8, 10]
61
+ :augmented_7
62
+ end
60
63
 
61
64
  [note_array.first.letter, quality]
62
65
  end
@@ -69,8 +72,8 @@ module Music
69
72
  #
70
73
  # @returns [Chord] The specified inversion of chord
71
74
  def inversion(amount)
72
- raise ArgumentError, "Inversion amount must be greater than or equal to 1" if amount < 1
73
- raise ArgumentError, "Not enough notes in chord for inversion" if amount >= @notes.size
75
+ fail ArgumentError, 'Inversion amount must be greater than or equal to 1' if amount < 1
76
+ fail ArgumentError, 'Not enough notes in chord for inversion' if amount >= @notes.size
74
77
 
75
78
  note_array = @notes.to_a.sort
76
79
  notes = (0...amount).collect { note_array.shift.adjust_by_semitones(12) }
@@ -95,9 +98,9 @@ module Music
95
98
  class << self
96
99
  def parse_chord_string(chord_string, assumed_octave = nil)
97
100
  if note_string_match = chord_string.match(/^([A-Ga-g])([#b]?)([^\d]*)(\d*)$/)
98
- full_string, note, accidental, interval, octave = note_string_match.to_a
101
+ _, note, accidental, interval, octave = note_string_match.to_a
99
102
 
100
- raise ArgumentError, 'No octave found and no octave assumed' if note.empty? && assumed_octave.nil?
103
+ fail ArgumentError, 'No octave found and no octave assumed' if note.empty? && assumed_octave.nil?
101
104
 
102
105
  Note.new(note + accidental + octave, assumed_octave).chord(interval)
103
106
  end