org.specs.util

class DataRow

[source: org/specs/util/DataRow.scala]

abstract class DataRow[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19](val values : (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19))
extends AnyRef
The DataRow and DataTable classes are created with the following Ruby script: N=20 def types(n) (1..n).map{|i| "T#{i-1}"}.join(", ") end def values_decl(n) (1..n).map{|i| "v#{i-1}: T#{i-1}"}.join(", ") end def values(n) (1..n).map{|i| "v#{i-1}"}.join(", ") end def all_types types(N) end def datarow(i) "case class DataRow#{i}[#{types(i)}](#{values_decl(i)}) extends DataRow((#{values(i)}#{", " if (i < N)}#{(i+1..N).map{"None"}.join(", ")})) { #{if (i < N) "def ![T](v: T) = DataRow#{i+1}[#{types(i)}, T](#{values(i)}, v)" end} }" end def function_def(i) "(f: Function#{i}[#{types(i)}, R]) = {\n"+ " val outer = this\n" + " function = new Function0[DataTable[#{all_types}]]() { " + " def apply(): DataTable[#{all_types}] = {rows foreach {r => executeRow(r, f(#{(1..i).map{|j| "r.values._#{j}"}.join(", "))})}; outer }" + " }\n" + " if (shouldExecute) execute else this\n" + " }" end def lazy_function(i) "def |[R]" + function_def(i) end def function(i) "def |>[R](f: Function#{i}[#{types(i)}, R]) = {shouldExecute = true; this.|(f)}" end datarow = "abstract class DataRow[#{all_types}](val values: (#{all_types})) { var header: TableHeader = TableHeader(Nil) var shouldExecute: Boolean = false; def | = this def |(row: DataRow[#{all_types}]) = DataTable(header, List(this, row), shouldExecute) def |>(row: DataRow[#{all_types}]) = DataTable(header, List(this, row), true) override def toString = { var l: List[Any] = Nil for (i <- new Range(0, values.productArity, 1); e <- values.productElement(i) if (e != None)) l = l:::List(e) l.mkString(\"|\", \"|\", \"|\") } }" datatable = "case class DataTable[#{all_types}](header: TableHeader, rows: List[DataRow[#{all_types}]], var shouldExecute: Boolean){ var rowResults: String = " " + header.toString var function : Function0[DataTable[#{all_types}]] = _ def this(rows: List[DataRow[#{all_types}]]) = this(TableHeader(Nil), rows, false) def |(r: DataRow[#{all_types}]) = DataTable(header, r::rows, shouldExecute) def |>(r: DataRow[#{all_types}]) = { this.|(r); shouldExecute = true; this } def | = this def execute = {if (function != null) function.apply(); this} def results: String = rowResults private def executeRow(row: List[Any], result: => Any) = { var failed = false try { rowResult } catch { case e: Throwable => { failed = true rowResults += ("\nx" + row.mkString("|", "|", "|") + " " + e.getMessage)} } if (!failed) rowResults += ("\n" + row.mkString("|", "|", "|")) } override def toString = header.toString + \"\\n\" + rows.mkString(\"\\n\")\n"+ (1..N).map{|i| " " + function(i) + "\n " + lazy_function(i)}.join("\n") + "}\n" datarows = (1..N).map{|i| datarow(i)}.join("\n") puts datarow puts datatable puts datarows
Direct Known Subclasses:
DataRow1, DataRow2, DataRow3, DataRow4, DataRow5, DataRow6, DataRow7, DataRow8, DataRow9, DataRow10, DataRow11, DataRow12, DataRow13, DataRow14, DataRow15, DataRow16, DataRow17, DataRow18, DataRow19, DataRow20

Value Summary
var header : TableHeader
var shouldExecute : Boolean
Method Summary
override def toString : java.lang.String
def | (row : DataRow[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19]) : DataTable[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19]
def | : DataRow[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19]
def |> (row : DataRow[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19]) : DataTable[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19]
Methods inherited from AnyRef
getClass, hashCode, equals, clone, notify, notifyAll, wait, wait, wait, finalize, ==, !=, eq, ne, synchronized
Methods inherited from Any
==, !=, isInstanceOf, asInstanceOf
Value Details
var header : TableHeader

var shouldExecute : Boolean

Method Details
def | : DataRow[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19]

def |(row : DataRow[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19]) : DataTable[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19]

def |>(row : DataRow[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19]) : DataTable[T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19]

override def toString : java.lang.String


Copyright (c) 2007-2008. All Rights Reserved.