11use serde:: Deserialize ;
22
3- #[ derive( Deserialize , Debug ) ]
3+ #[ derive( Deserialize , Debug , Clone ) ]
44pub struct Config {
55 pub owned_globs : Vec < String > ,
66
77 #[ serde( default = "ruby_package_paths" ) ]
88 pub ruby_package_paths : Vec < String > ,
99
10- #[ serde( alias = "js_package_paths" ) ]
10+ #[ serde( alias = "js_package_paths" , default = "javascript_package_paths" ) ]
1111 pub javascript_package_paths : Vec < String > ,
1212
1313 #[ serde( default = "team_file_glob" ) ]
1414 pub team_file_glob : Vec < String > ,
15+
16+ #[ serde( default = "unowned_globs" ) ]
1517 pub unowned_globs : Vec < String > ,
1618
17- #[ serde( alias = "unbuilt_gems_path" ) ]
19+ #[ serde( alias = "unbuilt_gems_path" , default = "vendored_gems_path" ) ]
1820 pub vendored_gems_path : String ,
1921
2022 #[ serde( default = "default_cache_directory" ) ]
@@ -39,3 +41,58 @@ fn team_file_glob() -> Vec<String> {
3941fn default_cache_directory ( ) -> String {
4042 String :: from ( "tmp/cache/codeowners" )
4143}
44+
45+ fn javascript_package_paths ( ) -> Vec < String > {
46+ vec ! [ "frontend/**/*" . to_owned( ) ]
47+ }
48+
49+ fn unowned_globs ( ) -> Vec < String > {
50+ vec ! [
51+ "frontend/**/node_modules/**/*" . to_owned( ) ,
52+ "frontend/**/__generated__/**/*" . to_owned( ) ,
53+ ]
54+ }
55+
56+ fn vendored_gems_path ( ) -> String {
57+ "vendored/" . to_string ( )
58+ }
59+
60+ #[ cfg( test) ]
61+ mod tests {
62+ use std:: {
63+ error:: Error ,
64+ fs:: { self , File } ,
65+ } ;
66+
67+ use indoc:: indoc;
68+ use tempfile:: tempdir;
69+
70+ use super :: * ;
71+
72+ #[ test]
73+ fn test_parse_config ( ) -> Result < ( ) , Box < dyn Error > > {
74+ let temp_dir = tempdir ( ) ?;
75+ let config_path = temp_dir. path ( ) . join ( "config.yml" ) ;
76+ let config_str = indoc ! { "
77+ ---
78+ owned_globs:
79+ - \" {app,components,config,frontend,lib,packs,spec}/**/*.{rb,rake,js,jsx,ts,tsx,json,yml}\"
80+ " } ;
81+ fs:: write ( & config_path, config_str) ?;
82+ let config_file = File :: open ( & config_path) ?;
83+ let config: Config = serde_yaml:: from_reader ( config_file) ?;
84+ assert_eq ! (
85+ config. owned_globs,
86+ vec![ "{app,components,config,frontend,lib,packs,spec}/**/*.{rb,rake,js,jsx,ts,tsx,json,yml}" ]
87+ ) ;
88+ assert_eq ! ( config. ruby_package_paths, vec![ "packs/**/*" , "components/**" ] ) ;
89+ assert_eq ! ( config. javascript_package_paths, vec![ "frontend/**/*" ] ) ;
90+ assert_eq ! ( config. team_file_glob, vec![ "config/teams/**/*.yml" ] ) ;
91+ assert_eq ! (
92+ config. unowned_globs,
93+ vec![ "frontend/**/node_modules/**/*" , "frontend/**/__generated__/**/*" ]
94+ ) ;
95+ assert_eq ! ( config. vendored_gems_path, "vendored/" ) ;
96+ Ok ( ( ) )
97+ }
98+ }
0 commit comments