kettle-rb 0.1.18 → 0.1.20

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: 638c9c41bd338ec9c02c5b28242455a9363ffc074c9eea27d56b80f52bd3ef45
4
- data.tar.gz: dc85a325a0656c0758f2b28c43f6ffc6d08f617a3158d3d19893f8ef9734645d
3
+ metadata.gz: 04d9d8008b83d76e859f51940db356e205ec35148ef41cdddea34546f38e55a1
4
+ data.tar.gz: 2c90edff594720214534f2b6a0fbec46ca666b221224f899317e8ea4ae41f8fc
5
5
  SHA512:
6
- metadata.gz: ff3a5080c2909dd76134ca64888d976b6de43c7266df8b98b90035adb587a72bd4029fb28c19d6c051ce97e515784e08bc458374b166f67d292bcf3a6eaf6bae
7
- data.tar.gz: d48a0590cd5c61339ff4f99a7b973f1dab67338b2b88dc8512c2d2b002a77f4c4a780487091c8a2f885bb36df7ca4428c69ccf444eb1bd9f86ba6adf9870f4e0
6
+ metadata.gz: ff086713cf25198ba186051ebc52f6234a1ca8812664caf38d70bb9cebd584dcf17ec540a20dbaef585740c5c4b58c7ba21e1f22c21a9f475b1bc385495fd490
7
+ data.tar.gz: 4555a3e90848db1eef3621b3a7ac5b1030973fddf82ad5e58346527ba842cf40adb43a163a74330c8b3dd2933f873af769c8658b8aee401314401fc987d4bd62
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,41 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [0.1.20] - 2026-10-25
34
+
35
+ - TAG: [v0.1.20][0.1.20t]
36
+ - COVERAGE: 100.00% -- 421/421 lines in 11 files
37
+ - BRANCH COVERAGE: 98.15% -- 53/54 branches in 11 files
38
+ - 63.08% documented
39
+
40
+ ### Changed
41
+
42
+ - [kc] kettle-jem/template: updated 1 project file:
43
+ - code and tests (1)
44
+
45
+ ## [0.1.19] - 2026-10-25
46
+
47
+ - TAG: [v0.1.19][0.1.19t]
48
+ - COVERAGE: 100.00% -- 421/421 lines in 11 files
49
+ - BRANCH COVERAGE: 98.15% -- 53/54 branches in 11 files
50
+ - 63.08% documented
51
+
52
+ ### Added
53
+
54
+ - Shared Ruby series bucket range calculation for compatibility matrices and template curation.
55
+
56
+ ### Changed
57
+
58
+ - [kc] kettle-jem/prepare: updated 25 project files:
59
+ - dependencies (25)
60
+
61
+ - [kc] kettle-jem/template: updated 13 project files:
62
+ - code and tests (2)
63
+ - dependencies (2)
64
+ - documentation (1)
65
+ - other (1)
66
+ - workflows (7)
67
+
33
68
  ## [0.1.18] - 2026-10-15
34
69
 
35
70
  - TAG: [v0.1.18][0.1.18t]
@@ -382,7 +417,11 @@ Please file a bug if you notice a violation of semantic versioning.
382
417
  - Add `Kettle::Rb::CompatMatrix` as the shared Ruby, engine, Rails, RuboCop,
383
418
  and RuboCop LTS compatibility source of truth for kettle-dev tooling.
384
419
 
385
- [Unreleased]: https://github.com/kettle-dev/kettle-rb/compare/v0.1.18...HEAD
420
+ [Unreleased]: https://github.com/kettle-dev/kettle-rb/compare/v0.1.20...HEAD
421
+ [0.1.20]: https://github.com/kettle-dev/kettle-rb/compare/v0.1.19...v0.1.20
422
+ [0.1.20t]: https://github.com/kettle-dev/kettle-rb/releases/tag/v0.1.20
423
+ [0.1.19]: https://github.com/kettle-dev/kettle-rb/compare/v0.1.18...v0.1.19
424
+ [0.1.19t]: https://github.com/kettle-dev/kettle-rb/releases/tag/v0.1.19
386
425
  [0.1.18]: https://github.com/kettle-dev/kettle-rb/compare/v0.1.17...v0.1.18
