head_music 8.1.1 → 8.2.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: 1d1ca0a4ee8274a955259afdd1c915e09fba454522157a1ef687f8760ec064ed
4
- data.tar.gz: 902a3b6f27f50b2a8f354adb22cbcc460798f1916f760f475e9f6c1d6583cc93
3
+ metadata.gz: 416b7cd967ad8295f84cc17ee87c66fbc1eda60a66b8987a4cbeaf7ee3165ead
4
+ data.tar.gz: 8aca723bdede512365429a9eb3e5904bbab4473e40674a39d57c3977e73e9ffb
5
5
  SHA512:
6
- metadata.gz: e80f4d2337cabdf0cedd69bc0cb9ad54e73bd0f1a9774ccbfc2bcbe70b28d90899ff55debe9917dc5f62776e90ee7d09fd28530ea10fa28892ffc46e0d430c56
7
- data.tar.gz: 3d278d05d015f73e25633e3de2ea47fc90c8d8c8377bd4dff6ba13772039e8cce6824288a98e05e2cf31080dfac4f3b8010d84895dc62f24080699574958f8df
6
+ metadata.gz: 3769150439e444f72ab9fd98b567171fb1627badf985daa32fb82aa97abbe2e0b4ef39d1052baf3dc1d890d12a86e98e6767e7e9216f110768fe5c37b47ab5f1
7
+ data.tar.gz: 9371fe711f5b1533722571e4159306eab475f404d79f835b2ee1f9afbcb7a6bde95c7d516bdbf7d274ba846ce70b0d261f6de416534e1217df691ee4dcfcdc0b
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: bug
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior:
15
+ ```ruby
16
+ # Example code that demonstrates the issue
17
+ ```
18
+
19
+ **Expected behavior**
20
+ A clear and concise description of what you expected to happen.
21
+
22
+ **Actual behavior**
23
+ What actually happened instead.
24
+
25
+ **Environment:**
26
+ - Ruby version: [e.g. 3.3.0]
27
+ - head_music version: [e.g. 8.1.1]
28
+ - OS: [e.g. macOS 14.0]
29
+
30
+ **Additional context**
31
+ Add any other context about the problem here.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: enhancement
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
+
13
+ **Describe the solution you'd like**
14
+ A clear and concise description of what you want to happen.
15
+
16
+ **Describe alternatives you've considered**
17
+ A clear and concise description of any alternative solutions or features you've considered.
18
+
19
+ **Example usage**
20
+ ```ruby
21
+ # Show how the feature would be used
22
+ ```
23
+
24
+ **Additional context**
25
+ Add any other context or screenshots about the feature request here.
@@ -0,0 +1,59 @@
1
+ version: 2
2
+ updates:
3
+ # Enable version updates for Bundler (Ruby dependencies)
4
+ - package-ecosystem: "bundler"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ day: "monday"
9
+ time: "09:00"
10
+ timezone: "America/Los_Angeles"
11
+ open-pull-requests-limit: 5
12
+ reviewers:
13
+ - "roberthead"
14
+ assignees:
15
+ - "roberthead"
16
+ commit-message:
17
+ prefix: "deps"
18
+ prefix-development: "deps-dev"
19
+ include: "scope"
20
+ labels:
21
+ - "dependencies"
22
+ # Group minor and patch updates together to reduce noise
23
+ groups:
24
+ minor-and-patch:
25
+ patterns:
26
+ - "*"
27
+ update-types:
28
+ - "minor"
29
+ - "patch"
30
+ # Allow both direct and indirect dependencies
31
+ allow:
32
+ - dependency-type: "direct"
33
+ - dependency-type: "indirect"
34
+ # Ignore major version updates for stable dependencies
35
+ ignore:
36
+ - dependency-name: "activesupport"
37
+ update-types: ["version-update:semver-major"]
38
+ - dependency-name: "i18n"
39
+ update-types: ["version-update:semver-major"]
40
+
41
+ # Enable version updates for GitHub Actions
42
+ - package-ecosystem: "github-actions"
43
+ directory: "/"
44
+ schedule:
45
+ interval: "weekly"
46
+ day: "monday"
47
+ time: "09:00"
48
+ timezone: "America/Los_Angeles"
49
+ open-pull-requests-limit: 3
50
+ reviewers:
51
+ - "roberthead"
52
+ assignees:
53
+ - "roberthead"
54
+ commit-message:
55
+ prefix: "ci"
56
+ include: "scope"
57
+ labels:
58
+ - "ci"
59
+ - "dependencies"
@@ -0,0 +1,26 @@
1
+ ## Description
2
+ <!-- Describe your changes in detail -->
3
+
4
+ ## Type of Change
5
+ <!-- Mark relevant options with an "x" -->
6
+
7
+ - [ ] Bug fix (non-breaking change which fixes an issue)
8
+ - [ ] New feature (non-breaking change which adds functionality)
9
+ - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
10
+ - [ ] Documentation update
11
+
12
+ ## Testing
13
+ <!-- Describe the tests you ran to verify your changes -->
14
+
15
+ - [ ] All tests pass locally with `bundle exec rspec`
16
+ - [ ] Code follows style guidelines (`bundle exec rubocop` passes)
17
+ - [ ] I have added tests that prove my fix is effective or that my feature works
18
+ - [ ] New and existing unit tests pass locally with my changes
19
+
20
+ ## Checklist
21
+
22
+ - [ ] My code follows the style guidelines of this project
23
+ - [ ] I have performed a self-review of my own code
24
+ - [ ] I have commented my code, particularly in hard-to-understand areas
25
+ - [ ] I have made corresponding changes to the documentation
26
+ - [ ] My changes generate no new warnings
@@ -0,0 +1,68 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ ruby-version: ['3.3.0', '3.3', '3.4']
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Set up Ruby ${{ matrix.ruby-version }}
21
+ uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby-version }}
24
+ bundler-cache: true # runs 'bundle install' and caches installed gems
25
+
26
+ - name: Run tests
27
+ run: bundle exec rspec
28
+
29
+ - name: Upload coverage to Codecov
30
+ if: matrix.ruby-version == '3.3.0'
31
+ uses: codecov/codecov-action@v4
32
+ with:
33
+ token: ${{ secrets.CODECOV_TOKEN }}
34
+ fail_ci_if_error: false
35
+ verbose: true
36
+
37
+ lint:
38
+ runs-on: ubuntu-latest
39
+ steps:
40
+ - uses: actions/checkout@v4
41
+
42
+ - name: Set up Ruby
43
+ uses: ruby/setup-ruby@v1
44
+ with:
45
+ ruby-version: '3.3.0'
46
+ bundler-cache: true
47
+
48
+ - name: Run RuboCop
49
+ run: bundle exec rubocop
50
+
51
+ build:
52
+ runs-on: ubuntu-latest
53
+ steps:
54
+ - uses: actions/checkout@v4
55
+
56
+ - name: Set up Ruby
57
+ uses: ruby/setup-ruby@v1
58
+ with:
59
+ ruby-version: '3.3.0'
60
+ bundler-cache: true
61
+
62
+ - name: Build gem
63
+ run: gem build *.gemspec
64
+
65
+ - name: Check gem
66
+ run: |
67
+ gem install *.gem
68
+ gem specification *.gem
@@ -0,0 +1,49 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ release:
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ contents: write
13
+ id-token: write
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+
18
+ - name: Set up Ruby
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: '3.3.0'
22
+ bundler-cache: true
23
+
24
+ - name: Run tests
25
+ run: bundle exec rspec
26
+
27
+ - name: Run linter
28
+ run: bundle exec rubocop
29
+
30
+ - name: Build gem
31
+ run: gem build *.gemspec
32
+
33
+ - name: Create GitHub Release
34
+ uses: softprops/action-gh-release@v1
35
+ with:
36
+ files: '*.gem'
37
+ generate_release_notes: true
38
+ env:
39
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
40
+
41
+ - name: Publish to RubyGems
42
+ run: |
43
+ mkdir -p $HOME/.gem
44
+ touch $HOME/.gem/credentials
45
+ chmod 0600 $HOME/.gem/credentials
46
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
47
+ gem push *.gem
48
+ env:
49
+ GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
@@ -0,0 +1,32 @@
1
+ name: Security
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+ schedule:
9
+ # Run security checks daily at 9 AM UTC
10
+ - cron: '0 9 * * *'
11
+
12
+ jobs:
13
+ security:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - name: Set up Ruby
20
+ uses: ruby/setup-ruby@v1
21
+ with:
22
+ ruby-version: '3.3.0'
23
+ bundler-cache: true
24
+
25
+ - name: Install bundler-audit
26
+ run: gem install bundler-audit
27
+
28
+ - name: Run bundler-audit
29
+ run: bundle-audit check --update
30
+
31
+ - name: Run RuboCop Security
32
+ run: bundle exec rubocop --only Security
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
@@ -9,5 +8,21 @@
9
8
  /tmp/
