nomono 1.0.8 → 1.1.1

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: c39cad5d16b4da60a296208e967e4cf7473711c8c73e840d19264b747e8e15aa
4
- data.tar.gz: e58781ccdc8bbd8c4319a80b7298b38799fd94cbe5c10e81b850544e9cd59038
3
+ metadata.gz: 2230196c44321a0295b6d424a5e55705829fb34dabd9a2ba330cfe957aa16aa7
4
+ data.tar.gz: 4df38075d47663488924162ddbfbd1c506b0b284b6daa566aa030833835c25b0
5
5
  SHA512:
6
- metadata.gz: dc977e38fe11036afb2ba165cb6567871bb40b475fb81b32684cc8937b46bc8f4b5b4827a1ee3a74c074df1f4c0d713ef459b27a9b8351e31a78670414987621
7
- data.tar.gz: baf653629331e08b56b69944e08fdcf861c173004f965e93ae729a557cd019d8f66b6024ccce30fda6d4dccbce52c33be1531ac0d1be5b4ea03c2757e1aa058d
6
+ metadata.gz: 0e7dcbeaf613752a03e3053dcf9434630e48b09eadab66ea957d268cdbb90d0f6acf1553fcc534899d88e52efb741dd362233b8ef25f2595aa165a155de32e88
7
+ data.tar.gz: '08af5e9260fe967953f166e716415336703cd3219bc37e7c94363a1e7205c2fe3a5482dfd2bdf5df6b30533076c5db848603a89c54c35fede6859b1dc19a3ac2'
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,89 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.1.1] - 2026-07-28
34
+
35
+ - TAG: [v1.1.1][1.1.1t]
36
+ - COVERAGE: 94.31% -- 116/123 lines in 7 files
37
+ - BRANCH COVERAGE: 86.67% -- 39/45 branches in 7 files
38
+ - 25.00% documented
39
+
40
+ ### Added
41
+
42
+ - kettle-jem-template-20260726-001 - Projects now include YARD lint
43
+ configuration and documentation dependencies so documentation issues fail
44
+ before generated docs are refreshed.
45
+
46
+ - kettle-jem-template-20260727-001 - Spec harness documentation now lists the
47
+ RSpec helpers provided by `kettle-test`.
48
+
49
+ ### Changed
50
+
51
+ - kettle-jem-template-20260725-001 - Release pull request branches beginning
52
+ with `feature/release` now run JRuby and TruffleRuby workflows.
53
+ - kettle-jem-template-20260725-002 - Version specs now use `anonymous_loader` to
54
+ cover `version.rb` without redefining constants, or are removed when version
55
+ specs are not managed for the project.
56
+
57
+ - kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
58
+ setup-ruby-flash planning and can prepare appraisal-only jobs without
59
+ installing the main Gemfile bundle.
60
+
61
+ ### Fixed
62
+
63
+ - kettle-jem-template-20260726-002 - Generated version files now document their
64
+ version namespace and constants, reducing warning-only YARD lint output.
65
+
66
+ - kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
67
+ QLTY, and Codecov as optional, so provider outages do not fail CI when local
68
+ coverage thresholds still pass.
69
+ - kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
70
+ same `gemfiles/vendor/bundle` tree as `.gitignore`, so vendored dependency
71
+ installs are not reported as project lint debt.
72
+
73
+ ## [1.1.0] - 2026-07-22
74
+
75
+ - TAG: [v1.1.0][1.1.0t]
76
+ - COVERAGE: 97.56% -- 120/123 lines in 7 files
77
+ - BRANCH COVERAGE: 86.67% -- 39/45 branches in 7 files
78
+ - 12.50% documented
79
+
80
+ ### Added
81
+
82
+ - Added opt-in path alias normalization so local sibling paths can be rewritten
83
+ to a configured canonical spelling before Bundler writes them to lockfiles.
84
+
85
+ ### Changed
86
+
87
+ - kettle-jem-template-20260716-001 - Shim gemspec manifests now include
88
+ `LICENSE.md` instead of nonexistent `LICENSE.txt`.
89
+ - kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
90
+ repository-only files by default to reduce downstream distro packaging churn.
91
+
92
+ - kettle-jem-template-20260720-001 - Generated READMEs can now render
93
+ template-managed corporate sponsor logos from project or family config.
94
+ - kettle-jem-template-20260720-002 - Generated development Gemfiles now use the
95
+ released `tree_sitter_language_pack` gem 1.13.3 or newer by default.
96
+ - kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver
97
+ config now uses the installed `smorg-rb` Ruby driver name.
98
+ - kettle-jem-template-20260720-004 - Generated multi-engine workflow files now
99
+ omit JRuby and TruffleRuby jobs when project config declares MRI-only engines.
100
+ - kettle-jem-template-20260720-005 - Generated README Support & Community rows
101
+ now include a RubyForum help badge.
102
+
103
+ ### Fixed
104
+
105
+ - Documented why `nomono` uses an explicit Gemfile loader instead of the
106
+ Bundler plugin DSL or RubyGems plugin autoload hooks, and simplified
107
+ `nomono`'s own local Gemfiles to load the local Bundler integration directly.
108
+
109
+ - Addressed review feedback by keeping split license detail links pointed at
110
+ the source repository, keeping `tree_sitter_language_pack` in the templating
111
+ dependency path only, and regenerating YARD documentation.
112
+
113
+ - Local modular Gemfiles now load `nomono/bundler` with the normal Bundler
114
+ require path so RuboCop Gradual style checks pass under appraisal bundles.
115
+
33
116
  ## [1.0.8] - 2026-07-13
