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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c39cad5d16b4da60a296208e967e4cf7473711c8c73e840d19264b747e8e15aa
4
- data.tar.gz: e58781ccdc8bbd8c4319a80b7298b38799fd94cbe5c10e81b850544e9cd59038
3
+ metadata.gz: 30a48c913f151ef3d5ef5986e2982c2a6e851a87f2ee684fcb7d850d3a0534be
4
+ data.tar.gz: b2b24aa72a8c07dc3b2b13e4a541f01438bf8749a4f3c4c4c68243a866da624a
5
5
  SHA512:
6
- metadata.gz: dc977e38fe11036afb2ba165cb6567871bb40b475fb81b32684cc8937b46bc8f4b5b4827a1ee3a74c074df1f4c0d713ef459b27a9b8351e31a78670414987621
7
- data.tar.gz: baf653629331e08b56b69944e08fdcf861c173004f965e93ae729a557cd019d8f66b6024ccce30fda6d4dccbce52c33be1531ac0d1be5b4ea03c2757e1aa058d
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-rb` to
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.8...HEAD
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 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
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Nomono
4
4
  module Version
5
- VERSION = "1.0.8"
5
+ VERSION = "1.1.0"
6
6
  end
7
7
  VERSION = Version::VERSION # Traditional Constant Location
8
8
  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.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.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
@@ -111,20 +111,20 @@ dependencies:
111
111
  requirements:
112
112
  - - "~>"
113
113
  - !ruby/object:Gem::Version
114
- version: '3.1'
114
+ version: '3.2'
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 3.1.4
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.1'
124
+ version: '3.2'
125
125
  - - ">="
126
126
  - !ruby/object:Gem::Version
127
- version: 3.1.4
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.10
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.10
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.1'
154
+ version: '3.2'
155
155
  - - ">="
156
156
  - !ruby/object:Gem::Version
157
- version: 3.1.7
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.1'
164
+ version: '3.2'
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
- version: 3.1.7
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.8
265
- changelog_uri: https://github.com/kettle-dev/nomono/blob/v1.0.8/CHANGELOG.md
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.8
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.10
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