10
9
  /spec/examples.txt
11
10
  *.gem
11
+ .DS_Store
12
12
 
13
+ # Editor directories and files
14
+ .idea/
15
+ .vscode/
16
+ *.swp
17
+ *.swo
18
+ *~
19
+
20
+ # RubyMine
21
+ .idea/
22
+
23
+ # Local environment
24
+ .env.local
25
+ .env.*.local
26
+
27
+ # Claude settings
13
28
  **/.claude/settings.local.json
data/.rubocop.yml CHANGED
@@ -13,7 +13,7 @@ AllCops:
13
13
  Exclude:
14
14
  - public/**/*
15
15
  - vendor/**/*
16
- TargetRubyVersion: 3.1.4
16
+ TargetRubyVersion: 3.3.0
17
17
 
18
18
  RSpec:
19
19
  Enabled: true
@@ -33,3 +33,6 @@ RSpec/MultipleExpectations:
33
33
 
34
34
  RSpec/NestedGroups:
35
35
  Max: 5
36
+
37
+ RSpec/MultipleMemoizedHelpers:
38
+ Max: 12
data/.yardopts ADDED
@@ -0,0 +1,16 @@
1
+ --markup markdown
2
+ --markup-provider kramdown
3
+ --output-dir doc
4
+ --protected
5
+ --private
6
+ --embed-mixins
7
+ --hide-void-return
8
+ --no-progress
9
+ --title "HeadMusic API Documentation"
10
+ --quiet
11
+ lib/**/*.rb
12
+ -
13
+ README.md
14
+ CHANGELOG.md
15
+ CONTRIBUTING.md
16
+ LICENSE.txt
data/CHANGELOG.md ADDED
@@ -0,0 +1,198 @@
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
+ ## [8.2.0] - 2025-06-20
11
+
12
+ ### Added
13
+ - Added comprehensive GitHub Actions CI/CD workflows (test matrix, security scanning, automated releases)
14
+ - Added security tooling with bundler-audit for vulnerability scanning
15
+ - Added YARD documentation generation with kramdown support
16
+ - Added SimpleCov coverage tracking with 90% threshold and branch coverage
17
+ - Added Dependabot configuration for automated dependency updates
18
+ - Added inclusive CONTRIBUTING.md with comprehensive contribution guidelines
19
+ - Added complete CHANGELOG.md tracking version history
20
+ - Added GitHub issue templates (bug reports, feature requests) and PR template
21
+ - Added gemspec metadata fields for better gem documentation and security
22
+ - Added rubygems_mfa_required for enhanced security
23
+
24
+ ### Changed
25
+ - Standardized Ruby version requirement to 3.3.0 across all configuration files
26
+ - Updated and organized development dependencies (removed deprecated codeclimate-test-reporter)
27
+ - Enhanced .gitignore with modern patterns and restored Gemfile.lock tracking
28
+ - Improved RuboCop configuration (increased MultipleMemoizedHelpers max to 12)
29
+ - Enhanced Rakefile with quality, documentation, and coverage tasks
30
+
31
+ ### Removed
32
+ - Removed outdated Travis CI and CircleCI configurations (replaced with GitHub Actions)
33
+
34
+ ## [8.1.1] - 2024-12-20
35
+
36
+ ### Changed
37
+ - Tweaked gemspec summary
38
+
39
+ ## [8.1.0] - 2024-12-20
40
+
41
+ ### Added
42
+ - Enhanced solmization support
43
+
44
+ ### Changed
45
+ - Code cleanup and improvements
46
+ - Improved spec coverage
47
+ - Refactored melodic intervals to separate pitch and note concerns
48
+
49
+ ## [8.0.2] - 2024-12-19
50
+
51
+ ### Fixed
52
+ - RuboCop style fixes
53
+
54
+ ### Changed
55
+ - Improved RuboCop configuration
56
+
57
+ ## [8.0.0] - 2024-12-19
58
+
59
+ ### Changed
60
+ - Major reorganization: moved specs into folders
61
+ - Organized models into modules for better structure
62
+ - **BREAKING**: Module structure changes may require updates to require statements
63
+
64
+ ## [7.0.5] - 2024-01-20
65
+
66
+ ### Changed
67
+ - Upgraded to Ruby 3.3.0
68
+ - Improvements to Spanish translations of recorder
69
+
70
+ ## [7.0.4] - 2024-01-15
71
+
72
+ ### Added
73
+ - Rudiment translations
74
+ - Instrument classification translations
75
+ - Interval translations
76
+
77
+ ## [7.0.3] - 2024-01-10
78
+
79
+ ### Added
80
+ - Russian instrument translations using Cyrillic characters
81
+ - Spanish translations for instruments
82
+
83
+ ### Changed
84
+ - Uncapitalized languages in Italian and Spanish translations
85
+ - Spanish translation corrections and improvements
86
+ - Translation file cleanup
87
+
88
+ ## [7.0.2] - 2023-12-15
89
+
90
+ ### Changed
91
+ - Various improvements and bug fixes
92
+
93
+ ## [7.0.1] - 2023-12-10
94
+
95
+ ### Changed
96
+ - Minor improvements and bug fixes
97
+
98
+ ## [7.0.0] - 2023-12-01
99
+
100
+ ### Changed
101
+ - Major version bump indicating significant changes
102
+ - **BREAKING**: Check upgrade guide for migration instructions
103
+
104
+ ## [6.0.1] - 2023-11-15
105
+
106
+ ### Fixed
107
+ - Bug fixes and improvements
108
+
109
+ ## [6.0.0] - 2023-11-01
110
+
111
+ ### Changed
112
+ - Major architectural improvements
113
+ - **BREAKING**: API changes may require code updates
114
+
115
+ ## [5.0.0] - 2023-10-15
116
+
117
+ ### Changed
118
+ - Significant refactoring of core components
119
+ - **BREAKING**: Check documentation for new API
120
+
121
+ ## [4.0.1] - 2023-09-20
122
+
123
+ ### Fixed
124
+ - Minor bug fixes
125
+
126
+ ## [4.0.0] - 2023-09-15
127
+
128
+ ### Added
129
+ - Expanded instrument support
130
+ - Instrument data improvements
131
+
132
+ ### Changed
133
+ - Enhanced Instrument class functionality
134
+
135
+ ## [3.0.1] - 2023-08-20
136
+
137
+ ### Fixed
138
+ - Minor improvements and fixes
139
+
140
+ ## [3.0.0] - 2023-08-15
141
+
142
+ ### Changed
143
+ - Major version update with architectural improvements
144
+ - **BREAKING**: Significant API changes
145
+
146
+ ## [2.0.0] - 2023-07-01
147
+
148
+ ### Changed
149
+ - Major refactoring of core functionality
150
+ - **BREAKING**: API redesign
151
+
152
+ ## [1.0.0] - 2023-06-01
153
+
154
+ ### Added
155
+ - First stable release
156
+ - Complete music theory rudiments implementation
157
+ - Comprehensive scale and interval support
158
+ - Basic composition and voice handling
159
+
160
+ ## [0.29.0] - 2023-05-15
161
+
162
+ ### Added
163
+ - Additional music theory features
164
+ - Improved documentation
165
+
166
+ ## [0.28.0] - 2023-05-01
167
+
168
+ ### Changed
169
+ - Performance improvements
170
+ - Code organization enhancements
171
+
172
+ ## Earlier versions
173
+
174
+ For changes in versions prior to 0.28.0, please refer to the git history.
175
+
176
+ [Unreleased]: https://github.com/roberthead/head_music/compare/v8.2.0...HEAD
177
+ [8.2.0]: https://github.com/roberthead/head_music/compare/v8.1.1...v8.2.0
178
+ [8.1.1]: https://github.com/roberthead/head_music/compare/v8.1.0...v8.1.1
179
+ [8.1.0]: https://github.com/roberthead/head_music/compare/v8.0.2...v8.1.0
180
+ [8.0.2]: https://github.com/roberthead/head_music/compare/v8.0.0...v8.0.2
181
+ [8.0.0]: https://github.com/roberthead/head_music/compare/v7.0.5...v8.0.0
182
+ [7.0.5]: https://github.com/roberthead/head_music/compare/v7.0.4...v7.0.5
183
+ [7.0.4]: https://github.com/roberthead/head_music/compare/v7.0.3...v7.0.4
184
+ [7.0.3]: https://github.com/roberthead/head_music/compare/v7.0.2...v7.0.3
185
+ [7.0.2]: https://github.com/roberthead/head_music/compare/v7.0.1...v7.0.2
186
+ [7.0.1]: https://github.com/roberthead/head_music/compare/v7.0.0...v7.0.1
187
+ [7.0.0]: https://github.com/roberthead/head_music/compare/v6.0.1...v7.0.0
188
+ [6.0.1]: https://github.com/roberthead/head_music/compare/v6.0.0...v6.0.1
189
+ [6.0.0]: https://github.com/roberthead/head_music/compare/v5.0.0...v6.0.0
190
+ [5.0.0]: https://github.com/roberthead/head_music/compare/v4.0.1...v5.0.0
191
+ [4.0.1]: https://github.com/roberthead/head_music/compare/v4.0.0...v4.0.1
192
+ [4.0.0]: https://github.com/roberthead/head_music/compare/v3.0.1...v4.0.0
193
+ [3.0.1]: https://github.com/roberthead/head_music/compare/v3.0.0...v3.0.1
194
+ [3.0.0]: https://github.com/roberthead/head_music/compare/v2.0.0...v3.0.0
195
+ [2.0.0]: https://github.com/roberthead/head_music/compare/v1.0.0...v2.0.0
196
+ [1.0.0]: https://github.com/roberthead/head_music/compare/v0.29.0...v1.0.0
197
+ [0.29.0]: https://github.com/roberthead/head_music/compare/v0.28.0...v0.29.0
198
+ [0.28.0]: https://github.com/roberthead/head_music/releases/tag/v0.28.0
data/CODE_OF_CONDUCT.md CHANGED
@@ -19,6 +19,7 @@ include:
19
19
  * Gracefully accepting constructive criticism