34
117
 
35
118
  - TAG: [v1.0.8][1.0.8t]
@@ -82,7 +165,7 @@ Please file a bug if you notice a violation of semantic versioning.
82
165
  ### Fixed
83
166
 
84
167
  - Corrected OpenCollective funding metadata to use the `kettle-dev` collective.
85
- - Updated the default local workspace root from `$HOME/src/kettle-rb` to
168
+ - Updated the default local workspace root from `$HOME/src/kettle-dev` to
86
169
  `$HOME/src/my`.
87
170
 
88
171
  ## [1.0.4] - 2026-06-14
@@ -178,7 +261,13 @@ Please file a bug if you notice a violation of semantic versioning.
178
261
  - TAG: [v1.0.0][1.0.0t]
179
262
  - 12.50% documented
180
263
 
181
- [Unreleased]: https://github.com/kettle-dev/nomono/compare/v1.0.8...HEAD
264
+ [Unreleased]: https://github.com/kettle-dev/nomono/compare/v1.1.1...HEAD
265
+ [1.1.1]: https://github.com/kettle-dev/nomono/compare/v1.1.0...v1.1.1
266
+ [1.1.1t]: https://github.com/kettle-dev/nomono/releases/tag/v1.1.1
267
+ [1.1.0]: https://github.com/kettle-dev/nomono/compare/v1.0.9...v1.1.0
268
+ [1.1.0t]: https://github.com/kettle-dev/nomono/releases/tag/v1.1.0
269
+ [1.0.9]: https://github.com/kettle-dev/nomono/compare/v1.0.8...v1.0.9
270
+ [1.0.9t]: https://github.com/kettle-dev/nomono/releases/tag/v1.0.9
182
271
  [1.0.8]: https://github.com/kettle-dev/nomono/compare/v1.0.7...v1.0.8
183
272
  [1.0.8t]: https://github.com/kettle-dev/nomono/releases/tag/v1.0.8
