nomono 1.0.8 → 1.1.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +49 -2
- data/LICENSE.md +1 -1
- data/README.md +34 -15
- data/lib/nomono/resolver.rb +64 -2
- data/lib/nomono/version.rb +1 -1
- data/sig/nomono.rbs +4 -0
- data.tar.gz.sig +0 -0
- metadata +18 -36
- metadata.gz.sig +0 -0
- data/AGPL-3.0-only.md +0 -235
- data/CITATION.cff +0 -20
- data/CODE_OF_CONDUCT.md +0 -134
- data/CONTRIBUTING.md +0 -275
- data/FUNDING.md +0 -70
- data/RUBOCOP.md +0 -71
- data/SECURITY.md +0 -21
- data/certs/pboling.pem +0 -27
- data/sig/nomono/version.rbs +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 30a48c913f151ef3d5ef5986e2982c2a6e851a87f2ee684fcb7d850d3a0534be
|
|
4
|
+
data.tar.gz: b2b24aa72a8c07dc3b2b13e4a541f01438bf8749a4f3c4c4c68243a866da624a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c7af0d405f221b78b03fab5fb7daa3adbabdc1a0761ce3e80eed907a7a7a59152412fa1ed15af0a7678813c97c146b29f624b246c1b660cb1f6173b41c77b136
|
|
7
|
+
data.tar.gz: 58efcac31f6647073ca1305b3e08020bf232e65e55490dd31fc4113cb2c13c8e2b59a31f8aee22a64057b7b07206421079a36767d15edc35325840d21dba86f1
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,49 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.1.0] - 2026-07-22
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.1.0][1.1.0t]
|
|
36
|
+
- COVERAGE: 97.56% -- 120/123 lines in 7 files
|
|
37
|
+
- BRANCH COVERAGE: 86.67% -- 39/45 branches in 7 files
|
|
38
|
+
- 12.50% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- Added opt-in path alias normalization so local sibling paths can be rewritten
|
|
43
|
+
to a configured canonical spelling before Bundler writes them to lockfiles.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- kettle-jem-template-20260716-001 - Shim gemspec manifests now include
|
|
48
|
+
`LICENSE.md` instead of nonexistent `LICENSE.txt`.
|
|
49
|
+
- kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
|
|
50
|
+
repository-only files by default to reduce downstream distro packaging churn.
|
|
51
|
+
|
|
52
|
+
- kettle-jem-template-20260720-001 - Generated READMEs can now render
|
|
53
|
+
template-managed corporate sponsor logos from project or family config.
|
|
54
|
+
- kettle-jem-template-20260720-002 - Generated development Gemfiles now use the
|
|
55
|
+
released `tree_sitter_language_pack` gem 1.13.3 or newer by default.
|
|
56
|
+
- kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver
|
|
57
|
+
config now uses the installed `smorg-rb` Ruby driver name.
|
|
58
|
+
- kettle-jem-template-20260720-004 - Generated multi-engine workflow files now
|
|
59
|
+
omit JRuby and TruffleRuby jobs when project config declares MRI-only engines.
|
|
60
|
+
- kettle-jem-template-20260720-005 - Generated README Support & Community rows
|
|
61
|
+
now include a RubyForum help badge.
|
|
62
|
+
|
|
63
|
+
### Fixed
|
|
64
|
+
|
|
65
|
+
- Documented why `nomono` uses an explicit Gemfile loader instead of the
|
|
66
|
+
Bundler plugin DSL or RubyGems plugin autoload hooks, and simplified
|
|
67
|
+
`nomono`'s own local Gemfiles to load the local Bundler integration directly.
|
|
68
|
+
|
|
69
|
+
- Addressed review feedback by keeping split license detail links pointed at
|
|
70
|
+
the source repository, keeping `tree_sitter_language_pack` in the templating
|
|
71
|
+
dependency path only, and regenerating YARD documentation.
|
|
72
|
+
|
|
73
|
+
- Local modular Gemfiles now load `nomono/bundler` with the normal Bundler
|
|
74
|
+
require path so RuboCop Gradual style checks pass under appraisal bundles.
|
|
75
|
+
|
|
33
76
|
## [1.0.8] - 2026-07-13
|
|
34
77
|
|
|
35
78
|
- TAG: [v1.0.8][1.0.8t]
|
|
@@ -82,7 +125,7 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
82
125
|
### Fixed
|
|
83
126
|
|
|
84
127
|
- Corrected OpenCollective funding metadata to use the `kettle-dev` collective.
|
|
85
|
-
- Updated the default local workspace root from `$HOME/src/kettle-
|
|
128
|
+
- Updated the default local workspace root from `$HOME/src/kettle-dev` to
|
|
86
129
|
`$HOME/src/my`.
|
|
87
130
|
|
|
88
131
|
## [1.0.4] - 2026-06-14
|
|
@@ -178,7 +221,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
178
221
|
- TAG: [v1.0.0][1.0.0t]
|
|
179
222
|
- 12.50% documented
|
|
180
223
|
|
|
181
|
-
[Unreleased]: https://github.com/kettle-dev/nomono/compare/v1.0
|
|
224
|
+
[Unreleased]: https://github.com/kettle-dev/nomono/compare/v1.1.0...HEAD
|
|
225
|
+
[1.1.0]: https://github.com/kettle-dev/nomono/compare/v1.0.9...v1.1.0
|
|
226
|
+
[1.1.0t]: https://github.com/kettle-dev/nomono/releases/tag/v1.1.0
|
|
227
|
+
[1.0.9]: https://github.com/kettle-dev/nomono/compare/v1.0.8...v1.0.9
|
|
228
|
+
[1.0.9t]: https://github.com/kettle-dev/nomono/releases/tag/v1.0.9
|
|
182
229
|
[1.0.8]: https://github.com/kettle-dev/nomono/compare/v1.0.7...v1.0.8
|
|
183
230
|
[1.0.8t]: https://github.com/kettle-dev/nomono/releases/tag/v1.0.8
|
|
184
231
|
[1.0.7]: https://github.com/kettle-dev/nomono/compare/v1.0.6...v1.0.7
|
data/LICENSE.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This project is made available under the following license.
|
|
4
4
|
Choose the option that best fits your use case:
|
|
5
5
|
|
|
6
|
-
- [AGPL-3.0-only](AGPL-3.0-only.md)
|
|
6
|
+
- [AGPL-3.0-only](https://github.com/kettle-dev/nomono/blob/main/AGPL-3.0-only.md)
|
|
7
7
|
|
|
8
8
|
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
|
|
9
9
|
|
data/README.md
CHANGED
|
@@ -40,8 +40,8 @@ Use `require "nomono/bundler"` from Gemfiles or modular Gemfiles; this is the ex
|
|
|
40
40
|
| Works with Truffle Ruby | [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
|
|
41
41
|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
42
42
|
| Works with MRI Ruby 3 | [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
|
|
43
|
-
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
|
|
44
|
-
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on
|
|
43
|
+
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
|
|
44
|
+
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
|
|
45
45
|
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
|
|
46
46
|
| Compliance | [![License: AGPL-3.0-only][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
|
|
47
47
|
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
|
|
@@ -139,16 +139,17 @@ Nomono has an *environment contract*. By default (`prefix: "NOMONO_GEMS"`):
|
|
|
139
139
|
- Any other value — treated as an explicit workspace root path (`/absolute/path` used as-is; relative path prepended with `$HOME`)
|
|
140
140
|
- `NOMONO_GEMS_VENDORED_GEMS` (or legacy `VENDORED_GEMS`) is a comma-delimited list of gem names resolved from a vendor directory. This is **independent** of `NOMONO_GEMS_DEV` — it applies when you have vendored copies of specific gems that should override both the workspace and released versions.
|
|
141
141
|
- `NOMONO_GEMS_VENDOR_GEM_DIR` (or legacy `VENDOR_GEM_DIR`) is the base path of the vendor directory used for gems listed in `NOMONO_GEMS_VENDORED_GEMS`. Defaults to `$workspace_root/vendor`. This is **not** an alternative form of the workspace root — it only affects vendored gems.
|
|
142
|
+
- `NOMONO_GEMS_PATH_ALIASES` (or global fallback `NOMONO_PATH_ALIASES`) is a comma-delimited list of `source=canonical` absolute path aliases. Each pair must resolve to the same real directory. Matching local gem paths are rewritten to the canonical spelling before Bundler receives them, preventing `Gemfile.lock` churn from equivalent paths such as `/var/home/...` and `/home/...`.
|
|
142
143
|
- `NOMONO_GEMS_DEBUG` enables debug output from nomono.
|
|
143
144
|
|
|
144
145
|
### Examples
|
|
145
146
|
|
|
146
|
-
For example, in the `kettle-dev` family of gems, which nomono is a part of, the parameters used are `prefix: "
|
|
147
|
+
For example, in the `kettle-dev` family of gems, which nomono is a part of, the parameters used are `prefix: "KETTLE_DEV"`, `path_env: "KETTLE_DEV_DEV"`.
|
|
147
148
|
This means that the following is true:
|
|
148
149
|
|
|
149
|
-
- `
|
|
150
|
-
- `
|
|
151
|
-
- `
|
|
150
|
+
- `KETTLE_DEV_DEV=false` (or unset) — released gems from configured gem server (CI / single-gem development default)
|
|
151
|
+
- `KETTLE_DEV_DEV=true` — local sibling gems from `$HOME/src/kettle-dev/<gem>` (recommended for full-workspace development)
|
|
152
|
+
- `KETTLE_DEV_DEV=/custom/path` — local sibling gems from `/custom/path/<gem>` (non-standard workspace layout only)
|
|
152
153
|
|
|
153
154
|
You can override the env variable names via options. Here is an example for use with rubocop-lts gems:
|
|
154
155
|
|
|
@@ -172,10 +173,10 @@ when they are enabled:
|
|
|
172
173
|
```ruby
|
|
173
174
|
source "https://gem.coop"
|
|
174
175
|
|
|
175
|
-
if ENV.fetch("
|
|
176
|
+
if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false").zero?
|
|
176
177
|
gem "kettle-dev", "~> 2.2", ">= 2.2.15"
|
|
177
178
|
gem "kettle-test", "~> 2.0", ">= 2.0.6"
|
|
178
|
-
gem "kettle-soup-cover", "~> 3.0
|
|
179
|
+
gem "kettle-soup-cover", "~> 3.0", ">= 3.0.1"
|
|
179
180
|
else
|
|
180
181
|
eval_gemfile "gemfiles/modular/local.gemfile"
|
|
181
182
|
end
|
|
@@ -188,8 +189,11 @@ require "nomono/bundler"
|
|
|
188
189
|
|
|
189
190
|
eval_nomono_gems(
|
|
190
191
|
gems: %w[kettle-dev kettle-test kettle-soup-cover],
|
|
191
|
-
prefix: "
|
|
192
|
-
path_env: "
|
|
192
|
+
prefix: "KETTLE_DEV",
|
|
193
|
+
path_env: "KETTLE_DEV_DEV",
|
|
194
|
+
path_aliases: {
|
|
195
|
+
"/var/home/pboling" => "/home/pboling"
|
|
196
|
+
},
|
|
193
197
|
vendored_gems_env: "VENDORED_GEMS",
|
|
194
198
|
vendor_gem_dir_env: "VENDOR_GEM_DIR",
|
|
195
199
|
debug_env: "KETTLE_DEV_DEBUG"
|
|
@@ -198,9 +202,22 @@ eval_nomono_gems(
|
|
|
198
202
|
|
|
199
203
|
This is the pattern generated by `kettle-jem`: the Gemfile remains readable,
|
|
200
204
|
and nomono owns the path normalization for sibling repositories. When
|
|
201
|
-
`
|
|
205
|
+
`KETTLE_DEV_DEV=false` or is unset, the modular local override is skipped and
|
|
202
206
|
Bundler resolves released gems normally.
|
|
203
207
|
|
|
208
|
+
`nomono` uses an explicit `require "nomono/bundler"` loader instead of the
|
|
209
|
+
Bundler plugin DSL. Bundler plugins are installed extensions for Bundler
|
|
210
|
+
commands, source handlers, and lifecycle hooks; `nomono` only needs to install
|
|
211
|
+
Gemfile macros while Bundler is evaluating a Gemfile. The root Gemfile should
|
|
212
|
+
declare the compatible `nomono` version, and modular local Gemfiles should fail
|
|
213
|
+
normally if that loader is unavailable or incompatible.
|
|
214
|
+
|
|
215
|
+
`nomono` also avoids RubyGems plugin autoload hooks for this path. Those hooks
|
|
216
|
+
are appropriate for gems that must globally patch RubyGems or Bundler before
|
|
217
|
+
dependency resolution can work. Local sibling overrides do not need cold-boot
|
|
218
|
+
global patches: the root Gemfile installs `nomono`, and the ENV-gated modular
|
|
219
|
+
Gemfile explicitly loads the macros only when it needs them.
|
|
220
|
+
|
|
204
221
|
## 🔐 Security
|
|
205
222
|
|
|
206
223
|
See [SECURITY.md][🔐security].
|
|
@@ -286,7 +303,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
|
|
|
286
303
|
|
|
287
304
|
## 📄 License
|
|
288
305
|
|
|
289
|
-
The gem is available under the following license: [AGPL-3.0-only](AGPL-3.0-only.md).
|
|
306
|
+
The gem is available under the following license: [AGPL-3.0-only](https://github.com/kettle-dev/nomono/blob/main/AGPL-3.0-only.md).
|
|
290
307
|
See [LICENSE.md][📄license] for details.
|
|
291
308
|
|
|
292
309
|
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
|
|
@@ -356,6 +373,8 @@ Thanks for RTFM. ☺️
|
|
|
356
373
|
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
|
|
357
374
|
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
|
|
358
375
|
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
|
|
376
|
+
[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
377
|
+
[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
|
|
359
378
|
|
|
360
379
|
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
|
361
380
|
[⛳️gem-namespace]: https://github.com/kettle-dev/nomono
|
|
@@ -401,7 +420,7 @@ Thanks for RTFM. ☺️
|
|
|
401
420
|
[📜src-gl]: https://gitlab.com/kettle-dev/nomono
|
|
402
421
|
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
|
|
403
422
|
[📜src-cb]: https://codeberg.org/kettle-dev/nomono
|
|
404
|
-
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=
|
|
423
|
+
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
|
|
405
424
|
[📜src-gh]: https://github.com/kettle-dev/nomono
|
|
406
425
|
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
407
426
|
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
@@ -485,12 +504,12 @@ Thanks for RTFM. ☺️
|
|
|
485
504
|
[📌gitmoji]: https://gitmoji.dev
|
|
486
505
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
487
506
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
488
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
507
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.123-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
489
508
|
[🔐security]: https://github.com/kettle-dev/nomono/blob/main/SECURITY.md
|
|
490
509
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
491
510
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
492
511
|
[📄license]: LICENSE.md
|
|
493
|
-
[📄license-ref]: AGPL-3.0-only.md
|
|
512
|
+
[📄license-ref]: https://github.com/kettle-dev/nomono/blob/main/AGPL-3.0-only.md
|
|
494
513
|
[📄license-img]: https://img.shields.io/badge/License-AGPL--3.0--only-259D6C.svg
|
|
495
514
|
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-x
|
|
496
515
|
[📄license-compat-img]: https://img.shields.io/badge/Apache_Incompatible:_Category_X-%E2%9C%97-C0392B.svg?style=flat&logo=Apache
|
data/lib/nomono/resolver.rb
CHANGED
|
@@ -12,7 +12,7 @@ module Nomono
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def gems(gems:, prefix: "NOMONO_GEMS", allowlist: gems, path_env: nil, vendored_gems_env: nil, vendor_gem_dir_env: nil,
|
|
15
|
-
debug_env: nil, root: ["src", "my"], strict: true)
|
|
15
|
+
debug_env: nil, path_aliases: nil, path_aliases_env: nil, root: ["src", "my"], strict: true, **_options)
|
|
16
16
|
requested = normalize_gems(gems)
|
|
17
17
|
allowed = normalize_gems(allowlist)
|
|
18
18
|
requested.each { |gem_name| validate_gem_name!(gem_name, allowed, strict: strict) }
|
|
@@ -25,10 +25,13 @@ module Nomono
|
|
|
25
25
|
vendored = parse_vendored(fetch_with_fallback(vendored_gems_env || "#{prefix}_VENDORED_GEMS", "", "VENDORED_GEMS"), allowed)
|
|
26
26
|
vendor_dir_value = fetch_with_fallback(vendor_gem_dir_env || "#{prefix}_VENDOR_GEM_DIR", File.join(dev_root, "vendor"), "VENDOR_GEM_DIR")
|
|
27
27
|
vendor_dir = absolutize(vendor_dir_value)
|
|
28
|
+
aliases = normalize_path_aliases(
|
|
29
|
+
path_aliases || fetch_with_fallback(path_aliases_env || "#{prefix}_PATH_ALIASES", "", "NOMONO_PATH_ALIASES")
|
|
30
|
+
)
|
|
28
31
|
|
|
29
32
|
gem_paths = requested.each_with_object({}) do |gem_name, memo|
|
|
30
33
|
base = vendored.include?(gem_name) ? vendor_dir : dev_root
|
|
31
|
-
memo[gem_name] = File.join(base, gem_name)
|
|
34
|
+
memo[gem_name] = normalize_path_alias(File.join(base, gem_name), aliases)
|
|
32
35
|
end
|
|
33
36
|
|
|
34
37
|
debug_key = debug_env || "#{prefix}_DEBUG"
|
|
@@ -86,6 +89,65 @@ module Nomono
|
|
|
86
89
|
join_home(path)
|
|
87
90
|
end
|
|
88
91
|
|
|
92
|
+
def normalize_path_aliases(value)
|
|
93
|
+
aliases = case value
|
|
94
|
+
when nil
|
|
95
|
+
[]
|
|
96
|
+
when Hash
|
|
97
|
+
value.map { |source, canonical| [source.to_s, canonical.to_s] }
|
|
98
|
+
when Array
|
|
99
|
+
value.map do |entry|
|
|
100
|
+
unless entry.respond_to?(:to_ary) && entry.to_ary.size == 2
|
|
101
|
+
raise Error, "path aliases must be configured as source=canonical pairs"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
entry.to_ary.map(&:to_s)
|
|
105
|
+
end
|
|
106
|
+
else
|
|
107
|
+
value.to_s.split(",").map do |entry|
|
|
108
|
+
next if entry.strip.empty?
|
|
109
|
+
|
|
110
|
+
source, canonical = entry.split("=", 2).map { |part| part.to_s.strip }
|
|
111
|
+
[source, canonical]
|
|
112
|
+
end.compact
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
aliases.map do |source, canonical|
|
|
116
|
+
validate_path_alias!(source, canonical)
|
|
117
|
+
[strip_trailing_slash(source), strip_trailing_slash(canonical)]
|
|
118
|
+
end.sort_by { |source, _canonical| -source.length }
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def validate_path_alias!(source, canonical)
|
|
122
|
+
if source.to_s.empty? || canonical.to_s.empty?
|
|
123
|
+
raise Error, "path aliases must be configured as source=canonical pairs"
|
|
124
|
+
end
|
|
125
|
+
unless source.start_with?("/") && canonical.start_with?("/")
|
|
126
|
+
raise Error, "path aliases must use absolute paths"
|
|
127
|
+
end
|
|
128
|
+
return if File.realpath(source) == File.realpath(canonical)
|
|
129
|
+
|
|
130
|
+
raise Error, "path alias #{source}=#{canonical} does not resolve to the same directory"
|
|
131
|
+
rescue SystemCallError => e
|
|
132
|
+
raise Error, "path alias #{source}=#{canonical} cannot be verified: #{e.message}"
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def normalize_path_alias(path, aliases)
|
|
136
|
+
aliases.each do |source, canonical|
|
|
137
|
+
next unless path == source || path.start_with?("#{source}/")
|
|
138
|
+
|
|
139
|
+
return "#{canonical}#{path.delete_prefix(source)}"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
path
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def strip_trailing_slash(path)
|
|
146
|
+
path = path.dup
|
|
147
|
+
path.chop! while path.end_with?("/")
|
|
148
|
+
path
|
|
149
|
+
end
|
|
150
|
+
|
|
89
151
|
def join_home(*segments)
|
|
90
152
|
File.join(home, *segments)
|
|
91
153
|
end
|
data/lib/nomono/version.rb
CHANGED
data/sig/nomono.rbs
CHANGED
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nomono
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -46,7 +46,7 @@ dependencies:
|
|
|
46
46
|
version: '2.3'
|
|
47
47
|
- - ">="
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: 2.3.
|
|
49
|
+
version: 2.3.7
|
|
50
50
|
type: :development
|
|
51
51
|
prerelease: false
|
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -56,7 +56,7 @@ dependencies:
|
|
|
56
56
|
version: '2.3'
|
|
57
57
|
- - ">="
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: 2.3.
|
|
59
|
+
version: 2.3.7
|
|
60
60
|
- !ruby/object:Gem::Dependency
|
|
61
61
|
name: bundler-audit
|
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -111,20 +111,20 @@ dependencies:
|
|
|
111
111
|
requirements:
|
|
112
112
|
- - "~>"
|
|
113
113
|
- !ruby/object:Gem::Version
|
|
114
|
-
version: '3.
|
|
114
|
+
version: '3.2'
|
|
115
115
|
- - ">="
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: 3.
|
|
117
|
+
version: 3.2.0
|
|
118
118
|
type: :development
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
122
|
- - "~>"
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '3.
|
|
124
|
+
version: '3.2'
|
|
125
125
|
- - ">="
|
|
126
126
|
- !ruby/object:Gem::Version
|
|
127
|
-
version: 3.
|
|
127
|
+
version: 3.2.0
|
|
128
128
|
- !ruby/object:Gem::Dependency
|
|
129
129
|
name: kettle-test
|
|
130
130
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -134,7 +134,7 @@ dependencies:
|
|
|
134
134
|
version: '2.0'
|
|
135
135
|
- - ">="
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: 2.0.
|
|
137
|
+
version: 2.0.12
|
|
138
138
|
type: :development
|
|
139
139
|
prerelease: false
|
|
140
140
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -144,27 +144,27 @@ dependencies:
|
|
|
144
144
|
version: '2.0'
|
|
145
145
|
- - ">="
|
|
146
146
|
- !ruby/object:Gem::Version
|
|
147
|
-
version: 2.0.
|
|
147
|
+
version: 2.0.12
|
|
148
148
|
- !ruby/object:Gem::Dependency
|
|
149
149
|
name: turbo_tests2
|
|
150
150
|
requirement: !ruby/object:Gem::Requirement
|
|
151
151
|
requirements:
|
|
152
152
|
- - "~>"
|
|
153
153
|
- !ruby/object:Gem::Version
|
|
154
|
-
version: '3.
|
|
154
|
+
version: '3.2'
|
|
155
155
|
- - ">="
|
|
156
156
|
- !ruby/object:Gem::Version
|
|
157
|
-
version: 3.
|
|
157
|
+
version: 3.2.0
|
|
158
158
|
type: :development
|
|
159
159
|
prerelease: false
|
|
160
160
|
version_requirements: !ruby/object:Gem::Requirement
|
|
161
161
|
requirements:
|
|
162
162
|
- - "~>"
|
|
163
163
|
- !ruby/object:Gem::Version
|
|
164
|
-
version: '3.
|
|
164
|
+
version: '3.2'
|
|
165
165
|
- - ">="
|
|
166
166
|
- !ruby/object:Gem::Version
|
|
167
|
-
version: 3.
|
|
167
|
+
version: 3.2.0
|
|
168
168
|
- !ruby/object:Gem::Dependency
|
|
169
169
|
name: ruby-progressbar
|
|
170
170
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -225,28 +225,11 @@ email:
|
|
|
225
225
|
- floss@galtzo.com
|
|
226
226
|
executables: []
|
|
227
227
|
extensions: []
|
|
228
|
-
extra_rdoc_files:
|
|
229
|
-
- CHANGELOG.md
|
|
230
|
-
- CITATION.cff
|
|
231
|
-
- CODE_OF_CONDUCT.md
|
|
232
|
-
- CONTRIBUTING.md
|
|
233
|
-
- FUNDING.md
|
|
234
|
-
- LICENSE.md
|
|
235
|
-
- README.md
|
|
236
|
-
- RUBOCOP.md
|
|
237
|
-
- SECURITY.md
|
|
228
|
+
extra_rdoc_files: []
|
|
238
229
|
files:
|
|
239
|
-
- AGPL-3.0-only.md
|
|
240
230
|
- CHANGELOG.md
|
|
241
|
-
- CITATION.cff
|
|
242
|
-
- CODE_OF_CONDUCT.md
|
|
243
|
-
- CONTRIBUTING.md
|
|
244
|
-
- FUNDING.md
|
|
245
231
|
- LICENSE.md
|
|
246
232
|
- README.md
|
|
247
|
-
- RUBOCOP.md
|
|
248
|
-
- SECURITY.md
|
|
249
|
-
- certs/pboling.pem
|
|
250
233
|
- lib/nomono.rb
|
|
251
234
|
- lib/nomono/bundler.rb
|
|
252
235
|
- lib/nomono/core.rb
|
|
@@ -255,16 +238,15 @@ files:
|
|
|
255
238
|
- lib/nomono/version.rb
|
|
256
239
|
- lib/nomono/version_gem.rb
|
|
257
240
|
- sig/nomono.rbs
|
|
258
|
-
- sig/nomono/version.rbs
|
|
259
241
|
homepage: https://github.com/kettle-dev/nomono
|
|
260
242
|
licenses:
|
|
261
243
|
- AGPL-3.0-only
|
|
262
244
|
metadata:
|
|
263
245
|
homepage_uri: https://nomono.galtzo.com/
|
|
264
|
-
source_code_uri: https://github.com/kettle-dev/nomono/tree/v1.0
|
|
265
|
-
changelog_uri: https://github.com/kettle-dev/nomono/blob/v1.0
|
|
246
|
+
source_code_uri: https://github.com/kettle-dev/nomono/tree/v1.1.0
|
|
247
|
+
changelog_uri: https://github.com/kettle-dev/nomono/blob/v1.1.0/CHANGELOG.md
|
|
266
248
|
bug_tracker_uri: https://github.com/kettle-dev/nomono/issues
|
|
267
|
-
documentation_uri: https://www.rubydoc.info/gems/nomono/1.0
|
|
249
|
+
documentation_uri: https://www.rubydoc.info/gems/nomono/1.1.0
|
|
268
250
|
funding_uri: https://github.com/sponsors/pboling
|
|
269
251
|
wiki_uri: https://github.com/kettle-dev/nomono/wiki
|
|
270
252
|
news_uri: https://www.railsbling.com/tags/nomono
|
|
@@ -293,7 +275,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
293
275
|
- !ruby/object:Gem::Version
|
|
294
276
|
version: '0'
|
|
295
277
|
requirements: []
|
|
296
|
-
rubygems_version: 4.0.
|
|
278
|
+
rubygems_version: 4.0.16
|
|
297
279
|
specification_version: 4
|
|
298
280
|
summary: 1️⃣ ENV-driven Gemfile macros for sibling gem path resolution
|
|
299
281
|
test_files: []
|
metadata.gz.sig
CHANGED
|
Binary file
|