doc/TaskJuggler/CSVFile.html in taskjuggler-0.0.8 vs doc/TaskJuggler/CSVFile.html in taskjuggler-0.0.9
- old
+ new
@@ -139,10 +139,12 @@
<li><a href="../TaskJuggler/AttributeBase.html">TaskJuggler::AttributeBase</a></li>
<li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
+
<li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
<li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
<li><a href="../TaskJuggler/BookingListAttribute.html">TaskJuggler::BookingListAttribute</a></li>
@@ -217,10 +219,12 @@
<li><a href="../TaskJuggler/HTMLGraphics.html">TaskJuggler::HTMLGraphics</a></li>
<li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
+
<li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
<li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
<li><a href="../TaskJuggler/Journal.html">TaskJuggler::Journal</a></li>
@@ -249,10 +253,12 @@
<li><a href="../TaskJuggler/LogicalExpression.html">TaskJuggler::LogicalExpression</a></li>
<li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
+
<li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
<li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
<li><a href="../TaskJuggler/LogicalOperation.html">TaskJuggler::LogicalOperation</a></li>
@@ -529,10 +535,12 @@
<li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li>
<li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
+
<li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
<li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
<li><a href="../TaskJuggler/XMLBlob.html">TaskJuggler::XMLBlob</a></li>
@@ -555,12 +563,10 @@
<li><a href="../RuntimeConfig.html">RuntimeConfig</a></li>
<li><a href="../String.html">String</a></li>
- <li><a href="../StringIO.html">StringIO</a></li>
-
</ul>
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
</div>
@@ -634,18 +640,18 @@
<div class="method-source-code"
id="new-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 27</span>
-27: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">data</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">separator</span> = <span class="ruby-value str">';'</span>, <span class="ruby-identifier">quote</span> = <span class="ruby-value str">'"'</span>)
-28: <span class="ruby-ivar">@data</span> = <span class="ruby-identifier">data</span>
-29: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Illegal separator: #{separator}"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-value str">'."'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">separator</span>)
-30: <span class="ruby-ivar">@separator</span> = <span class="ruby-identifier">separator</span>
-31: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Illegal quote: #{separator}"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">quote</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
-32: <span class="ruby-ivar">@quote</span> = <span class="ruby-identifier">quote</span>
-33: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 28</span>
+28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">data</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">separator</span> = <span class="ruby-value str">';'</span>, <span class="ruby-identifier">quote</span> = <span class="ruby-value str">'"'</span>)
+29: <span class="ruby-ivar">@data</span> = <span class="ruby-identifier">data</span>
+30: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Illegal separator: #{separator}"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-value str">'."'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">separator</span>)
+31: <span class="ruby-ivar">@separator</span> = <span class="ruby-identifier">separator</span>
+32: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Illegal quote: #{separator}"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">quote</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
+33: <span class="ruby-ivar">@quote</span> = <span class="ruby-identifier">quote</span>
+34: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -678,25 +684,25 @@
<div class="method-source-code"
id="str-o-ative-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 182</span>
-182: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">str</span>)
-183: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">nil?</span>
-184: <span class="ruby-keyword kw">nil</span>
-185: <span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^[-+]?\d+$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span>
-186: <span class="ruby-comment cmt"># field is a Fixnum</span>
-187: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_i</span>
-188: <span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^[-+]?\d*\.?\d+([eE][-+]?\d+)?$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span>
-189: <span class="ruby-comment cmt"># field is a Float</span>
-190: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_f</span>
-191: <span class="ruby-keyword kw">else</span>
-192: <span class="ruby-comment cmt"># Everything else is kept as String</span>
-193: <span class="ruby-identifier">str</span>
-194: <span class="ruby-keyword kw">end</span>
-195: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 183</span>
+183: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">str</span>)
+184: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">nil?</span>
+185: <span class="ruby-keyword kw">nil</span>
+186: <span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^[-+]?\d+$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span>
+187: <span class="ruby-comment cmt"># field is a Fixnum</span>
+188: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_i</span>
+189: <span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^[-+]?\d*\.?\d+([eE][-+]?\d+)?$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span>
+190: <span class="ruby-comment cmt"># field is a Float</span>
+191: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_f</span>
+192: <span class="ruby-keyword kw">else</span>
+193: <span class="ruby-comment cmt"># Everything else is kept as String</span>
+194: <span class="ruby-identifier">str</span>
+195: <span class="ruby-keyword kw">end</span>
+196: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -732,105 +738,105 @@
<div class="method-source-code"
id="parse-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 84</span>
- 84: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">str</span>)
- 85: <span class="ruby-ivar">@data</span> = []
- 86: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span>
- 87: <span class="ruby-identifier">fields</span> = <span class="ruby-identifier">field</span> = <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">nil</span>
- 88:
- 89: <span class="ruby-comment cmt"># Make sure the input is terminated with a record end.</span>
- 90: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">str</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">\n\</span>
- 91:
- 92: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
- 93: <span class="ruby-comment cmt">#puts "c: #{c} State: #{state}"</span>
- 94: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">state</span>
- 95: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfRecord</span>
- 96: <span class="ruby-comment cmt"># This will store the fields of a record</span>
- 97: <span class="ruby-identifier">fields</span> = []
- 98: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span>
- 99: <span class="ruby-keyword kw">redo</span>
-100: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfField</span>
-101: <span class="ruby-identifier">field</span> = <span class="ruby-value str">''</span>
-102: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">false</span>
-103: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
-104: <span class="ruby-comment cmt"># We've found the start of a quoted field.</span>
-105: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span>
-106: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">true</span>
-107: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"\n"</span>
-108: <span class="ruby-comment cmt"># We've found an empty field</span>
-109: <span class="ruby-identifier">field</span> = <span class="ruby-keyword kw">nil</span>
-110: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
-111: <span class="ruby-keyword kw">redo</span>
-112: <span class="ruby-keyword kw">else</span>
-113: <span class="ruby-comment cmt"># We've found the first character of an unquoted field</span>
-114: <span class="ruby-identifier">field</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
-115: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inUnquotedField</span>
-116: <span class="ruby-keyword kw">end</span>
-117: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inQuotedField</span>
-118: <span class="ruby-comment cmt"># We are processing the content of a quoted field</span>
-119: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
-120: <span class="ruby-comment cmt"># This could be then end of the field or a quoted quote.</span>
-121: <span class="ruby-identifier">state</span> = <span class="ruby-value">:quoteInQuotedField</span>
-122: <span class="ruby-keyword kw">else</span>
-123: <span class="ruby-comment cmt"># We've found a normal character of the quoted field</span>
-124: <span class="ruby-identifier">field</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
-125: <span class="ruby-keyword kw">end</span>
-126: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:quoteInQuotedField</span>
-127: <span class="ruby-comment cmt"># We are processing a quoted quote or the end of a quoted field</span>
-128: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
-129: <span class="ruby-comment cmt"># We've found a quoted quote</span>
-130: <span class="ruby-identifier">field</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
-131: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span>
-132: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"\n"</span>
-133: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
-134: <span class="ruby-keyword kw">redo</span>
-135: <span class="ruby-keyword kw">else</span>
-136: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Unexpected character #{c} in CSV"</span>
-137: <span class="ruby-keyword kw">end</span>
-138: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inUnquotedField</span>
-139: <span class="ruby-comment cmt"># We are processing an unquoted field</span>
-140: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"\n"</span>
-141: <span class="ruby-comment cmt"># We've found the end of a unquoted field</span>
-142: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
-143: <span class="ruby-keyword kw">redo</span>
-144: <span class="ruby-keyword kw">else</span>
-145: <span class="ruby-comment cmt"># A normal character of an unquoted field</span>
-146: <span class="ruby-identifier">field</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
-147: <span class="ruby-keyword kw">end</span>
-148: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:fieldEnd</span>
-149: <span class="ruby-comment cmt"># We've completed processing a field. Add the field to the list of</span>
-150: <span class="ruby-comment cmt"># fields. Convert Fixnums and Floats in native types.</span>
-151: <span class="ruby-identifier">fields</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>)
-152:
-153: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"\n"</span>
-154: <span class="ruby-comment cmt"># The field end is an end of a record as well.</span>
-155: <span class="ruby-identifier">state</span> = <span class="ruby-value">:recordEnd</span>
-156: <span class="ruby-keyword kw">redo</span>
-157: <span class="ruby-keyword kw">else</span>
-158: <span class="ruby-comment cmt"># Get the next field.</span>
-159: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span>
-160: <span class="ruby-keyword kw">end</span>
-161: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:recordEnd</span>
-162: <span class="ruby-comment cmt"># We've found the end of a record. Add fields to the @data</span>
-163: <span class="ruby-comment cmt"># structure.</span>
-164: <span class="ruby-ivar">@data</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">fields</span>
-165: <span class="ruby-comment cmt"># Look for a new record.</span>
-166: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span>
-167: <span class="ruby-keyword kw">else</span>
-168: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Unknown state #{state}"</span>
-169: <span class="ruby-keyword kw">end</span>
-170: <span class="ruby-keyword kw">end</span>
-171:
-172: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:startOfRecord</span>
-173: <span class="ruby-identifier">raise</span> <span class="ruby-node">"CSV state machine error in state #{state}"</span>
-174: <span class="ruby-keyword kw">end</span>
-175:
-176: <span class="ruby-ivar">@data</span>
-177: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 85</span>
+ 85: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">str</span>)
+ 86: <span class="ruby-ivar">@data</span> = []
+ 87: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span>
+ 88: <span class="ruby-identifier">fields</span> = <span class="ruby-identifier">field</span> = <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">nil</span>
+ 89:
+ 90: <span class="ruby-comment cmt"># Make sure the input is terminated with a record end.</span>
+ 91: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">str</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">\n\</span>
+ 92:
+ 93: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
+ 94: <span class="ruby-comment cmt">#puts "c: #{c} State: #{state}"</span>
+ 95: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">state</span>
+ 96: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfRecord</span>
+ 97: <span class="ruby-comment cmt"># This will store the fields of a record</span>
+ 98: <span class="ruby-identifier">fields</span> = []
+ 99: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span>
+100: <span class="ruby-keyword kw">redo</span>
+101: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfField</span>
+102: <span class="ruby-identifier">field</span> = <span class="ruby-value str">''</span>
+103: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">false</span>
+104: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
+105: <span class="ruby-comment cmt"># We've found the start of a quoted field.</span>
+106: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span>
+107: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">true</span>
+108: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"\n"</span>
+109: <span class="ruby-comment cmt"># We've found an empty field</span>
+110: <span class="ruby-identifier">field</span> = <span class="ruby-keyword kw">nil</span>
+111: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
+112: <span class="ruby-keyword kw">redo</span>
+113: <span class="ruby-keyword kw">else</span>
+114: <span class="ruby-comment cmt"># We've found the first character of an unquoted field</span>
+115: <span class="ruby-identifier">field</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
+116: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inUnquotedField</span>
+117: <span class="ruby-keyword kw">end</span>
+118: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inQuotedField</span>
+119: <span class="ruby-comment cmt"># We are processing the content of a quoted field</span>
+120: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
+121: <span class="ruby-comment cmt"># This could be then end of the field or a quoted quote.</span>
+122: <span class="ruby-identifier">state</span> = <span class="ruby-value">:quoteInQuotedField</span>
+123: <span class="ruby-keyword kw">else</span>
+124: <span class="ruby-comment cmt"># We've found a normal character of the quoted field</span>
+125: <span class="ruby-identifier">field</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
+126: <span class="ruby-keyword kw">end</span>
+127: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:quoteInQuotedField</span>
+128: <span class="ruby-comment cmt"># We are processing a quoted quote or the end of a quoted field</span>
+129: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
+130: <span class="ruby-comment cmt"># We've found a quoted quote</span>
+131: <span class="ruby-identifier">field</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
+132: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span>
+133: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"\n"</span>
+134: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
+135: <span class="ruby-keyword kw">redo</span>
+136: <span class="ruby-keyword kw">else</span>
+137: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Unexpected character #{c} in CSV"</span>
+138: <span class="ruby-keyword kw">end</span>
+139: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inUnquotedField</span>
+140: <span class="ruby-comment cmt"># We are processing an unquoted field</span>
+141: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"\n"</span>
+142: <span class="ruby-comment cmt"># We've found the end of a unquoted field</span>
+143: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
+144: <span class="ruby-keyword kw">redo</span>
+145: <span class="ruby-keyword kw">else</span>
+146: <span class="ruby-comment cmt"># A normal character of an unquoted field</span>
+147: <span class="ruby-identifier">field</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
+148: <span class="ruby-keyword kw">end</span>
+149: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:fieldEnd</span>
+150: <span class="ruby-comment cmt"># We've completed processing a field. Add the field to the list of</span>
+151: <span class="ruby-comment cmt"># fields. Convert Fixnums and Floats in native types.</span>
+152: <span class="ruby-identifier">fields</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>)
+153:
+154: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"\n"</span>
+155: <span class="ruby-comment cmt"># The field end is an end of a record as well.</span>
+156: <span class="ruby-identifier">state</span> = <span class="ruby-value">:recordEnd</span>
+157: <span class="ruby-keyword kw">redo</span>
+158: <span class="ruby-keyword kw">else</span>
+159: <span class="ruby-comment cmt"># Get the next field.</span>
+160: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span>
+161: <span class="ruby-keyword kw">end</span>
+162: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:recordEnd</span>
+163: <span class="ruby-comment cmt"># We've found the end of a record. Add fields to the @data</span>
+164: <span class="ruby-comment cmt"># structure.</span>
+165: <span class="ruby-ivar">@data</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">fields</span>
+166: <span class="ruby-comment cmt"># Look for a new record.</span>
+167: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span>
+168: <span class="ruby-keyword kw">else</span>
+169: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Unknown state #{state}"</span>
+170: <span class="ruby-keyword kw">end</span>
+171: <span class="ruby-keyword kw">end</span>
+172:
+173: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:startOfRecord</span>
+174: <span class="ruby-identifier">raise</span> <span class="ruby-node">"CSV state machine error in state #{state}"</span>
+175: <span class="ruby-keyword kw">end</span>
+176:
+177: <span class="ruby-ivar">@data</span>
+178: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -861,23 +867,23 @@
<div class="method-source-code"
id="read-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 51</span>
-51: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span>(<span class="ruby-identifier">fileName</span>)
-52: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>)
-53: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdin</span>
-54: <span class="ruby-keyword kw">else</span>
-55: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'r'</span>)
-56: <span class="ruby-keyword kw">end</span>
-57:
-58: <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">file</span>.<span class="ruby-identifier">read</span>)
-59:
-60: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
-61: <span class="ruby-ivar">@data</span>
-62: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 52</span>
+52: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span>(<span class="ruby-identifier">fileName</span>)
+53: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>)
+54: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdin</span>
+55: <span class="ruby-keyword kw">else</span>
+56: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'r'</span>)
+57: <span class="ruby-keyword kw">end</span>
+58:
+59: <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">file</span>.<span class="ruby-identifier">read</span>)
+60:
+61: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
+62: <span class="ruby-ivar">@data</span>
+63: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -907,28 +913,28 @@
<div class="method-source-code"
id="to-s-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 65</span>
-65: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
-66: <span class="ruby-identifier">s</span> = <span class="ruby-value str">''</span>
-67: <span class="ruby-ivar">@data</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
-68: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
-69: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">field</span><span class="ruby-operator">|</span>
-70: <span class="ruby-comment cmt"># Don't output a separator before the first field of the line.</span>
-71: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
-72: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
-73: <span class="ruby-keyword kw">else</span>
-74: <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@separator</span>
-75: <span class="ruby-keyword kw">end</span>
-76: <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
-77: <span class="ruby-keyword kw">end</span>
-78: <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span>
-79: <span class="ruby-keyword kw">end</span>
-80: <span class="ruby-identifier">s</span>
-81: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 66</span>
+66: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
+67: <span class="ruby-identifier">s</span> = <span class="ruby-value str">''</span>
+68: <span class="ruby-ivar">@data</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
+69: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
+70: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">field</span><span class="ruby-operator">|</span>
+71: <span class="ruby-comment cmt"># Don't output a separator before the first field of the line.</span>
+72: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
+73: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
+74: <span class="ruby-keyword kw">else</span>
+75: <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@separator</span>
+76: <span class="ruby-keyword kw">end</span>
+77: <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
+78: <span class="ruby-keyword kw">end</span>
+79: <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span>
+80: <span class="ruby-keyword kw">end</span>
+81: <span class="ruby-identifier">s</span>
+82: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -958,22 +964,22 @@
<div class="method-source-code"
id="write-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 37</span>
-37: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
-38: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>)
-39: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdout</span>
-40: <span class="ruby-keyword kw">else</span>
-41: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'w'</span>)
-42: <span class="ruby-keyword kw">end</span>
-43:
-44: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">to_s</span>)
-45:
-46: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
-47: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 38</span>
+38: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
+39: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>)
+40: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdout</span>
+41: <span class="ruby-keyword kw">else</span>
+42: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'w'</span>)
+43: <span class="ruby-keyword kw">end</span>
+44:
+45: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">to_s</span>)
+46:
+47: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
+48: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -1009,24 +1015,24 @@
<div class="method-source-code"
id="marshal-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 201</span>
-201: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
-202: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span>
-203: <span class="ruby-value str">''</span>
-204: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Float</span>)
-205: <span class="ruby-comment cmt"># Numbers don't have to be quoted.</span>
-206: <span class="ruby-identifier">field</span>.<span class="ruby-identifier">to_s</span>
-207: <span class="ruby-keyword kw">else</span>
-208: <span class="ruby-comment cmt"># Duplicate quote characters.</span>
-209: <span class="ruby-identifier">f</span> = <span class="ruby-identifier">field</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/@quote/</span>, <span class="ruby-node">"#{@quote * 2}"</span>)
-210: <span class="ruby-comment cmt"># Enclose the field in quote characters</span>
-211: <span class="ruby-ivar">@quote</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@quote</span>
-212: <span class="ruby-keyword kw">end</span>
-213: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 202</span>
+202: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
+203: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span>
+204: <span class="ruby-value str">''</span>
+205: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Float</span>)
+206: <span class="ruby-comment cmt"># Numbers don't have to be quoted.</span>
+207: <span class="ruby-identifier">field</span>.<span class="ruby-identifier">to_s</span>
+208: <span class="ruby-keyword kw">else</span>
+209: <span class="ruby-comment cmt"># Duplicate quote characters.</span>
+210: <span class="ruby-identifier">f</span> = <span class="ruby-identifier">field</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/@quote/</span>, <span class="ruby-node">"#{@quote * 2}"</span>)
+211: <span class="ruby-comment cmt"># Enclose the field in quote characters</span>
+212: <span class="ruby-ivar">@quote</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@quote</span>
+213: <span class="ruby-keyword kw">end</span>
+214: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -1057,19 +1063,19 @@
<div class="method-source-code"
id="un-arshal-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 217</span>
-217: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>)
-218: <span class="ruby-comment cmt"># Quoted Strings and nil are returned verbatim.</span>
-219: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">quoted</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span>
-220: <span class="ruby-identifier">field</span>
-221: <span class="ruby-keyword kw">else</span>
-222: <span class="ruby-comment cmt"># Unquoted fields are inspected for special types</span>
-223: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">field</span>)
-224: <span class="ruby-keyword kw">end</span>
-225: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 218</span>
+218: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>)
+219: <span class="ruby-comment cmt"># Quoted Strings and nil are returned verbatim.</span>
+220: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">quoted</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span>
+221: <span class="ruby-identifier">field</span>
+222: <span class="ruby-keyword kw">else</span>
+223: <span class="ruby-comment cmt"># Unquoted fields are inspected for special types</span>
+224: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">field</span>)
+225: <span class="ruby-keyword kw">end</span>
+226: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>