public RailsStatsResults parse(ByteArrayOutputStream output) {
return parse(output.toString());
}
public RailsStatsResults parse(String output) {
RailsStatsResults response = new RailsStatsResults();
String[] aux = output.split("[\n\r]");
Collection<String> lines = new LinkedHashSet<String>(Arrays.asList(aux));
lines = removeSeparators(lines);
Iterator<String> linesIterator = lines.iterator();
String[] header = new String[1];
while (header.length < 2 && linesIterator.hasNext()) {
header = cleanArray(linesIterator.next().split("[|]+")); //report header
}
while (linesIterator.hasNext()) {
String line = linesIterator.next();
String[] columns = cleanArray(line.split("[|]+"));
if (columns.length > 1) { //not last line
Map<RailsStatsMetrics, Integer> metrics = new TreeMap<RailsStatsMetrics, Integer>(new RailsStatsMetrics.COMPARATOR());
for (int i = 1; i < header.length; i++) { //columns[0] == rails class type
metrics.put(RailsStatsMetrics.toRailsStatsMetrics(header[i].trim()), Integer.valueOf(columns[i].trim()));
}
response.addMetric(columns[0].trim(), metrics);
} else {
Pattern pattern = Pattern.compile("CodeLOC:([0-9]+)TestLOC:([0-9]+)CodetoTestRatio:([0-9:.]+)");
Matcher matcher = pattern.matcher(columns[0].replaceAll("[\\s\\r\\n+-]+", ""));
if (matcher.matches()) {
response.setCodeLocSummary(matcher.group(1));
response.setTestLocSummary(matcher.group(2));
response.setCodeToTestRatio(matcher.group(3));
}
}
}