Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package hudson.plugins.rake;
  
  import java.io.File;
  import java.util.Arrays;
  import java.util.Set;
Ruby utility class. It's used to detect ruby local installations among other features.

Author(s):
David Calavera
 
 public class Util {
 	
 	private static String[] RUBY_EXECUTABLES = {"ruby""jruby"};
 	
 	public static File getExecutable(String path) {
         String execName = isWindows()?"rake.bat":"rake";
         File parent = isJruby(path)?new File(path) : new File(path).getParentFile().getParentFile();        
         return new File(parent"bin/" + execName);
     }
 	
 	public static boolean isWindows() {
 		String name = System.getProperty("os.name");
 		return name != null?name.contains("Windows") : . == '\\';		
 	}
 	
 	public static boolean isLinux() {
 		return System.getProperty("os.name").endsWith("Linux");
 	}
 	
 	public static boolean isJruby(String path) {
 		String execName = isWindows()?"jruby.bat":"jruby";
 		return new File(path"bin/" + execName).exists();
 	}
 	
 	public static boolean hasGemsInstalled(String path) {
 		File gems = getGemsDir(path);
 		return gems != null && gems.exists() && gems.isDirectory();
 	}
 	
 	public static File getGemsDir(String path) {			
 		if (path.startsWith("$")) {
 			path = System.getenv(path.substring(1));
 		}
 		return isJruby(path)?new File(path + "/lib/ruby/gems/1.8") : new File(path + "/gems/1.8");		
 	}
 	
 	public static boolean isRakeInstalled(File gemsDir) {
 		File specPath = new File(gemsDir"specifications");
 		return specPath.exists() && specPath.listFiles() != null;		
 	}
 	
 	private static FilenameFilter rakeFilter = new FilenameFilter() {
 		Pattern rakePattern = Pattern.compile("rake\\-([\\d.]+).gemspec");
 		public boolean accept(File pathString file) {			
 			return .matcher(file).matches();
 		}
 	};
 	
 	public static Collection<FilegetRubyInstallations() throws IOException {
 		String systemPath = System.getenv("PATH");
 		if (systemPath == nullsystemPath = System.getenv("path");
 		Collection<FilerubyVersions = new LinkedHashSet<File>();
 		
 		if (systemPath != null) {
 			Set<Stringcandidates = new LinkedHashSet<String>(Arrays.asList(systemPath.split(.)));
 			for (String path : candidates) {
 				for (String ruby : ) {
 					File rubyExec = getExecutableWithExceptions(pathruby);
 					if (rubyExec.isFile() && 
 							!rubyVersions.contains(rubyExec.getCanonicalFile().getParentFile())) {						
 						File parent = rubyExec.getCanonicalFile().getParentFile();
 						if (isJruby(parent.getParent())) {
 							parent = parent.getParentFile();
 						}
 						
 						File gemsDir = getGemsDir(parent.getAbsolutePath());
 						if (gemsDir != null && isRakeInstalled(gemsDir)) {
 							rubyVersions.add(parent);
 						}
 					}
 				}
 			}
 		}
 				
 		return rubyVersions;
 	}
 	
 	public static RubyInstallation[] getCanonicalRubies(RubyInstallation[] currentInstallations) {
 		try {
 			Collection<RubyInstallationcurrentList = new LinkedHashSet<RubyInstallation>(Arrays.asList(currentInstallations));
 			
 out:		for (File ruby : rubies) {
				for (RubyInstallation current : currentList) {
						continue out;
					}
				}
				currentList.add(new RubyInstallation(ruby.getName(), ruby.getAbsolutePath()));
			}
			return currentList.toArray(new RubyInstallation[currentList.size()]);
catch (IOException e) {
			hudson.Util.displayIOException(enull);    
		}
		return new RubyInstallation[0];
	}
	public static boolean isAlreadyInstalled(RubyInstallation[] currentString path) {
		try {
			for (RubyInstallation ruby : current) {
				if (new File(ruby.getPath()).getCanonicalPath()
						.equals(new File(path).getCanonicalPath())) {
					return true;
				}
			}
catch (IOException e) {
			hudson.Util.displayIOException(enull);    
		}
		return false;
	}
	private static File getExecutableWithExceptions(String pathString exec) {
		File rubyExec = isWindows()?new File(pathexec + ".exe"):new File(pathexec);
		if (isLinux() && rubyExec.exists() && rubyExec.getAbsolutePath().equals("/usr/bin/ruby")) {
			rubyExec = new File("/usr/lib/ruby/ruby");
		}
		return rubyExec;
	}
New to GrepCode? Check out our FAQ X