11use log:: { debug, info} ;
2- use std:: path:: Path ;
3-
4- use super :: BundlerRuntime ;
2+ use std:: path:: { Path , PathBuf } ;
53
64pub struct BundlerRuntimeDetector ;
75
86impl BundlerRuntimeDetector {
9- /// Discover a BundlerRuntime by searching for Gemfile in the current directory
7+ /// Discover a Bundler project by searching for Gemfile in the current directory
108 /// and walking up the directory tree until one is found or we reach the root.
11- pub fn discover ( start_dir : & Path ) -> std:: io:: Result < Option < BundlerRuntime > > {
9+ /// Returns the root directory containing the Gemfile.
10+ pub fn discover ( start_dir : & Path ) -> std:: io:: Result < Option < PathBuf > > {
1211 debug ! (
1312 "Starting Bundler discovery from directory: {}" ,
1413 start_dir. display( )
@@ -22,9 +21,8 @@ impl BundlerRuntimeDetector {
2221
2322 if gemfile_path. exists ( ) && gemfile_path. is_file ( ) {
2423 info ! ( "Found Gemfile at: {}" , gemfile_path. display( ) ) ;
25- let bundler_runtime = BundlerRuntime :: new ( & current_dir) ;
26- debug ! ( "Created BundlerRuntime for root: {}" , current_dir. display( ) ) ;
27- return Ok ( Some ( bundler_runtime) ) ;
24+ debug ! ( "Returning bundler root: {}" , current_dir. display( ) ) ;
25+ return Ok ( Some ( current_dir) ) ;
2826 } else {
2927 debug ! ( "No Gemfile found in: {}" , current_dir. display( ) ) ;
3028 }
@@ -50,7 +48,7 @@ impl BundlerRuntimeDetector {
5048 }
5149
5250 /// Convenience method to discover from current working directory
53- pub fn discover_from_cwd ( ) -> std:: io:: Result < Option < BundlerRuntime > > {
51+ pub fn discover_from_cwd ( ) -> std:: io:: Result < Option < PathBuf > > {
5452 let cwd = std:: env:: current_dir ( ) ?;
5553 debug ! (
5654 "Discovering Bundler runtime from current working directory: {}" ,
@@ -64,7 +62,6 @@ impl BundlerRuntimeDetector {
6462mod tests {
6563 use super :: * ;
6664 use rb_tests:: BundlerSandbox ;
67- use semver;
6865 use std:: io;
6966
7067 #[ test]
@@ -75,9 +72,9 @@ mod tests {
7572 let result = BundlerRuntimeDetector :: discover ( & project_dir) ?;
7673
7774 assert ! ( result. is_some( ) ) ;
78- let bundler_runtime = result. unwrap ( ) ;
79- assert_eq ! ( bundler_runtime . root , project_dir) ;
80- assert_eq ! ( bundler_runtime . gemfile_path ( ) , project_dir. join( "Gemfile" ) ) ;
75+ let bundler_root = result. unwrap ( ) ;
76+ assert_eq ! ( bundler_root , project_dir) ;
77+ assert_eq ! ( bundler_root . join ( "Gemfile" ) , project_dir. join( "Gemfile" ) ) ;
8178
8279 Ok ( ( ) )
8380 }
@@ -95,9 +92,9 @@ mod tests {
9592 let result = BundlerRuntimeDetector :: discover ( & sub_dir) ?;
9693
9794 assert ! ( result. is_some( ) ) ;
98- let bundler_runtime = result. unwrap ( ) ;
99- assert_eq ! ( bundler_runtime . root , project_dir) ;
100- assert_eq ! ( bundler_runtime . gemfile_path ( ) , project_dir. join( "Gemfile" ) ) ;
95+ let bundler_root = result. unwrap ( ) ;
96+ assert_eq ! ( bundler_root , project_dir) ;
97+ assert_eq ! ( bundler_root . join ( "Gemfile" ) , project_dir. join( "Gemfile" ) ) ;
10198
10299 Ok ( ( ) )
103100 }
@@ -125,9 +122,9 @@ mod tests {
125122 let result = BundlerRuntimeDetector :: discover ( & deep_dir) ?;
126123
127124 assert ! ( result. is_some( ) ) ;
128- let bundler_runtime = result. unwrap ( ) ;
129- assert_eq ! ( bundler_runtime . root , subproject) ;
130- assert_eq ! ( bundler_runtime . gemfile_path ( ) , subproject. join( "Gemfile" ) ) ;
125+ let bundler_root = result. unwrap ( ) ;
126+ assert_eq ! ( bundler_root , subproject) ;
127+ assert_eq ! ( bundler_root . join ( "Gemfile" ) , subproject. join( "Gemfile" ) ) ;
131128
132129 Ok ( ( ) )
133130 }
@@ -147,41 +144,9 @@ mod tests {
147144 let result = BundlerRuntimeDetector :: discover ( & deep_dir) ?;
148145
149146 assert ! ( result. is_some( ) ) ;
150- let bundler_runtime = result. unwrap ( ) ;
151- assert_eq ! ( bundler_runtime. root, project_dir) ;
152- assert_eq ! ( bundler_runtime. gemfile_path( ) , project_dir. join( "Gemfile" ) ) ;
153-
154- Ok ( ( ) )
155- }
156-
157- #[ test]
158- fn discover_detects_ruby_version_from_project ( ) -> io:: Result < ( ) > {
159- let sandbox = BundlerSandbox :: new ( ) ?;
160- let project_dir = sandbox. add_dir ( "ruby-version-app" ) ?;
161-
162- // Create Gemfile with ruby version
163- let gemfile_content = r#"source 'https://rubygems.org'
164-
165- ruby '3.2.1'
166-
167- gem 'rails'
168- "# ;
169- sandbox. add_file (
170- format ! (
171- "{}/Gemfile" ,
172- project_dir. file_name( ) . unwrap( ) . to_str( ) . unwrap( )
173- ) ,
174- gemfile_content,
175- ) ?;
176-
177- let result = BundlerRuntimeDetector :: discover ( & project_dir) ?;
178-
179- assert ! ( result. is_some( ) ) ;
180- let bundler_runtime = result. unwrap ( ) ;
181- assert_eq ! (
182- bundler_runtime. ruby_version( ) ,
183- Some ( semver:: Version :: parse( "3.2.1" ) . unwrap( ) )
184- ) ;
147+ let bundler_root = result. unwrap ( ) ;
148+ assert_eq ! ( bundler_root, project_dir) ;
149+ assert_eq ! ( bundler_root. join( "Gemfile" ) , project_dir. join( "Gemfile" ) ) ;
185150
186151 Ok ( ( ) )
187152 }
0 commit comments