184
273
  [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 Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
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: "KETTLE_RB"`, `path_env: "KETTLE_RB_DEV"`.
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
- - `KETTLE_RB_DEV=false` (or unset) — released gems from configured gem server (CI / single-gem development default)
150
- - `KETTLE_RB_DEV=true` — local sibling gems from `$HOME/src/kettle-dev/<gem>` (recommended for full-workspace development)
151
- - `KETTLE_RB_DEV=/custom/path` — local sibling gems from `/custom/path/<gem>` (non-standard workspace layout only)
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("KETTLE_RB_DEV", "false").casecmp("false").zero?
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.a", ">= 3.0.0.rc4"
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: "KETTLE_RB",
192
- path_env: "KETTLE_RB_DEV",
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
- `KETTLE_RB_DEV=false` or is unset, the modular local override is skipped and
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=Github&logoColor=green
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.089-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
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
@@ -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
@@ -1,8 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Nomono
4
+ # Version namespace for this gem.
4
5
  module Version
5
- VERSION = "1.0.8"
6
+ # Current gem version.
7
+ VERSION = "1.1.1"
6
8
  end
9
+ # Current gem version exposed at the traditional constant location.
7
10
  VERSION = Version::VERSION # Traditional Constant Location
8
11
  end
data/sig/nomono.rbs CHANGED
@@ -1,3 +1,7 @@
1
1
  module Nomono
2
2
  # See the writing guide of rbs: https://github.com/ruby/rbs#guides
3
+ module Version
4
+ VERSION: String
5
+ end
6
+ VERSION: String
3
7
  end
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.8
4
+ version: 1.1.1
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.1
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.1
59
+ version: 2.3.7
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: bundler-audit
62
62
  requirement: !ruby/object:Gem::Requirement
@@ -105,26 +105,46 @@ dependencies:
105
105
  - - ">="
106
106
  - !ruby/object:Gem::Version
107
107
  version: 1.0.4
108
+ - !ruby/object:Gem::Dependency
109
+ name: anonymous_loader
110
+ requirement: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '0.1'
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 0.1.3
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.1'
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: 0.1.3
108
128
  - !ruby/object:Gem::Dependency
109
129
  name: appraisal2
110
130
  requirement: !ruby/object:Gem::Requirement
111
131
  requirements:
112
132
  - - "~>"
113
133
  - !ruby/object:Gem::Version
114
- version: '3.1'
134
+ version: '3.2'
115
135
  - - ">="
116
136
  - !ruby/object:Gem::Version
117
- version: 3.1.4
137
+ version: 3.2.0
118
138
  type: :development
119
139
  prerelease: false
120
140
  version_requirements: !ruby/object:Gem::Requirement
121
141
  requirements:
122
142
  - - "~>"
123
143
  - !ruby/object:Gem::Version
124
- version: '3.1'
144
+ version: '3.2'
125
145
  - - ">="
126
146
  - !ruby/object:Gem::Version
127
- version: 3.1.4
147
+ version: 3.2.0
128
148
  - !ruby/object:Gem::Dependency
129
149
  name: kettle-test
130
150
  requirement: !ruby/object:Gem::Requirement
@@ -134,7 +154,7 @@ dependencies:
134
154
  version: '2.0'
135
155
  - - ">="
136
156
  - !ruby/object:Gem::Version
137
- version: 2.0.10
157
+ version: 2.0.15
138
158
  type: :development
139
159
  prerelease: false
140
160
  version_requirements: !ruby/object:Gem::Requirement
@@ -144,27 +164,27 @@ dependencies:
144
164
  version: '2.0'
145
165
  - - ">="
146
166
  - !ruby/object:Gem::Version
147
- version: 2.0.10
167
+ version: 2.0.15
148
168
  - !ruby/object:Gem::Dependency
149
169
  name: turbo_tests2
150
170
  requirement: !ruby/object:Gem::Requirement
151
171
  requirements:
152
172
  - - "~>"
153
173
  - !ruby/object:Gem::Version
154
- version: '3.1'
174
+ version: '3.2'
155
175
  - - ">="
156
176
  - !ruby/object:Gem::Version
157
- version: 3.1.7
177
+ version: 3.2.3
158
178
  type: :development
159
179
  prerelease: false
160
180
  version_requirements: !ruby/object:Gem::Requirement
161
181
  requirements:
162
182
  - - "~>"
163
183
  - !ruby/object:Gem::Version
164
- version: '3.1'
184
+ version: '3.2'
165
185
  - - ">="
166
186
  - !ruby/object:Gem::Version
167
- version: 3.1.7
187
+ version: 3.2.3
168
188
  - !ruby/object:Gem::Dependency
169
189
  name: ruby-progressbar
170
190
  requirement: !ruby/object:Gem::Requirement
@@ -188,7 +208,7 @@ dependencies:
188
208
  version: '1.0'
189
209
  - - ">="
190
210
  - !ruby/object:Gem::Version
191
- version: 1.0.6
211
+ version: 1.0.7
192
212
  type: :development
193
213
  prerelease: false
194
214
  version_requirements: !ruby/object:Gem::Requirement
@@ -198,7 +218,7 @@ dependencies:
198
218
  version: '1.0'
199
219
  - - ">="
200
220
  - !ruby/object:Gem::Version
201
- version: 1.0.6
221
+ version: 1.0.7
202
222
  - !ruby/object:Gem::Dependency
203
223
  name: gitmoji-regex
204
224
  requirement: !ruby/object:Gem::Requirement
@@ -208,7 +228,7 @@ dependencies:
208
228
  version: '2.0'
209
229
  - - ">="
210
230
  - !ruby/object:Gem::Version
211
- version: 2.0.4
231
+ version: 2.0.6
212
232
  type: :development
213
233
  prerelease: false
214
234
  version_requirements: !ruby/object:Gem::Requirement
@@ -218,35 +238,18 @@ dependencies:
218
238
  version: '2.0'
219
239
  - - ">="
220
240
  - !ruby/object:Gem::Version
221
- version: 2.0.4
241
+ version: 2.0.6
222
242
  description: 1️⃣ Provides nomono_gems and eval_nomono_gems to standardize local multi-repo
223
243
  dependency wiring in Gemfiles.
224
244
  email:
225
245
  - floss@galtzo.com
226
246
  executables: []
227
247
  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
248
+ extra_rdoc_files: []
238
249
  files:
239
- - AGPL-3.0-only.md
240
250
  - CHANGELOG.md
241
- - CITATION.cff
242
- - CODE_OF_CONDUCT.md
243
- - CONTRIBUTING.md
244
- - FUNDING.md
245
251
  - LICENSE.md
246
252
  - README.md
247
- - RUBOCOP.md
248
- - SECURITY.md
249
- - certs/pboling.pem
250
253
  - lib/nomono.rb
251
254
  - lib/nomono/bundler.rb
252
255
  - lib/nomono/core.rb
@@ -255,16 +258,15 @@ files:
255
258
  - lib/nomono/version.rb
256
259
  - lib/nomono/version_gem.rb
257
260
  - sig/nomono.rbs
258
- - sig/nomono/version.rbs
259
261
  homepage: https://github.com/kettle-dev/nomono
260
262
  licenses:
261
263
  - AGPL-3.0-only
262
264
  metadata:
263
265
  homepage_uri: https://nomono.galtzo.com/
264
- source_code_uri: https://github.com/kettle-dev/nomono/tree/v1.0.8
265
- changelog_uri: https://github.com/kettle-dev/nomono/blob/v1.0.8/CHANGELOG.md
266
+ source_code_uri: https://github.com/kettle-dev/nomono/tree/v1.1.1
267
+ changelog_uri: https://github.com/kettle-dev/nomono/blob/v1.1.1/CHANGELOG.md
266
268
  bug_tracker_uri: https://github.com/kettle-dev/nomono/issues
267
- documentation_uri: https://www.rubydoc.info/gems/nomono/1.0.8
269
+ documentation_uri: https://www.rubydoc.info/gems/nomono/1.1.1
268
270
  funding_uri: https://github.com/sponsors/pboling
269
271
  wiki_uri: https://github.com/kettle-dev/nomono/wiki
270
272
  news_uri: https://www.railsbling.com/tags/nomono
@@ -293,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
293
295
  - !ruby/object:Gem::Version
294
296
  version: '0'
295
297
  requirements: []
296
- rubygems_version: 4.0.10
298
+ rubygems_version: 4.0.17
297
299
  specification_version: 4
298
300
  summary: 1️⃣ ENV-driven Gemfile macros for sibling gem path resolution
299
301
  test_files: []
metadata.gz.sig CHANGED
Binary file