kennel 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb759ae2d81d962a137b9ff0485135f0995cf4e31542f0ab4f284eef9ea1c109
4
- data.tar.gz: d1fafb3a5d44c746280967f752e4eb124510a823c7ac2bd51ca2e935517afbb6
3
+ metadata.gz: bebf47eb6fde98d7122a199324dca2c205b94a65e844193d7917f2e384fbc029
4
+ data.tar.gz: c3631e51b4d7ef363b7fd177e42d688e00f7ea9816b9161b27dd2f48753fff93
5
5
  SHA512:
6
- metadata.gz: bf576a0739a2cb98e7098c71bbf222d202766dbb479f9fd3c7b13bc0561b3f699cd1396faf4ef070c34be3bbed102aa8f8ca153d6c8c2c43e4767d945fe8df13
7
- data.tar.gz: 2f2de90e0ad97900b86d92b168c1065f0128c15a0039eec3f4e611364e650a9faff20c4f6890b375fa15b3321c3e399d4a7a76fd648bcf56083675599ecb9c14
6
+ metadata.gz: 7029a570da24413841e71dc380a7f07d476c9cff3b83aee05a032478ed1707771b96f071949e2284003ef51777f955174c9d241a0e11c2d6fbd6aadc1d4ccece
7
+ data.tar.gz: b5df9cfcd85ff76b762c9c8a96e630f1b3cf509eb8509e71a42fb2d5c8b24efd6588a88033abe38c2d1ff5b37f8087d2e0074be171f3e78066c1796df53f72b4
data/lib/kennel/api.rb CHANGED
@@ -73,6 +73,7 @@ module Kennel
73
73
  end
74
74
  end
75
75
 
76
+ # fill the resource with the full response from the `show` if `list` does not return it
76
77
  def fill_details!(api_resource, list)
77
78
  details_cache do |cache|
78
79
  Utils.parallel(list) { |a| fill_detail!(api_resource, a, cache) }
@@ -18,7 +18,7 @@ module Kennel
18
18
  end
19
19
 
20
20
  def validated_parts
21
- all = parts
21
+ all = filter_parts(parts)
22
22
  unless all.is_a?(Array) && all.all? { |part| part.is_a?(Record) }
23
23
  raise "Project #{kennel_id} #parts must return an array of Records"
24
24
  end
@@ -29,6 +29,11 @@ module Kennel
29
29
 
30
30
  private
31
31
 
32
+ # hook for users to add custom filtering via `prepend`
33
+ def filter_parts(parts)
34
+ parts
35
+ end
36
+
32
37
  # hook for users to add custom validations via `prepend`
33
38
  def validate_parts(parts)
34
39
  end
data/lib/kennel/syncer.rb CHANGED
@@ -13,7 +13,7 @@ module Kennel
13
13
 
14
14
  attr_reader :plan
15
15
 
16
- def initialize(api, expected, actual, filter:, strict_imports: true)
16
+ def initialize(api, expected:, actual:, filter:, strict_imports: true)
17
17
  @api = api
18
18
  @strict_imports = strict_imports
19
19
  @filter = filter
@@ -155,10 +155,10 @@ module Kennel
155
155
  raise # uncovered: should never happen ...
156
156
  end
157
157
 
158
- # fill details of things we need to compare
159
- def fill_details!(details_needed)
160
- details_needed = details_needed.map { |e, a| a if e && e.class.api_resource == "dashboard" }.compact
161
- @api.fill_details! "dashboard", details_needed
158
+ # fill details of things we need to compare, so diff works even though we cannot mass-fetch definitions
159
+ def fill_details!(matching)
160
+ dashboards = matching.filter_map { |e, a| a if e && e.class.api_resource == "dashboard" }
161
+ @api.fill_details! "dashboard", dashboards
162
162
  end
163
163
 
164
164
  def validate_expected_id_not_missing(expected)
data/lib/kennel/tasks.rb CHANGED
@@ -109,7 +109,7 @@ namespace :kennel do
109
109
  end
110
110
  end
111
111
 
112
- desc "generate local definitions"
112
+ desc "store definitions in generated/"
113
113
  task generate: :environment do
114
114
  Kennel::Tasks.kennel.generate
115
115
  end
data/lib/kennel/utils.rb CHANGED
@@ -24,13 +24,14 @@ module Kennel
24
24
  workers = Array.new(threads).map do
25
25
  Thread.new do
26
26
  loop do
27
- item, i = work.pop
27
+ item, i = work.shift
28
28
  break unless i
29
29
  done[i] =
30
30
  begin
31
31
  yield item
32
32
  rescue Exception => e # rubocop:disable Lint/RescueException
33
- work.clear
33
+ work.clear # prevent new work
34
+ (workers - [Thread.current]).each(&:kill) # stop ongoing work
34
35
  e
35
36
  end
36
37
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "2.7.0"
3
+ VERSION = "2.8.0"
4
4
  end
data/lib/kennel.rb CHANGED
@@ -56,7 +56,7 @@ module Kennel
56
56
  self.err = $stderr
57
57
 
58
58
  class Engine
59
- attr_accessor :strict_imports
59
+ attr_accessor :strict_imports # TODO: rename to :enforce_expected_ids_exist
60
60
 
61
61
  def initialize
62
62
  @strict_imports = true
@@ -93,7 +93,9 @@ module Kennel
93
93
  @syncer ||= begin
94
94
  preload
95
95
  Syncer.new(
96
- api, generated, definitions,
96
+ api,
97
+ expected: generated,
98
+ actual: definitions,
97
99
  filter: filter,
98
100
  strict_imports: strict_imports
99
101
  )
@@ -129,7 +131,7 @@ module Kennel
129
131
  end
130
132
  end
131
133
 
132
- # performance: this takes ~100ms on large codebases, tried rewriting with Set or Hash but it was slower
134
+ # performance: this takes ~100ms on large codebases, tried rewriting with Set or Hash, but it was slower
133
135
  def validate_unique_tracking_ids(parts)
134
136
  bad = parts.group_by(&:tracking_id).select { |_, same| same.size > 1 }
135
137
  return if bad.empty?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kennel
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-11-10 00:00:00.000000000 Z
11
+ date: 2025-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs