/usr/local/CPAN/Padre-Plugin-Mojolicious/Padre/Plugin/Mojolicious/Util.pm


package Padre::Plugin::Mojolicious::Util;
# some code used all around the Plugin
use Cwd            ();
use File::Spec     ();
use File::Basename ();

our $VERSION = '0.03';

# get the Mojolicious project name, so we can
# figure out the development server's name
# TODO: make this code suck less
sub get_mojolicious_project_name {
	my $project_dir = shift;
	return unless $project_dir;

    require File::Spec;
    my @dirs = File::Spec->splitdir($project_dir);
    my $project_name = lc($dirs[-1]);
    $project_name =~ tr{-}{_};
    
    return $project_name;
}

sub find_file_from_output {
	my $filename = shift;
	my $output_text = shift;
	
	$filename .= '.pm';
	
	if ($output_text =~ m{\[write\] (.+$filename)}) {
		return $1;
	}
	else {
		return; # sorry, not found
	}
}

sub get_document_base_dir {	
	my $main = Padre->ide->wx->main;
	my $doc = $main->current->document;
	my $filename = $doc->filename;
	
	return unless $filename;

	# check for potential relative path on filename
	if ( $filename =~ m{\.\.} ) {
		require Cwd;
		$filename = Cwd::realpath($filename);
	}
	my $olddir = File::Basename::dirname($filename);
	my $dir    = $olddir;
	while (1) {

		#		print "DIR: $olddir\n     $dir\n";
		# those are the test cases for a Mojolicious directory
		if (-d File::Spec->catfile($dir, 'bin'      )
		 && -d File::Spec->catfile($dir, 'lib'      )
		 && -d File::Spec->catfile($dir, 'log'      )
		 && -d File::Spec->catfile($dir, 'public'   )
		 && -d File::Spec->catfile($dir, 't'        )
		 && -d File::Spec->catfile($dir, 'templates')
		) {
			return $dir;
		}
		$olddir = $dir;
		$dir    = File::Basename::dirname($dir);

		last if $olddir eq $dir;
	}
	return;
}

42;