package org.ruboto;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
import android.content.Context;
import android.content.res.AssetManager;
import android.os.Environment;
public class Script {
private static String[] scriptsDir = new String[]{"scripts"};
private final String name;
public static void addDir(String dir) {
String[] oldScriptsDir = scriptsDir;
scriptsDir = new String[scriptsDir.length + 1];
scriptsDir[0] = dir;
for(int i = 0 ; i < oldScriptsDir.length ; i++) {
scriptsDir[i + 1] = oldScriptsDir[i];
}
}
public static String toCamelCase(String s) {
String[] parts = s.replace(".rb", "").split("_");
for (int i = 0 ; i < parts.length ; i++) {
if (parts[i].length() == 0) continue;
parts[i] = parts[i].substring(0,1).toUpperCase() + parts[i].substring(1);
}
return java.util.Arrays.toString(parts).replace(", ", "").replaceAll("[\\[\\]]", "");
}
public static String toSnakeCase(String s) {
return s.replaceAll(
String.format("%s|%s|%s",
"(?<=[A-Z])(?=[A-Z][a-z0-9])",
"(?<=[^A-Z])(?=[A-Z])",
"(?<=[A-Za-z0-9])(?=[^A-Za-z0-9])"
),
"_"
).replace("__", "_").toLowerCase();
}
public Script(String name) {
this.name = name;
}
public String execute() throws IOException {
return JRubyAdapter.runScriptlet(getContents()).toString();
}
boolean exists() {
return getAbsolutePath() != null;
}
String getAbsolutePath() {
for (String dir : scriptsDir) {
String path = dir + "/" + name;
Log.d("Checking path: " + path);
if (new File(path).exists()) {
return "file:" + path;
}
}
URL url = getClass().getClassLoader().getResource(name);
Log.d("Classpath resource: " + url);
if (url != null) {
return url.toString();
}
return null;
}
public File getFile() {
for (String dir : scriptsDir) {
File f = new File(dir, name);
if (f.exists()) {
return f;
}
}
return new File(scriptsDir[0], name);
}
public String getContents() throws IOException {
InputStream is = null;
BufferedReader buffer = null;
try {
buffer = new BufferedReader(new java.io.InputStreamReader(new URL(getAbsolutePath()).openStream()), 8192);
StringBuilder source = new StringBuilder();
while (true) {
String line = buffer.readLine();
if (line == null) {
break;
}
source.append(line).append("\n");
}
return source.toString();
} finally {
if (is != null) {
is.close();
}
if (is != null) {
buffer.close();
}
}
}
public String getName() {
return name;
}
}