kettle-dev 1.0.22 → 1.0.24

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.
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "kettle/dev/exit_adapter"
4
- require "kettle/dev/input_adapter"
5
-
6
3
  module Kettle
7
4
  module Dev
8
5
  module Tasks
@@ -44,107 +41,98 @@ module Kettle
44
41
  readme_path = File.join(project_root, "README.md")
45
42
  if File.file?(readme_path)
46
43
  md = helpers.gemspec_metadata(project_root)
47
- min_ruby = md[:min_ruby].to_s.strip
48
- if !min_ruby.empty?
49
- # Compare using Gem::Version on major.minor
50
- require "rubygems"
51
- min_ver = begin
52
- Gem::Version.new(min_ruby.sub(/\A(~>\s*|>=\s*)/, ""))
53
- rescue
54
- nil
55
- end
56
- if min_ver
57
- content = File.read(readme_path)
44
+ min_ruby = md[:min_ruby] # an instance of Gem::Version
45
+ if min_ruby
46
+ content = File.read(readme_path)
58
47
 
59
- # Detect all MRI ruby badge labels present
60
- removed_labels = []
48
+ # Detect all MRI ruby badge labels present
49
+ removed_labels = []
61
50
 
62
- content.scan(/\[(?<label>💎ruby-(?<ver>\d+\.\d+)i)\]/) do |arr|
63
- label, ver_s = arr
64
- begin
65
- ver = Gem::Version.new(ver_s)
66
- if ver < min_ver
67
- # Remove occurrences of badges using this label
68
- label_re = Regexp.escape(label)
69
- # Linked form: [![...][label]][...]
70
- content = content.gsub(/\[!\[[^\]]*?\]\s*\[#{label_re}\]\s*\]\s*\[[^\]]+\]/, "")
71
- # Unlinked form: ![...][label]
72
- content = content.gsub(/!\[[^\]]*?\]\s*\[#{label_re}\]/, "")
73
- removed_labels << label
74
- end
75
- rescue StandardError
76
- # ignore
51
+ content.scan(/\[(?<label>💎ruby-(?<ver>\d+\.\d+)i)\]/) do |arr|
52
+ label, ver_s = arr
53
+ begin
54
+ ver = Gem::Version.new(ver_s)
55
+ if ver < min_ruby
56
+ # Remove occurrences of badges using this label
57
+ label_re = Regexp.escape(label)
58
+ # Linked form: [![...][label]][...]
59
+ content = content.gsub(/\[!\[[^\]]*?\]\s*\[#{label_re}\]\s*\]\s*\[[^\]]+\]/, "")
60
+ # Unlinked form: ![...][label]
61
+ content = content.gsub(/!\[[^\]]*?\]\s*\[#{label_re}\]/, "")
62
+ removed_labels << label
77
63
  end
64
+ rescue StandardError
65
+ # ignore
78
66
  end
67
+ end
79
68
 
80
- # Fix leading <br/> in MRI rows and remove rows that end up empty
81
- content = content.lines.map { |ln|
82
- if ln.start_with?("| Works with MRI Ruby")
83
- cells = ln.split("|", -1)
84
- # cells[0] is empty (leading |), cells[1] = label cell, cells[2] = badges cell
85
- badge_cell = cells[2] || ""
86
- # If badge cell is only a <br/> (possibly with whitespace), treat as empty (row will be removed later)
87
- if badge_cell.strip == "<br/>"
88
- cells[2] = " "
89
- cells.join("|")
90
- elsif badge_cell =~ /\A\s*<br\/>/i
91
- # If badge cell starts with <br/> and there are no badges before it, strip the leading <br/>
92
- # We consider "no badges before" as any leading whitespace followed immediately by <br/>
93
- cleaned = badge_cell.sub(/\A\s*<br\/>\s*/i, "")
94
- cells[2] = " #{cleaned}" # prefix with a single space
95
- cells.join("|")
96
- else
97
- ln
98
- end
99
- else
100
- ln
101
- end
102
- }.reject { |ln|
103
- if ln.start_with?("| Works with MRI Ruby")
104
- cells = ln.split("|", -1)
105
- badge_cell = cells[2] || ""
106
- badge_cell.strip.empty?
69
+ # Fix leading <br/> in MRI rows and remove rows that end up empty
70
+ content = content.lines.map { |ln|
71
+ if ln.start_with?("| Works with MRI Ruby")
72
+ cells = ln.split("|", -1)
73
+ # cells[0] is empty (leading |), cells[1] = label cell, cells[2] = badges cell
74
+ badge_cell = cells[2] || ""
75
+ # If badge cell is only a <br/> (possibly with whitespace), treat as empty (row will be removed later)
76
+ if badge_cell.strip == "<br/>"
77
+ cells[2] = " "
78
+ cells.join("|")
79
+ elsif badge_cell =~ /\A\s*<br\/>/i
80
+ # If badge cell starts with <br/> and there are no badges before it, strip the leading <br/>
81
+ # We consider "no badges before" as any leading whitespace followed immediately by <br/>
82
+ cleaned = badge_cell.sub(/\A\s*<br\/>\s*/i, "")
83
+ cells[2] = " #{cleaned}" # prefix with a single space
84
+ cells.join("|")
107
85
  else
108
- false
109
- end
110
- }.join
111
-
112
- # Clean up extra repeated whitespace only when it appears between word characters, and only for non-table lines.
113
- # This preserves Markdown table alignment and spacing around punctuation/symbols.
114
- content = content.lines.map do |ln|
115
- if ln.start_with?("|")
116
86
  ln
117
- else
118
- # Squish only runs of spaces/tabs between word characters
119
- ln.gsub(/(\w)[ \t]{2,}(\w)/u, "\\1 \\2")
120
- end
121
- end.join
122
-
123
- # Remove reference definitions for removed labels that are no longer used
124
- unless removed_labels.empty?
125
- # Unique
126
- removed_labels.uniq!
127
- # Determine which labels are still referenced after edits
128
- still_referenced = {}
129
- removed_labels.each do |lbl|
130
- lbl_re = Regexp.escape(lbl)
131
- # Consider a label referenced only when it appears not as a definition (i.e., not followed by colon)
132
- still_referenced[lbl] = !!(content =~ /\[#{lbl_re}\](?!:)/)
133
87
  end
88
+ else
89
+ ln
90
+ end
91
+ }.reject { |ln|
92
+ if ln.start_with?("| Works with MRI Ruby")
93
+ cells = ln.split("|", -1)
94
+ badge_cell = cells[2] || ""
95
+ badge_cell.strip.empty?
96
+ else
97
+ false
98
+ end
99
+ }.join
134
100
 
135
- new_lines = content.lines.map do |line|
136
- if line =~ /^\[(?<lab>[^\]]+)\]:/ && removed_labels.include?(Regexp.last_match(:lab))
137
- # Only drop if not referenced anymore
138
- still_referenced[Regexp.last_match(:lab)] ? line : nil
139
- else
140
- line
141
- end
142
- end.compact
143
- content = new_lines.join
101
+ # Clean up extra repeated whitespace only when it appears between word characters, and only for non-table lines.
102
+ # This preserves Markdown table alignment and spacing around punctuation/symbols.
103
+ content = content.lines.map do |ln|
104
+ if ln.start_with?("|")
105
+ ln
106
+ else
107
+ # Squish only runs of spaces/tabs between word characters
108
+ ln.gsub(/(\w)[ \t]{2,}(\w)/u, "\\1 \\2")
109
+ end
110
+ end.join
111
+
112
+ # Remove reference definitions for removed labels that are no longer used
113
+ unless removed_labels.empty?
114
+ # Unique
115
+ removed_labels.uniq!
116
+ # Determine which labels are still referenced after edits
117
+ still_referenced = {}
118
+ removed_labels.each do |lbl|
119
+ lbl_re = Regexp.escape(lbl)
120
+ # Consider a label referenced only when it appears not as a definition (i.e., not followed by colon)
121
+ still_referenced[lbl] = !!(content =~ /\[#{lbl_re}\](?!:)/)
144
122
  end
145
123
 
146
- File.open(readme_path, "w") { |f| f.write(content) }
124
+ new_lines = content.lines.map do |line|
125
+ if line =~ /^\[(?<lab>[^\]]+)\]:/ && removed_labels.include?(Regexp.last_match(:lab))
126
+ # Only drop if not referenced anymore
127
+ still_referenced[Regexp.last_match(:lab)] ? line : nil
128
+ else
129
+ line
130
+ end
131
+ end.compact
132
+ content = new_lines.join
147
133
  end
134
+
135
+ File.open(readme_path, "w") { |f| f.write(content) }
148
136
  end
149
137
  end
150
138
  rescue StandardError => e
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "kettle/dev/exit_adapter"
4
- require "kettle/dev/input_adapter"
5
-
6
3
  module Kettle
7
4
  module Dev
8
5
  module Tasks
@@ -123,10 +120,9 @@ module Kettle
123
120
  rubocop_ruby_gem_version = nil
124
121
  ruby1_8 = version_map.first
125
122
  begin
126
- if min_ruby && !min_ruby.empty?
127
- v = Gem::Version.new(min_ruby.split(".")[0, 2].join("."))
123
+ if min_ruby
128
124
  version_map.reverse_each do |min, req|
129
- if v >= min
125
+ if min_ruby >= min
130
126
  new_constraint = req
131
127
  rubocop_ruby_gem_version = min.segments.join("_")
132
128
  break
@@ -205,8 +201,20 @@ module Kettle
205
201
  File.join(project_root, fallback_name)
206
202
  end
207
203
  end
204
+
205
+ # If a destination gemspec already exists, get metadata from GemSpecReader via helpers
206
+ orig_meta = nil
207
+ if File.exist?(dest_gemspec)
208
+ begin
209
+ orig_meta = helpers.gemspec_metadata(File.dirname(dest_gemspec))
210
+ rescue StandardError
211
+ orig_meta = nil
212
+ end
213
+ end
214
+
208
215
  helpers.copy_file_with_prompt(gemspec_template_src, dest_gemspec, allow_create: true, allow_replace: true) do |content|
209
- helpers.apply_common_replacements(
216
+ # First apply standard replacements from the template example
217
+ c = helpers.apply_common_replacements(
210
218
  content,
211
219
  org: forge_org,
212
220
  gem_name: gem_name,
@@ -214,6 +222,93 @@ module Kettle
214
222
  namespace_shield: namespace_shield,
215
223
  gem_shield: gem_shield,
216
224
  )
225
+
226
+ if orig_meta
227
+ # Replace a scalar string assignment like: spec.field = "..."
228
+ replace_string_field = lambda do |txt, field, value|
229
+ v = value.to_s
230
+ txt.gsub(/(\bspec\.#{Regexp.escape(field)}\s*=\s*)(["']).*?(\2)/) do
231
+ pre = Regexp.last_match(1)
232
+ q = '"'
233
+ pre + q + v.gsub('"', '\\"') + q
234
+ end
235
+ end
236
+
237
+ # Replace an array assignment like: spec.field = ["a", "b"]
238
+ replace_array_field = lambda do |txt, field, ary|
239
+ ary = Array(ary).compact.map(&:to_s).reject(&:empty?).uniq
240
+ # literal = "[" + arr.map { |e| '"' + e.gsub('"', '\\"') + '"' }.join(", ") + "]"
241
+ literal = ary.inspect
242
+ if txt =~ /(\bspec\.#{Regexp.escape(field)}\s*=\s*)\[[^\]]*\]/
243
+ txt.gsub(/(\bspec\.#{Regexp.escape(field)}\s*=\s*)\[[^\]]*\]/, "\\1#{literal}")
244
+ else
245
+ # If no existing assignment, insert a new line after spec.version if possible
246
+ insert_after = (txt =~ /^\s*spec\.version\s*=.*$/) ? :version : nil
247
+ if insert_after == :version
248
+ txt.sub(/^(\s*spec\.version\s*=.*$)/) { |line| line + "\n spec.#{field} = #{literal}" }
249
+ else
250
+ txt + "\n spec.#{field} = #{literal}\n"
251
+ end
252
+ end
253
+ end
254
+
255
+ begin
256
+ # 1. spec.name — retain original
257
+ if (name = orig_meta[:gem_name]) && !name.to_s.empty?
258
+ c = replace_string_field.call(c, "name", name)
259
+ end
260
+
261
+ # 2. spec.authors — retain original, normalize to array
262
+ orig_auth = orig_meta[:authors]
263
+ c = replace_array_field.call(c, "authors", orig_auth)
264
+
265
+ # 3. spec.email — retain original, normalize to array
266
+ orig_email = orig_meta[:email]
267
+ c = replace_array_field.call(c, "email", orig_email)
268
+
269
+ # 4. spec.summary — retain original; grapheme emoji prefix handled by "install" task
270
+ if (sum = orig_meta[:summary]) && !sum.to_s.empty?
271
+ c = replace_string_field.call(c, "summary", sum)
272
+ end
273
+
274
+ # 5. spec.description — retain original; grapheme emoji prefix handled by "install" task
275
+ if (desc = orig_meta[:description]) && !desc.to_s.empty?
276
+ c = replace_string_field.call(c, "description", desc)
277
+ end
278
+
279
+ # 6. spec.licenses — retain original, normalize to array
280
+ lic = orig_meta[:licenses]
281
+ if lic && !lic.empty?
282
+ c = replace_array_field.call(c, "licenses", lic)
283
+ end
284
+
285
+ # 7. spec.required_ruby_version — retain original
286
+ if (rrv = orig_meta[:required_ruby_version].to_s) && !rrv.empty?
287
+ c = replace_string_field.call(c, "required_ruby_version", rrv)
288
+ end
289
+
290
+ # 8. spec.require_paths — retain original, normalize to array
291
+ req_paths = orig_meta[:require_paths]
292
+ unless req_paths.empty?
293
+ c = replace_array_field.call(c, "require_paths", req_paths)
294
+ end
295
+
296
+ # 9. spec.bindir — retain original
297
+ if (bd = orig_meta[:bindir]) && !bd.to_s.empty?
298
+ c = replace_string_field.call(c, "bindir", bd)
299
+ end
300
+
301
+ # 10. spec.executables — retain original, normalize to array
302
+ exes = orig_meta[:executables]
303
+ unless exes.empty?
304
+ c = replace_array_field.call(c, "executables", exes)
305
+ end
306
+ rescue StandardError
307
+ # Best-effort carry-over; ignore any individual failure
308
+ end
309
+ end
310
+
311
+ c
217
312
  end
218
313
  end
219
314
  rescue StandardError
@@ -266,7 +361,6 @@ module Kettle
266
361
  if prev_readme
267
362
  first_h1_prev = prev_readme.lines.find { |ln| ln =~ /^#\s+/ }
268
363
  if first_h1_prev
269
- require "kettle/emoji_regex"
270
364
  emoji_re = Kettle::EmojiRegex::REGEX
271
365
  tail = first_h1_prev.sub(/^#\s+/, "")
272
366
  # Extract consecutive leading emoji graphemes
@@ -2,8 +2,6 @@
2
2
 
3
3
  # External stdlibs
4
4
  require "find"
5
- # Internal
6
- require "kettle/dev/input_adapter"
7
5
 
8
6
  module Kettle
9
7
  module Dev
@@ -346,6 +344,15 @@ module Kettle
346
344
  c = content.dup
347
345
  c = c.gsub("kettle-rb", org.to_s) if org && !org.empty?
348
346
  if gem_name && !gem_name.empty?
347
+ # Special-case: yard-head link uses the gem name as a subdomain and must be dashes-only.
348
+ # Apply this BEFORE other generic replacements so it isn't altered incorrectly.
349
+ begin
350
+ dashed = gem_name.tr("_", "-")
351
+ c = c.gsub("[🚎yard-head]: https://kettle-dev.galtzo.com", "[🚎yard-head]: https://#{dashed}.galtzo.com")
352
+ rescue StandardError
353
+ # ignore
354
+ end
355
+
349
356
  # Replace occurrences of the template gem name in text, including inside
350
357
  # markdown reference labels like [🖼️kettle-dev] and identifiers like kettle-dev-i
351
358
  c = c.gsub("kettle-dev", gem_name)
@@ -362,83 +369,7 @@ module Kettle
362
369
  # @param root [String] project root
363
370
  # @return [Hash]
364
371
  def gemspec_metadata(root = project_root)
365
- gemspecs = Dir.glob(File.join(root, "*.gemspec"))
366
- gemspec_path = gemspecs.first
367
- gemspec_text = (gemspec_path && File.file?(gemspec_path)) ? File.read(gemspec_path) : ""
368
- gem_name = (gemspec_text[/\bspec\.name\s*=\s*["']([^"']+)["']/, 1] || "").strip
369
- min_ruby = (
370
- gemspec_text[/\bspec\.minimum_ruby_version\s*=\s*["'](?:>=\s*)?([0-9]+\.[0-9]+(?:\.[0-9]+)?)["']/i, 1] ||
371
- gemspec_text[/\bspec\.required_ruby_version\s*=\s*["']>=\s*([0-9]+\.[0-9]+(?:\.[0-9]+)?)["']/i, 1] ||
372
- gemspec_text[/\brequired_ruby_version\s*[:=]\s*["'](?:>=\s*)?([0-9]+\.[0-9]+(?:\.[0-9]+)?)["']/i, 1] ||
373
- ""
374
- ).strip
375
- homepage_line = gemspec_text.lines.find { |l| l =~ /\bspec\.homepage\s*=\s*/ }
376
- homepage_val = homepage_line ? homepage_line.split("=", 2).last.to_s.strip : ""
377
- if (homepage_val.start_with?("\"") && homepage_val.end_with?("\"")) || (homepage_val.start_with?("'") && homepage_val.end_with?("'"))
378
- homepage_val = begin
379
- homepage_val[1..-2]
380
- rescue
381
- homepage_val
382
- end
383
- end
384
- gh_match = homepage_val&.match(%r{github\.com/([^/]+)/([^/]+)}i)
385
- forge_org = gh_match && gh_match[1]
386
- gh_repo = gh_match && gh_match[2]&.sub(/\.git\z/, "")
387
- if forge_org.nil?
388
- begin
389
- origin_out = IO.popen(["git", "-C", root.to_s, "remote", "get-url", "origin"], &:read)
390
- origin_out = origin_out.read if origin_out.respond_to?(:read)
391
- origin_url = origin_out.to_s.strip
392
- if (m = origin_url.match(%r{github\.com[/:]([^/]+)/([^/]+)}i))
393
- forge_org = m[1]
394
- gh_repo = m[2]&.sub(/\.git\z/, "")
395
- end
396
- rescue StandardError
397
- # ignore
398
- end
399
- end
400
-
401
- camel = lambda do |s|
402
- s.split(/[_-]/).map { |p| p.gsub(/\b([a-z])/) { Regexp.last_match(1).upcase } }.join
403
- end
404
- namespace = gem_name.to_s.split("-").map { |seg| camel.call(seg) }.join("::")
405
- namespace_shield = namespace.gsub("::", "%3A%3A")
406
- entrypoint_require = gem_name.to_s.tr("-", "/")
407
- gem_shield = gem_name.to_s.gsub("-", "--").gsub("_", "__")
408
-
409
- # Determine funding_org independently of forge_org (GitHub org)
410
- funding_org = ENV["FUNDING_ORG"].to_s.strip
411
- funding_org = ENV["OPENCOLLECTIVE_ORG"].to_s.strip if funding_org.empty?
412
- funding_org = ENV["OPENCOLLECTIVE_HANDLE"].to_s.strip if funding_org.empty?
413
- if funding_org.empty?
414
- begin
415
- oc_path = File.join(root.to_s, ".opencollective.yml")
416
- if File.file?(oc_path)
417
- txt = File.read(oc_path)
418
- if (m = txt.match(/\borg:\s*([\w\-]+)/i))
419
- funding_org = m[1].to_s
420
- end
421
- end
422
- rescue StandardError
423
- # ignore
424
- end
425
- end
426
- funding_org = forge_org.to_s if funding_org.to_s.empty?
427
-
428
- {
429
- gemspec_path: gemspec_path,
430
- gem_name: gem_name,
431
- min_ruby: min_ruby,
432
- homepage: homepage_val,
433
- gh_org: forge_org, # Backward compat: keep old key synonymous with forge_org
434
- forge_org: forge_org,
435
- funding_org: funding_org,
436
- gh_repo: gh_repo,
437
- namespace: namespace,
438
- namespace_shield: namespace_shield,
439
- entrypoint_require: entrypoint_require,
440
- gem_shield: gem_shield,
441
- }
372
+ Kettle::Dev::GemSpecReader.load(root)
442
373
  end
443
374
  end
444
375
  end
@@ -6,7 +6,7 @@ module Kettle
6
6
  module Version
7
7
  # The gem version.
8
8
  # @return [String]
9
- VERSION = "1.0.22"
9
+ VERSION = "1.0.24"
10
10
  end
11
11
  end
12
12
  end
data/lib/kettle/dev.rb CHANGED
@@ -112,20 +112,26 @@ end
112
112
  module Kettle
113
113
  autoload :EmojiRegex, "kettle/emoji_regex"
114
114
  module Dev
115
+ autoload :ChangelogCLI, "kettle/dev/changelog_cli"
115
116
  autoload :CIHelpers, "kettle/dev/ci_helpers"
117
+ autoload :CIMonitor, "kettle/dev/ci_monitor"
116
118
  autoload :CommitMsg, "kettle/dev/commit_msg"
119
+ autoload :ExitAdapter, "kettle/dev/exit_adapter"
120
+ autoload :GemSpecReader, "kettle/dev/gem_spec_reader"
121
+ autoload :GitAdapter, "kettle/dev/git_adapter"
117
122
  autoload :GitCommitFooter, "kettle/dev/git_commit_footer"
123
+ autoload :InputAdapter, "kettle/dev/input_adapter"
118
124
  autoload :ReadmeBackers, "kettle/dev/readme_backers"
119
125
  autoload :ReleaseCLI, "kettle/dev/release_cli"
120
126
  autoload :TemplateHelpers, "kettle/dev/template_helpers"
121
- autoload :ExitAdapter, "kettle/dev/exit_adapter"
122
127
  autoload :Version, "kettle/dev/version"
128
+ autoload :Versioning, "kettle/dev/versioning"
123
129
 
124
130
  # Nested tasks namespace with autoloaded task modules
125
131
  module Tasks
126
- autoload :TemplateTask, "kettle/dev/tasks/template_task"
127
- autoload :InstallTask, "kettle/dev/tasks/install_task"
128
132
  autoload :CITask, "kettle/dev/tasks/ci_task"
133
+ autoload :InstallTask, "kettle/dev/tasks/install_task"
134
+ autoload :TemplateTask, "kettle/dev/tasks/template_task"
129
135
  end
130
136
  end
131
137
  end
@@ -3,7 +3,7 @@
3
3
  # because that project is Ruby >= 2.4, and this project is Ruby >= 2.3.
4
4
  # That project is under the MIT license, same as this project:
5
5
  # https://github.com/ticky/ruby-emoji-regex/blob/develop/LICENSE.md
6
- # If the minimum_ruby_version numbers align, will switch to a real dependency.
6
+ # If the required_ruby_version numbers align, will switch to a real dependency.
7
7
  # Wrapping it in a namespace to avoid collisions with the real emoji_regex.
8
8
  module Kettle
9
9
  module EmojiRegex
@@ -0,0 +1,30 @@
1
+ module Kettle
2
+ module Dev
3
+ class GemSpecReader
4
+ def self.load: (String root) -> {
5
+ gemspec_path: String?,
6
+ gem_name: String,
7
+ min_ruby: String,
8
+ homepage: String,
9
+ gh_org: String?,
10
+ forge_org: String?,
11
+ funding_org: String?,
12
+ gh_repo: String?,
13
+ namespace: String,
14
+ namespace_shield: String,
15
+ entrypoint_require: String,
16
+ gem_shield: String,
17
+ authors: Array[String],
18
+ email: Array[String],
19
+ summary: String,
20
+ description: String,
21
+ license: String,
22
+ licenses: Array[String],
23
+ required_ruby_version: String,
24
+ require_paths: Array[String],
25
+ bindir: String,
26
+ executables: Array[String],
27
+ }
28
+ end
29
+ end
30
+ end
@@ -66,6 +66,16 @@ module Kettle
66
66
  namespace_shield: String,
67
67
  entrypoint_require: String,
68
68
  gem_shield: String,
69
+ authors: Array[String],
70
+ email: Array[String],
71
+ summary: String,
72
+ description: String,
73
+ license: String,
74
+ licenses: Array[String],
75
+ required_ruby_version: String,
76
+ require_paths: Array[String],
77
+ bindir: String,
78
+ executables: Array[String],
69
79
  }
70
80
  end
71
81
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.22
4
+ version: 1.0.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -219,6 +219,7 @@ extra_rdoc_files:
219
219
  - CITATION.cff
220
220
  - CODE_OF_CONDUCT.md
221
221
  - CONTRIBUTING.md
222
+ - FUNDING.md
222
223
  - LICENSE.txt
223
224
  - README.md
224
225
  - REEK
@@ -273,6 +274,7 @@ files:
273
274
  - CITATION.cff
274
275
  - CODE_OF_CONDUCT.md
275
276
  - CONTRIBUTING.md
277
+ - FUNDING.md
276
278
  - Gemfile
277
279
  - Gemfile.example
278
280
  - LICENSE.txt
@@ -295,10 +297,12 @@ files:
295
297
  - kettle-dev.gemspec.example
296
298
  - lib/kettle-dev.rb
297
299
  - lib/kettle/dev.rb
300
+ - lib/kettle/dev/changelog_cli.rb
298
301
  - lib/kettle/dev/ci_helpers.rb
299
302
  - lib/kettle/dev/ci_monitor.rb
300
303
  - lib/kettle/dev/commit_msg.rb
301
304
  - lib/kettle/dev/exit_adapter.rb
305
+ - lib/kettle/dev/gem_spec_reader.rb
302
306
  - lib/kettle/dev/git_adapter.rb
303
307
  - lib/kettle/dev/git_commit_footer.rb
304
308
  - lib/kettle/dev/input_adapter.rb
@@ -329,6 +333,7 @@ files:
329
333
  - sig/kettle/dev/ci_monitor.rbs
330
334
  - sig/kettle/dev/commit_msg.rbs
331
335
  - sig/kettle/dev/exit_adapter.rbs
336
+ - sig/kettle/dev/gem_spec_reader.rbs
332
337
  - sig/kettle/dev/git_adapter.rbs
333
338
  - sig/kettle/dev/git_commit_footer.rbs
334
339
  - sig/kettle/dev/input_adapter.rbs
@@ -346,10 +351,10 @@ licenses:
346
351
  - MIT
347
352
  metadata:
348
353
  homepage_uri: https://kettle-dev.galtzo.com/
349
- source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.0.22
350
- changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.0.22/CHANGELOG.md
354
+ source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.0.24
355
+ changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.0.24/CHANGELOG.md
351
356
  bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
352
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.0.22
357
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.0.24
353
358
  funding_uri: https://github.com/sponsors/pboling
354
359
  wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
355
360
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file