toml-merge 2.0.0 → 2.0.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: 2f9cb256fd16a085c6a1d5f568bbe2eef0bcbeaf4a9cbc3f7bce5637b5770bce
4
- data.tar.gz: 4000f1e9f82713bb1016ab52fa96112ca917f2f371baefc2dabf2a29f0807013
3
+ metadata.gz: 02fa667fe1565c2c733dffbc730bc500f870a01e2ed503374dd8ce5d56f0443e
4
+ data.tar.gz: b45cad4877d489fe0ccc74d6154b3cc3585fb714ae4a4f4fcfd14cb478032aa6
5
5
  SHA512:
6
- metadata.gz: b57d61b70484cc8099d2d7b8249c093b729718182ffb607cd4f1db59c8ca372b7ee26d4b64f92d7f359956e01b337f07498e396353373d998efefb921feba5a1
7
- data.tar.gz: 0dce84d713ce68e1f5158fa3c2d883311741e7d28c4a7d93a17c9baa9e2356e8ecbc6d7be0aa1d3247712e287ae153d6170284b7132caa2de19e225b1d305b1e
6
+ metadata.gz: ac63d8130acc5212dea6a4838de60b21ea20fa9ae61ec26e6b3fdf057aa316b12afa114008469181ffa0cb78c582570970bf214567c3d2eee9748580ee7857a0
7
+ data.tar.gz: 628b6ffc136d0e1e59e314f5010d956ef7e6d9a1161e4d6003d6cc18b8d54f8a63fab973fe7b247564f4e26ae2bb869b5869bc46df6bc0f886f213e3115568ae
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,36 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [2.0.1] - 2026-02-19
34
+
35
+ - TAG: [v2.0.1][2.0.1t]
36
+ - COVERAGE: 89.42% -- 575/643 lines in 11 files
37
+ - BRANCH COVERAGE: 65.23% -- 182/279 branches in 11 files
38
+ - 97.03% documented
39
+
40
+ ### Added
41
+
42
+ - AGENTS.md
43
+
44
+ ### Changed
45
+
46
+ - appraisal2 v3.0.6
47
+ - kettle-test v1.0.10
48
+ - stone_checksums v1.0.3
49
+ - [ast-merge v4.0.6](https://github.com/kettle-rb/ast-merge/releases/tag/v4.0.6)
50
+ - [tree_haver v5.0.5](https://github.com/kettle-rb/tree_haver/releases/tag/v5.0.5)
51
+ - FFI Backend improvements
52
+ - Error handling improvements
53
+ - Many new features, and more bug fixes
54
+ - tree_stump v0.2.0
55
+ - fork no longer required, updates all applied upstream
56
+ - **Simplified dependency_tags.rb**: Removed redundant debug code
57
+ - Removed `TOML_MERGE_DEBUG` env var handling (use `TREE_HAVER_DEBUG` instead)
58
+ - tree_haver's debug output now respects blocked backends via `compute_blocked_backends`
59
+ - Avoids accidentally loading MRI backend during FFI-only test runs
60
+ - Updated documentation on hostile takeover of RubyGems
61
+ - https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo
62
+
33
63
  ## [2.0.0] - 2026-01-09
34
64
 
35
65
  - TAG: [v2.0.0][2.0.0t]
@@ -223,7 +253,7 @@ Please file a bug if you notice a violation of semantic versioning.
223
253
  - Can force Citrus backend via `TREE_HAVER_BACKEND=citrus` environment variable
224
254
  - Added graceful error handling when neither tree-sitter-toml nor toml-rb are available
225
255
 
226
- [Unreleased]: https://github.com/kettle-rb/toml-merge/compare/v2.0.0...HEAD
256
+ [Unreleased]: https://github.com/kettle-rb/toml-merge/compare/v2.0.1...HEAD
227
257
  [2.0.1]: https://github.com/kettle-rb/toml-merge/compare/v1.0.0...v2.0.1
228
258
  [2.0.1t]: https://github.com/kettle-rb/toml-merge/releases/tag/v2.0.1
229
259
  [2.0.0]: https://github.com/kettle-rb/toml-merge/compare/v1.0.0...v2.0.0
data/README.md CHANGED
@@ -1,37 +1,4 @@
1
- | 📍 NOTE |
2
- | --- |
3
- | RubyGems (the [GitHub org](https://github.com/rubygems/), not the website) [suffered](https://joel.drapper.me/p/ruby-central-security-measures/) a [hostile takeover](https://pup-e.com/blog/goodbye-rubygems/) in September 2025. |
4
- | Ultimately [4 maintainers](https://www.reddit.com/r/ruby/s/gOk42POCaV) were [hard removed](https://bsky.app/profile/martinemde.com/post/3m3occezxxs2q) and a reason has been given for only 1 of those, while 2 others resigned in protest. |
5
- | It is a [complicated story](https://joel.drapper.me/p/ruby-central-takeover/) which is difficult to [parse quickly](https://joel.drapper.me/p/ruby-central-fact-check/). |
6
- | Simply put - there was active policy for adding or removing maintainers/owners of [rubygems](https://github.com/ruby/rubygems/blob/b1ab33a3d52310a84d16b193991af07f5a6a07c0/doc/rubygems/POLICIES.md?plain=1#L187-L196) and [bundler](https://github.com/ruby/rubygems/blob/b1ab33a3d52310a84d16b193991af07f5a6a07c0/doc/bundler/playbooks/TEAM_CHANGES.md), and those [policies were not followed](https://www.reddit.com/r/ruby/comments/1ove9vp/rubycentral_hates_this_one_fact/). |
7
- | I'm adding notes like this to gems because I [don't condone theft](https://joel.drapper.me/p/ruby-central/) of repositories or gems from their rightful owners. |
8
- | If a similar theft happened with my repos/gems, I'd hope some would stand up for me. |
9
- | Disenfranchised former-maintainers have started [gem.coop](https://gem.coop). |
10
- | Once available I will publish there exclusively; unless RubyCentral makes amends with the community. |
11
- | The ["Technology for Humans: Joel Draper"](https://youtu.be/_H4qbtC5qzU?si=BvuBU90R2wAqD2E6) podcast episode by [reinteractive](https://reinteractive.com/ruby-on-rails) is the most cogent summary I'm aware of. |
12
- | See [here](https://github.com/gem-coop/gem.coop/issues/12), [here](https://gem.coop) and [here](https://martinemde.com/2025/10/05/announcing-gem-coop.html) for more info on what comes next. |
13
- | What I'm doing: A (WIP) proposal for [bundler/gem scopes](https://github.com/galtzo-floss/bundle-namespace), and a (WIP) proposal for a federated [gem server](https://github.com/galtzo-floss/gem-server). |
14
-
15
- [rubygems-org]: https://github.com/rubygems/
16
- [draper-security]: https://joel.drapper.me/p/ruby-central-security-measures/
17
- [draper-takeover]: https://joel.drapper.me/p/ruby-central-takeover/
18
- [ellen-takeover]: https://pup-e.com/blog/goodbye-rubygems/
19
- [simi-removed]: https://www.reddit.com/r/ruby/s/gOk42POCaV
20
- [martin-removed]: https://bsky.app/profile/martinemde.com/post/3m3occezxxs2q
21
- [draper-lies]: https://joel.drapper.me/p/ruby-central-fact-check/
22
- [draper-theft]: https://joel.drapper.me/p/ruby-central/
23
- [reinteractive]: https://reinteractive.com/ruby-on-rails
24
- [gem-coop]: https://gem.coop
25
- [gem-naming]: https://github.com/gem-coop/gem.coop/issues/12
26
- [martin-ann]: https://martinemde.com/2025/10/05/announcing-gem-coop.html
27
- [gem-scopes]: https://github.com/galtzo-floss/bundle-namespace
28
- [gem-server]: https://github.com/galtzo-floss/gem-server
29
- [reinteractive-podcast]: https://youtu.be/_H4qbtC5qzU?si=BvuBU90R2wAqD2E6
30
- [bundler-maint-policy]: https://github.com/ruby/rubygems/blob/b1ab33a3d52310a84d16b193991af07f5a6a07c0/doc/bundler/playbooks/TEAM_CHANGES.md
31
- [rubygems-maint-policy]: https://github.com/ruby/rubygems/blob/b1ab33a3d52310a84d16b193991af07f5a6a07c0/doc/rubygems/POLICIES.md?plain=1#L187-L196
32
- [policy-fail]: https://www.reddit.com/r/ruby/comments/1ove9vp/rubycentral_hates_this_one_fact/
33
-
34
- [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0](https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg)](https://discord.gg/3qme4XHNKN) [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5](https://logos.galtzo.com/assets/images/ruby-lang/avatar-192px.svg)](https://www.ruby-lang.org/) [![kettle-rb Logo by Aboling0, CC BY-SA 4.0](https://logos.galtzo.com/assets/images/kettle-rb/avatar-192px.svg)](https://github.com/kettle-rb)
1
+ [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-i]][🖼️galtzo-discord] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang] [![kettle-rb Logo by Aboling0, CC BY-SA 4.0][🖼️kettle-rb-i]][🖼️kettle-rb]
35
2
 
36
3
  [🖼️galtzo-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg
37
4
  [🖼️galtzo-discord]: https://discord.gg/3qme4XHNKN
@@ -42,63 +9,72 @@
42
9
 
43
10
  # ☯️ Toml::Merge
44
11
 
45
- [![Version](https://img.shields.io/gem/v/toml-merge.svg)](https://bestgems.org/gems/toml-merge) [![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/kettle-rb/toml-merge.svg)](http://github.com/kettle-rb/toml-merge/releases) [![License: MIT](https://img.shields.io/badge/License-MIT-259D6C.svg)](https://opensource.org/licenses/MIT) [![Downloads Rank](https://img.shields.io/gem/rd/toml-merge.svg)](https://bestgems.org/gems/toml-merge) [![Open Source Helpers](https://www.codetriage.com/kettle-rb/toml-merge/badges/users.svg)](https://www.codetriage.com/kettle-rb/toml-merge) [![CodeCov Test Coverage](https://codecov.io/gh/kettle-rb/toml-merge/graph/badge.svg)](https://codecov.io/gh/kettle-rb/toml-merge) [![Coveralls Test Coverage](https://coveralls.io/repos/github/kettle-rb/toml-merge/badge.svg?branch=main)](https://coveralls.io/github/kettle-rb/toml-merge?branch=main) [![QLTY Test Coverage](https://qlty.sh/gh/kettle-rb/projects/toml-merge/coverage.svg)](https://qlty.sh/gh/kettle-rb/projects/toml-merge/metrics/code?sort=coverageRating) [![QLTY Maintainability](https://qlty.sh/gh/kettle-rb/projects/toml-merge/maintainability.svg)](https://qlty.sh/gh/kettle-rb/projects/toml-merge) [![CI Heads](https://github.com/kettle-rb/toml-merge/actions/workflows/heads.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/actions/workflows/heads.yml) [![CI Runtime Dependencies @ HEAD](https://github.com/kettle-rb/toml-merge/actions/workflows/dep-heads.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/actions/workflows/dep-heads.yml) [![CI Current](https://github.com/kettle-rb/toml-merge/actions/workflows/current.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/actions/workflows/current.yml) [![CI Truffle Ruby](https://github.com/kettle-rb/toml-merge/actions/workflows/truffle.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/actions/workflows/truffle.yml) [![Deps Locked](https://github.com/kettle-rb/toml-merge/actions/workflows/locked_deps.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/actions/workflows/locked_deps.yml) [![Deps Unlocked](https://github.com/kettle-rb/toml-merge/actions/workflows/unlocked_deps.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/actions/workflows/unlocked_deps.yml) [![CI Supported](https://github.com/kettle-rb/toml-merge/actions/workflows/supported.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/actions/workflows/supported.yml) [![CI Test Coverage](https://github.com/kettle-rb/toml-merge/actions/workflows/coverage.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/actions/workflows/coverage.yml) [![CI Style](https://github.com/kettle-rb/toml-merge/actions/workflows/style.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/actions/workflows/style.yml) [![CodeQL](https://github.com/kettle-rb/toml-merge/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/security/code-scanning) [![Apache SkyWalking Eyes License Compatibility Check](https://github.com/kettle-rb/toml-merge/actions/workflows/license-eye.yml/badge.svg)](https://github.com/kettle-rb/toml-merge/actions/workflows/license-eye.yml)
12
+ [![Version][👽versioni]][👽dl-rank] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Supported][🚎6-s-wfi]][🚎6-s-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![CodeQL][🖐codeQL-img]][🖐codeQL] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
46
13
 
47
- `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know](https://discord.gg/3qme4XHNKN), as I may have missed the [discord notification](https://discord.gg/3qme4XHNKN).
14
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][🖼️galtzo-discord], as I may have missed the [discord notification][🖼️galtzo-discord].
48
15
 
49
16
  -----
17
+
50
18
  `if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
51
19
 
52
- [![OpenCollective Backers](https://opencollective.com/kettle-rb/backers/badge.svg?style=flat)](https://opencollective.com/kettle-rb#backer) [![OpenCollective Sponsors](https://opencollective.com/kettle-rb/sponsors/badge.svg?style=flat)](https://opencollective.com/kettle-rb#sponsor) [![Sponsor Me on Github](https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github)](https://github.com/sponsors/pboling) [![Liberapay Goal Progress](https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat)](https://liberapay.com/pboling/donate) [![Donate on PayPal](https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal)](https://www.paypal.com/paypalme/peterboling) [![Buy me a coffee](https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat)](https://www.buymeacoffee.com/pboling) [![Donate on Polar](https://img.shields.io/badge/polar-donate-a51611.svg?style=flat)](https://polar.sh/pboling) [![Donate at ko-fi.com](https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat)](https://ko-fi.com/O5O86SNP4)
20
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
21
+
22
+ <details>
23
+ <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
24
+
25
+ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
26
+
27
+ </details>
53
28
 
54
29
  ## 🌻 Synopsis
55
30
 
56
31
  `toml-merge` provides intelligent merging of TOML files by parsing them into
57
32
  tree-sitter AST nodes and comparing structural elements. It supports:
58
33
 
59
- - **Smart key matching** - Keys and tables are matched by their structural signatures
60
- - **Table matching** - Tables are matched using a multi-factor scoring algorithm that considers
61
- key similarity, value overlap, and position
62
- - **Freeze blocks** - Mark sections with comments to preserve them during merges
63
- - **Configurable merge strategies** - Choose whether template or destination wins for conflicts,
64
- or use a Hash for per-node-type preferences with `node_splitter` (see [ast-merge](https://github.com/kettle-rb/ast-merge) docs)
65
- - **Full TOML support** - Works with all TOML 1.0 features including inline tables, arrays of tables, and dotted keys
34
+ - **Smart key matching** - Keys and tables are matched by their structural signatures
35
+ - **Table matching** - Tables are matched using a multi-factor scoring algorithm that considers
36
+ key similarity, value overlap, and position
37
+ - **Freeze blocks** - Mark sections with comments to preserve them during merges
38
+ - **Configurable merge strategies** - Choose whether template or destination wins for conflicts,
39
+ or use a Hash for per-node-type preferences with `node_splitter` (see [ast-merge][ast-merge] docs)
40
+ - **Full TOML support** - Works with all TOML 1.0 features including inline tables, arrays of tables, and dotted keys
66
41
 
67
42
  ### The `*-merge` Gem Family
68
43
 
69
44
  The `*-merge` gem family provides intelligent, AST-based merging for various file formats. At the foundation is [tree_haver][tree_haver], which provides a unified cross-Ruby parsing API that works seamlessly across MRI, JRuby, and TruffleRuby.
70
45
 
71
- | Gem | Language<br>/ Format | Parser Backend(s) | Description |
72
- |------------------------------------------|----------------------|-----------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
73
- | [tree_haver][tree_haver] | Multi | MRI C, Rust, FFI, Java, Prism, Psych, Commonmarker, Markly, Citrus | **Foundation**: Cross-Ruby adapter for parsing libraries (like Faraday for HTTP) |
74
- | [ast-merge][ast-merge] | Text | internal | **Infrastructure**: Shared base classes and merge logic for all `*-merge` gems |
75
- | [bash-merge][bash-merge] | Bash | [tree-sitter-bash][ts-bash] (via tree_haver) | Smart merge for Bash scripts |
76
- | [commonmarker-merge][commonmarker-merge] | Markdown | [Commonmarker][commonmarker] (via tree_haver) | Smart merge for Markdown (CommonMark via comrak Rust) |
77
- | [dotenv-merge][dotenv-merge] | Dotenv | internal | Smart merge for `.env` files |
78
- | [json-merge][json-merge] | JSON | [tree-sitter-json][ts-json] (via tree_haver) | Smart merge for JSON files |
79
- | [jsonc-merge][jsonc-merge] | JSONC | [tree-sitter-jsonc][ts-jsonc] (via tree_haver) | ⚠️ Proof of concept; Smart merge for JSON with Comments |
80
- | [markdown-merge][markdown-merge] | Markdown | [Commonmarker][commonmarker] / [Markly][markly] (via tree_haver) | **Foundation**: Shared base for Markdown mergers with inner code block merging |
81
- | [markly-merge][markly-merge] | Markdown | [Markly][markly] (via tree_haver) | Smart merge for Markdown (CommonMark via cmark-gfm C) |
82
- | [prism-merge][prism-merge] | Ruby | [Prism][prism] (`prism` std lib gem) | Smart merge for Ruby source files |
83
- | [psych-merge][psych-merge] | YAML | [Psych][psych] (`psych` std lib gem) | Smart merge for YAML files |
84
- | [rbs-merge][rbs-merge] | RBS | [tree-sitter-bash][ts-rbs] (via tree_haver), [RBS][rbs] (`rbs` std lib gem) | Smart merge for Ruby type signatures |
85
- | [toml-merge][toml-merge] | TOML | [Citrus + toml-rb][toml-rb] (default, via tree_haver), [tree-sitter-toml][ts-toml] (via tree_haver) | Smart merge for TOML files |
46
+ | Gem | Version / CI | Language<br>/ Format | Parser Backend(s) | Description |
47
+ |------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------:|----------------------|-------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
48
+ | [tree_haver][tree_haver] | [![Version][tree_haver-gem-i]][tree_haver-gem] <br/> [![CI][tree_haver-ci-i]][tree_haver-ci] | Multi | Supported Backends: MRI C, Rust, FFI, Java, Prism, Psych, Commonmarker, Markly, Citrus, Parslet | **Foundation**: Cross-Ruby adapter for parsing libraries (like Faraday for HTTP) |
49
+ | [ast-merge][ast-merge] | [![Version][ast-merge-gem-i]][ast-merge-gem] <br/> [![CI][ast-merge-ci-i]][ast-merge-ci] | Text | internal | **Infrastructure**: Shared base classes and merge logic for all `*-merge` gems |
50
+ | [bash-merge][bash-merge] | [![Version][bash-merge-gem-i]][bash-merge-gem] <br/> [![CI][bash-merge-ci-i]][bash-merge-ci] | Bash | [tree-sitter-bash][ts-bash] (via tree_haver) | Smart merge for Bash scripts |
51
+ | [commonmarker-merge][commonmarker-merge] | [![Version][commonmarker-merge-gem-i]][commonmarker-merge-gem] <br/> [![CI][commonmarker-merge-ci-i]][commonmarker-merge-ci] | Markdown | [Commonmarker][commonmarker] (via tree_haver) | Smart merge for Markdown (CommonMark via comrak Rust) |
52
+ | [dotenv-merge][dotenv-merge] | [![Version][dotenv-merge-gem-i]][dotenv-merge-gem] <br/> [![CI][dotenv-merge-ci-i]][dotenv-merge-ci] | Dotenv | internal | Smart merge for `.env` files |
53
+ | [json-merge][json-merge] | [![Version][json-merge-gem-i]][json-merge-gem] <br/> [![CI][json-merge-ci-i]][json-merge-ci] | JSON | [tree-sitter-json][ts-json] (via tree_haver) | Smart merge for JSON files |
54
+ | [jsonc-merge][jsonc-merge] | [![Version][jsonc-merge-gem-i]][jsonc-merge-gem] <br/> [![CI][jsonc-merge-ci-i]][jsonc-merge-ci] | JSONC | [tree-sitter-jsonc][ts-jsonc] (via tree_haver) | ⚠️ Proof of concept; Smart merge for JSON with Comments |
55
+ | [markdown-merge][markdown-merge] | [![Version][markdown-merge-gem-i]][markdown-merge-gem] <br/> [![CI][markdown-merge-ci-i]][markdown-merge-ci] | Markdown | [Commonmarker][commonmarker] / [Markly][markly] (via tree_haver), [Parslet][parslet] | **Foundation**: Shared base for Markdown mergers with inner code block merging |
56
+ | [markly-merge][markly-merge] | [![Version][markly-merge-gem-i]][markly-merge-gem] <br/> [![CI][markly-merge-ci-i]][markly-merge-ci] | Markdown | [Markly][markly] (via tree_haver) | Smart merge for Markdown (CommonMark via cmark-gfm C) |
57
+ | [prism-merge][prism-merge] | [![Version][prism-merge-gem-i]][prism-merge-gem] <br/> [![CI][prism-merge-ci-i]][prism-merge-ci] | Ruby | [Prism][prism] (`prism` std lib gem) | Smart merge for Ruby source files |
58
+ | [psych-merge][psych-merge] | [![Version][psych-merge-gem-i]][psych-merge-gem] <br/> [![CI][psych-merge-ci-i]][psych-merge-ci] | YAML | [Psych][psych] (`psych` std lib gem) | Smart merge for YAML files |
59
+ | [rbs-merge][rbs-merge] | [![Version][rbs-merge-gem-i]][rbs-merge-gem] <br/> [![CI][rbs-merge-ci-i]][rbs-merge-ci] | RBS | [tree-sitter-bash][ts-rbs] (via tree_haver), [RBS][rbs] (`rbs` std lib gem) | Smart merge for Ruby type signatures |
60
+ | [toml-merge][toml-merge] | [![Version][toml-merge-gem-i]][toml-merge-gem] <br/> [![CI][toml-merge-ci-i]][toml-merge-ci] | TOML | [Parslet + toml][toml], [Citrus + toml-rb][toml-rb], [tree-sitter-toml][ts-toml] (all via tree_haver) | Smart merge for TOML files |
86
61
 
87
62
  #### Backend Platform Compatibility
88
63
 
89
64
  tree_haver supports multiple parsing backends, but not all backends work on all Ruby platforms:
90
65
 
91
- | Platform 👉️<br> TreeHaver Backend 👇️ | MRI | JRuby | TruffleRuby | Notes |
92
- |------------------------------------------------|:---:|:-----:|:-----------:|-----------------------------------------------------|
93
- | **MRI** ([ruby_tree_sitter][ruby_tree_sitter]) | ✅ | ❌ | ❌ | C extension, MRI only |
94
- | **Rust** ([tree_stump][tree_stump]) | ✅ | ❌ | ❌ | Rust extension via magnus/rb-sys, MRI only |
95
- | **FFI** | ✅ | ✅ | ❌ | TruffleRuby's FFI doesn't support `STRUCT_BY_VALUE` |
96
- | **Java** ([jtreesitter][jtreesitter]) | ❌ | ✅ | ❌ | JRuby only, requires grammar JARs |
97
- | **Prism** | ✅ | ✅ | ✅ | Ruby parsing, stdlib in Ruby 3.4+ |
98
- | **Psych** | ✅ | ✅ | ✅ | YAML parsing, stdlib |
99
- | **Citrus** | ✅ | ✅ | ✅ | Pure Ruby, no native dependencies |
100
- | **Commonmarker** | ✅ | | | Rust extension for Markdown |
101
- | **Markly** | ✅ | ❌ | ❓ | C extension for Markdown |
66
+ | Platform 👉️<br> TreeHaver Backend 👇️ | MRI | JRuby | TruffleRuby | Notes |
67
+ |-------------------------------------------------|:---:|:-----:|:-----------:|----------------------------------------------------------------------------|
68
+ | **MRI** ([ruby_tree_sitter][ruby_tree_sitter]) | ✅ | ❌ | ❌ | C extension, MRI only |
69
+ | **Rust** ([tree_stump][tree_stump]) | ✅ | ❌ | ❌ | Rust extension via magnus/rb-sys, MRI only |
70
+ | **FFI** ([ffi][ffi]) | ✅ | ✅ | ❌ | TruffleRuby's FFI doesn't support `STRUCT_BY_VALUE` |
71
+ | **Java** ([jtreesitter][jtreesitter]) | ❌ | ✅ | ❌ | JRuby only, requires grammar JARs |
72
+ | **Prism** ([prism][prism]) | ✅ | ✅ | ✅ | Ruby parsing, stdlib in Ruby 3.4+ |
73
+ | **Psych** ([psych][psych]) | ✅ | ✅ | ✅ | YAML parsing, stdlib |
74
+ | **Citrus** ([citrus][citrus]) | ✅ | ✅ | ✅ | Pure Ruby PEG parser, no native dependencies |
75
+ | **Parslet** ([parslet][parslet]) | ✅ | | | Pure Ruby PEG parser, no native dependencies |
76
+ | **Commonmarker** ([commonmarker][commonmarker]) | ✅ | ❌ | ❓ | Rust extension for Markdown (via [commonmarker-merge][commonmarker-merge]) |
77
+ | **Markly** ([markly][markly]) | ✅ | ❌ | ❓ | C extension for Markdown (via [markly-merge][markly-merge]) |
102
78
 
103
79
  **Legend**: ✅ = Works, ❌ = Does not work, ❓ = Untested
104
80
 
@@ -130,8 +106,69 @@ tree_haver supports multiple parsing backends, but not all backends work on all
130
106
  [commonmarker-merge]: https://github.com/kettle-rb/commonmarker-merge
131
107
  [kettle-dev]: https://github.com/kettle-rb/kettle-dev
132
108
  [kettle-jem]: https://github.com/kettle-rb/kettle-jem
109
+ [tree_haver-gem]: https://bestgems.org/gems/tree_haver
110
+ [ast-merge-gem]: https://bestgems.org/gems/ast-merge
111
+ [prism-merge-gem]: https://bestgems.org/gems/prism-merge
112
+ [psych-merge-gem]: https://bestgems.org/gems/psych-merge
113
+ [json-merge-gem]: https://bestgems.org/gems/json-merge
114
+ [jsonc-merge-gem]: https://bestgems.org/gems/jsonc-merge
115
+ [bash-merge-gem]: https://bestgems.org/gems/bash-merge
116
+ [rbs-merge-gem]: https://bestgems.org/gems/rbs-merge
117
+ [dotenv-merge-gem]: https://bestgems.org/gems/dotenv-merge
118
+ [toml-merge-gem]: https://bestgems.org/gems/toml-merge
119
+ [markdown-merge-gem]: https://bestgems.org/gems/markdown-merge
120
+ [markly-merge-gem]: https://bestgems.org/gems/markly-merge
121
+ [commonmarker-merge-gem]: https://bestgems.org/gems/commonmarker-merge
122
+ [kettle-dev-gem]: https://bestgems.org/gems/kettle-dev
123
+ [kettle-jem-gem]: https://bestgems.org/gems/kettle-jem
124
+ [tree_haver-gem-i]: https://img.shields.io/gem/v/tree_haver.svg
125
+ [ast-merge-gem-i]: https://img.shields.io/gem/v/ast-merge.svg
126
+ [prism-merge-gem-i]: https://img.shields.io/gem/v/prism-merge.svg
127
+ [psych-merge-gem-i]: https://img.shields.io/gem/v/psych-merge.svg
128
+ [json-merge-gem-i]: https://img.shields.io/gem/v/json-merge.svg
129
+ [jsonc-merge-gem-i]: https://img.shields.io/gem/v/jsonc-merge.svg
130
+ [bash-merge-gem-i]: https://img.shields.io/gem/v/bash-merge.svg
131
+ [rbs-merge-gem-i]: https://img.shields.io/gem/v/rbs-merge.svg
132
+ [dotenv-merge-gem-i]: https://img.shields.io/gem/v/dotenv-merge.svg
133
+ [toml-merge-gem-i]: https://img.shields.io/gem/v/toml-merge.svg
134
+ [markdown-merge-gem-i]: https://img.shields.io/gem/v/markdown-merge.svg
135
+ [markly-merge-gem-i]: https://img.shields.io/gem/v/markly-merge.svg
136
+ [commonmarker-merge-gem-i]: https://img.shields.io/gem/v/commonmarker-merge.svg
137
+ [kettle-dev-gem-i]: https://img.shields.io/gem/v/kettle-dev.svg
138
+ [kettle-jem-gem-i]: https://img.shields.io/gem/v/kettle-jem.svg
139
+ [tree_haver-ci-i]: https://github.com/kettle-rb/tree_haver/actions/workflows/current.yml/badge.svg
140
+ [ast-merge-ci-i]: https://github.com/kettle-rb/ast-merge/actions/workflows/current.yml/badge.svg
141
+ [prism-merge-ci-i]: https://github.com/kettle-rb/prism-merge/actions/workflows/current.yml/badge.svg
142
+ [psych-merge-ci-i]: https://github.com/kettle-rb/psych-merge/actions/workflows/current.yml/badge.svg
143
+ [json-merge-ci-i]: https://github.com/kettle-rb/json-merge/actions/workflows/current.yml/badge.svg
144
+ [jsonc-merge-ci-i]: https://github.com/kettle-rb/jsonc-merge/actions/workflows/current.yml/badge.svg
145
+ [bash-merge-ci-i]: https://github.com/kettle-rb/bash-merge/actions/workflows/current.yml/badge.svg
146
+ [rbs-merge-ci-i]: https://github.com/kettle-rb/rbs-merge/actions/workflows/current.yml/badge.svg
147
+ [dotenv-merge-ci-i]: https://github.com/kettle-rb/dotenv-merge/actions/workflows/current.yml/badge.svg
148
+ [toml-merge-ci-i]: https://github.com/kettle-rb/toml-merge/actions/workflows/current.yml/badge.svg
149
+ [markdown-merge-ci-i]: https://github.com/kettle-rb/markdown-merge/actions/workflows/current.yml/badge.svg
150
+ [markly-merge-ci-i]: https://github.com/kettle-rb/markly-merge/actions/workflows/current.yml/badge.svg
151
+ [commonmarker-merge-ci-i]: https://github.com/kettle-rb/commonmarker-merge/actions/workflows/current.yml/badge.svg
152
+ [kettle-dev-ci-i]: https://github.com/kettle-rb/kettle-dev/actions/workflows/current.yml/badge.svg
153
+ [kettle-jem-ci-i]: https://github.com/kettle-rb/kettle-jem/actions/workflows/current.yml/badge.svg
154
+ [tree_haver-ci]: https://github.com/kettle-rb/tree_haver/actions/workflows/current.yml
155
+ [ast-merge-ci]: https://github.com/kettle-rb/ast-merge/actions/workflows/current.yml
156
+ [prism-merge-ci]: https://github.com/kettle-rb/prism-merge/actions/workflows/current.yml
157
+ [psych-merge-ci]: https://github.com/kettle-rb/psych-merge/actions/workflows/current.yml
158
+ [json-merge-ci]: https://github.com/kettle-rb/json-merge/actions/workflows/current.yml
159
+ [jsonc-merge-ci]: https://github.com/kettle-rb/jsonc-merge/actions/workflows/current.yml
160
+ [bash-merge-ci]: https://github.com/kettle-rb/bash-merge/actions/workflows/current.yml
161
+ [rbs-merge-ci]: https://github.com/kettle-rb/rbs-merge/actions/workflows/current.yml
162
+ [dotenv-merge-ci]: https://github.com/kettle-rb/dotenv-merge/actions/workflows/current.yml
163
+ [toml-merge-ci]: https://github.com/kettle-rb/toml-merge/actions/workflows/current.yml
164
+ [markdown-merge-ci]: https://github.com/kettle-rb/markdown-merge/actions/workflows/current.yml
165
+ [markly-merge-ci]: https://github.com/kettle-rb/markly-merge/actions/workflows/current.yml
166
+ [commonmarker-merge-ci]: https://github.com/kettle-rb/commonmarker-merge/actions/workflows/current.yml
167
+ [kettle-dev-ci]: https://github.com/kettle-rb/kettle-dev/actions/workflows/current.yml
168
+ [kettle-jem-ci]: https://github.com/kettle-rb/kettle-jem/actions/workflows/current.yml
133
169
  [prism]: https://github.com/ruby/prism
134
170
  [psych]: https://github.com/ruby/psych
171
+ [ffi]: https://github.com/ffi/ffi
135
172
  [ts-json]: https://github.com/tree-sitter/tree-sitter-json
136
173
  [ts-jsonc]: https://gitlab.com/WhyNotHugo/tree-sitter-jsonc
137
174
  [ts-bash]: https://github.com/tree-sitter/tree-sitter-bash
@@ -140,23 +177,26 @@ tree_haver supports multiple parsing backends, but not all backends work on all
140
177
  [dotenv]: https://github.com/bkeepers/dotenv
141
178
  [rbs]: https://github.com/ruby/rbs
142
179
  [toml-rb]: https://github.com/emancu/toml-rb
180
+ [toml]: https://github.com/jm/toml
143
181
  [markly]: https://github.com/ioquatix/markly
144
182
  [commonmarker]: https://github.com/gjtorikian/commonmarker
145
183
  [ruby_tree_sitter]: https://github.com/Faveod/ruby-tree-sitter
146
184
  [tree_stump]: https://github.com/joker1007/tree_stump
147
185
  [jtreesitter]: https://central.sonatype.com/artifact/io.github.tree-sitter/jtreesitter
186
+ [citrus]: https://github.com/mjackson/citrus
187
+ [parslet]: https://github.com/kschiess/parslet
148
188
 
149
189
  ### Configuration
150
190
 
151
191
  The tree-sitter TOML parser requires a shared library. Set the `TREE_SITTER_TOML_PATH` environment variable to point to your compiled `libtree-sitter-toml.so` (or `.dylib` on macOS):
152
192
 
153
- ``` bash
193
+ ```bash
154
194
  export TREE_SITTER_TOML_PATH=/path/to/libtree-sitter-toml.so
155
195
  ```
156
196
 
157
197
  ### Basic Usage
158
198
 
159
- ``` ruby
199
+ ```ruby
160
200
  require "toml/merge"
161
201
 
162
202
  template = <<~TOML
@@ -189,18 +229,18 @@ puts result.content if result.success?
189
229
 
190
230
  ## 💡 Info you can shake a stick at
191
231
 
192
- | Tokens to Remember | [![Gem name](https://img.shields.io/badge/name-toml--merge-3C2D2D.svg?style=square&logo=rubygems&logoColor=red)](https://bestgems.org/gems/toml-merge) [![Gem namespace](https://img.shields.io/badge/namespace-Toml::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white)](https://github.com/kettle-rb/toml-merge) |
232
+ | Tokens to Remember | [![Gem name][⛳️name-img]][👽dl-rank] [![Gem namespace][⛳️namespace-img]][📜src-gh] |
193
233
  | --- | --- |
194
- | Works with JRuby | [![JRuby 10.0 Compat](https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green)](https://github.com/kettle-rb/toml-merge/actions/workflows/current.yml) [![JRuby HEAD Compat](https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue)](https://github.com/kettle-rb/toml-merge/actions/workflows/heads.yml) |
195
- | Works with Truffle Ruby | [![Truffle Ruby 23.1 Compat](https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink)](https://github.com/kettle-rb/toml-merge/actions/workflows/truffle.yml) [![Truffle Ruby 24.1 Compat](https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green)](https://github.com/kettle-rb/toml-merge/actions/workflows/current.yml) |
196
- | Works with MRI Ruby 3 | [![Ruby 3.2 Compat](https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white)](https://github.com/kettle-rb/toml-merge/actions/workflows/supported.yml) [![Ruby 3.3 Compat](https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white)](https://github.com/kettle-rb/toml-merge/actions/workflows/supported.yml) [![Ruby 3.4 Compat](https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green)](https://github.com/kettle-rb/toml-merge/actions/workflows/current.yml) [![Ruby HEAD Compat](https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue)](https://github.com/kettle-rb/toml-merge/actions/workflows/heads.yml) |
197
- | Support & Community | [![Join Me on Daily.dev's RubyFriends](https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white)](https://app.daily.dev/squads/rubyfriends) [![Live Chat on Discord](https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord)](https://discord.gg/3qme4XHNKN) [![Get help from me on Upwork](https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white)](https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share) [![Get help from me on Codementor](https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white)](https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github) |
198
- | Source | [![Source on GitLab.com](https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange)](https://gitlab.com/kettle-rb/toml-merge/) [![Source on CodeBerg.org](https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue)](https://codeberg.org/kettle-rb/toml-merge) [![Source on Github.com](https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green)](https://github.com/kettle-rb/toml-merge) [![The best SHA: dQw4w9WgXcQ\!](https://img.shields.io/badge/KLOC-0.538-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue)](https://www.youtube.com/watch?v=dQw4w9WgXcQ) |
199
- | Documentation | [![Current release on RubyDoc.info](https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white)](http://rubydoc.info/gems/toml-merge) [![YARD on Galtzo.com](https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white)](https://toml-merge.galtzo.com) [![Maintainer Blog](https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange)](http://www.railsbling.com/tags/toml-merge) [![GitLab Wiki](https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white)](https://gitlab.com/kettle-rb/toml-merge/-/wikis/home) [![GitHub Wiki](https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=github&logoColor=white)](https://github.com/kettle-rb/toml-merge/wiki) |
200
- | Compliance | [![License: MIT](https://img.shields.io/badge/License-MIT-259D6C.svg)](https://opensource.org/licenses/MIT) [![Compatible with Apache Software Projects: Verified by SkyWalking Eyes](https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache)](https://dev.to/galtzo/how-to-check-license-compatibility-41h0) [![📄ilo-declaration-img](https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat)](https://www.ilo.org/declaration/lang--en/index.htm) [![Security Policy](https://img.shields.io/badge/security-policy-259D6C.svg?style=flat)](SECURITY.md) [![Contributor Covenant 2.1](https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg)](CODE_OF_CONDUCT.md) [![SemVer 2.0.0](https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat)](https://semver.org/spec/v2.0.0.html) |
201
- | Style | [![Enforced Code Style Linter](https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white)](https://github.com/rubocop-lts/rubocop-lts) [![Keep-A-Changelog 1.0.0](https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat)](https://keepachangelog.com/en/1.0.0/) [![Gitmoji Commits](https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square)](https://gitmoji.dev) [![Compatibility appraised by: appraisal2](https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white)](https://github.com/appraisal-rb/appraisal2) |
202
- | Maintainer 🎖️ | [![Follow Me on LinkedIn](https://img.shields.io/badge/PeterBoling-LinkedIn-0B66C2?style=flat&logo=newjapanprowrestling)](http://www.linkedin.com/in/peterboling) [![Follow Me on Ruby.Social](https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo)](https://ruby.social/@galtzo) [![Follow Me on Bluesky](https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white)](https://bsky.app/profile/galtzo.com) [![Contact Maintainer](https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red)](http://www.railsbling.com/contact) [![My technical writing](https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white)](https://dev.to/galtzo) |
203
- | `...` 💖 | [![Find Me on WellFound:](https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound)](https://wellfound.com/u/peter-boling) [![Find Me on CrunchBase](https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase)](https://www.crunchbase.com/person/peter-boling) [![My LinkTree](https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree)](https://linktr.ee/galtzo) [![More About Me](https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white)](https://about.me/peter.boling) [🧊](https://codeberg.org/pboling) [🐙](https://github.org/pboling) [🛖](https://sr.ht/~galtzo/) [🧪](https://gitlab.com/pboling) |
234
+ | Works with JRuby | [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
235
+ | Works with Truffle Ruby | [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] |
236
+ | Works with MRI Ruby 3 | [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
237
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][🖼️galtzo-discord] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
238
+ | 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\!](https://img.shields.io/badge/KLOC-0.538-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue)][🧮kloc] |
239
+ | 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] |
240
+ | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![Compatible with Apache Software Projects: Verified by SkyWalking Eyes][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img][📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
241
+ | 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] |
242
+ | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
243
+ | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
204
244
 
205
245
  ### Compatibility
206
246
 
@@ -208,25 +248,25 @@ Compatible with MRI Ruby 3.2.0+, and concordant releases of JRuby, and TruffleRu
208
248
 
209
249
  | 🚚 *Amazing* test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
210
250
  | --- | --- |
211
- | 👟 Check it out\! | ✨ [github.com/appraisal-rb/appraisal2](https://github.com/appraisal-rb/appraisal2) ✨ |
251
+ | 👟 Check it out\! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
212
252
 
213
253
  ### Federated DVCS
214
254
 
215
255
  <details markdown="1">
216
256
  <summary>Find this repo on federated forges (Coming soon!)</summary>
217
257
 
218
- | Federated [DVCS](https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/) Repository | Status | Issues | PRs | Wiki | CI | Discussions |
258
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
219
259
  | --- | --- | --- | --- | --- | --- | --- |
220
- | 🧪 [kettle-rb/toml-merge on GitLab](https://gitlab.com/kettle-rb/toml-merge/) | The Truth | [💚](https://gitlab.com/kettle-rb/toml-merge/-/issues) | [💚](https://gitlab.com/kettle-rb/toml-merge/-/merge_requests) | [💚](https://gitlab.com/kettle-rb/toml-merge/-/wikis/home) | 🐭 Tiny Matrix | ➖ |
221
- | 🧊 [kettle-rb/toml-merge on CodeBerg](https://codeberg.org/kettle-rb/toml-merge) | An Ethical Mirror ([Donate](https://donate.codeberg.org/)) | [💚](https://codeberg.org/kettle-rb/toml-merge/issues) | [💚](https://codeberg.org/kettle-rb/toml-merge/pulls) | ➖ | ⭕️ No Matrix | ➖ |
222
- | 🐙 [kettle-rb/toml-merge on GitHub](https://github.com/kettle-rb/toml-merge) | Another Mirror | [💚](https://github.com/kettle-rb/toml-merge/issues) | [💚](https://github.com/kettle-rb/toml-merge/pulls) | [💚](https://github.com/kettle-rb/toml-merge/wiki) | 💯 Full Matrix | [💚](https://github.com/kettle-rb/toml-merge/discussions) |
223
- | 🎮️ [Discord Server](https://discord.gg/3qme4XHNKN) | [![Live Chat on Discord](https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord)](https://discord.gg/3qme4XHNKN) | [Let's](https://discord.gg/3qme4XHNKN) | [talk](https://discord.gg/3qme4XHNKN) | [about](https://discord.gg/3qme4XHNKN) | [this](https://discord.gg/3qme4XHNKN) | [library\!](https://discord.gg/3qme4XHNKN) |
260
+ | 🧪 [kettle-rb/toml-merge on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
261
+ | 🧊 [kettle-rb/toml-merge on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
262
+ | 🐙 [kettle-rb/toml-merge on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
263
+ | 🎮️ [Discord Server][🖼️galtzo-discord] | [![Live Chat on Discord][✉️discord-invite-img-ftb]][🖼️galtzo-discord] | [Let's][🖼️galtzo-discord] | [talk][🖼️galtzo-discord] | [about][🖼️galtzo-discord] | [this][🖼️galtzo-discord] | [library\!][🖼️galtzo-discord] |
224
264
 
225
265
  </details>
226
266
 
227
267
  [gh-discussions]: https://github.com/kettle-rb/toml-merge/discussions
228
268
 
229
- ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/toml-merge)](https://tidelift.com/subscription/pkg/rubygems-toml-merge?utm_source=rubygems-toml-merge&utm_medium=referral&utm_campaign=readme)
269
+ ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/toml-merge)][🏙️entsup-tidelift]
230
270
 
231
271
  Available as part of the Tidelift Subscription.
232
272
 
@@ -235,33 +275,34 @@ Available as part of the Tidelift Subscription.
235
275
 
236
276
  The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
237
277
 
238
- [![Get help from me on Tidelift](https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white)](https://tidelift.com/subscription/pkg/rubygems-toml-merge?utm_source=rubygems-toml-merge&utm_medium=referral&utm_campaign=readme)
278
+ [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
279
+
280
+ - 💡Subscribe for support guarantees covering *all* your FLOSS dependencies
239
281
 
240
- - 💡Subscribe for support guarantees covering *all* your FLOSS dependencies
282
+ - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
241
283
 
242
- - 💡Tidelift is part of [Sonar](https://blog.tidelift.com/tidelift-joins-sonar)
284
+ - 💡Tidelift pays maintainers to maintain the software you depend on\!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers
285
+ Alternatively:
243
286
 
244
- - 💡Tidelift pays maintainers to maintain the software you depend on\!<br/>📊`@`Pointy Haired Boss: An [enterprise support](https://tidelift.com/subscription/pkg/rubygems-toml-merge?utm_source=rubygems-toml-merge&utm_medium=referral&utm_campaign=readme) subscription is "[never gonna let you down](https://www.youtube.com/watch?v=dQw4w9WgXcQ)", and *supports* open source maintainers
245
- Alternatively:
287
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][🖼️galtzo-discord]
246
288
 
247
- - [![Live Chat on Discord](https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord)](https://discord.gg/3qme4XHNKN)
289
+ - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
248
290
 
249
- - [![Get help from me on Upwork](https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white)](https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share)
291
+ - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
250
292
 
251
- - [![Get help from me on Codementor](https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white)](https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github)
252
293
  </details>
253
294
 
254
295
  ## ✨ Installation
255
296
 
256
297
  Install the gem and add to the application's Gemfile by executing:
257
298
 
258
- ``` console
299
+ ```console
259
300
  bundle add toml-merge
260
301
  ```
261
302
 
262
303
  If bundler is not being used to manage dependencies, install the gem by executing:
263
304
 
264
- ``` console
305
+ ```console
265
306
  gem install toml-merge
266
307
  ```
267
308
 
@@ -270,19 +311,19 @@ gem install toml-merge
270
311
  <details markdown="1">
271
312
  <summary>For Medium or High Security Installations</summary>
272
313
 
273
- This gem is cryptographically signed, and has verifiable [SHA-256 and SHA-512](https://gitlab.com/kettle-rb/toml-merge/-/tree/main/checksums) checksums by
274
- [stone\_checksums](https://github.com/galtzo-floss/stone_checksums). Be sure the gem you install hasn’t been tampered with
314
+ This gem is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
315
+ [stone\_checksums][💎stone_checksums]. Be sure the gem you install hasn’t been tampered with
275
316
  by following the instructions below.
276
317
 
277
318
  Add my public key (if you haven’t already, expires 2045-04-29) as a trusted certificate:
278
319
 
279
- ``` console
320
+ ```console
280
321
  gem cert --add <(curl -Ls https://raw.github.com/galtzo-floss/certs/main/pboling.pem)
281
322
  ```
282
323
 
283
324
  You only need to do that once. Then proceed to install with:
284
325
 
285
- ``` console
326
+ ```console
286
327
  gem install toml-merge -P HighSecurity
287
328
  ```
288
329
 
@@ -290,7 +331,7 @@ The `HighSecurity` trust profile will verify signed gems, and not allow the inst
290
331
 
291
332
  If you want to up your security game full-time:
292
333
 
293
- ``` console
334
+ ```console
294
335
  bundle config set --global trust-policy MediumSecurity
295
336
  ```
296
337
 
@@ -304,12 +345,15 @@ NOTE: Be prepared to track down certs for signed gems and add them the same way
304
345
 
305
346
  ### Parser Backend Options
306
347
 
307
- `toml-merge` uses [tree\_haver](https://github.com/kettle-rb/tree_haver) for parsing, which supports multiple backends:
348
+ `toml-merge` uses [tree\_haver][tree_haver] for parsing, which supports multiple backends:
308
349
 
309
350
  **Tree-sitter backend** (default, requires native library):
310
- - Set the `TREE_SITTER_TOML_PATH` environment variable to point to your compiled `libtree-sitter-toml.so` (or `.dylib` on macOS):
351
+
352
+ - Set the `TREE_SITTER_TOML_PATH` environment variable to point to your compiled `libtree-sitter-toml.so` (or `.dylib` on macOS):
353
+
311
354
  <!-- end list -->
312
- ``` bash
355
+
356
+ ```bash
313
357
  export TREE_SITTER_TOML_PATH=/path/to/libtree-sitter-toml.so
314
358
  ```
315
359
 
@@ -320,35 +364,35 @@ tree-sitter. Choose **one** of the following based on your Ruby implementation:
320
364
 
321
365
  | Gem | Ruby Support | Description |
322
366
  | --- | --- | --- |
323
- | [ruby\_tree\_sitter](https://github.com/Faveod/ruby_tree_sitter) | MRI only | C extension bindings (recommended for MRI) |
324
- | [tree\_stump](https://github.com/nickstenning/tree_stump) | MRI (maybe JRuby) | Rust-based bindings via Rutie |
325
- | [ffi](https://github.com/ffi/ffi) | MRI, JRuby, TruffleRuby | Generic FFI bindings (used by tree\_haver's FFI backend) |
367
+ | [ruby\_tree\_sitter][ruby_tree_sitter] | MRI only | C extension bindings (recommended for MRI) |
368
+ | [tree\_stump][tree_stump] | MRI (maybe JRuby) | Rust-based bindings via Rutie |
369
+ | [ffi][ffi] | MRI, JRuby, TruffleRuby | Generic FFI bindings (used by tree\_haver's FFI backend) |
326
370
 
327
371
  [ruby_tree_sitter]: https://github.com/Faveod/ruby_tree_sitter
328
- [tree_stump]: https://github.com/nickstenning/tree_stump
372
+ [tree_stump]: https://github.com/joker1007/tree_stump
329
373
  [ffi-gem]: https://github.com/ffi/ffi
330
374
 
331
375
  #### For MRI Ruby (Recommended)
332
376
 
333
- ``` console
377
+ ```console
334
378
  gem install ruby_tree_sitter
335
379
  ```
336
380
 
337
381
  Or add to your Gemfile:
338
382
 
339
- ``` ruby
383
+ ```ruby
340
384
  gem "ruby_tree_sitter", "~> 2.0"
341
385
  ```
342
386
 
343
387
  #### For JRuby or TruffleRuby
344
388
 
345
- ``` console
389
+ ```console
346
390
  gem install ffi
347
391
  ```
348
392
 
349
393
  Or add to your Gemfile:
350
394
 
351
- ``` ruby
395
+ ```ruby
352
396
  gem "ffi"
353
397
  ```
354
398
 
@@ -359,14 +403,16 @@ the appropriate backend based on which gems are available.
359
403
  you must use the FFI backend or the Citrus backend (below).
360
404
 
361
405
  **Citrus backend** (pure Ruby, no native dependencies):
362
- - Alternative option using the [citrus](https://github.com/mjackson/citrus) and [toml-rb](https://github.com/emancu/toml-rb) gems
363
- - No compilation or system dependencies required
364
- - Ideal for environments where native extensions are problematic
365
- - Configure via tree\_haver's backend selection
366
- For more details on backend configuration, see the [tree\_haver documentation](https://github.com/kettle-rb/tree_haver).
406
+
407
+ - Alternative option using the [citrus][citrus] and [toml-rb][toml-rb] gems
408
+ - No compilation or system dependencies required
409
+ - Ideal for environments where native extensions are problematic
410
+ - Configure via tree\_haver's backend selection
411
+ For more details on backend configuration, see the [tree\_haver documentation][tree_haver].
412
+
367
413
  ### Merge Options
368
414
 
369
- ``` ruby
415
+ ```ruby
370
416
  merger = Toml::Merge::SmartMerger.new(
371
417
  template_content,
372
418
  dest_content,
@@ -395,7 +441,7 @@ merger = Toml::Merge::SmartMerger.new(
395
441
 
396
442
  ### Simple Merge
397
443
 
398
- ``` ruby
444
+ ```ruby
399
445
  require "toml/merge"
400
446
 
401
447
  # Template defines the structure
@@ -429,7 +475,7 @@ puts result.content
429
475
 
430
476
  Freeze blocks protect sections from being overwritten during merge:
431
477
 
432
- ``` toml
478
+ ```toml
433
479
  [package]
434
480
  name = "my-app"
435
481
 
@@ -447,7 +493,7 @@ Content between `# toml-merge:freeze` and `# toml-merge:unfreeze` markers is pre
447
493
 
448
494
  ### Adding Template-Only Tables
449
495
 
450
- ``` ruby
496
+ ```ruby
451
497
  merger = Toml::Merge::SmartMerger.new(
452
498
  template,
453
499
  destination,
@@ -464,17 +510,17 @@ Raising a monthly budget of... "dollars" would make the project more sustainable
464
510
 
465
511
  We welcome both individual and corporate sponsors\! We also offer a
466
512
  wide array of funding channels to account for your preferences
467
- (although currently [Open Collective](https://opencollective.com/kettle-rb) is our preferred funding platform).
513
+ (although currently [Open Collective][🖇osc] is our preferred funding platform).
468
514
 
469
515
  **If you're working in a company that's making significant use of kettle-rb tools we'd
470
516
  appreciate it if you suggest to your company to become a kettle-rb sponsor.**
471
517
 
472
518
  You can support the development of kettle-rb tools via
473
- [GitHub Sponsors](https://github.com/sponsors/pboling),
474
- [Liberapay](https://liberapay.com/pboling/donate),
475
- [PayPal](https://www.paypal.com/paypalme/peterboling),
476
- [Open Collective](https://opencollective.com/kettle-rb)
477
- and [Tidelift](https://tidelift.com/subscription/pkg/rubygems-toml-merge?utm_source=rubygems-toml-merge&utm_medium=referral&utm_campaign=readme).
519
+ [GitHub Sponsors][🖇sponsor],
520
+ [Liberapay][⛳liberapay],
521
+ [PayPal][🖇paypal],
522
+ [Open Collective][🖇osc]
523
+ and [Tidelift][🏙️entsup-tidelift].
478
524
 
479
525
  | 📍 NOTE |
480
526
  | --- |
@@ -482,9 +528,9 @@ and [Tidelift](https://tidelift.com/subscription/pkg/rubygems-toml-merge?utm_sou
482
528
 
483
529
  ### Open Collective for Individuals
484
530
 
485
- Support us with a monthly donation and help us continue our activities. \[[Become a backer](https://opencollective.com/kettle-rb#backer)\]
531
+ Support us with a monthly donation and help us continue our activities. \[[Become a backer][🖇osc-backers]\]
486
532
 
487
- NOTE: [kettle-readme-backers](https://github.com/kettle-rb/toml-merge/blob/main/exe/kettle-readme-backers) updates this list every day, automatically.
533
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
488
534
 
489
535
  <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
490
536
  No backers yet. Be the first!
@@ -492,9 +538,9 @@ No backers yet. Be the first!
492
538
 
493
539
  ### Open Collective for Organizations
494
540
 
495
- Become a sponsor and get your logo on our README on GitHub with a link to your site. \[[Become a sponsor](https://opencollective.com/kettle-rb#sponsor)\]
541
+ Become a sponsor and get your logo on our README on GitHub with a link to your site. \[[Become a sponsor][🖇osc-sponsors]\]
496
542
 
497
- NOTE: [kettle-readme-backers](https://github.com/kettle-rb/toml-merge/blob/main/exe/kettle-readme-backers) updates this list every day, automatically.
543
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
498
544
 
499
545
  <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
500
546
  No sponsors yet. Be the first!
@@ -508,48 +554,48 @@ I’m driven by a passion to foster a thriving open-source community – a space
508
554
 
509
555
  If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
510
556
 
511
- I’m developing a new library, [floss\_funding](https://github.com/galtzo-floss/floss_funding), designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
557
+ I’m developing a new library, [floss\_funding][🖇floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
512
558
 
513
- **[Floss-Funding.dev](https://floss-funding.dev): 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
559
+ **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
514
560
 
515
- [![OpenCollective Backers](https://opencollective.com/kettle-rb/backers/badge.svg?style=flat)](https://opencollective.com/kettle-rb#backer) [![OpenCollective Sponsors](https://opencollective.com/kettle-rb/sponsors/badge.svg?style=flat)](https://opencollective.com/kettle-rb#sponsor) [![Sponsor Me on Github](https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github)](https://github.com/sponsors/pboling) [![Liberapay Goal Progress](https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat)](https://liberapay.com/pboling/donate) [![Donate on PayPal](https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal)](https://www.paypal.com/paypalme/peterboling) [![Buy me a coffee](https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat)](https://www.buymeacoffee.com/pboling) [![Donate on Polar](https://img.shields.io/badge/polar-donate-a51611.svg?style=flat)](https://polar.sh/pboling) [![Donate to my FLOSS efforts at ko-fi.com](https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat)](https://ko-fi.com/O5O86SNP4) [![Donate to my FLOSS efforts using Patreon](https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat)](https://patreon.com/galtzo)
561
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS efforts using Patreon][🖇patreon-img]][🖇patreon]
516
562
 
517
563
  ## 🔐 Security
518
564
 
519
- See [SECURITY.md](SECURITY.md).
565
+ See [SECURITY.md][🔐security].
520
566
 
521
567
  ## 🤝 Contributing
522
568
 
523
569
  If you need some ideas of where to help, you could work on adding more code coverage,
524
- or if it is already 💯 (see [below](#code-coverage)) check [reek](REEK), [issues](https://github.com/kettle-rb/toml-merge/issues), or [PRs](https://github.com/kettle-rb/toml-merge/pulls),
570
+ or if it is already 💯 (see [below](#code-coverage)) check [reek](REEK), [issues][🤝gh-issues], or [PRs][🤝gh-pulls],
525
571
  or use the gem and think about how it could be better.
526
572
 
527
- We [![Keep A Changelog](https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat)](https://keepachangelog.com/en/1.0.0/) so if you make changes, remember to update it.
573
+ We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
528
574
 
529
- See [CONTRIBUTING.md](CONTRIBUTING.md) for more detailed instructions.
575
+ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
530
576
 
531
577
  ### 🚀 Release Instructions
532
578
 
533
- See [CONTRIBUTING.md](CONTRIBUTING.md).
579
+ See [CONTRIBUTING.md][🤝contributing].
534
580
 
535
581
  ### Code Coverage
536
582
 
537
- [![Coverage Graph](https://codecov.io/gh/kettle-rb/toml-merge/graphs/tree.svg)](https://codecov.io/gh/kettle-rb/toml-merge)
583
+ [![Coverage Graph][🏀codecov-g]][🏀codecov]
538
584
 
539
- [![Coveralls Test Coverage](https://coveralls.io/repos/github/kettle-rb/toml-merge/badge.svg?branch=main)](https://coveralls.io/github/kettle-rb/toml-merge?branch=main)
585
+ [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
540
586
 
541
- [![QLTY Test Coverage](https://qlty.sh/gh/kettle-rb/projects/toml-merge/coverage.svg)](https://qlty.sh/gh/kettle-rb/projects/toml-merge/metrics/code?sort=coverageRating)
587
+ [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
542
588
 
543
589
  ### 🪇 Code of Conduct
544
590
 
545
591
  Everyone interacting with this project's codebases, issue trackers,
546
- chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1](https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg)](CODE_OF_CONDUCT.md).
592
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
547
593
 
548
594
  ## 🌈 Contributors
549
595
 
550
- [![Contributors](https://contrib.rocks/image?repo=kettle-rb/toml-merge)](https://github.com/kettle-rb/toml-merge/graphs/contributors)
596
+ [![Contributors][🖐contributors-img]][🖐contributors]
551
597
 
552
- Made with [contributors-img](https://contrib.rocks).
598
+ Made with [contributors-img][🖐contrib-rocks].
553
599
 
554
600
  Also see GitLab Contributors: <https://gitlab.com/kettle-rb/toml-merge/-/graphs/main>
555
601
 
@@ -568,23 +614,23 @@ Also see GitLab Contributors: <https://gitlab.com/kettle-rb/toml-merge/-/graphs/
568
614
 
569
615
  ## 📌 Versioning
570
616
 
571
- This Library adheres to [![Semantic Versioning 2.0.0](https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat)](https://semver.org/spec/v2.0.0.html).
617
+ This Library adheres to [![Semantic Versioning 2.0.0][📌semver-img]][📌semver].
572
618
  Violations of this scheme should be reported as bugs.
573
619
  Specifically, if a minor or patch version is released that breaks backward compatibility,
574
620
  a new version should be immediately released that restores compatibility.
575
621
  Breaking changes to the public API will only be introduced with new major versions.
576
622
 
577
623
  > dropping support for a platform is both obviously and objectively a breaking change <br/>
578
- > —Jordan Harband ([@ljharb](https://github.com/ljharb), maintainer of SemVer) [in SemVer issue 716](https://github.com/semver/semver/issues/716#issuecomment-869336139)
624
+ > —Jordan Harband ([@ljharb](https://github.com/ljharb), maintainer of SemVer) [in SemVer issue 716][📌semver-breaking]
579
625
 
580
626
  I understand that policy doesn't work universally ("exceptions to every rule\!"),
581
627
  but it is the policy here.
582
628
  As such, in many cases it is good to specify a dependency on this library using
583
- the [Pessimistic Version Constraint](http://guides.rubygems.org/patterns/#pessimistic-version-constraint) with two digits of precision.
629
+ the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
584
630
 
585
631
  For example:
586
632
 
587
- ``` ruby
633
+ ```ruby
588
634
  spec.add_dependency("toml-merge", "~> 1.0")
589
635
  ```
590
636
 
@@ -597,16 +643,17 @@ is a *breaking change* to an API, and for that reason the bike shedding is endle
597
643
  To get a better understanding of how SemVer is intended to work over a project's lifetime,
598
644
  read this article from the creator of SemVer:
599
645
 
600
- - ["Major Version Numbers are Not Sacred"](https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html)
646
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
647
+
601
648
  </details>
602
649
 
603
- See [CHANGELOG.md](CHANGELOG.md) for a list of releases.
650
+ See [CHANGELOG.md][📌changelog] for a list of releases.
604
651
 
605
652
  ## 📄 License
606
653
 
607
654
  The gem is available as open source under the terms of
608
- the [MIT License](LICENSE.txt) [![License: MIT](https://img.shields.io/badge/License-MIT-259D6C.svg)](https://opensource.org/licenses/MIT).
609
- See [LICENSE.txt](LICENSE.txt) for the official [Copyright Notice](https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year).
655
+ the [MIT License][📄license] [![License: MIT][📄license-img]][📄license-ref].
656
+ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
610
657
 
611
658
  ### © Copyright
612
659
 
@@ -633,11 +680,11 @@ Please consider sponsoring me or the project.
633
680
 
634
681
  To join the community or get help 👇️ Join the Discord.
635
682
 
636
- [![Live Chat on Discord](https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord)](https://discord.gg/3qme4XHNKN)
683
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][🖼️galtzo-discord]
637
684
 
638
685
  To say "thanks\!" ☝️ Join the Discord or 👇️ send money.
639
686
 
640
- [![Sponsor kettle-rb/toml-merge on Open Source Collective](https://img.shields.io/opencollective/all/kettle-rb?style=for-the-badge)](https://opencollective.com/kettle-rb) 💌 [![Sponsor me on GitHub Sponsors](https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github)](https://github.com/sponsors/pboling) 💌 [![Sponsor me on Liberapay](https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611)](https://liberapay.com/pboling/donate) 💌 [![Donate on PayPal](https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A)](https://www.paypal.com/paypalme/peterboling)
687
+ [![Sponsor kettle-rb/toml-merge on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
641
688
 
642
689
  ### Please give the project a star ⭐ ♥.
643
690
 
@@ -678,7 +725,6 @@ Thanks for RTFM. ☺️
678
725
  [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
679
726
  [✉️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
680
727
  [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
681
-
682
728
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
683
729
  [⛳️gem-namespace]: https://github.com/kettle-rb/toml-merge
684
730
  [⛳️namespace-img]: https://img.shields.io/badge/namespace-Toml::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -802,7 +848,7 @@ Thanks for RTFM. ☺️
802
848
  [📌gitmoji]: https://gitmoji.dev
803
849
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
804
850
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
805
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.637-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
851
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.643-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
806
852
  [🔐security]: SECURITY.md
807
853
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
808
854
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -823,15 +869,12 @@ Thanks for RTFM. ☺️
823
869
  [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
824
870
  [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
825
871
 
826
-
827
- The `*-merge` gem family provides intelligent, AST-based merging for various file formats. At the foundation is [tree\_haver](https://github.com/kettle-rb/tree_haver), which provides a unified cross-Ruby parsing API that works seamlessly across MRI, JRuby, and TruffleRuby.
828
-
829
-
872
+ The `*-merge` gem family provides intelligent, AST-based merging for various file formats. At the foundation is [tree\_haver][tree_haver], which provides a unified cross-Ruby parsing API that works seamlessly across MRI, JRuby, and TruffleRuby.
830
873
 
831
874
  | Gem | Purpose | Description |
832
875
  | --- | --- | --- |
833
- | [kettle-dev](https://github.com/kettle-rb/kettle-dev) | Gem Development | Gem templating tool using `*-merge` gems |
834
- | [kettle-jem](https://github.com/kettle-rb/kettle-jem) | Gem Templating | Gem template library with smart merge support |
876
+ | [kettle-dev][kettle-dev] | Gem Development | Gem templating tool using `*-merge` gems |
877
+ | [kettle-jem][kettle-jem] | Gem Templating | Gem template library with smart merge support |
835
878
 
836
879
  [tree_haver]: https://github.com/kettle-rb/tree_haver
837
880
  [ast-merge]: https://github.com/kettle-rb/ast-merge
@@ -859,4 +902,3 @@ The `*-merge` gem family provides intelligent, AST-based merging for various fil
859
902
  [toml-rb]: https://github.com/emancu/toml-rb
860
903
  [markly]: https://github.com/ioquatix/markly
861
904
  [commonmarker]: https://github.com/gjtorikian/commonmarker
862
-
@@ -6,7 +6,7 @@ module Toml
6
6
  # Extends the base Ast::Merge::DebugLogger with Toml-specific configuration.
7
7
  #
8
8
  # @example Enable debug logging
9
- # ENV['TOML_MERGE_DEBUG'] = '1'
9
+ # ENV['TREE_HAVER_DEBUG'] = '1'
10
10
  # DebugLogger.debug("Processing node", {type: "pair", line: 5})
11
11
  #
12
12
  # @example Disable debug logging (default)
@@ -15,7 +15,7 @@ module Toml
15
15
  extend Ast::Merge::DebugLogger
16
16
 
17
17
  # Toml-specific configuration
18
- self.env_var_name = "TOML_MERGE_DEBUG"
18
+ self.env_var_name = "TREE_HAVER_DEBUG"
19
19
  self.log_prefix = "[Toml::Merge]"
20
20
 
21
21
  class << self
@@ -173,16 +173,23 @@ module Toml
173
173
  # TreeHaver handles everything:
174
174
  # - Backend selection (via TREE_HAVER_BACKEND env or TreeHaver.backend)
175
175
  # - Grammar auto-discovery
176
- # - Fallback to Citrus if tree-sitter unavailable
177
- # - CITRUS_DEFAULTS already includes toml configuration
176
+ # - Fallback to Citrus or Parslet if tree-sitter unavailable
177
+ # - CITRUS_DEFAULTS and PARSLET_DEFAULTS include toml configuration
178
178
  parser_options = {}
179
179
  parser_options[:library_path] = @parser_path if @parser_path
180
180
 
181
181
  parser = TreeHaver.parser_for(:toml, **parser_options)
182
182
 
183
- # For NodeTypeNormalizer, we only care: is it Citrus or tree-sitter format?
184
- # All native backends (mri, rust, ffi, java) produce tree-sitter AST format.
185
- @backend = (parser.backend == :citrus) ? :citrus : :tree_sitter
183
+ # For NodeTypeNormalizer, we care about the backend type:
184
+ # - All native backends (mri, rust, ffi, java) produce tree-sitter AST format
185
+ # - Citrus produces Citrus::Match-based nodes
186
+ # - Parslet produces Hash/Array/Slice-based nodes
187
+ backend_sym = parser.backend
188
+ @backend = case backend_sym
189
+ when :citrus then :citrus
190
+ when :parslet then :parslet
191
+ else :tree_sitter # mri, rust, ffi, java all use tree-sitter format
192
+ end
186
193
 
187
194
  @ast = parser.parse(@source)
188
195
 
@@ -20,6 +20,7 @@ module Toml
20
20
  # Currently supports:
21
21
  # - `:tree_sitter` - tree-sitter-toml grammar (via ruby_tree_sitter, tree_stump, FFI)
22
22
  # - `:citrus` - toml-rb gem with Citrus parser
23
+ # - `:parslet` - toml gem with Parslet parser
23
24
  #
24
25
  # ## Extensibility
25
26
  #
@@ -189,6 +190,46 @@ module Toml
189
190
  "}": :brace_close,
190
191
  ",": :comma,
191
192
  }.freeze,
193
+
194
+ # Parslet/toml gem backend node types
195
+ # These are produced by TreeHaver's Parslet adapter wrapping the toml gem
196
+ # Parslet returns Hash/Array/Slice structures with keys from .as(:name) rules
197
+ # Reference: https://github.com/jm/toml (TOML::Parslet grammar)
198
+ parslet: {
199
+ # Document structure
200
+ document: :document,
201
+ hash: :document, # Root result is often a hash
202
+ table: :table,
203
+ table_array: :array_of_tables,
204
+
205
+ # Key-value pairs - Parslet uses :key and :value hash keys
206
+ key: :bare_key,
207
+ value: :value,
208
+ pair: :pair, # Synthetic type for key-value combinations
209
+
210
+ # Value types - from .as(:type) rules in TOML::Parslet
211
+ string: :string,
212
+ integer: :integer,
213
+ float: :float,
214
+ boolean: :boolean,
215
+ true: :boolean,
216
+ false: :boolean,
217
+ array: :array,
218
+
219
+ # Date/time types
220
+ datetime: :datetime,
221
+ datetime_rfc3339: :datetime,
222
+
223
+ # Slice types (terminal values)
224
+ slice: :string, # Parslet::Slice defaults to string
225
+
226
+ # Structural types from Parslet result structure
227
+ element: :element, # Array elements
228
+ array_element: :element,
229
+
230
+ # Unknown/fallback
231
+ unknown: :unknown,
232
+ }.freeze,
192
233
  )
193
234
 
194
235
  class << self
@@ -5,7 +5,7 @@ module Toml
5
5
  # Version information for Toml::Merge
6
6
  module Version
7
7
  # Current version of the toml-merge gem
8
- VERSION = "2.0.0"
8
+ VERSION = "2.0.1"
9
9
  end
10
10
  VERSION = Version::VERSION # traditional location
11
11
  end
data/lib/toml/merge.rb CHANGED
@@ -5,7 +5,7 @@ require "set"
5
5
 
6
6
  # External gems
7
7
  # TreeHaver provides a unified cross-Ruby interface to tree-sitter.
8
- # It handles grammar discovery, backend selection, and Citrus fallback automatically
8
+ # It handles grammar discovery, backend selection, Citrus and Parslet fallbacks, automatically
9
9
  # via parser_for(:toml). No manual registration needed.
10
10
  require "tree_haver"
11
11
  require "version_gem"
@@ -103,6 +103,18 @@ module Toml
103
103
  end
104
104
  end
105
105
 
106
+ # Register with ast-merge's MergeGemRegistry for RSpec dependency tags
107
+ # Only register if MergeGemRegistry is loaded (i.e., in test environment)
108
+ if defined?(Ast::Merge::RSpec::MergeGemRegistry)
109
+ Ast::Merge::RSpec::MergeGemRegistry.register(
110
+ :toml_merge,
111
+ require_path: "toml/merge",
112
+ merger_class: "Toml::Merge::SmartMerger",
113
+ test_source: "[section]\nkey = \"value\"",
114
+ category: :config,
115
+ )
116
+ end
117
+
106
118
  Toml::Merge::Version.class_eval do
107
119
  extend VersionGem::Basic
108
120
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toml-merge
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -43,40 +43,40 @@ dependencies:
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '4.0'
46
+ version: '5.0'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 4.0.3
49
+ version: 5.0.5
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '4.0'
56
+ version: '5.0'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 4.0.3
59
+ version: 5.0.5
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: ast-merge
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: '3.1'
66
+ version: '4.0'
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 3.1.0
69
+ version: 4.0.6
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '3.1'
76
+ version: '4.0'
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 3.1.0
79
+ version: 4.0.6
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: version_gem
82
82
  requirement: !ruby/object:Gem::Requirement
@@ -97,6 +97,86 @@ dependencies:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: 1.1.9
100
+ - !ruby/object:Gem::Dependency
101
+ name: citrus
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: '3.0'
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 3.0.2
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '3.0'
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: 3.0.2
120
+ - !ruby/object:Gem::Dependency
121
+ name: parslet
122
+ requirement: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: '2.0'
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 2.0.0
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '2.0'
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: 2.0.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: toml
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '0.3'
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: 0.3.0
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: '0.3'
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 0.3.0
160
+ - !ruby/object:Gem::Dependency
161
+ name: toml-rb
162
+ requirement: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '4.1'
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: 4.1.0
170
+ type: :development
171
+ prerelease: false
172
+ version_requirements: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '4.1'
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: 4.1.0
100
180
  - !ruby/object:Gem::Dependency
101
181
  name: kettle-dev
102
182
  requirement: !ruby/object:Gem::Requirement
@@ -166,6 +246,9 @@ dependencies:
166
246
  - - "~>"
167
247
  - !ruby/object:Gem::Version
168
248
  version: '3.0'
249
+ - - "~>"
250
+ - !ruby/object:Gem::Version
251
+ version: 3.0.6
169
252
  type: :development
170
253
  prerelease: false
171
254
  version_requirements: !ruby/object:Gem::Requirement
@@ -173,6 +256,9 @@ dependencies:
173
256
  - - "~>"
174
257
  - !ruby/object:Gem::Version
175
258
  version: '3.0'
259
+ - - "~>"
260
+ - !ruby/object:Gem::Version
261
+ version: 3.0.6
176
262
  - !ruby/object:Gem::Dependency
177
263
  name: kettle-test
178
264
  requirement: !ruby/object:Gem::Requirement
@@ -182,7 +268,7 @@ dependencies:
182
268
  version: '1.0'
183
269
  - - ">="
184
270
  - !ruby/object:Gem::Version
185
- version: 1.0.6
271
+ version: 1.0.10
186
272
  type: :development
187
273
  prerelease: false
188
274
  version_requirements: !ruby/object:Gem::Requirement
@@ -192,7 +278,7 @@ dependencies:
192
278
  version: '1.0'
193
279
  - - ">="
194
280
  - !ruby/object:Gem::Version
195
- version: 1.0.6
281
+ version: 1.0.10
196
282
  - !ruby/object:Gem::Dependency
197
283
  name: ruby-progressbar
198
284
  requirement: !ruby/object:Gem::Requirement
@@ -216,7 +302,7 @@ dependencies:
216
302
  version: '1.0'
217
303
  - - ">="
218
304
  - !ruby/object:Gem::Version
219
- version: 1.0.2
305
+ version: 1.0.3
220
306
  type: :development
221
307
  prerelease: false
222
308
  version_requirements: !ruby/object:Gem::Requirement
@@ -226,7 +312,7 @@ dependencies:
226
312
  version: '1.0'
227
313
  - - ">="
228
314
  - !ruby/object:Gem::Version
229
- version: 1.0.2
315
+ version: 1.0.3
230
316
  - !ruby/object:Gem::Dependency
231
317
  name: gitmoji-regex
232
318
  requirement: !ruby/object:Gem::Requirement
@@ -294,10 +380,10 @@ licenses:
294
380
  - MIT
295
381
  metadata:
296
382
  homepage_uri: https://toml-merge.galtzo.com/
297
- source_code_uri: https://github.com/kettle-rb/toml-merge/tree/v2.0.0
298
- changelog_uri: https://github.com/kettle-rb/toml-merge/blob/v2.0.0/CHANGELOG.md
383
+ source_code_uri: https://github.com/kettle-rb/toml-merge/tree/v2.0.1
384
+ changelog_uri: https://github.com/kettle-rb/toml-merge/blob/v2.0.1/CHANGELOG.md
299
385
  bug_tracker_uri: https://github.com/kettle-rb/toml-merge/issues
300
- documentation_uri: https://www.rubydoc.info/gems/toml-merge/2.0.0
386
+ documentation_uri: https://www.rubydoc.info/gems/toml-merge/2.0.1
301
387
  funding_uri: https://github.com/sponsors/pboling
302
388
  wiki_uri: https://github.com/kettle-rb/toml-merge/wiki
303
389
  news_uri: https://www.railsbling.com/tags/toml-merge
@@ -326,7 +412,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
326
412
  - !ruby/object:Gem::Version
327
413
  version: '0'
328
414
  requirements: []
329
- rubygems_version: 4.0.3
415
+ rubygems_version: 4.0.5
330
416
  specification_version: 4
331
417
  summary: "☯️ TOML file smart merge using tree-sitter AST analysis"
332
418
  test_files: []
metadata.gz.sig CHANGED
Binary file