Module: ParsePackwerk
- Extended by:
- T::Sig
- Defined in:
- lib/parse_packwerk/package.rb,
lib/parse_packwerk.rb,
lib/parse_packwerk/constants.rb,
lib/parse_packwerk/violation.rb,
lib/parse_packwerk/extensions.rb,
lib/parse_packwerk/package_set.rb,
lib/parse_packwerk/package_todo.rb,
lib/parse_packwerk/configuration.rb
Overview
Defined Under Namespace
Classes: Configuration, MissingConfiguration, Package, PackageParseError, PackageSet, PackageTodo, Violation
Constant Summary
collapse
- ROOT_PACKAGE_NAME =
T.let('.'.freeze, String)
- PACKAGE_YML_NAME =
T.let('package.yml'.freeze, String)
- PACKWERK_YML_NAME =
T.let('packwerk.yml'.freeze, String)
- PACKAGE_TODO_YML_NAME =
T.let('package_todo.yml'.freeze, String)
- ENFORCE_DEPENDENCIES =
T.let('enforce_dependencies'.freeze, String)
- ENFORCE_PRIVACY =
T.let('enforce_privacy'.freeze, String)
- ENFORCE_LAYERS =
T.let('enforce_layers'.freeze, String)
- DEPENDENCY_VIOLATION_TYPE =
T.let('dependency'.freeze, String)
- PRIVACY_VIOLATION_TYPE =
T.let('privacy'.freeze, String)
- PUBLIC_PATH =
T.let('public_path'.freeze, String)
- METADATA =
T.let('metadata'.freeze, String)
- DEPENDENCIES =
T.let('dependencies'.freeze, String)
- MetadataYmlType =
Since this metadata is unstructured YAML, it could be any type. We leave it to clients of ‘ParsePackwerk::Package` to add types based on their known usage of metadata.
T.type_alias do
T::Hash[T.untyped, T.untyped]
end
- DEFAULT_EXCLUDE_GLOBS =
T.let(['{bin,node_modules,script,tmp,vendor}/**/*'], T::Array[String])
- DEFAULT_PACKAGE_PATHS =
T.let(['**/'], T::Array[String])
- DEFAULT_PUBLIC_PATH =
T.let('app/public', String)
Class Method Summary
collapse
Class Method Details
.all ⇒ Object
37
38
39
|
# File 'lib/parse_packwerk.rb', line 37
def self.all
packages_by_name.values
end
|
.bust_cache! ⇒ Object
134
135
136
137
|
# File 'lib/parse_packwerk.rb', line 134
def self.bust_cache!
@packages_by_name = nil
@package_from_path = nil
end
|
.find(name) ⇒ Object
42
43
44
|
# File 'lib/parse_packwerk.rb', line 42
def self.find(name)
packages_by_name[name]
end
|
.key_sort_order ⇒ Object
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/parse_packwerk.rb', line 103
def self.key_sort_order
%w[
enforce_dependencies
enforce_privacy
enforce_visibility
enforce_layers
public_path
owner
layer
dependencies
ignored_dependencies
visible_to
metadata
]
end
|
.package_from_path(file_path) ⇒ Object
52
53
54
55
56
57
58
59
60
|
# File 'lib/parse_packwerk.rb', line 52
def self.package_from_path(file_path)
path_string = file_path.to_s
@package_from_path = T.let(@package_from_path, T.nilable(T::Hash[String, Package]))
@package_from_path ||= {}
@package_from_path[path_string] ||= T.must(begin
matching_package = all.find { |package| path_string.start_with?("#{package.name}/") || path_string == package.name }
matching_package || find(ROOT_PACKAGE_NAME)
end)
end
|
.write_package_yml!(package) ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/parse_packwerk.rb', line 63
def self.write_package_yml!(package)
FileUtils.mkdir_p(package.directory)
File.open(package.yml, 'w') do |file|
merged_config = package.config
merged_config.merge!('enforce_dependencies' => package.enforce_dependencies)
if Extensions.privacy_extension_installed?
merged_config.merge!('enforce_privacy' => package.enforce_privacy)
end
if Extensions.layer_extension_installed?
merged_config.merge!('enforce_layers' => package.enforce_layers)
end
unless package.public_path == DEFAULT_PUBLIC_PATH
merged_config.merge!('public_path' => package.public_path)
end
if package.dependencies.nil? || package.dependencies.none?
merged_config.delete('dependencies')
else
merged_config.merge!('dependencies' => package.dependencies)
end
if package.metadata.any?
merged_config.merge!('metadata' => package.metadata)
end
sorted_keys = key_sort_order
merged_config = merged_config.to_a.sort_by { |key, _value| T.unsafe(sorted_keys).index(key) || 1000 }.to_h
raw_yaml = YAML.dump(merged_config)
stylized_yaml = raw_yaml.gsub("---\n", '')
file.write(stylized_yaml)
end
end
|
.yml ⇒ Object
47
48
49
|
# File 'lib/parse_packwerk.rb', line 47
def self.yml
Configuration.fetch
end
|