Skip to content

Commit a4a34df

Browse files
author
Alex Evanczuk
authored
Sort package.yml keys when writing (#27)
1 parent 1c4ee74 commit a4a34df

3 files changed

Lines changed: 23 additions & 13 deletions

File tree

Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: .
33
specs:
4-
parse_packwerk (0.19.2)
4+
parse_packwerk (0.19.3)
55
sorbet-runtime
66

77
GEM

lib/parse_packwerk.rb

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,6 @@ def self.write_package_yml!(package)
7272
merged_config.merge!('enforce_privacy' => package.enforce_privacy)
7373
end
7474

75-
# We want checkers of the form `enforce_xyz` to be at the top
76-
merged_config_arr = merged_config.sort_by do |k, v|
77-
if k.include?('enforce')
78-
0
79-
else
80-
1
81-
end
82-
end
83-
84-
merged_config = merged_config_arr.to_h
85-
8675
unless package.public_path == DEFAULT_PUBLIC_PATH
8776
merged_config.merge!('public_path' => package.public_path)
8877
end
@@ -96,6 +85,10 @@ def self.write_package_yml!(package)
9685
if package.metadata.any?
9786
merged_config.merge!('metadata' => package.metadata)
9887
end
88+
89+
sorted_keys = key_sort_order
90+
merged_config = merged_config.to_a.sort_by{|key, value| T.unsafe(sorted_keys).index(key) || 1000 }.to_h
91+
9992
raw_yaml = YAML.dump(merged_config)
10093
# Add indentation for dependencies
10194
raw_yaml.gsub!(/^- /," - ")
@@ -104,6 +97,23 @@ def self.write_package_yml!(package)
10497
end
10598
end
10699

100+
sig { returns(T::Array[String]) }
101+
def self.key_sort_order
102+
%w(
103+
enforce_dependencies
104+
enforce_privacy
105+
enforce_visibility
106+
enforce_architecture
107+
public_path
108+
owner
109+
layer
110+
dependencies
111+
ignored_dependencies
112+
visible_to
113+
metadata
114+
)
115+
end
116+
107117
# We memoize packages_by_name for fast lookup.
108118
# Since Graph is an immutable value object, we can create indexes and general caching mechanisms safely.
109119
sig { returns(T::Hash[String, Package]) }

parse_packwerk.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Gem::Specification.new do |spec|
22
spec.name = "parse_packwerk"
3-
spec.version = '0.19.2'
3+
spec.version = '0.19.3'
44
spec.authors = ['Gusto Engineers']
55
spec.email = ['dev@gusto.com']
66
spec.summary = 'A low-dependency gem for parsing and writing packwerk YML files'

0 commit comments

Comments
 (0)