20
20
  * Focusing on what is best for the community
21
21
  * Showing empathy towards other community members
22
+ * Using inclusive language that respects all musical traditions and genres without suggesting the supremacy of any particular style.
22
23
 
23
24
  Examples of unacceptable behavior by participants include:
24
25
 
@@ -27,6 +28,7 @@ Examples of unacceptable behavior by participants include:
27
28
  * Public or private harassment
28
29
  * Publishing others' private information, such as a physical or electronic address, without explicit permission
29
30
  * Other conduct which could reasonably be considered inappropriate in a professional setting
31
+ * Belittling any musical genre or tradition.
30
32
 
31
33
  ## Our Responsibilities
32
34
 
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,143 @@
1
+ # Contributing to HeadMusic
2
+
3
+ Thank you for considering contributing to HeadMusic!
4
+
5
+ Following these guidelines helps to communicate that you respect the team managing and developing this open source project. In return, we should reciprocate that respect in addressing your issue, assessing changes, and facilitating your pull requests.
6
+
7
+ ## Code of Conduct
8
+
9
+ This project and everyone participating in it is governed by our [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [robert.head@gmail.com](mailto:robert.head@gmail.com).
10
+
11
+ ## What we are looking for
12
+
13
+ HeadMusic is an open source project and we love to receive contributions from our community. There are many ways to contribute, from writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests or writing code which can be incorporated into HeadMusic itself.
14
+
15
+ ## How to contribute
16
+
17
+ ### Reporting Bugs
18
+
19
+ Before creating bug reports, please check the existing issues as you might find out that you don't need to create one. When you are creating a bug report, please include as many details as possible. Fill out [the required template](.github/ISSUE_TEMPLATE/bug_report.md), the information it asks for helps us resolve issues faster.
20
+
21
+ **Great Bug Reports** tend to have:
22
+
23
+ - A quick summary and/or background
24
+ - Steps to reproduce
25
+ - Be specific!
26
+ - Give sample code if you can
27
+ - What you expected would happen
28
+ - What actually happens
29
+ - Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
30
+
31
+ ### Suggesting Enhancements
32
+
33
+ Before creating enhancement suggestions, please check the existing issues as you might find out that you don't need to create one. When you are creating an enhancement suggestion, please include as many details as possible. Fill in [the template](.github/ISSUE_TEMPLATE/feature_request.md), including the steps that you imagine you would take if the feature you're requesting existed.
34
+
35
+ ### Pull Requests
36
+
37
+ The process described here has several goals:
38
+
39
+ - Maintain HeadMusic's quality
40
+ - Fix problems that are important to users
41
+ - Engage the community in working toward the best possible HeadMusic
42
+ - Enable a sustainable system for HeadMusic's maintainers to review contributions
43
+
44
+ Please follow these steps to have your contribution considered by the maintainers:
45
+
46
+ 1. Fork the repo and create your branch from `main`.
47
+ 2. If you've added code that should be tested, add tests.
48
+ 3. If you've changed APIs, update the documentation.
49
+ 4. Ensure the test suite passes (`bundle exec rspec`).
50
+ 5. Make sure your code lints (`bundle exec rubocop`).
51
+ 6. Follow the [pull request template](.github/pull_request_template.md) when creating your PR.
52
+
53
+ ## Development Process
54
+
55
+ Here's how to get started with development:
56
+
57
+ 1. Fork and clone the repository
58
+ 2. Run `bin/setup` to install dependencies
59
+ 3. Run `bundle exec rspec` to run the tests
60
+ 4. Run `bundle exec rubocop` to check code style
61
+ 5. Create a new branch for your feature or bug fix
62
+ 6. Make your changes and add tests
63
+ 7. Run the tests and linter to ensure everything passes
64
+ 8. Commit your changes with a clear commit message
65
+ 9. Push to your fork and submit a pull request
66
+
67
+ ### Setting up your development environment
68
+
69
+ ```bash
70
+ git clone https://github.com/your-username/head_music.git
71
+ cd head_music
72
+ bin/setup
73
+ ```
74
+
75
+ ### Running tests
76
+
77
+ ```bash
78
+ # Run all tests
79
+ bundle exec rspec
80
+
81
+ # Run a specific test file
82
+ bundle exec rspec spec/head_music/rudiment/pitch_spec.rb
83
+
84
+ # Run tests matching a pattern
85
+ bundle exec rspec -e "Pitch"
86
+ ```
87
+
88
+ ### Code style
89
+
90
+ We use RuboCop with the Standard Ruby style guide. Before submitting a PR, please run:
91
+
92
+ ```bash
93
+ bundle exec rubocop
94
+ ```
95
+
96
+ To automatically fix many issues:
97
+
98
+ ```bash
99
+ bundle exec rubocop --autocorrect
100
+ ```
101
+
102
+ ## Styleguides
103
+
104
+ ### Git Commit Messages
105
+
106
+ - Use the present tense ("Add feature" not "Added feature")
107
+ - Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
108
+ - Limit the first line to 72 characters or less
109
+ - Reference issues and pull requests liberally after the first line
110
+ - Consider starting the commit message with an applicable emoji:
111
+ - 🎨 `:art:` when improving the format/structure of the code
112
+ - 🐎 `:racehorse:` when improving performance
113
+ - 📝 `:memo:` when writing docs
114
+ - 🐛 `:bug:` when fixing a bug
115
+ - 🔥 `:fire:` when removing code or files
116
+ - ✅ `:white_check_mark:` when adding tests
117
+ - 🔒 `:lock:` when dealing with security
118
+ - ⬆️ `:arrow_up:` when upgrading dependencies
119
+ - ⬇️ `:arrow_down:` when downgrading dependencies
120
+
121
+ ### Ruby Styleguide
122
+
123
+ All Ruby code must adhere to [Standard Ruby](https://github.com/testdouble/standard).
124
+
125
+ ### Documentation Styleguide
126
+
127
+ - Use [YARD](https://yardoc.org/) for API documentation.
128
+ - Include examples in your documentation when possible.
129
+
130
+ ## Community
131
+
132
+ - Join our discussions in [GitHub Discussions](https://github.com/roberthead/head_music/discussions)
133
+ - Ask questions in the [Issues](https://github.com/roberthead/head_music/issues)
134
+
135
+ ## Recognition
136
+
137
+ Contributors who submit a pull request that gets merged will be added to our [Contributors list](https://github.com/roberthead/head_music/graphs/contributors).
138
+
139
+ ## Questions?
140
+
141
+ Feel free to contact the project maintainer at [robert.head@gmail.com](mailto:robert.head@gmail.com) if you have any questions or concerns.
142
+
143
+ Thank you for contributing to HeadMusic! 🎵
data/Gemfile CHANGED
@@ -8,9 +8,14 @@ gemspec
8
8
  gem "standard", require: false
9
9
 
10
10
  group :test do
11
- gem "codeclimate-test-reporter", "~> 1.0.0"
12
11
  gem "rubocop", require: false
13
12
  gem "rubocop-rspec", require: false
14
13
  gem "rubocop-rake", require: false
15
- gem "simplecov"
14
+ gem "simplecov", require: false
15
+ end
16
+
17
+ group :development do
18
+ gem "bundler-audit", require: false
19
+ gem "yard", require: false
20
+ gem "kramdown", require: false
16
21
  end
data/Gemfile.lock ADDED
@@ -0,0 +1,147 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ head_music (8.2.0)
5
+ activesupport (~> 7.0)
6
+ humanize (~> 2.0)
7
+ i18n (~> 1.8)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ activesupport (7.2.2.1)
13
+ base64
14
+ benchmark (>= 0.3)
15
+ bigdecimal
16
+ concurrent-ruby (~> 1.0, >= 1.3.1)
17
+ connection_pool (>= 2.2.5)
18
+ drb
19
+ i18n (>= 1.6, < 2)
20
+ logger (>= 1.4.2)
21
+ minitest (>= 5.1)
22
+ securerandom (>= 0.3)
23
+ tzinfo (~> 2.0, >= 2.0.5)
24
+ ast (2.4.3)
25
+ base64 (0.2.0)
26
+ benchmark (0.4.0)
27
+ bigdecimal (3.1.9)
28
+ bundler-audit (0.9.2)
29
+ bundler (>= 1.2.0, < 3)
30
+ thor (~> 1.0)
31
+ concurrent-ruby (1.3.5)
32
+ connection_pool (2.5.3)
33
+ diff-lcs (1.6.1)
34
+ docile (1.4.1)
35
+ drb (2.2.1)
36
+ humanize (2.5.1)
37
+ i18n (1.14.7)
38
+ concurrent-ruby (~> 1.0)
39
+ json (2.11.3)
40
+ kramdown (2.5.1)
41
+ rexml (>= 3.3.9)
42
+ language_server-protocol (3.17.0.4)
43
+ lint_roller (1.1.0)
44
+ logger (1.7.0)
45
+ minitest (5.25.5)
46
+ parallel (1.27.0)
47
+ parser (3.3.8.0)
48
+ ast (~> 2.4.1)
49
+ racc
50
+ prism (1.4.0)
51
+ racc (1.8.1)
52
+ rainbow (3.1.1)
53
+ rake (13.2.1)
54
+ regexp_parser (2.10.0)
55
+ rexml (3.4.1)
56
+ rspec (3.13.0)
57
+ rspec-core (~> 3.13.0)
58
+ rspec-expectations (~> 3.13.0)
59
+ rspec-mocks (~> 3.13.0)
60
+ rspec-core (3.13.3)
61
+ rspec-support (~> 3.13.0)
62
+ rspec-expectations (3.13.4)
63
+ diff-lcs (>= 1.2.0, < 2.0)
64
+ rspec-support (~> 3.13.0)
65
+ rspec-its (1.3.1)
66
+ rspec-core (>= 3.0.0)
67
+ rspec-expectations (>= 3.0.0)
68
+ rspec-mocks (3.13.3)
69
+ diff-lcs (>= 1.2.0, < 2.0)
70
+ rspec-support (~> 3.13.0)
71
+ rspec-support (3.13.3)
72
+ rubocop (1.75.4)
73
+ json (~> 2.3)
74
+ language_server-protocol (~> 3.17.0.2)
75
+ lint_roller (~> 1.1.0)
76
+ parallel (~> 1.10)
77
+ parser (>= 3.3.0.2)
78
+ rainbow (>= 2.2.2, < 4.0)
79
+ regexp_parser (>= 2.9.3, < 3.0)
80
+ rubocop-ast (>= 1.44.0, < 2.0)
81
+ ruby-progressbar (~> 1.7)
82
+ unicode-display_width (>= 2.4.0, < 4.0)
83
+ rubocop-ast (1.44.1)
84
+ parser (>= 3.3.7.2)
85
+ prism (~> 1.4)
86
+ rubocop-performance (1.25.0)
87
+ lint_roller (~> 1.1)
88
+ rubocop (>= 1.75.0, < 2.0)
89
+ rubocop-ast (>= 1.38.0, < 2.0)
90
+ rubocop-rake (0.7.1)
91
+ lint_roller (~> 1.1)
92
+ rubocop (>= 1.72.1)
93
+ rubocop-rspec (3.6.0)
94
+ lint_roller (~> 1.1)
95
+ rubocop (~> 1.72, >= 1.72.1)
96
+ ruby-progressbar (1.13.0)
97
+ securerandom (0.4.1)
98
+ simplecov (0.22.0)
99
+ docile (~> 1.1)
100
+ simplecov-html (~> 0.11)
101
+ simplecov_json_formatter (~> 0.1)
102
+ simplecov-html (0.13.1)
103
+ simplecov_json_formatter (0.1.4)
104
+ standard (1.49.0)
105
+ language_server-protocol (~> 3.17.0.2)
106
+ lint_roller (~> 1.0)
107
+ rubocop (~> 1.75.2)
108
+ standard-custom (~> 1.0.0)
109
+ standard-performance (~> 1.8)
110
+ standard-custom (1.0.2)
111
+ lint_roller (~> 1.0)
112
+ rubocop (~> 1.50)
113
+ standard-performance (1.8.0)
114
+ lint_roller (~> 1.1)
115
+ rubocop-performance (~> 1.25.0)
116
+ thor (1.3.2)
117
+ tzinfo (2.0.6)
118
+ concurrent-ruby (~> 1.0)
119
+ unicode-display_width (3.1.4)
120
+ unicode-emoji (~> 4.0, >= 4.0.4)
121
+ unicode-emoji (4.0.4)
122
+ yard (0.9.37)
123
+
124
+ PLATFORMS
125
+ arm64-darwin-22
126
+ arm64-darwin-23
127
+ x86_64-linux
128
+
129
+ DEPENDENCIES
130
+ bundler-audit
131
+ head_music!
132
+ kramdown
133
+ rake (~> 13.0)
134
+ rspec (~> 3.0)
135
+ rspec-its (~> 1.2)
136
+ rubocop
137
+ rubocop-rake
138
+ rubocop-rspec
139
+ simplecov
140
+ standard
141
+ yard
142
+
143
+ RUBY VERSION
144
+ ruby 3.3.0p0
145
+
146
+ BUNDLED WITH
147
+ 2.4.12
data/README.md CHANGED
@@ -1,10 +1,19 @@
1
1
  # HeadMusic
2
2
 
3
- ![Build status](https://circleci.com/gh/roberthead/head_music.svg?style=shield&circle-token=8b39a6f5e809e9baa321e0f13aa06c70c6511794)
4
- [![Code Climate](https://codeclimate.com/github/roberthead/head_music/badges/gpa.svg)](https://codeclimate.com/github/roberthead/head_music)
5
- [![Test Coverage](https://codeclimate.com/github/roberthead/head_music/badges/coverage.svg)](https://codeclimate.com/github/roberthead/head_music/coverage)
3
+ [![CI](https://github.com/roberthead/head_music/workflows/CI/badge.svg)](https://github.com/roberthead/head_music/actions)
4
+ [![Security](https://github.com/roberthead/head_music/workflows/Security/badge.svg)](https://github.com/roberthead/head_music/actions)
5
+ [![Gem Version](https://badge.fury.io/rb/head_music.svg)](https://badge.fury.io/rb/head_music)
6
+ [![Documentation](https://img.shields.io/badge/docs-yard-blue.svg)](https://rubydoc.info/gems/head_music)
6
7
 
7
- The *head_music* ruby gem models the elements of western music theory, such as note names, scales, key signatures, intervals, and chords.
8
+ The **head_music** Ruby gem provides a toolkit for working with Western music theory. Model and manipulate the fundamental elements of music including pitches, scales, key signatures, intervals, and chords.
9
+
10
+ ## Features
11
+
12
+ - **Western Music Theory Fundamentals**: Work with pitches, scales, intervals, chords, and key signatures
13
+ - **Musical Analysis**: Analyze harmonic progressions, voice leading, and counterpoint
14
+ - **Style Analysis**: Rules for species counterpoint and voice leading
15
+ - **Internationalization**: Support for multiple languages (English, French, German, Italian, Russian, Spanish)
16
+ - **Instrument Modeling**: Extensive database of musical instruments with ranges and properties
8
17
 
9
18
  ## Installation
10
19
 
@@ -16,27 +25,107 @@ gem 'head_music'
16
25
 
17
26
  And then execute:
18
27
 
19
- $ bundle
28
+ $ bundle install
20
29
 
21
30
  Or install it yourself as:
22
31
 
23
32
  $ gem install head_music
24
33
 
25
- ## Usage
34
+ ## Quick Start
35
+
36
+ ```ruby
37
+ require 'head_music'
38
+
39
+ # Work with pitches and intervals
40
+ pitch = HeadMusic::Rudiment::Pitch.get('C4')
41
+ higher_pitch = HeadMusic::Rudiment::Pitch.get('E4')
42
+ interval = HeadMusic::Analysis::DiatonicInterval.new(pitch, higher_pitch)
43
+ puts interval.name # => "major third"
44
+
45
+ # Create scales
46
+ scale = HeadMusic::Rudiment::Scale.get('C', :major)
47
+ puts scale.pitches.map(&:to_s) # => ["C4", "D4", "E4", "F4", "G4", "A4", "B4"]
48
+
49
+ # Analyze chords
50
+ pitches = %w[C4 E4 G4].map { |p| HeadMusic::Rudiment::Pitch.get(p) }
51
+ chord = HeadMusic::Analysis::PitchSet.new(pitches)
52
+ puts chord.major_triad? # => true
53
+ ```
54
+
55
+ ## Documentation
56
+
57
+ - **API Documentation**: [rubydoc.info/gems/head_music](https://rubydoc.info/gems/head_music)
58
+ - **Contributing Guide**: [CONTRIBUTING.md](CONTRIBUTING.md)
59
+ - **Changelog**: [CHANGELOG.md](CHANGELOG.md)
26
60
 
27
- HeadMusic can be used as a foundation to build larger applications that notate, analyze, play, or generate music in the language of music theory.
61
+ ## Requirements
62
+
63
+ - Ruby 3.3.0 or higher
64
+ - ActiveSupport 7.0+
28
65
 
29
66
  ## Development
30
67
 
31
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
68
+ After checking out the repo, run `bin/setup` to install dependencies.
69
+
70
+ ### Running Tests
71
+
72
+ ```bash
73
+ # Run all tests
74
+ bundle exec rspec
75
+
76
+ # Run tests with coverage
77
+ bundle exec rake
78
+
79
+ # Run quality checks (tests + linting + security)
80
+ bundle exec rake quality
81
+ ```
82
+
83
+ ### Code Quality
84
+
85
+ ```bash
86
+ # Run linting
87
+ bundle exec rubocop
32
88
 
33
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
89
+ # Run security audit
90
+ bundle exec rake bundle:audit:check
91
+
92
+ # Generate documentation
93
+ bundle exec rake doc
94
+ ```
95
+
96
+ ### Available Rake Tasks
97
+
98
+ - `rake spec` - Run tests
99
+ - `rake quality` - Run tests, linting, and security audit
100
+ - `rake doc` - Generate YARD documentation
101
+ - `rake doc_stats` - Show documentation coverage statistics
102
+ - `rake coverage` - Open coverage report in browser
34
103
 
35
104
  ## Contributing
36
105
 
37
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/head_music. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
106
+ We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
38
107
 
108
+ ## Project Structure
109
+
110
+ ```
111
+ lib/head_music/
112
+ ├── analysis/ # Musical analysis tools (intervals, chords, etc.)
113
+ ├── content/ # Musical content (compositions, voices, notes)
114
+ ├── instruments/ # Instrument definitions and properties
115
+ ├── rudiment/ # Basic music theory elements (pitches, scales, etc.)
116
+ └── style/ # Style analysis and composition rules
117
+ ```
118
+
119
+ ## Code of Conduct
120
+
121
+ This project is intended to be a safe, welcoming space for collaboration. Contributors are expected to adhere to our [Code of Conduct](CODE_OF_CONDUCT.md).
39
122
 
40
123
  ## License
41
124
 
42
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
125
+ The gem is available as open source under the terms of the [MIT License](LICENSE.txt).
126
+
127
+ ## Support
128
+
129
+ - **Issues**: [GitHub Issues](https://github.com/roberthead/head_music/issues)
130
+ - **Discussions**: [GitHub Discussions](https://github.com/roberthead/head_music/discussions)
131
+ - **Security**: For security issues, please email [robert.head@gmail.com](mailto:robert.head@gmail.com)
data/Rakefile CHANGED
@@ -4,9 +4,39 @@ require "standard/rake"
4
4
 
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
 
7
+ begin
8
+ require "yard"
9
+ YARD::Rake::YardocTask.new(:doc) do |t|
10
+ t.files = ["lib/**/*.rb"]
11
+ t.options = %w[--protected --private]
12
+ end
13
+
14
+ desc "Generate documentation and show stats"
15
+ task :doc_stats => :doc do
16
+ sh "yard stats --list-undoc"
17
+ end
18
+ rescue LoadError
19
+ # YARD not available
20
+ end
21
+
22
+ begin
23
+ require "bundler/audit/task"
24
+ Bundler::Audit::Task.new
25
+ rescue LoadError
26
+ # bundler-audit not available
27
+ end
28
+
7
29
  task default: :spec
8
30
 
31
+ desc "Run all quality checks (tests, linting, security audit)"
32
+ task :quality => [:spec, :standard, "bundle:audit:check"]
33
+
9
34
  desc "Open an irb session preloaded with this library"
10
35
  task :console do
11
36
  sh "irb -I lib -r head_music.rb"
12
37
  end
38
+
39
+ desc "Open coverage report in browser"
40
+ task :coverage do
41
+ sh "open coverage/index.html" if File.exist?("coverage/index.html")
42
+ end
data/head_music.gemspec CHANGED
@@ -8,11 +8,20 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["Rob Head"]
9
9
  spec.email = ["robert.head@gmail.com"]
10
10
 
11
- spec.summary = "The rudiments of western music theory."
11
+ spec.summary = "The rudiments of western music theory and analysis."
12
12
  spec.description = "Work with the elements of western music theory, such as pitches, scales, intervals, and chords."
13
13
  spec.homepage = "https://github.com/roberthead/head_music"
14
14
  spec.license = "MIT"
15
15
 
16
+ spec.metadata = {
17
+ "homepage_uri" => spec.homepage,
18
+ "source_code_uri" => "https://github.com/roberthead/head_music",
19
+ "changelog_uri" => "https://github.com/roberthead/head_music/blob/main/CHANGELOG.md",
20
+ "documentation_uri" => "https://rubydoc.info/gems/head_music",
21
+ "bug_tracker_uri" => "https://github.com/roberthead/head_music/issues",
22
+ "rubygems_mfa_required" => "true"
23
+ }
24
+
16
25
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
26
  f.match(%r{^(test|spec|features)/}) || f.match(/\.gem$/)
18
27
  end
@@ -21,7 +30,7 @@ Gem::Specification.new do |spec|
21
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
31
  spec.require_paths = ["lib"]
23
32
 
24
- spec.required_ruby_version = ">= 3.0"
33
+ spec.required_ruby_version = ">= 3.3.0"
25
34
 
26
35
  spec.add_runtime_dependency "activesupport", "~> 7.0"
27
36
  spec.add_runtime_dependency "humanize", "~> 2.0"
@@ -30,4 +39,6 @@ Gem::Specification.new do |spec|
30
39
  spec.add_development_dependency "rake", "~> 13.0"
31
40
  spec.add_development_dependency "rspec", "~> 3.0"
32
41
  spec.add_development_dependency "rspec-its", "~> 1.2"
42
+ spec.add_development_dependency "bundler-audit", "~> 0.9"
43
+ spec.add_development_dependency "yard", "~> 0.9"
33
44
  end
@@ -73,7 +73,7 @@ class HeadMusic::Analysis::DiatonicInterval
73
73
  end
74
74
 
75
75
  def spans?(pitch)
76
- pitch >= lower_pitch && pitch <= higher_pitch
76
+ pitch.between?(lower_pitch, higher_pitch)
77
77
  end
78
78
 
79
79
  def quality
@@ -52,7 +52,7 @@ class HeadMusic::Rudiment::Solmization
52
52
  aliases = []
53
53
  I18n.config.available_locales.each do |locale|
54
54
  translation = I18n.translate("head_music.rudiments.solfege", locale: locale, default: nil)
55
- aliases << translation if translation && translation != 'solfege'
55
+ aliases << translation if translation && translation != "solfege"
56
56
  end
57
57
  aliases.compact.uniq
58
58
  end
@@ -1,3 +1,3 @@
1
1
  module HeadMusic
2
- VERSION = "8.1.1"
2
+ VERSION = "8.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: head_music
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.1.1
4
+ version: 8.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Head
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-05-23 00:00:00.000000000 Z
11
+ date: 2025-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -94,6 +94,34 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.2'
97
+ - !ruby/object:Gem::Dependency
98
+ name: bundler-audit
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.9'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.9'
111
+ - !ruby/object:Gem::Dependency
112
+ name: yard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.9'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.9'
97
125
  description: Work with the elements of western music theory, such as pitches, scales,
98
126
  intervals, and chords.
99
127
  email:
@@ -102,16 +130,24 @@ executables: []
102
130
  extensions: []
103
131
  extra_rdoc_files: []
104
132
  files:
105
- - ".circleci/config.yml"
106
- - ".circleci/setup-rubygems.sh"
133
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
134
+ - ".github/ISSUE_TEMPLATE/feature_request.md"
135
+ - ".github/dependabot.yml"
136
+ - ".github/pull_request_template.md"
137
+ - ".github/workflows/ci.yml"
138
+ - ".github/workflows/release.yml"
139
+ - ".github/workflows/security.yml"
107
140
  - ".gitignore"
108
141
  - ".pairs"
109
142
  - ".rspec"
110
143
  - ".rubocop.yml"
111
144
  - ".ruby-version"
112
- - ".travis.yml"
145
+ - ".yardopts"
146
+ - CHANGELOG.md
113
147
  - CODE_OF_CONDUCT.md
148
+ - CONTRIBUTING.md
114
149
  - Gemfile
150
+ - Gemfile.lock
115
151
  - LICENSE.txt
116
152
  - README.md
117
153
  - Rakefile
@@ -229,7 +265,13 @@ files:
229
265
  homepage: https://github.com/roberthead/head_music
230
266
  licenses:
231
267
  - MIT
232
- metadata: {}
268
+ metadata:
269
+ homepage_uri: https://github.com/roberthead/head_music
270
+ source_code_uri: https://github.com/roberthead/head_music
271
+ changelog_uri: https://github.com/roberthead/head_music/blob/main/CHANGELOG.md
272
+ documentation_uri: https://rubydoc.info/gems/head_music
273
+ bug_tracker_uri: https://github.com/roberthead/head_music/issues
274
+ rubygems_mfa_required: 'true'
233
275
  post_install_message:
234
276
  rdoc_options: []
235
277
  require_paths:
@@ -238,7 +280,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
238
280
  requirements:
239
281
  - - ">="
240
282
  - !ruby/object:Gem::Version
241
- version: '3.0'
283
+ version: 3.3.0
242
284
  required_rubygems_version: !ruby/object:Gem::Requirement
243
285
  requirements:
244
286
  - - ">="
@@ -248,5 +290,5 @@ requirements: []
248
290
  rubygems_version: 3.5.6
249
291
  signing_key:
250
292
  specification_version: 4
251
- summary: The rudiments of western music theory.
293
+ summary: The rudiments of western music theory and analysis.
252
294
  test_files: []
data/.circleci/config.yml DELETED
@@ -1,22 +0,0 @@
1
- version: 2
2
- jobs:
3
- build:
4
- docker:
5
- - image: circleci/ruby:2.6.7
6
- steps:
7
- - checkout
8
- - restore_cache:
9
- keys:
10
- - v1-gems-{{ checksum "Gemfile.lock" }}
11
- - v1-gems-
12
- - run:
13
- name: Bundle Install
14
- command: bundle check || bundle install
15
- - save_cache:
16
- key: v1-gems-{{ checksum "Gemfile.lock" }}
17
- paths:
18
- - vendor/bundle
19
- - run:
20
- command: bundle exec rspec
21
- - store_test_results:
22
- path: test_results
@@ -1,3 +0,0 @@
1
- mkdir ~/.gem
2
- echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
3
- chmod 0600 /home/circleci/.gem/credentials
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 3.1.4
5
- before_install: gem install bundler