387
426
  [0.1.18t]: https://github.com/kettle-dev/kettle-rb/releases/tag/v0.1.18
388
427
  [0.1.17]: https://github.com/kettle-dev/kettle-rb/compare/v0.1.15...v0.1.17
data/README.md CHANGED
@@ -73,6 +73,7 @@ Use it when tooling needs to answer questions like:
73
73
 
74
74
  Compatible with MRI Ruby 1.8.7+, JRuby, and TruffleRuby.
75
75
  CI workflows and Appraisals are generated for MRI Ruby 2.4.0+.
76
+ The current MRI CI lane runs on Linux and macOS.
76
77
  This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
77
78
  may be higher than the gem's runtime compatibility floor when legacy Rubies are
78
79
  not practical for the current toolchain.
@@ -97,23 +98,6 @@ The _amazing_ test matrix is powered by the kettle-dev stack.
97
98
 
98
99
  </details>
99
100
 
100
- ### Runtime and Platform Support
101
-
102
- Support tiers describe what this project's CI actually exercises, not what may
103
- work in an untested environment:
104
-
105
- - **Parallel support**: CI runs the test suite with multiple workers available.
106
- - **Unsupported**: the engine/platform combination is not covered by CI and is
107
- not a project compatibility claim.
108
-
109
- | Ruby engine/version | Linux | macOS | Windows | Notes |
110
- |---------------------|-------|-------|---------|-------|
111
- | MRI 3.1-3.4 | Parallel support | Unsupported | Unsupported | Versioned Ruby workflows run on Linux. |
112
- | MRI current | Parallel support | Parallel support | Unsupported | Current Ruby workflow covers the declared OS platforms. |
113
- | MRI head | Parallel support | Unsupported | Unsupported | CI is allowed to fail while Ruby is in development. |
114
- | JRuby (all CI lanes) | Parallel support | Unsupported | Unsupported | Engine workflows run on Linux; macOS and Windows are not exercised by CI. |
115
- | TruffleRuby (all CI lanes) | Parallel support | Unsupported | Unsupported | Never shipped a Windows build (zero Windows assets across 66 releases scanned 2026-10-10); setup-ruby hard-fails ([source](https://github.com/ruby/setup-ruby/blob/master/README.md)) |
116
-
117
101
  ### Federated DVCS
118
102
 
119
103
  <details markdown="1">
@@ -129,29 +113,12 @@ work in an untested environment:
129
113
 
130
114
  ### Enterprise Support
131
115
 
132
- [![Tidelift](https://tidelift.com/badges/package/rubygems/kettle-rb)](https://tidelift.com/subscription/pkg/rubygems-kettle-rb?utm_source=rubygems-kettle-rb&utm_medium=referral&utm_campaign=readme)
133
-
134
- Available as part of the Tidelift Subscription.
135
-
136
- <details markdown="1">
137
- <summary>Need enterprise-level guarantees?</summary>
138
-
139
- 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.
116
+ For enterprise support from the maintainer, use [Upwork][👨🏼‍🏫expsup-upwork] or [CodeMentor][👨🏼‍🏫expsup-codementor].
140
117
 
141
- [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
142
-
143
- - 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies
144
- - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
145
- - 💡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
146
-
147
- Alternatively:
118
+ Other support channels:
148
119
 
149
120
  - [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
150
121
  - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
151
- - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
152
- - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
153
-
154
- </details>
155
122
 
156
123
  ## ✨ Installation
157
124
 
@@ -277,19 +244,18 @@ We welcome both individual and corporate sponsors! We also offer a
277
244
  wide array of funding channels to account for your preferences.
278
245
  Currently, [Open Collective][🖇osc] is our preferred funding platform.
279
246
 
247
+ ### Corporate Sponsorship
248
+
280
249
  **If you're working in a company that's making significant use of kettle-dev tools we'd
281
250
  appreciate it if you suggest to your company to become a kettle-dev sponsor.**
282
251
 
252
+ ### Individual Support
253
+
283
254
  You can support the development of kettle-dev tools via
284
255
  [GitHub Sponsors][🖇sponsor],
285
256
  [Liberapay][⛳liberapay],
286
- [PayPal][🖇paypal],
287
- [Open Collective][🖇osc]
288
- and [Tidelift][🏙️entsup-tidelift].
289
-
290
- | 📍 NOTE |
291
- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
292
- | If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
257
+ [Open Collective][🖇osc],
258
+ and [PayPal][🖇paypal].
293
259
 
294
260
  ### Open Collective for Individuals
295
261
 
@@ -504,9 +470,6 @@ Thanks for RTFM. ☺️
504
470
  [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
505
471
  [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
506
472
  [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
507
- [🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-kettle-rb?utm_source=rubygems-kettle-rb&utm_medium=referral&utm_campaign=readme
508
- [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
509
- [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
510
473
  [💁🏼‍♂️peterboling]: http://www.peterboling.com
511
474
  [🚂railsbling]: http://www.railsbling.com
512
475
  [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
@@ -626,7 +589,7 @@ Thanks for RTFM. ☺️
626
589
  [📌gitmoji]: https://gitmoji.dev
627
590
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
628
591
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
629
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.362-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
592
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.421-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
630
593
  [🔐security]: https://github.com/kettle-dev/kettle-rb/blob/main/SECURITY.md
631
594
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
632
595
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -656,5 +619,5 @@ Thanks for RTFM. ☺️
656
619
  | Homepage | https://github.com/kettle-dev/kettle-rb |
657
620
  | Source | https://github.com/kettle-dev/kettle-rb |
658
621
  | License | `MIT` |
659
- | Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/kettle-dev, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/kettle-rb, https://www.buymeacoffee.com/pboling |
622
+ | Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/kettle-dev, https://thanks.dev/u/gh/pboling, https://www.buymeacoffee.com/pboling |
660
623
  <!-- kettle-jem:metadata:end -->
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rubygems"
4
+ require "set"
5
+ require "kettle/rb/compat_matrix"
6
+
7
+ module Kettle
8
+ module Rb
9
+ # Converts between Ruby minor-version seams and the folder buckets used by
10
+ # modular Gemfile matrices. A major-only bucket (rN) is the catch-all for
11
+ # the newest range in that major; rN.M buckets cover the earlier range
12
+ # ending at M.
13
+ module RubySeriesBuckets
14
+ module_function
15
+
16
+ # Builds buckets and their Ruby ranges from the seam versions that define
17
+ # the matrix. This is the shared implementation used by appraisal matrix
18
+ # generation and by template curation.
19
+ #
20
+ # @param minor_versions [Array<String, Gem::Version>]
21
+ # @return [Hash] bucket names and floor/ceiling ranges
22
+ def from_minor_versions(minor_versions)
23
+ by_major = Array(minor_versions).each_with_object({}) do |minor, grouped|
24
+ version = Gem::Version.new(minor.to_s)
25
+ major = version.segments[0]
26
+ grouped[major] ||= []
27
+ grouped[major] << version
28
+ end
29
+
30
+ buckets = []
31
+ ranges = {}
32
+ by_major.each do |major, versions|
33
+ sorted = versions.uniq.sort
34
+ sorted.each_with_index do |version, index|
35
+ if index == sorted.length - 1
36
+ bucket = "r#{major}"
37
+ buckets << bucket
38
+ ranges[bucket] = {:floor => version, :ceiling => Gem::Version.new("#{major}.99")}
39
+ next
40
+ end
41
+
42
+ next_version = sorted[index + 1]
43
+ upper = [next_version.segments[1].to_i - 1, version.segments[1].to_i].max
44
+ bucket = "r#{major}.#{upper}"
45
+ buckets << bucket
46
+ ranges[bucket] = {
47
+ :floor => version,
48
+ :ceiling => Gem::Version.new("#{major}.#{upper}")
49
+ }
50
+ end
51
+ end
52
+
53
+ {:buckets => buckets.uniq, :bucket_ranges => ranges}
54
+ end
55
+
56
+ # Reconstructs the canonical ranges from the complete set of bucket
57
+ # folder names. Named buckets are upper bounds; the major-only bucket
58
+ # catches the remaining versions in that major.
59
+ #
60
+ # @param buckets [Array<String>] folder names such as r2.4, r2.6, r2
61
+ # @return [Hash{String => Hash}] ranges keyed by bucket name
62
+ def ranges_for_buckets(buckets)
63
+ parsed = Array(buckets).map { |bucket|
64
+ match = bucket.to_s.match(/\Ar(\d+)(?:\.(\d+))?\z/)
65
+ [match[1].to_i, match[2] && match[2].to_i, bucket.to_s] if match
66
+ }.compact
67
+ parsed.group_by(&:first).each_with_object({}) do |(major, entries), result|
68
+ named = entries.select { |_major, minor, _bucket| minor }.sort_by { |_major, minor, _bucket| minor }
69
+ seams = [minimum_ruby_for_major(major)]
70
+ named.each do |_entry_major, minor, _bucket|
71
+ seams << Gem::Version.new("#{major}.#{minor + 1}")
72
+ end
73
+ seams.uniq!
74
+ generated = from_minor_versions(seams)
75
+ requested = entries.map(&:last).to_set
76
+ generated.fetch(:bucket_ranges).each do |bucket, range|
77
+ result[bucket] = range if requested.include?(bucket)
78
+ end
79
+ end
80
+ end
81
+
82
+ # Keeps every bucket whose Ruby range intersects the destination's
83
+ # supported Ruby versions (all versions at or above +:minimum+).
84
+ # Takes an options hash rather than a required keyword so the file parses
85
+ # on every Ruby the gem supports.
86
+ def relevant_buckets(buckets, options = {})
87
+ floor = Gem::Version.new(options.fetch(:minimum).to_s)
88
+ ranges = ranges_for_buckets(buckets)
89
+ ranges.map { |bucket, range| bucket if range.fetch(:ceiling) >= floor }
90
+ .compact
91
+ .sort_by { |bucket| bucket_sort_key(bucket) }
92
+ end
93
+
94
+ def minimum_ruby_for_major(major)
95
+ versions = CompatMatrix.entries.map { |key, _entry|
96
+ match = key.match(/\Aruby-(\d+)\.(\d+)\z/)
97
+ Gem::Version.new("#{match[1]}.#{match[2]}") if match && match[1].to_i == major
98
+ }.compact
99
+ versions.min || Gem::Version.new("#{major}.0")
100
+ end
101
+ private_class_method :minimum_ruby_for_major
102
+
103
+ def bucket_sort_key(bucket)
104
+ match = bucket.match(/\Ar(\d+)(?:\.(\d+))?\z/)
105
+ [match[1].to_i, match[2] ? match[2].to_i : 999]
106
+ end
107
+ private_class_method :bucket_sort_key
108
+ end
109
+ end
110
+ end
@@ -5,7 +5,7 @@ module Kettle
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = "0.1.18"
8
+ VERSION = "0.1.20"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
data/lib/kettle/rb.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "rb/compat_matrix"
4
+ require_relative "rb/ruby_series_buckets"
4
5
  require_relative "rb/gem_floors"
5
6
  require_relative "rb/gem_dependencies"
6
7
  require_relative "rb/platform_support"
data/sig/kettle/rb.rbs CHANGED
@@ -5,5 +5,11 @@ module Kettle
5
5
  VERSION: String
6
6
  end
7
7
  VERSION: String
8
+
9
+ module RubySeriesBuckets
10
+ def self.from_minor_versions: (Array[String | Gem::Version]) -> { buckets: Array[String], bucket_ranges: Hash[String, { floor: Gem::Version, ceiling: Gem::Version }] }
11
+ def self.ranges_for_buckets: (Array[String]) -> Hash[String, { floor: Gem::Version, ceiling: Gem::Version }]
12
+ def self.relevant_buckets: (Array[String], minimum: String | Gem::Version) -> Array[String]
13
+ end
8
14
  end
9
15
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.18
4
+ version: 0.1.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '3.1'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 3.1.13
49
+ version: 3.1.24
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
@@ -56,7 +56,7 @@ dependencies:
56
56
  version: '3.1'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 3.1.13
59
+ version: 3.1.24
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: bundler-audit
62
62
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +114,7 @@ dependencies:
114
114
  version: '0.1'
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 0.1.3
117
+ version: 0.1.4
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -124,7 +124,7 @@ dependencies:
124
124
  version: '0.1'
125
125
  - - ">="
126
126
  - !ruby/object:Gem::Version
127
- version: 0.1.3
127
+ version: 0.1.4
128
128
  - !ruby/object:Gem::Dependency
129
129
  name: appraisal2
130
130
  requirement: !ruby/object:Gem::Requirement
@@ -134,7 +134,7 @@ dependencies:
134
134
  version: '3.2'
135
135
  - - ">="
136
136
  - !ruby/object:Gem::Version
137
- version: 3.2.5
137
+ version: 3.2.6
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
@@ -144,7 +144,7 @@ dependencies:
144
144
  version: '3.2'
145
145
  - - ">="
146
146
  - !ruby/object:Gem::Version
147
- version: 3.2.5
147
+ version: 3.2.6
148
148
  - !ruby/object:Gem::Dependency
149
149
  name: kettle-test
150
150
  requirement: !ruby/object:Gem::Requirement
@@ -154,7 +154,7 @@ dependencies:
154
154
  version: '2.0'
155
155
  - - ">="
156
156
  - !ruby/object:Gem::Version
157
- version: 2.0.25
157
+ version: 2.0.27
158
158
  type: :development
159
159
  prerelease: false
160
160
  version_requirements: !ruby/object:Gem::Requirement
@@ -164,7 +164,7 @@ dependencies:
164
164
  version: '2.0'
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
- version: 2.0.25
167
+ version: 2.0.27
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: turbo_tests2
170
170
  requirement: !ruby/object:Gem::Requirement
@@ -259,6 +259,7 @@ files:
259
259
  - lib/kettle/rb/platform_support.rb
260
260
  - lib/kettle/rb/platform_support/data.rb
261
261
  - lib/kettle/rb/platform_support/generator.rb
262
+ - lib/kettle/rb/ruby_series_buckets.rb
262
263
  - lib/kettle/rb/version.rb
263
264
  - sig/kettle/rb.rbs
264
265
  homepage: https://github.com/kettle-dev/kettle-rb
@@ -266,10 +267,10 @@ licenses:
266
267
  - MIT
267
268
  metadata:
268
269
  homepage_uri: https://kettle-rb.galtzo.com
269
- source_code_uri: https://github.com/kettle-dev/kettle-rb/tree/v0.1.18
270
- changelog_uri: https://github.com/kettle-dev/kettle-rb/blob/v0.1.18/CHANGELOG.md
270
+ source_code_uri: https://github.com/kettle-dev/kettle-rb/tree/v0.1.20
271
+ changelog_uri: https://github.com/kettle-dev/kettle-rb/blob/v0.1.20/CHANGELOG.md
271
272
  bug_tracker_uri: https://github.com/kettle-dev/kettle-rb/issues
272
- documentation_uri: https://www.rubydoc.info/gems/kettle-rb/0.1.18
273
+ documentation_uri: https://www.rubydoc.info/gems/kettle-rb/0.1.20
273
274
  funding_uri: https://github.com/sponsors/pboling
274
275
  wiki_uri: https://github.com/kettle-dev/kettle-rb/wiki
275
276
  news_uri: https://www.railsbling.com/tags/kettle-rb
metadata.gz.sig CHANGED
Binary file