parse_packwerk 0.26.0 → 0.27.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 +4 -4
- data/lib/parse_packwerk/configuration.rb +7 -1
- data/lib/parse_packwerk/package.rb +6 -1
- data/lib/parse_packwerk.rb +31 -2
- metadata +3 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 79acc78d3ab0fa35846a31222d63c225666c0114d5de463e2ba70305a557c278
|
|
4
|
+
data.tar.gz: 2e1449c7de0b3eed8ff8cae6c84f35cf9bdea252aa3f337c6021c1b3b5601a15
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f4dc8dbaff0b08207a38057713426707f9207175b73b1452346fb4fe4e8d504baf1baf87b19c840ef1e947314bce2bf5577e36a5b69e93621e5064497af2ac35
|
|
7
|
+
data.tar.gz: 826653675547ea46c3743e005f5025b41012f4e065e1ff2f68f52181705e6785585d44af0c4468ca81dffb1b6344e88291f02e745e15091df74e4fde185dd941
|
|
@@ -37,7 +37,13 @@ module ParsePackwerk
|
|
|
37
37
|
Array(specified_exclude)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
begin
|
|
41
|
+
excludes.push Bundler.bundle_path.join('**').to_s
|
|
42
|
+
rescue Bundler::GemfileNotFound
|
|
43
|
+
# Optionally, add bundle to the path. Skip when there isn't a Gemfile.
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
excludes
|
|
41
47
|
end
|
|
42
48
|
|
|
43
49
|
sig { params(config_hash: T::Hash[T.untyped, T.untyped]).returns(T::Array[String]) }
|
|
@@ -13,11 +13,15 @@ module ParsePackwerk
|
|
|
13
13
|
const :dependencies, T::Array[String]
|
|
14
14
|
const :config, T::Hash[T.untyped, T.untyped]
|
|
15
15
|
const :violations, T::Array[Violation]
|
|
16
|
+
# Stores the original key order from the YAML file for preserving order on write
|
|
17
|
+
const :original_key_order, T::Array[String], default: []
|
|
16
18
|
|
|
17
19
|
sig { params(pathname: Pathname).returns(Package) }
|
|
18
20
|
def self.from(pathname)
|
|
19
21
|
package_loaded_yml = YAML.load_file(pathname) || {}
|
|
20
22
|
package_name = pathname.dirname.cleanpath.to_s
|
|
23
|
+
# Capture the original key order from the YAML file
|
|
24
|
+
original_keys = package_loaded_yml.is_a?(Hash) ? package_loaded_yml.keys : []
|
|
21
25
|
|
|
22
26
|
new(
|
|
23
27
|
name: package_name,
|
|
@@ -28,7 +32,8 @@ module ParsePackwerk
|
|
|
28
32
|
metadata: package_loaded_yml[METADATA] || {},
|
|
29
33
|
dependencies: package_loaded_yml[DEPENDENCIES] || [],
|
|
30
34
|
config: package_loaded_yml,
|
|
31
|
-
violations: PackageTodo.from(PackageTodo.yml(directory(package_name))).violations
|
|
35
|
+
violations: PackageTodo.from(PackageTodo.yml(directory(package_name))).violations,
|
|
36
|
+
original_key_order: original_keys
|
|
32
37
|
)
|
|
33
38
|
end
|
|
34
39
|
|
data/lib/parse_packwerk.rb
CHANGED
|
@@ -31,6 +31,19 @@ module ParsePackwerk
|
|
|
31
31
|
|
|
32
32
|
extend T::Sig
|
|
33
33
|
|
|
34
|
+
# Configuration option to preserve the original key order when writing package.yml files.
|
|
35
|
+
# When true, keys will be written in their original order from the file rather than
|
|
36
|
+
# being sorted according to key_sort_order. This reduces diff churn when tools modify packages.
|
|
37
|
+
# Defaults to false for backwards compatibility.
|
|
38
|
+
@preserve_key_order = T.let(false, T::Boolean)
|
|
39
|
+
|
|
40
|
+
class << self
|
|
41
|
+
extend T::Sig
|
|
42
|
+
|
|
43
|
+
sig { returns(T::Boolean) }
|
|
44
|
+
attr_accessor :preserve_key_order
|
|
45
|
+
end
|
|
46
|
+
|
|
34
47
|
sig do
|
|
35
48
|
returns(T::Array[Package])
|
|
36
49
|
end
|
|
@@ -90,8 +103,7 @@ module ParsePackwerk
|
|
|
90
103
|
merged_config.merge!('metadata' => package.metadata)
|
|
91
104
|
end
|
|
92
105
|
|
|
93
|
-
|
|
94
|
-
merged_config = merged_config.to_a.sort_by { |key, _value| T.unsafe(sorted_keys).index(key) || 1000 }.to_h
|
|
106
|
+
merged_config = sort_keys(merged_config, package.original_key_order)
|
|
95
107
|
|
|
96
108
|
raw_yaml = YAML.dump(merged_config)
|
|
97
109
|
stylized_yaml = raw_yaml.gsub("---\n", '')
|
|
@@ -99,6 +111,23 @@ module ParsePackwerk
|
|
|
99
111
|
end
|
|
100
112
|
end
|
|
101
113
|
|
|
114
|
+
sig { params(config: T::Hash[T.untyped, T.untyped], original_key_order: T::Array[String]).returns(T::Hash[T.untyped, T.untyped]) }
|
|
115
|
+
def self.sort_keys(config, original_key_order)
|
|
116
|
+
if preserve_key_order && original_key_order.any?
|
|
117
|
+
# Preserve original key order: existing keys stay in their original position,
|
|
118
|
+
# new keys are appended in the default sort order
|
|
119
|
+
existing_keys = original_key_order & config.keys
|
|
120
|
+
new_keys = config.keys - original_key_order
|
|
121
|
+
sorted_new_keys = new_keys.sort_by { |key| key_sort_order.index(key) || 1000 }
|
|
122
|
+
|
|
123
|
+
ordered_keys = existing_keys + sorted_new_keys
|
|
124
|
+
ordered_keys.each_with_object({}) { |key, hash| hash[key] = config[key] if config.key?(key) }
|
|
125
|
+
else
|
|
126
|
+
# Default behavior: sort by canonical key order
|
|
127
|
+
config.to_a.sort_by { |key, _value| T.unsafe(key_sort_order).index(key) || 1000 }.to_h
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
102
131
|
sig { returns(T::Array[String]) }
|
|
103
132
|
def self.key_sort_order
|
|
104
133
|
%w[
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: parse_packwerk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.27.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gusto Engineers
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: bigdecimal
|
|
@@ -188,7 +187,6 @@ metadata:
|
|
|
188
187
|
source_code_uri: https://github.com/rubyatscale/parse_packwerk
|
|
189
188
|
changelog_uri: https://github.com/rubyatscale/parse_packwerk/releases
|
|
190
189
|
allowed_push_host: https://rubygems.org
|
|
191
|
-
post_install_message:
|
|
192
190
|
rdoc_options: []
|
|
193
191
|
require_paths:
|
|
194
192
|
- lib
|
|
@@ -203,8 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
203
201
|
- !ruby/object:Gem::Version
|
|
204
202
|
version: '0'
|
|
205
203
|
requirements: []
|
|
206
|
-
rubygems_version: 3.
|
|
207
|
-
signing_key:
|
|
204
|
+
rubygems_version: 3.6.9
|
|
208
205
|
specification_version: 4
|
|
209
206
|
summary: A low-dependency gem for parsing and writing packwerk YML files
|
|
210
207
|
test_files: []
|