taskjuggler 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (613) hide show
  1. data/CHANGELOG +1144 -2047
  2. data/README +1 -1
  3. data/Rakefile +6 -6
  4. data/data/css/tjmanual.css +20 -0
  5. data/data/css/tjreport.css +7 -6
  6. data/doc/AppConfig.html +136 -130
  7. data/doc/Arguments.html +46 -40
  8. data/doc/CHANGELOG.html +1162 -2057
  9. data/doc/COPYING.html +8 -2
  10. data/doc/Object.html +205 -199
  11. data/doc/README.html +9 -3
  12. data/doc/RuntimeConfig.html +75 -69
  13. data/doc/String.html +69 -63
  14. data/doc/TaskJuggler.html +350 -291
  15. data/doc/TaskJuggler/Account.html +26 -20
  16. data/doc/TaskJuggler/AccountAttribute.html +24 -18
  17. data/doc/TaskJuggler/AccountScenario.html +24 -18
  18. data/doc/TaskJuggler/Allocation.html +74 -68
  19. data/doc/TaskJuggler/AllocationAttribute.html +54 -48
  20. data/doc/TaskJuggler/AttributeBase.html +172 -93
  21. data/doc/TaskJuggler/AttributeDefinition.html +22 -16
  22. data/doc/TaskJuggler/AttributeOverwrite.html +586 -0
  23. data/doc/TaskJuggler/BatchProcessor.html +263 -257
  24. data/doc/TaskJuggler/Booking.html +44 -38
  25. data/doc/TaskJuggler/BookingListAttribute.html +25 -21
  26. data/doc/TaskJuggler/BooleanAttribute.html +24 -18
  27. data/doc/TaskJuggler/CSVFile.html +193 -187
  28. data/doc/TaskJuggler/CellSettingPattern.html +13 -7
  29. data/doc/TaskJuggler/CellSettingPatternList.html +25 -19
  30. data/doc/TaskJuggler/Charge.html +49 -43
  31. data/doc/TaskJuggler/ChargeListAttribute.html +21 -15
  32. data/doc/TaskJuggler/ChargeSet.html +94 -88
  33. data/doc/TaskJuggler/ChargeSetListAttribute.html +29 -25
  34. data/doc/TaskJuggler/CollisionDetector.html +142 -136
  35. data/doc/TaskJuggler/ColumnListAttribute.html +21 -17
  36. data/doc/TaskJuggler/ColumnTable.html +50 -44
  37. data/doc/TaskJuggler/Daemon.html +71 -50
  38. data/doc/TaskJuggler/DataCache.html +110 -58
  39. data/doc/TaskJuggler/DataCacheEntry.html +22 -16
  40. data/doc/TaskJuggler/DateAttribute.html +24 -18
  41. data/doc/TaskJuggler/DefinitionListAttribute.html +12 -6
  42. data/doc/TaskJuggler/DependencyListAttribute.html +29 -25
  43. data/doc/TaskJuggler/DurationAttribute.html +25 -19
  44. data/doc/TaskJuggler/FileList.html +25 -19
  45. data/doc/TaskJuggler/FileRecord.html +17 -11
  46. data/doc/TaskJuggler/FixnumAttribute.html +16 -10
  47. data/doc/TaskJuggler/FlagListAttribute.html +25 -21
  48. data/doc/TaskJuggler/FloatAttribute.html +20 -14
  49. data/doc/TaskJuggler/FormatListAttribute.html +17 -11
  50. data/doc/TaskJuggler/GanttChart.html +242 -236
  51. data/doc/TaskJuggler/GanttContainer.html +71 -67
  52. data/doc/TaskJuggler/GanttHeader.html +113 -107
  53. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -20
  54. data/doc/TaskJuggler/GanttLine.html +217 -210
  55. data/doc/TaskJuggler/GanttLoadStack.html +89 -83
  56. data/doc/TaskJuggler/GanttMilestone.html +11 -6
  57. data/doc/TaskJuggler/GanttRouter.html +194 -186
  58. data/doc/TaskJuggler/GanttTaskBar.html +41 -34
  59. data/doc/TaskJuggler/HTMLDocument.html +52 -46
  60. data/doc/TaskJuggler/HTMLGraphics.html +58 -52
  61. data/doc/TaskJuggler/Interval.html +90 -84
  62. data/doc/TaskJuggler/IntervalList.html +777 -0
  63. data/doc/TaskJuggler/IntervalListAttribute.html +29 -25
  64. data/doc/TaskJuggler/JobInfo.html +36 -30
  65. data/doc/TaskJuggler/Journal.html +188 -177
  66. data/doc/TaskJuggler/JournalEntry.html +36 -30
  67. data/doc/TaskJuggler/JournalEntryList.html +88 -82
  68. data/doc/TaskJuggler/KeywordArray.html +12 -6
  69. data/doc/TaskJuggler/KeywordDocumentation.html +512 -503
  70. data/doc/TaskJuggler/Limits.html +111 -105
  71. data/doc/TaskJuggler/Limits/Limit.html +71 -65
  72. data/doc/TaskJuggler/LimitsAttribute.html +21 -15
  73. data/doc/TaskJuggler/ListAttributeBase.html +16 -10
  74. data/doc/TaskJuggler/Log.html +111 -105
  75. data/doc/TaskJuggler/LogFile.html +54 -48
  76. data/doc/TaskJuggler/LogicalAttribute.html +35 -29
  77. data/doc/TaskJuggler/LogicalExpression.html +32 -26
  78. data/doc/TaskJuggler/LogicalExpressionAttribute.html +16 -10
  79. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +671 -0
  80. data/doc/TaskJuggler/LogicalFlag.html +24 -18
  81. data/doc/TaskJuggler/LogicalFunction.html +164 -158
  82. data/doc/TaskJuggler/LogicalOperation.html +138 -132
  83. data/doc/TaskJuggler/Macro.html +14 -8
  84. data/doc/TaskJuggler/MacroTable.html +42 -36
  85. data/doc/TaskJuggler/ManagerResponsibilities.html +19 -13
  86. data/doc/TaskJuggler/ManagerStatusRecord.html +23 -17
  87. data/doc/TaskJuggler/Message.html +56 -50
  88. data/doc/TaskJuggler/MessageHandler.html +73 -67
  89. data/doc/TaskJuggler/Navigator.html +92 -86
  90. data/doc/TaskJuggler/NavigatorElement.html +88 -82
  91. data/doc/TaskJuggler/NikuProject.html +15 -9
  92. data/doc/TaskJuggler/NikuReport.html +405 -370
  93. data/doc/TaskJuggler/NikuResource.html +13 -7
  94. data/doc/TaskJuggler/NodeListAttribute.html +13 -9
  95. data/doc/TaskJuggler/PlaceHolderCell.html +22 -16
  96. data/doc/TaskJuggler/ProcessIntercom.html +116 -110
  97. data/doc/TaskJuggler/ProcessIntercomIface.html +39 -33
  98. data/doc/TaskJuggler/Project.html +1064 -895
  99. data/doc/TaskJuggler/ProjectBroker.html +439 -366
  100. data/doc/TaskJuggler/ProjectBrokerIface.html +63 -53
  101. data/doc/TaskJuggler/ProjectFileParser.html +329 -319
  102. data/doc/TaskJuggler/ProjectFileScanner.html +351 -345
  103. data/doc/TaskJuggler/ProjectRecord.html +66 -60
  104. data/doc/TaskJuggler/ProjectServer.html +287 -280
  105. data/doc/TaskJuggler/ProjectServerIface.html +43 -37
  106. data/doc/TaskJuggler/PropertyAttribute.html +16 -10
  107. data/doc/TaskJuggler/PropertyList.html +205 -199
  108. data/doc/TaskJuggler/PropertySet.html +264 -296
  109. data/doc/TaskJuggler/PropertyTreeNode.html +455 -505
  110. data/doc/TaskJuggler/Query.html +309 -524
  111. data/doc/TaskJuggler/RTFHandlers.html +17 -11
  112. data/doc/TaskJuggler/RTFNavigator.html +33 -27
  113. data/doc/TaskJuggler/RTFQuery.html +135 -129
  114. data/doc/TaskJuggler/RTFReport.html +63 -57
  115. data/doc/TaskJuggler/RTFReportLink.html +55 -49
  116. data/doc/TaskJuggler/RTFWithQuerySupport.html +17 -11
  117. data/doc/TaskJuggler/RealFormat.html +64 -58
  118. data/doc/TaskJuggler/RealFormatAttribute.html +12 -6
  119. data/doc/TaskJuggler/ReferenceAttribute.html +35 -29
  120. data/doc/TaskJuggler/Report.html +294 -249
  121. data/doc/TaskJuggler/ReportBase.html +229 -223
  122. data/doc/TaskJuggler/ReportContext.html +52 -46
  123. data/doc/TaskJuggler/ReportServer.html +143 -137
  124. data/doc/TaskJuggler/ReportServerIface.html +51 -43
  125. data/doc/TaskJuggler/ReportServerRecord.html +36 -30
  126. data/doc/TaskJuggler/ReportServlet.html +167 -140
  127. data/doc/TaskJuggler/ReportTable.html +137 -131
  128. data/doc/TaskJuggler/ReportTableCell.html +332 -292
  129. data/doc/TaskJuggler/ReportTableColumn.html +46 -40
  130. data/doc/TaskJuggler/ReportTableLegend.html +43 -38
  131. data/doc/TaskJuggler/ReportTableLine.html +66 -60
  132. data/doc/TaskJuggler/Resource.html +166 -160
  133. data/doc/TaskJuggler/ResourceListAttribute.html +54 -32
  134. data/doc/TaskJuggler/ResourceListRE.html +47 -41
  135. data/doc/TaskJuggler/ResourceScenario.html +671 -644
  136. data/doc/TaskJuggler/RichText.html +51 -45
  137. data/doc/TaskJuggler/RichTextAttribute.html +28 -22
  138. data/doc/TaskJuggler/RichTextDocument.html +96 -90
  139. data/doc/TaskJuggler/RichTextElement.html +503 -497
  140. data/doc/TaskJuggler/RichTextFunctionExample.html +41 -35
  141. data/doc/TaskJuggler/RichTextFunctionHandler.html +19 -13
  142. data/doc/TaskJuggler/RichTextImage.html +14 -8
  143. data/doc/TaskJuggler/RichTextIntermediate.html +86 -80
  144. data/doc/TaskJuggler/RichTextParser.html +59 -53
  145. data/doc/TaskJuggler/RichTextScanner.html +184 -178
  146. data/doc/TaskJuggler/RichTextSnip.html +69 -63
  147. data/doc/TaskJuggler/RichTextSyntaxRules.html +416 -410
  148. data/doc/TaskJuggler/Scenario.html +13 -7
  149. data/doc/TaskJuggler/ScenarioData.html +40 -34
  150. data/doc/TaskJuggler/ScenarioListAttribute.html +21 -15
  151. data/doc/TaskJuggler/Scoreboard.html +129 -107
  152. data/doc/TaskJuggler/SheetHandlerBase.html +245 -239
  153. data/doc/TaskJuggler/SheetReceiver.html +333 -327
  154. data/doc/TaskJuggler/SheetSender.html +227 -221
  155. data/doc/TaskJuggler/Shift.html +26 -20
  156. data/doc/TaskJuggler/ShiftAssignment.html +45 -39
  157. data/doc/TaskJuggler/ShiftAssignments.html +178 -172
  158. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +21 -15
  159. data/doc/TaskJuggler/ShiftScenario.html +29 -23
  160. data/doc/TaskJuggler/SimpleQueryExpander.html +36 -30
  161. data/doc/TaskJuggler/SortListAttribute.html +17 -13
  162. data/doc/TaskJuggler/SourceFileInfo.html +19 -13
  163. data/doc/TaskJuggler/StatusSheetReceiver.html +31 -25
  164. data/doc/TaskJuggler/StatusSheetReport.html +166 -159
  165. data/doc/TaskJuggler/StatusSheetSender.html +80 -74
  166. data/doc/TaskJuggler/StringAttribute.html +20 -14
  167. data/doc/TaskJuggler/SymbolAttribute.html +16 -10
  168. data/doc/TaskJuggler/SyntaxReference.html +231 -225
  169. data/doc/TaskJuggler/TOCEntry.html +46 -40
  170. data/doc/TaskJuggler/TSResourceRecord.html +15 -9
  171. data/doc/TaskJuggler/TSTaskRecord.html +16 -10
  172. data/doc/TaskJuggler/TableColumnDefinition.html +84 -39
  173. data/doc/TaskJuggler/TableOfContents.html +28 -22
  174. data/doc/TaskJuggler/TableReport.html +906 -866
  175. data/doc/TaskJuggler/Task.html +99 -93
  176. data/doc/TaskJuggler/TaskDependency.html +24 -18
  177. data/doc/TaskJuggler/TaskListAttribute.html +29 -25
  178. data/doc/TaskJuggler/TaskListRE.html +46 -39
  179. data/doc/TaskJuggler/TaskScenario.html +2218 -1965
  180. data/doc/TaskJuggler/TextFormatter.html +154 -148
  181. data/doc/TaskJuggler/TextParser.html +362 -348
  182. data/doc/TaskJuggler/TextParser/Pattern.html +313 -307
  183. data/doc/TaskJuggler/TextParser/Rule.html +147 -141
  184. data/doc/TaskJuggler/TextParser/StackElement.html +58 -52
  185. data/doc/TaskJuggler/TextParser/State.html +88 -82
  186. data/doc/TaskJuggler/TextParser/StateTransition.html +42 -36
  187. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +20 -14
  188. data/doc/TaskJuggler/TextParser/TokenDoc.html +19 -13
  189. data/doc/TaskJuggler/TextReport.html +80 -74
  190. data/doc/TaskJuggler/TextScanner.html +284 -272
  191. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +14 -8
  192. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +21 -15
  193. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +15 -9
  194. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  195. data/doc/TaskJuggler/TimeSheet.html +123 -117
  196. data/doc/TaskJuggler/TimeSheetReceiver.html +28 -22
  197. data/doc/TaskJuggler/TimeSheetRecord.html +212 -206
  198. data/doc/TaskJuggler/TimeSheetReport.html +206 -199
  199. data/doc/TaskJuggler/TimeSheetSender.html +27 -21
  200. data/doc/TaskJuggler/TimeSheetSummary.html +140 -134
  201. data/doc/TaskJuggler/TimeSheets.html +20 -14
  202. data/doc/TaskJuggler/Tj3AppBase.html +100 -94
  203. data/doc/TaskJuggler/Tj3Client.html +407 -483
  204. data/doc/TaskJuggler/Tj3Daemon.html +116 -107
  205. data/doc/TaskJuggler/Tj3SheetAppBase.html +45 -39
  206. data/doc/TaskJuggler/Tj3SsReceiver.html +31 -25
  207. data/doc/TaskJuggler/Tj3SsSender.html +64 -58
  208. data/doc/TaskJuggler/Tj3TsReceiver.html +31 -25
  209. data/doc/TaskJuggler/Tj3TsSender.html +51 -45
  210. data/doc/TaskJuggler/Tj3TsSummary.html +59 -53
  211. data/doc/TaskJuggler/TjException.html +13 -7
  212. data/doc/TaskJuggler/TjTime.html +444 -438
  213. data/doc/TaskJuggler/TjpExample.html +84 -78
  214. data/doc/TaskJuggler/TjpExportRE.html +356 -349
  215. data/doc/TaskJuggler/TjpSyntaxRules.html +4279 -4151
  216. data/doc/TaskJuggler/URLParameter.html +16 -10
  217. data/doc/TaskJuggler/UserManual.html +185 -179
  218. data/doc/TaskJuggler/VimSyntax.html +144 -138
  219. data/doc/TaskJuggler/WebServer.html +46 -39
  220. data/doc/TaskJuggler/WelcomePage.html +769 -0
  221. data/doc/TaskJuggler/WorkingHours.html +185 -179
  222. data/doc/TaskJuggler/WorkingHoursAttribute.html +42 -36
  223. data/doc/TaskJuggler/XMLBlob.html +21 -15
  224. data/doc/TaskJuggler/XMLComment.html +17 -11
  225. data/doc/TaskJuggler/XMLDocument.html +33 -27
  226. data/doc/TaskJuggler/XMLElement.html +97 -91
  227. data/doc/TaskJuggler/XMLNamedText.html +13 -7
  228. data/doc/TaskJuggler/XMLText.html +32 -26
  229. data/doc/index.html +601 -563
  230. data/doc/lib/AccountScenario_rb.html +5 -3
  231. data/doc/lib/Account_rb.html +5 -3
  232. data/doc/lib/Allocation_rb.html +5 -3
  233. data/doc/lib/AppConfig_rb.html +5 -3
  234. data/doc/lib/AttributeBase_rb.html +5 -3
  235. data/doc/lib/AttributeDefinition_rb.html +5 -3
  236. data/doc/lib/Attributes_rb.html +5 -3
  237. data/doc/lib/BatchProcessor_rb.html +5 -3
  238. data/doc/lib/Booking_rb.html +5 -3
  239. data/doc/lib/ChargeSet_rb.html +5 -3
  240. data/doc/lib/Charge_rb.html +5 -3
  241. data/doc/lib/DataCache_rb.html +5 -3
  242. data/doc/lib/FileList_rb.html +5 -3
  243. data/doc/lib/HTMLDocument_rb.html +5 -3
  244. data/doc/lib/IntervalList_rb.html +69 -0
  245. data/doc/lib/Interval_rb.html +5 -3
  246. data/doc/lib/Journal_rb.html +5 -3
  247. data/doc/lib/KeywordArray_rb.html +5 -3
  248. data/doc/lib/KeywordDocumentation_rb.html +5 -3
  249. data/doc/lib/Limits_rb.html +5 -3
  250. data/doc/lib/LogFile_rb.html +5 -3
  251. data/doc/lib/Log_rb.html +5 -3
  252. data/doc/lib/LogicalExpression_rb.html +5 -3
  253. data/doc/lib/LogicalFunction_rb.html +5 -3
  254. data/doc/lib/LogicalOperation_rb.html +5 -3
  255. data/doc/lib/MacroTable_rb.html +5 -3
  256. data/doc/lib/MessageHandler_rb.html +5 -3
  257. data/doc/lib/ProjectFileParser_rb.html +5 -3
  258. data/doc/lib/ProjectFileScanner_rb.html +5 -3
  259. data/doc/lib/Project_rb.html +5 -3
  260. data/doc/lib/PropertyList_rb.html +5 -3
  261. data/doc/lib/PropertySet_rb.html +5 -3
  262. data/doc/lib/PropertyTreeNode_rb.html +5 -3
  263. data/doc/lib/Query_rb.html +5 -3
  264. data/doc/lib/RTFHandlers_rb.html +5 -3
  265. data/doc/lib/RTFNavigator_rb.html +5 -3
  266. data/doc/lib/RTFQuery_rb.html +5 -3
  267. data/doc/lib/RTFReportLink_rb.html +5 -3
  268. data/doc/lib/RTFReport_rb.html +5 -3
  269. data/doc/lib/RTFWithQuerySupport_rb.html +5 -3
  270. data/doc/lib/RealFormat_rb.html +5 -3
  271. data/doc/lib/ResourceScenario_rb.html +5 -3
  272. data/doc/lib/Resource_rb.html +5 -3
  273. data/doc/lib/RichTextDocument_rb.html +5 -3
  274. data/doc/lib/RichTextElement_rb.html +5 -3
  275. data/doc/lib/RichTextFunctionExample_rb.html +5 -3
  276. data/doc/lib/RichTextFunctionHandler_rb.html +5 -3
  277. data/doc/lib/RichTextParser_rb.html +5 -3
  278. data/doc/lib/RichTextScanner_rb.html +5 -3
  279. data/doc/lib/RichTextSnip_rb.html +5 -3
  280. data/doc/lib/RichTextSyntaxRules_rb.html +5 -3
  281. data/doc/lib/RichText_rb.html +5 -3
  282. data/doc/lib/RuntimeConfig_rb.html +5 -3
  283. data/doc/lib/ScenarioData_rb.html +5 -3
  284. data/doc/lib/Scenario_rb.html +5 -3
  285. data/doc/lib/Scoreboard_rb.html +7 -3
  286. data/doc/lib/SheetHandlerBase_rb.html +5 -3
  287. data/doc/lib/SheetReceiver_rb.html +5 -3
  288. data/doc/lib/SheetSender_rb.html +5 -3
  289. data/doc/lib/ShiftAssignments_rb.html +5 -3
  290. data/doc/lib/ShiftScenario_rb.html +5 -3
  291. data/doc/lib/Shift_rb.html +5 -3
  292. data/doc/lib/SimpleQueryExpander_rb.html +5 -3
  293. data/doc/lib/SourceFileInfo_rb.html +5 -3
  294. data/doc/lib/StatusSheetReceiver_rb.html +5 -3
  295. data/doc/lib/StatusSheetSender_rb.html +5 -3
  296. data/doc/lib/SyntaxReference_rb.html +5 -3
  297. data/doc/lib/TOCEntry_rb.html +5 -3
  298. data/doc/lib/TableColumnDefinition_rb.html +5 -3
  299. data/doc/lib/TableOfContents_rb.html +5 -3
  300. data/doc/lib/TaskDependency_rb.html +5 -3
  301. data/doc/lib/TaskJuggler_rb.html +5 -3
  302. data/doc/lib/TaskScenario_rb.html +5 -3
  303. data/doc/lib/Task_rb.html +5 -3
  304. data/doc/lib/TextFormatter_rb.html +6 -4
  305. data/doc/lib/TextParser/Pattern_rb.html +5 -3
  306. data/doc/lib/TextParser/Rule_rb.html +5 -3
  307. data/doc/lib/TextParser/StackElement_rb.html +5 -3
  308. data/doc/lib/TextParser/State_rb.html +6 -4
  309. data/doc/lib/TextParser/TokenDoc_rb.html +5 -3
  310. data/doc/lib/TextParser_rb.html +5 -3
  311. data/doc/lib/TextScanner_rb.html +5 -3
  312. data/doc/lib/TimeSheetReceiver_rb.html +5 -3
  313. data/doc/lib/TimeSheetSender_rb.html +5 -3
  314. data/doc/lib/TimeSheetSummary_rb.html +6 -4
  315. data/doc/lib/TimeSheets_rb.html +5 -3
  316. data/doc/lib/Tj3AppBase_rb.html +5 -3
  317. data/doc/lib/Tj3Config_rb.html +5 -3
  318. data/doc/lib/Tj3SheetAppBase_rb.html +5 -3
  319. data/doc/lib/TjException_rb.html +5 -3
  320. data/doc/lib/TjTime_rb.html +5 -3
  321. data/doc/lib/TjpExample_rb.html +5 -3
  322. data/doc/lib/TjpSyntaxRules_rb.html +5 -3
  323. data/doc/lib/URLParameter_rb.html +5 -3
  324. data/doc/lib/UTF8String_rb.html +5 -3
  325. data/doc/lib/UserManual_rb.html +5 -3
  326. data/doc/lib/VimSyntax_rb.html +6 -4
  327. data/doc/lib/WorkingHours_rb.html +5 -3
  328. data/doc/lib/XMLDocument_rb.html +5 -3
  329. data/doc/lib/XMLElement_rb.html +5 -3
  330. data/doc/lib/daemon/Daemon_rb.html +5 -3
  331. data/doc/lib/daemon/ProcessIntercom_rb.html +7 -3
  332. data/doc/lib/daemon/ProjectBroker_rb.html +5 -3
  333. data/doc/lib/daemon/ProjectServer_rb.html +5 -3
  334. data/doc/lib/daemon/ReportServer_rb.html +5 -3
  335. data/doc/lib/daemon/ReportServlet_rb.html +69 -0
  336. data/doc/lib/daemon/WebServer_rb.html +9 -3
  337. data/doc/lib/daemon/WelcomePage_rb.html +71 -0
  338. data/doc/lib/deep_copy_rb.html +5 -3
  339. data/doc/lib/reports/CSVFile_rb.html +5 -3
  340. data/doc/lib/reports/CollisionDetector_rb.html +5 -3
  341. data/doc/lib/reports/ColumnTable_rb.html +5 -3
  342. data/doc/lib/reports/GanttChart_rb.html +5 -3
  343. data/doc/lib/reports/GanttContainer_rb.html +5 -3
  344. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +5 -3
  345. data/doc/lib/reports/GanttHeader_rb.html +5 -3
  346. data/doc/lib/reports/GanttLine_rb.html +5 -3
  347. data/doc/lib/reports/GanttLoadStack_rb.html +5 -3
  348. data/doc/lib/reports/GanttMilestone_rb.html +5 -3
  349. data/doc/lib/reports/GanttRouter_rb.html +5 -3
  350. data/doc/lib/reports/GanttTaskBar_rb.html +5 -3
  351. data/doc/lib/reports/HTMLGraphics_rb.html +5 -3
  352. data/doc/lib/reports/Navigator_rb.html +5 -3
  353. data/doc/lib/reports/NikuReport_rb.html +5 -3
  354. data/doc/lib/reports/ReportBase_rb.html +5 -3
  355. data/doc/lib/reports/ReportContext_rb.html +5 -3
  356. data/doc/lib/reports/ReportTableCell_rb.html +5 -3
  357. data/doc/lib/reports/ReportTableColumn_rb.html +5 -3
  358. data/doc/lib/reports/ReportTableLegend_rb.html +5 -3
  359. data/doc/lib/reports/ReportTableLine_rb.html +5 -3
  360. data/doc/lib/reports/ReportTable_rb.html +5 -3
  361. data/doc/lib/reports/Report_rb.html +5 -3
  362. data/doc/lib/reports/ResourceListRE_rb.html +5 -3
  363. data/doc/lib/reports/StatusSheetReport_rb.html +5 -3
  364. data/doc/lib/reports/TableReport_rb.html +5 -3
  365. data/doc/lib/reports/TaskListRE_rb.html +5 -3
  366. data/doc/lib/reports/TextReport_rb.html +5 -3
  367. data/doc/lib/reports/TimeSheetReport_rb.html +5 -3
  368. data/doc/lib/reports/TjpExportRE_rb.html +5 -3
  369. data/doc/lib/{taskjuggler3_rb.html → tj3_rb.html} +7 -5
  370. data/doc/lib/tj3client_rb.html +5 -3
  371. data/doc/lib/tj3d_rb.html +6 -4
  372. data/doc/lib/tj3man_rb.html +5 -3
  373. data/doc/lib/tj3ss_receiver_rb.html +5 -3
  374. data/doc/lib/tj3ss_sender_rb.html +5 -3
  375. data/doc/lib/tj3ts_receiver_rb.html +5 -3
  376. data/doc/lib/tj3ts_sender_rb.html +5 -3
  377. data/doc/lib/tj3ts_summary_rb.html +5 -3
  378. data/examples/tutorial.tjp +13 -5
  379. data/gem_spec.rb +3 -0
  380. data/lib/Account.rb +2 -1
  381. data/lib/AccountScenario.rb +2 -1
  382. data/lib/Allocation.rb +2 -1
  383. data/lib/AppConfig.rb +2 -1
  384. data/lib/AttributeBase.rb +19 -5
  385. data/lib/AttributeDefinition.rb +2 -1
  386. data/lib/Attributes.rb +49 -38
  387. data/lib/BatchProcessor.rb +2 -1
  388. data/lib/Booking.rb +2 -1
  389. data/lib/Charge.rb +2 -1
  390. data/lib/ChargeSet.rb +2 -1
  391. data/lib/DataCache.rb +15 -1
  392. data/lib/FileList.rb +2 -1
  393. data/lib/HTMLDocument.rb +2 -1
  394. data/lib/Interval.rb +2 -1
  395. data/lib/IntervalList.rb +100 -0
  396. data/lib/Journal.rb +8 -2
  397. data/lib/KeywordArray.rb +2 -1
  398. data/lib/KeywordDocumentation.rb +10 -6
  399. data/lib/Limits.rb +2 -1
  400. data/lib/Log.rb +3 -2
  401. data/lib/LogFile.rb +2 -1
  402. data/lib/LogicalExpression.rb +2 -1
  403. data/lib/LogicalFunction.rb +2 -1
  404. data/lib/LogicalOperation.rb +2 -1
  405. data/lib/MacroTable.rb +2 -1
  406. data/lib/MessageHandler.rb +2 -1
  407. data/lib/Project.rb +92 -25
  408. data/lib/ProjectFileParser.rb +7 -2
  409. data/lib/ProjectFileScanner.rb +2 -1
  410. data/lib/PropertyList.rb +2 -1
  411. data/lib/PropertySet.rb +2 -6
  412. data/lib/PropertyTreeNode.rb +22 -44
  413. data/lib/Query.rb +32 -13
  414. data/lib/RTFHandlers.rb +2 -1
  415. data/lib/RTFNavigator.rb +2 -1
  416. data/lib/RTFQuery.rb +3 -2
  417. data/lib/RTFReport.rb +2 -1
  418. data/lib/RTFReportLink.rb +2 -1
  419. data/lib/RTFWithQuerySupport.rb +2 -1
  420. data/lib/RealFormat.rb +2 -1
  421. data/lib/Resource.rb +2 -1
  422. data/lib/ResourceScenario.rb +35 -14
  423. data/lib/RichText.rb +2 -1
  424. data/lib/RichTextDocument.rb +2 -1
  425. data/lib/RichTextElement.rb +2 -1
  426. data/lib/RichTextFunctionExample.rb +2 -1
  427. data/lib/RichTextFunctionHandler.rb +2 -1
  428. data/lib/RichTextParser.rb +2 -1
  429. data/lib/RichTextScanner.rb +2 -1
  430. data/lib/RichTextSnip.rb +2 -1
  431. data/lib/RichTextSyntaxRules.rb +2 -1
  432. data/lib/RuntimeConfig.rb +2 -1
  433. data/lib/Scenario.rb +2 -1
  434. data/lib/ScenarioData.rb +2 -1
  435. data/lib/Scoreboard.rb +27 -8
  436. data/lib/SheetHandlerBase.rb +2 -1
  437. data/lib/SheetReceiver.rb +2 -1
  438. data/lib/SheetSender.rb +2 -1
  439. data/lib/Shift.rb +2 -1
  440. data/lib/ShiftAssignments.rb +2 -1
  441. data/lib/ShiftScenario.rb +2 -1
  442. data/lib/SimpleQueryExpander.rb +2 -1
  443. data/lib/SourceFileInfo.rb +2 -1
  444. data/lib/StatusSheetReceiver.rb +2 -1
  445. data/lib/StatusSheetSender.rb +2 -1
  446. data/lib/SyntaxReference.rb +2 -1
  447. data/lib/TOCEntry.rb +2 -1
  448. data/lib/TableColumnDefinition.rb +9 -2
  449. data/lib/TableOfContents.rb +2 -1
  450. data/lib/Task.rb +2 -1
  451. data/lib/TaskDependency.rb +2 -1
  452. data/lib/TaskJuggler.rb +8 -6
  453. data/lib/TaskScenario.rb +337 -153
  454. data/lib/TextFormatter.rb +3 -2
  455. data/lib/TextParser.rb +7 -2
  456. data/lib/TextParser/Pattern.rb +2 -1
  457. data/lib/TextParser/Rule.rb +2 -1
  458. data/lib/TextParser/StackElement.rb +2 -1
  459. data/lib/TextParser/State.rb +3 -2
  460. data/lib/TextParser/TokenDoc.rb +2 -1
  461. data/lib/TextScanner.rb +12 -5
  462. data/lib/TimeSheetReceiver.rb +2 -1
  463. data/lib/TimeSheetSender.rb +2 -1
  464. data/lib/TimeSheetSummary.rb +3 -2
  465. data/lib/TimeSheets.rb +2 -1
  466. data/lib/Tj3AppBase.rb +6 -5
  467. data/lib/Tj3Config.rb +5 -4
  468. data/lib/Tj3SheetAppBase.rb +2 -1
  469. data/lib/TjException.rb +2 -1
  470. data/lib/TjTime.rb +2 -1
  471. data/lib/TjpExample.rb +2 -1
  472. data/lib/TjpSyntaxRules.rb +264 -65
  473. data/lib/URLParameter.rb +2 -1
  474. data/lib/UTF8String.rb +2 -1
  475. data/lib/UserManual.rb +2 -1
  476. data/lib/VimSyntax.rb +3 -2
  477. data/lib/WorkingHours.rb +2 -1
  478. data/lib/XMLDocument.rb +2 -1
  479. data/lib/XMLElement.rb +2 -1
  480. data/lib/daemon/Daemon.rb +3 -1
  481. data/lib/daemon/ProcessIntercom.rb +3 -1
  482. data/lib/daemon/ProjectBroker.rb +84 -32
  483. data/lib/daemon/ProjectServer.rb +5 -3
  484. data/lib/daemon/ReportServer.rb +8 -5
  485. data/lib/daemon/ReportServlet.rb +166 -0
  486. data/lib/daemon/WebServer.rb +6 -150
  487. data/lib/daemon/WelcomePage.rb +80 -0
  488. data/lib/deep_copy.rb +2 -1
  489. data/lib/reports/CSVFile.rb +2 -1
  490. data/lib/reports/CollisionDetector.rb +2 -1
  491. data/lib/reports/ColumnTable.rb +2 -1
  492. data/lib/reports/GanttChart.rb +2 -1
  493. data/lib/reports/GanttContainer.rb +3 -4
  494. data/lib/reports/GanttHeader.rb +2 -1
  495. data/lib/reports/GanttHeaderScaleItem.rb +2 -1
  496. data/lib/reports/GanttLine.rb +12 -10
  497. data/lib/reports/GanttLoadStack.rb +2 -1
  498. data/lib/reports/GanttMilestone.rb +3 -3
  499. data/lib/reports/GanttRouter.rb +4 -1
  500. data/lib/reports/GanttTaskBar.rb +9 -7
  501. data/lib/reports/HTMLGraphics.rb +2 -1
  502. data/lib/reports/Navigator.rb +2 -1
  503. data/lib/reports/NikuReport.rb +79 -49
  504. data/lib/reports/Report.rb +42 -10
  505. data/lib/reports/ReportBase.rb +2 -1
  506. data/lib/reports/ReportContext.rb +2 -1
  507. data/lib/reports/ReportTable.rb +2 -1
  508. data/lib/reports/ReportTableCell.rb +63 -28
  509. data/lib/reports/ReportTableColumn.rb +2 -1
  510. data/lib/reports/ReportTableLegend.rb +5 -5
  511. data/lib/reports/ReportTableLine.rb +2 -1
  512. data/lib/reports/ResourceListRE.rb +2 -1
  513. data/lib/reports/StatusSheetReport.rb +4 -2
  514. data/lib/reports/TableReport.rb +42 -38
  515. data/lib/reports/TaskListRE.rb +4 -2
  516. data/lib/reports/TextReport.rb +2 -1
  517. data/lib/reports/TimeSheetReport.rb +4 -2
  518. data/lib/reports/TjpExportRE.rb +4 -2
  519. data/lib/{taskjuggler3.rb → tj3.rb} +6 -5
  520. data/lib/tj3client.rb +19 -36
  521. data/lib/tj3d.rb +6 -2
  522. data/lib/tj3man.rb +4 -3
  523. data/lib/tj3ss_receiver.rb +2 -1
  524. data/lib/tj3ss_sender.rb +2 -1
  525. data/lib/tj3ts_receiver.rb +2 -1
  526. data/lib/tj3ts_sender.rb +2 -1
  527. data/lib/tj3ts_summary.rb +2 -1
  528. data/manual/Day_To_Day_Juggling +36 -0
  529. data/manual/How_To_Contribute +9 -4
  530. data/manual/Installation +10 -3
  531. data/manual/TaskJuggler_Internals +0 -2
  532. data/manual/Tutorial +25 -3
  533. data/prj_cfg.rb +4 -2
  534. data/spec/IntervalList_spec.rb +138 -0
  535. data/spec/ProjectBroker_spec.rb +133 -0
  536. data/tasks/changelog.rake +41 -24
  537. data/tasks/csts.rake +1 -0
  538. data/tasks/gem.rake +1 -0
  539. data/tasks/rcov.rake +1 -1
  540. data/tasks/spec.rake +7 -0
  541. data/tasks/test.rake +1 -0
  542. data/test/MessageChecker.rb +2 -1
  543. data/test/TestSuite/CSV-Reports/niku.tjp +70 -0
  544. data/test/TestSuite/CSV-Reports/{celltext-Reference.csv → refs/celltext.csv} +0 -0
  545. data/test/TestSuite/CSV-Reports/refs/niku.csv +5 -0
  546. data/test/TestSuite/CSV-Reports/{resourcereport-Reference.csv → refs/resourcereport.csv} +0 -0
  547. data/test/TestSuite/CSV-Reports/{resourcereport_with_tasks-Reference.csv → refs/resourcereport_with_tasks.csv} +0 -0
  548. data/test/TestSuite/CSV-Reports/{sortByTree-Reference.csv → refs/sortByTree.csv} +0 -0
  549. data/test/TestSuite/CSV-Reports/{sortBy_duration.down-Reference.csv → refs/sortBy_duration.down.csv} +0 -0
  550. data/test/TestSuite/CSV-Reports/{sortBy_effort.up-Reference.csv → refs/sortBy_effort.up.csv} +0 -0
  551. data/test/TestSuite/CSV-Reports/{sortBy_plan.start.down-Reference.csv → refs/sortBy_plan.start.down.csv} +0 -0
  552. data/test/TestSuite/CSV-Reports/{taskreport-Reference.csv → refs/taskreport.csv} +0 -0
  553. data/test/TestSuite/CSV-Reports/{taskreport_with_resources-Reference.csv → refs/taskreport_with_resources.csv} +0 -0
  554. data/test/TestSuite/CSV-Reports/{weekly-Reference.csv → refs/weekly.csv} +0 -0
  555. data/test/TestSuite/HTML-Reports/Alerts.tjp +12 -0
  556. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
  557. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +1 -2
  558. data/test/TestSuite/Scheduler/Correct/InheritedAttributes.tjp +77 -0
  559. data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +40 -0
  560. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +2 -2
  561. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +3 -4
  562. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +2 -2
  563. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +8 -7
  564. data/test/TestSuite/Scheduler/Errors/onend_wrong_direction.tjp +19 -0
  565. data/test/TestSuite/Scheduler/Errors/onstart_wrong_direction.tjp +18 -0
  566. data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +1 -2
  567. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/boss_2002-03-02.tji +46 -0
  568. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/dev2_2002-03-02.tji +22 -0
  569. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/resources.yml +11 -0
  570. data/test/TestSuite/StatusSheets/StatusSheetTemplates/acceptable_intervals +1 -0
  571. data/test/TestSuite/StatusSheets/sender.log +256 -0
  572. data/test/TestSuite/StatusSheets/statussheets.log +9 -0
  573. data/test/TestSuite/StatusSheets/tj3d.log +395 -0
  574. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +2 -0
  575. data/test/TestSuite/Syntax/Correct/Niku.tjp +6 -1
  576. data/test/TestSuite/Syntax/Correct/Scenario.tjp +4 -1
  577. data/test/TestSuite/Syntax/Correct/Supplement.tjp +12 -5
  578. data/test/TestSuite/Syntax/Correct/TaskPrefix.tji +3 -0
  579. data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +24 -0
  580. data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -2
  581. data/test/TestSuite/Syntax/Correct/tutorial.tjp +15 -5
  582. data/test/all.rb +2 -4
  583. data/test/test_BatchProcessor.rb +2 -1
  584. data/test/test_CSV-Reports.rb +34 -23
  585. data/test/test_CSVFile.rb +2 -1
  586. data/test/test_CollisionDetector.rb +3 -2
  587. data/test/test_Journal.rb +2 -1
  588. data/test/test_Limits.rb +2 -1
  589. data/test/test_LogicalExpression.rb +2 -1
  590. data/test/test_MacroTable.rb +2 -1
  591. data/test/test_Project.rb +3 -2
  592. data/test/test_ProjectFileScanner.rb +2 -1
  593. data/test/test_PropertySet.rb +2 -1
  594. data/test/test_Query.rb +2 -1
  595. data/test/test_RealFormat.rb +2 -1
  596. data/test/test_ReportGenerator.rb +2 -1
  597. data/test/test_RichText.rb +2 -1
  598. data/test/test_Scheduler.rb +2 -1
  599. data/test/test_ShiftAssignments.rb +2 -1
  600. data/test/test_SimpleQueryExpander.rb +2 -1
  601. data/test/test_Syntax.rb +2 -1
  602. data/test/test_TextFormatter.rb +3 -2
  603. data/test/test_TjTime.rb +2 -1
  604. data/test/test_TjpExample.rb +2 -1
  605. data/test/test_URLParameter.rb +2 -1
  606. data/test/test_UTF8String.rb +2 -1
  607. data/test/test_WorkingHours.rb +2 -1
  608. data/test/test_deep_copy.rb +2 -1
  609. metadata +74 -20
  610. data/doc/StringIO.html +0 -595
  611. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +0 -46
  612. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +0 -51
  613. data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +0 -11
@@ -131,6 +131,8 @@
131
131
 
132
132
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
133
133
 
134
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
135
+
134
136
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
135
137
 
136
138
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -209,6 +211,8 @@
209
211
 
210
212
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
211
213
 
214
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
215
+
212
216
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
213
217
 
214
218
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -241,6 +245,8 @@
241
245
 
242
246
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
243
247
 
248
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
249
+
244
250
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
245
251
 
246
252
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -521,6 +527,8 @@
521
527
 
522
528
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
523
529
 
530
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
531
+
524
532
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
525
533
 
526
534
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -547,8 +555,6 @@
547
555
 
548
556
  <li><a href="../String.html">String</a></li>
549
557
 
550
- <li><a href="../StringIO.html">StringIO</a></li>
551
-
552
558
  </ul>
553
559
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
554
560
  </div>
@@ -698,15 +704,15 @@
698
704
  <div class="method-source-code"
699
705
  id="new-source">
700
706
  <pre>
701
- <span class="ruby-comment cmt"># File lib/Booking.rb, line 20</span>
702
- 20: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">resource</span>, <span class="ruby-identifier">task</span>, <span class="ruby-identifier">intervals</span>)
703
- 21: <span class="ruby-ivar">@resource</span> = <span class="ruby-identifier">resource</span>
704
- 22: <span class="ruby-ivar">@task</span> = <span class="ruby-identifier">task</span>
705
- 23: <span class="ruby-ivar">@intervals</span> = <span class="ruby-identifier">intervals</span>
706
- 24: <span class="ruby-ivar">@sourceFileInfo</span> = <span class="ruby-keyword kw">nil</span>
707
- 25: <span class="ruby-ivar">@overtime</span> = <span class="ruby-value">0</span>
708
- 26: <span class="ruby-ivar">@sloppy</span> = <span class="ruby-value">0</span>
709
- 27: <span class="ruby-keyword kw">end</span></pre>
707
+ <span class="ruby-comment cmt"># File lib/Booking.rb, line 21</span>
708
+ 21: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">resource</span>, <span class="ruby-identifier">task</span>, <span class="ruby-identifier">intervals</span>)
709
+ 22: <span class="ruby-ivar">@resource</span> = <span class="ruby-identifier">resource</span>
710
+ 23: <span class="ruby-ivar">@task</span> = <span class="ruby-identifier">task</span>
711
+ 24: <span class="ruby-ivar">@intervals</span> = <span class="ruby-identifier">intervals</span>
712
+ 25: <span class="ruby-ivar">@sourceFileInfo</span> = <span class="ruby-keyword kw">nil</span>
713
+ 26: <span class="ruby-ivar">@overtime</span> = <span class="ruby-value">0</span>
714
+ 27: <span class="ruby-ivar">@sloppy</span> = <span class="ruby-value">0</span>
715
+ 28: <span class="ruby-keyword kw">end</span></pre>
710
716
  </div>
711
717
 
712
718
  </div>
@@ -743,19 +749,19 @@
743
749
  <div class="method-source-code"
744
750
  id="to-s-source">
745
751
  <pre>
746
- <span class="ruby-comment cmt"># File lib/Booking.rb, line 29</span>
747
- 29: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
748
- 30: <span class="ruby-identifier">out</span> = <span class="ruby-node">&quot;#{@resource.fullId} &quot;</span>
749
- 31: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
750
- 32: <span class="ruby-ivar">@intervals</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
751
- 33: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
752
- 34: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
753
- 35: <span class="ruby-keyword kw">else</span>
754
- 36: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;, &quot;</span>
755
- 37: <span class="ruby-keyword kw">end</span>
756
- 38: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{iv.start} + #{(iv.end - iv.start) / 3600}h&quot;</span>
757
- 39: <span class="ruby-keyword kw">end</span>
758
- 40: <span class="ruby-keyword kw">end</span></pre>
752
+ <span class="ruby-comment cmt"># File lib/Booking.rb, line 30</span>
753
+ 30: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
754
+ 31: <span class="ruby-identifier">out</span> = <span class="ruby-node">&quot;#{@resource.fullId} &quot;</span>
755
+ 32: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
756
+ 33: <span class="ruby-ivar">@intervals</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
757
+ 34: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
758
+ 35: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
759
+ 36: <span class="ruby-keyword kw">else</span>
760
+ 37: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;, &quot;</span>
761
+ 38: <span class="ruby-keyword kw">end</span>
762
+ 39: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{iv.start} + #{(iv.end - iv.start) / 3600}h&quot;</span>
763
+ 40: <span class="ruby-keyword kw">end</span>
764
+ 41: <span class="ruby-keyword kw">end</span></pre>
759
765
  </div>
760
766
 
761
767
  </div>
@@ -786,20 +792,20 @@
786
792
  <div class="method-source-code"
787
793
  id="to-tjp-source">
788
794
  <pre>
789
- <span class="ruby-comment cmt"># File lib/Booking.rb, line 42</span>
790
- 42: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_tjp</span>
791
- 43: <span class="ruby-identifier">out</span> = <span class="ruby-node">&quot;#{@resource.fullId} &quot;</span>
792
- 44: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
793
- 45: <span class="ruby-ivar">@intervals</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
794
- 46: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
795
- 47: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
796
- 48: <span class="ruby-keyword kw">else</span>
797
- 49: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;,\n&quot;</span>
798
- 50: <span class="ruby-keyword kw">end</span>
799
- 51: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{iv.start} + #{(iv.end - iv.start) / 3600}h&quot;</span>
800
- 52: <span class="ruby-keyword kw">end</span>
801
- 53: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">' { overtime 2 }'</span>
802
- 54: <span class="ruby-keyword kw">end</span></pre>
795
+ <span class="ruby-comment cmt"># File lib/Booking.rb, line 43</span>
796
+ 43: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_tjp</span>
797
+ 44: <span class="ruby-identifier">out</span> = <span class="ruby-node">&quot;#{@resource.fullId} &quot;</span>
798
+ 45: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
799
+ 46: <span class="ruby-ivar">@intervals</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
800
+ 47: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
801
+ 48: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
802
+ 49: <span class="ruby-keyword kw">else</span>
803
+ 50: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;,\n&quot;</span>
804
+ 51: <span class="ruby-keyword kw">end</span>
805
+ 52: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{iv.start} + #{(iv.end - iv.start) / 3600}h&quot;</span>
806
+ 53: <span class="ruby-keyword kw">end</span>
807
+ 54: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">' { overtime 2 }'</span>
808
+ 55: <span class="ruby-keyword kw">end</span></pre>
803
809
  </div>
804
810
 
805
811
  </div>
@@ -55,7 +55,7 @@
55
55
  <div id="parent-class-section" class="section">
56
56
  <h3 class="section-header">Parent</h3>
57
57
 
58
- <p class="link"><a href="AttributeBase.html">TaskJuggler::AttributeBase</a></p>
58
+ <p class="link"><a href="ListAttributeBase.html">TaskJuggler::ListAttributeBase</a></p>
59
59
 
60
60
  </div>
61
61
 
@@ -133,6 +133,8 @@
133
133
 
134
134
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
135
135
 
136
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
137
+
136
138
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
137
139
 
138
140
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -211,6 +213,8 @@
211
213
 
212
214
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
213
215
 
216
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
217
+
214
218
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
215
219
 
216
220
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -243,6 +247,8 @@
243
247
 
244
248
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
245
249
 
250
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
251
+
246
252
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
247
253
 
248
254
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -523,6 +529,8 @@
523
529
 
524
530
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
525
531
 
532
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
533
+
526
534
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
527
535
 
528
536
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -549,8 +557,6 @@
549
557
 
550
558
  <li><a href="../String.html">String</a></li>
551
559
 
552
- <li><a href="../StringIO.html">StringIO</a></li>
553
-
554
560
  </ul>
555
561
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
556
562
  </div>
@@ -598,12 +604,10 @@
598
604
  <div class="method-source-code"
599
605
  id="new-source">
600
606
  <pre>
601
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 93</span>
602
- 93: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">property</span>, <span class="ruby-identifier">type</span>)
603
- 94: <span class="ruby-keyword kw">super</span>
604
- 95:
605
- 96: <span class="ruby-ivar">@value</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
606
- 97: <span class="ruby-keyword kw">end</span></pre>
607
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 94</span>
608
+ 94: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">property</span>, <span class="ruby-identifier">type</span>)
609
+ 95: <span class="ruby-keyword kw">super</span>
610
+ 96: <span class="ruby-keyword kw">end</span></pre>
607
611
  </div>
608
612
 
609
613
  </div>
@@ -634,10 +638,10 @@
634
638
  <div class="method-source-code"
635
639
  id="tjp-d-source">
636
640
  <pre>
637
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 99</span>
638
- 99: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">BookingListAttribute</span><span class="ruby-operator">::</span><span class="ruby-identifier">tjpId</span>
639
- 100: <span class="ruby-value str">'bookinglist'</span>
640
- 101: <span class="ruby-keyword kw">end</span></pre>
641
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 98</span>
642
+ 98: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">BookingListAttribute</span><span class="ruby-operator">::</span><span class="ruby-identifier">tjpId</span>
643
+ 99: <span class="ruby-value str">'bookinglist'</span>
644
+ 100: <span class="ruby-keyword kw">end</span></pre>
641
645
  </div>
642
646
 
643
647
  </div>
@@ -674,10 +678,10 @@
674
678
  <div class="method-source-code"
675
679
  id="to-s-source">
676
680
  <pre>
677
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 103</span>
678
- 103: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span> = <span class="ruby-keyword kw">nil</span>)
679
- 104: <span class="ruby-ivar">@value</span>.<span class="ruby-identifier">collect</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_s</span> }.<span class="ruby-identifier">join</span>(<span class="ruby-value str">', '</span>)
680
- 105: <span class="ruby-keyword kw">end</span></pre>
681
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 102</span>
682
+ 102: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span> = <span class="ruby-keyword kw">nil</span>)
683
+ 103: <span class="ruby-ivar">@value</span>.<span class="ruby-identifier">collect</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_s</span> }.<span class="ruby-identifier">join</span>(<span class="ruby-value str">', '</span>)
684
+ 104: <span class="ruby-keyword kw">end</span></pre>
681
685
  </div>
682
686
 
683
687
  </div>
@@ -708,10 +712,10 @@
708
712
  <div class="method-source-code"
709
713
  id="to-tjp-source">
710
714
  <pre>
711
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 107</span>
712
- 107: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_tjp</span>
713
- 108: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Don't call this method. This needs to be a special case.&quot;</span>
714
- 109: <span class="ruby-keyword kw">end</span></pre>
715
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 106</span>
716
+ 106: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_tjp</span>
717
+ 107: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Don't call this method. This needs to be a special case.&quot;</span>
718
+ 108: <span class="ruby-keyword kw">end</span></pre>
715
719
  </div>
716
720
 
717
721
  </div>
@@ -133,6 +133,8 @@
133
133
 
134
134
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
135
135
 
136
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
137
+
136
138
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
137
139
 
138
140
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -211,6 +213,8 @@
211
213
 
212
214
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
213
215
 
216
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
217
+
214
218
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
215
219
 
216
220
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -243,6 +247,8 @@
243
247
 
244
248
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
245
249
 
250
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
251
+
246
252
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
247
253
 
248
254
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -523,6 +529,8 @@
523
529
 
524
530
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
525
531
 
532
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
533
+
526
534
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
527
535
 
528
536
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -549,8 +557,6 @@
549
557
 
550
558
  <li><a href="../String.html">String</a></li>
551
559
 
552
- <li><a href="../StringIO.html">StringIO</a></li>
553
-
554
560
  </ul>
555
561
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
556
562
  </div>
@@ -598,10 +604,10 @@
598
604
  <div class="method-source-code"
599
605
  id="new-source">
600
606
  <pre>
601
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 114</span>
602
- 114: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">property</span>, <span class="ruby-identifier">type</span>)
603
- 115: <span class="ruby-keyword kw">super</span>
604
- 116: <span class="ruby-keyword kw">end</span></pre>
607
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 113</span>
608
+ 113: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">property</span>, <span class="ruby-identifier">type</span>)
609
+ 114: <span class="ruby-keyword kw">super</span>
610
+ 115: <span class="ruby-keyword kw">end</span></pre>
605
611
  </div>
606
612
 
607
613
  </div>
@@ -632,10 +638,10 @@
632
638
  <div class="method-source-code"
633
639
  id="tjp-d-source">
634
640
  <pre>
635
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 118</span>
636
- 118: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">BooleanAttribute</span><span class="ruby-operator">::</span><span class="ruby-identifier">tjpId</span>
637
- 119: <span class="ruby-value str">'boolean'</span>
638
- 120: <span class="ruby-keyword kw">end</span></pre>
641
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 117</span>
642
+ 117: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">BooleanAttribute</span><span class="ruby-operator">::</span><span class="ruby-identifier">tjpId</span>
643
+ 118: <span class="ruby-value str">'boolean'</span>
644
+ 119: <span class="ruby-keyword kw">end</span></pre>
639
645
  </div>
640
646
 
641
647
  </div>
@@ -672,10 +678,10 @@
672
678
  <div class="method-source-code"
673
679
  id="to-s-source">
674
680
  <pre>
675
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 122</span>
676
- 122: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span> = <span class="ruby-keyword kw">nil</span>)
677
- 123: <span class="ruby-ivar">@value</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'true'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'false'</span>
678
- 124: <span class="ruby-keyword kw">end</span></pre>
681
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 121</span>
682
+ 121: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span> = <span class="ruby-keyword kw">nil</span>)
683
+ 122: <span class="ruby-ivar">@value</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'true'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'false'</span>
684
+ 123: <span class="ruby-keyword kw">end</span></pre>
679
685
  </div>
680
686
 
681
687
  </div>
@@ -706,10 +712,10 @@
706
712
  <div class="method-source-code"
707
713
  id="to-tjp-source">
708
714
  <pre>
709
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 126</span>
710
- 126: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_tjp</span>
711
- 127: <span class="ruby-ivar">@type</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">+</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">+</span> (<span class="ruby-ivar">@value</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'yes'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'no'</span>)
712
- 128: <span class="ruby-keyword kw">end</span></pre>
715
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 125</span>
716
+ 125: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_tjp</span>
717
+ 126: <span class="ruby-ivar">@type</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">+</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">+</span> (<span class="ruby-ivar">@value</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'yes'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'no'</span>)
718
+ 127: <span class="ruby-keyword kw">end</span></pre>
713
719
  </div>
714
720
 
715
721
  </div>
@@ -141,6 +141,8 @@
141
141
 
142
142
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
143
143
 
144
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
145
+
144
146
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
145
147
 
146
148
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -219,6 +221,8 @@
219
221
 
220
222
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
221
223
 
224
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
225
+
222
226
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
223
227
 
224
228
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -251,6 +255,8 @@
251
255
 
252
256
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
253
257
 
258
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
259
+
254
260
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
255
261
 
256
262
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -531,6 +537,8 @@
531
537
 
532
538
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
533
539
 
540
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
541
+
534
542
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
535
543
 
536
544
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -557,8 +565,6 @@
557
565
 
558
566
  <li><a href="../String.html">String</a></li>
559
567
 
560
- <li><a href="../StringIO.html">StringIO</a></li>
561
-
562
568
  </ul>
563
569
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
564
570
  </div>
@@ -636,14 +642,14 @@ is an Array of Arrays that holds the table. Optionally, you can specify a
636
642
  <div class="method-source-code"
637
643
  id="new-source">
638
644
  <pre>
639
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 27</span>
640
- 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">'&quot;'</span>)
641
- 28: <span class="ruby-ivar">@data</span> = <span class="ruby-identifier">data</span>
642
- 29: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Illegal separator: #{separator}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-value str">'.&quot;'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">separator</span>)
643
- 30: <span class="ruby-ivar">@separator</span> = <span class="ruby-identifier">separator</span>
644
- 31: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Illegal quote: #{separator}&quot;</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>
645
- 32: <span class="ruby-ivar">@quote</span> = <span class="ruby-identifier">quote</span>
646
- 33: <span class="ruby-keyword kw">end</span></pre>
645
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 28</span>
646
+ 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">'&quot;'</span>)
647
+ 29: <span class="ruby-ivar">@data</span> = <span class="ruby-identifier">data</span>
648
+ 30: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Illegal separator: #{separator}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-value str">'.&quot;'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">separator</span>)
649
+ 31: <span class="ruby-ivar">@separator</span> = <span class="ruby-identifier">separator</span>
650
+ 32: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Illegal quote: #{separator}&quot;</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>
651
+ 33: <span class="ruby-ivar">@quote</span> = <span class="ruby-identifier">quote</span>
652
+ 34: <span class="ruby-keyword kw">end</span></pre>
647
653
  </div>
648
654
 
649
655
  </div>
@@ -680,21 +686,21 @@ returned unmodified. nil is returned as nil.
680
686
  <div class="method-source-code"
681
687
  id="str-o-ative-source">
682
688
  <pre>
683
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 182</span>
684
- 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>)
685
- 183: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">nil?</span>
686
- 184: <span class="ruby-keyword kw">nil</span>
687
- 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>
688
- 186: <span class="ruby-comment cmt"># field is a Fixnum</span>
689
- 187: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_i</span>
690
- 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>
691
- 189: <span class="ruby-comment cmt"># field is a Float</span>
692
- 190: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_f</span>
693
- 191: <span class="ruby-keyword kw">else</span>
694
- 192: <span class="ruby-comment cmt"># Everything else is kept as String</span>
695
- 193: <span class="ruby-identifier">str</span>
696
- 194: <span class="ruby-keyword kw">end</span>
697
- 195: <span class="ruby-keyword kw">end</span></pre>
689
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 183</span>
690
+ 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>)
691
+ 184: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">nil?</span>
692
+ 185: <span class="ruby-keyword kw">nil</span>
693
+ 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>
694
+ 187: <span class="ruby-comment cmt"># field is a Fixnum</span>
695
+ 188: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_i</span>
696
+ 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>
697
+ 190: <span class="ruby-comment cmt"># field is a Float</span>
698
+ 191: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_f</span>
699
+ 192: <span class="ruby-keyword kw">else</span>
700
+ 193: <span class="ruby-comment cmt"># Everything else is kept as String</span>
701
+ 194: <span class="ruby-identifier">str</span>
702
+ 195: <span class="ruby-keyword kw">end</span>
703
+ 196: <span class="ruby-keyword kw">end</span></pre>
698
704
  </div>
699
705
 
700
706
  </div>
@@ -734,101 +740,101 @@ href="../String.html">String</a> <tt>str</tt>.
734
740
  <div class="method-source-code"
735
741
  id="parse-source">
736
742
  <pre>
737
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 84</span>
738
- 84: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">str</span>)
739
- 85: <span class="ruby-ivar">@data</span> = []
740
- 86: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span>
741
- 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>
742
- 88:
743
- 89: <span class="ruby-comment cmt"># Make sure the input is terminated with a record end.</span>
744
- 90: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</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>
745
- 91:
746
- 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>
747
- 93: <span class="ruby-comment cmt">#puts &quot;c: #{c} State: #{state}&quot;</span>
748
- 94: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">state</span>
749
- 95: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfRecord</span>
750
- 96: <span class="ruby-comment cmt"># This will store the fields of a record</span>
751
- 97: <span class="ruby-identifier">fields</span> = []
752
- 98: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span>
753
- 99: <span class="ruby-keyword kw">redo</span>
754
- 100: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfField</span>
755
- 101: <span class="ruby-identifier">field</span> = <span class="ruby-value str">''</span>
756
- 102: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">false</span>
757
- 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>
758
- 104: <span class="ruby-comment cmt"># We've found the start of a quoted field.</span>
759
- 105: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span>
760
- 106: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">true</span>
761
- 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">&quot;\n&quot;</span>
762
- 108: <span class="ruby-comment cmt"># We've found an empty field</span>
763
- 109: <span class="ruby-identifier">field</span> = <span class="ruby-keyword kw">nil</span>
764
- 110: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
765
- 111: <span class="ruby-keyword kw">redo</span>
766
- 112: <span class="ruby-keyword kw">else</span>
767
- 113: <span class="ruby-comment cmt"># We've found the first character of an unquoted field</span>
768
- 114: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
769
- 115: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inUnquotedField</span>
770
- 116: <span class="ruby-keyword kw">end</span>
771
- 117: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inQuotedField</span>
772
- 118: <span class="ruby-comment cmt"># We are processing the content of a quoted field</span>
773
- 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>
774
- 120: <span class="ruby-comment cmt"># This could be then end of the field or a quoted quote.</span>
775
- 121: <span class="ruby-identifier">state</span> = <span class="ruby-value">:quoteInQuotedField</span>
776
- 122: <span class="ruby-keyword kw">else</span>
777
- 123: <span class="ruby-comment cmt"># We've found a normal character of the quoted field</span>
778
- 124: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
779
- 125: <span class="ruby-keyword kw">end</span>
780
- 126: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:quoteInQuotedField</span>
781
- 127: <span class="ruby-comment cmt"># We are processing a quoted quote or the end of a quoted field</span>
782
- 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>
783
- 129: <span class="ruby-comment cmt"># We've found a quoted quote</span>
784
- 130: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
785
- 131: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span>
786
- 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">&quot;\n&quot;</span>
787
- 133: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
788
- 134: <span class="ruby-keyword kw">redo</span>
789
- 135: <span class="ruby-keyword kw">else</span>
790
- 136: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unexpected character #{c} in CSV&quot;</span>
791
- 137: <span class="ruby-keyword kw">end</span>
792
- 138: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inUnquotedField</span>
793
- 139: <span class="ruby-comment cmt"># We are processing an unquoted field</span>
794
- 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">&quot;\n&quot;</span>
795
- 141: <span class="ruby-comment cmt"># We've found the end of a unquoted field</span>
796
- 142: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
797
- 143: <span class="ruby-keyword kw">redo</span>
798
- 144: <span class="ruby-keyword kw">else</span>
799
- 145: <span class="ruby-comment cmt"># A normal character of an unquoted field</span>
800
- 146: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
801
- 147: <span class="ruby-keyword kw">end</span>
802
- 148: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:fieldEnd</span>
803
- 149: <span class="ruby-comment cmt"># We've completed processing a field. Add the field to the list of</span>
804
- 150: <span class="ruby-comment cmt"># fields. Convert Fixnums and Floats in native types.</span>
805
- 151: <span class="ruby-identifier">fields</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>)
806
- 152:
807
- 153: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
808
- 154: <span class="ruby-comment cmt"># The field end is an end of a record as well.</span>
809
- 155: <span class="ruby-identifier">state</span> = <span class="ruby-value">:recordEnd</span>
810
- 156: <span class="ruby-keyword kw">redo</span>
811
- 157: <span class="ruby-keyword kw">else</span>
812
- 158: <span class="ruby-comment cmt"># Get the next field.</span>
813
- 159: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span>
814
- 160: <span class="ruby-keyword kw">end</span>
815
- 161: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:recordEnd</span>
816
- 162: <span class="ruby-comment cmt"># We've found the end of a record. Add fields to the @data</span>
817
- 163: <span class="ruby-comment cmt"># structure.</span>
818
- 164: <span class="ruby-ivar">@data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">fields</span>
819
- 165: <span class="ruby-comment cmt"># Look for a new record.</span>
820
- 166: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span>
821
- 167: <span class="ruby-keyword kw">else</span>
822
- 168: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown state #{state}&quot;</span>
823
- 169: <span class="ruby-keyword kw">end</span>
824
- 170: <span class="ruby-keyword kw">end</span>
825
- 171:
826
- 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>
827
- 173: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;CSV state machine error in state #{state}&quot;</span>
828
- 174: <span class="ruby-keyword kw">end</span>
829
- 175:
830
- 176: <span class="ruby-ivar">@data</span>
831
- 177: <span class="ruby-keyword kw">end</span></pre>
743
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 85</span>
744
+ 85: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">str</span>)
745
+ 86: <span class="ruby-ivar">@data</span> = []
746
+ 87: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span>
747
+ 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>
748
+ 89:
749
+ 90: <span class="ruby-comment cmt"># Make sure the input is terminated with a record end.</span>
750
+ 91: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</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>
751
+ 92:
752
+ 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>
753
+ 94: <span class="ruby-comment cmt">#puts &quot;c: #{c} State: #{state}&quot;</span>
754
+ 95: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">state</span>
755
+ 96: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfRecord</span>
756
+ 97: <span class="ruby-comment cmt"># This will store the fields of a record</span>
757
+ 98: <span class="ruby-identifier">fields</span> = []
758
+ 99: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span>
759
+ 100: <span class="ruby-keyword kw">redo</span>
760
+ 101: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfField</span>
761
+ 102: <span class="ruby-identifier">field</span> = <span class="ruby-value str">''</span>
762
+ 103: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">false</span>
763
+ 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>
764
+ 105: <span class="ruby-comment cmt"># We've found the start of a quoted field.</span>
765
+ 106: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span>
766
+ 107: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">true</span>
767
+ 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">&quot;\n&quot;</span>
768
+ 109: <span class="ruby-comment cmt"># We've found an empty field</span>
769
+ 110: <span class="ruby-identifier">field</span> = <span class="ruby-keyword kw">nil</span>
770
+ 111: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
771
+ 112: <span class="ruby-keyword kw">redo</span>
772
+ 113: <span class="ruby-keyword kw">else</span>
773
+ 114: <span class="ruby-comment cmt"># We've found the first character of an unquoted field</span>
774
+ 115: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
775
+ 116: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inUnquotedField</span>
776
+ 117: <span class="ruby-keyword kw">end</span>
777
+ 118: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inQuotedField</span>
778
+ 119: <span class="ruby-comment cmt"># We are processing the content of a quoted field</span>
779
+ 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>
780
+ 121: <span class="ruby-comment cmt"># This could be then end of the field or a quoted quote.</span>
781
+ 122: <span class="ruby-identifier">state</span> = <span class="ruby-value">:quoteInQuotedField</span>
782
+ 123: <span class="ruby-keyword kw">else</span>
783
+ 124: <span class="ruby-comment cmt"># We've found a normal character of the quoted field</span>
784
+ 125: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
785
+ 126: <span class="ruby-keyword kw">end</span>
786
+ 127: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:quoteInQuotedField</span>
787
+ 128: <span class="ruby-comment cmt"># We are processing a quoted quote or the end of a quoted field</span>
788
+ 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>
789
+ 130: <span class="ruby-comment cmt"># We've found a quoted quote</span>
790
+ 131: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
791
+ 132: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span>
792
+ 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">&quot;\n&quot;</span>
793
+ 134: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
794
+ 135: <span class="ruby-keyword kw">redo</span>
795
+ 136: <span class="ruby-keyword kw">else</span>
796
+ 137: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unexpected character #{c} in CSV&quot;</span>
797
+ 138: <span class="ruby-keyword kw">end</span>
798
+ 139: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inUnquotedField</span>
799
+ 140: <span class="ruby-comment cmt"># We are processing an unquoted field</span>
800
+ 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">&quot;\n&quot;</span>
801
+ 142: <span class="ruby-comment cmt"># We've found the end of a unquoted field</span>
802
+ 143: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
803
+ 144: <span class="ruby-keyword kw">redo</span>
804
+ 145: <span class="ruby-keyword kw">else</span>
805
+ 146: <span class="ruby-comment cmt"># A normal character of an unquoted field</span>
806
+ 147: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
807
+ 148: <span class="ruby-keyword kw">end</span>
808
+ 149: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:fieldEnd</span>
809
+ 150: <span class="ruby-comment cmt"># We've completed processing a field. Add the field to the list of</span>
810
+ 151: <span class="ruby-comment cmt"># fields. Convert Fixnums and Floats in native types.</span>
811
+ 152: <span class="ruby-identifier">fields</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>)
812
+ 153:
813
+ 154: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
814
+ 155: <span class="ruby-comment cmt"># The field end is an end of a record as well.</span>
815
+ 156: <span class="ruby-identifier">state</span> = <span class="ruby-value">:recordEnd</span>
816
+ 157: <span class="ruby-keyword kw">redo</span>
817
+ 158: <span class="ruby-keyword kw">else</span>
818
+ 159: <span class="ruby-comment cmt"># Get the next field.</span>
819
+ 160: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span>
820
+ 161: <span class="ruby-keyword kw">end</span>
821
+ 162: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:recordEnd</span>
822
+ 163: <span class="ruby-comment cmt"># We've found the end of a record. Add fields to the @data</span>
823
+ 164: <span class="ruby-comment cmt"># structure.</span>
824
+ 165: <span class="ruby-ivar">@data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">fields</span>
825
+ 166: <span class="ruby-comment cmt"># Look for a new record.</span>
826
+ 167: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span>
827
+ 168: <span class="ruby-keyword kw">else</span>
828
+ 169: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown state #{state}&quot;</span>
829
+ 170: <span class="ruby-keyword kw">end</span>
830
+ 171: <span class="ruby-keyword kw">end</span>
831
+ 172:
832
+ 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>
833
+ 174: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;CSV state machine error in state #{state}&quot;</span>
834
+ 175: <span class="ruby-keyword kw">end</span>
835
+ 176:
836
+ 177: <span class="ruby-ivar">@data</span>
837
+ 178: <span class="ruby-keyword kw">end</span></pre>
832
838
  </div>
833
839
 
834
840
  </div>
@@ -863,19 +869,19 @@ Read the data as Array of Arrays from a CSV formated file
863
869
  <div class="method-source-code"
864
870
  id="read-source">
865
871
  <pre>
866
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 51</span>
867
- 51: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span>(<span class="ruby-identifier">fileName</span>)
868
- 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>)
869
- 53: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdin</span>
870
- 54: <span class="ruby-keyword kw">else</span>
871
- 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>)
872
- 56: <span class="ruby-keyword kw">end</span>
873
- 57:
874
- 58: <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">file</span>.<span class="ruby-identifier">read</span>)
875
- 59:
876
- 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>
877
- 61: <span class="ruby-ivar">@data</span>
878
- 62: <span class="ruby-keyword kw">end</span></pre>
872
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 52</span>
873
+ 52: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span>(<span class="ruby-identifier">fileName</span>)
874
+ 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>)
875
+ 54: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdin</span>
876
+ 55: <span class="ruby-keyword kw">else</span>
877
+ 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>)
878
+ 57: <span class="ruby-keyword kw">end</span>
879
+ 58:
880
+ 59: <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">file</span>.<span class="ruby-identifier">read</span>)
881
+ 60:
882
+ 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>
883
+ 62: <span class="ruby-ivar">@data</span>
884
+ 63: <span class="ruby-keyword kw">end</span></pre>
879
885
  </div>
880
886
 
881
887
  </div>
@@ -909,24 +915,24 @@ href="../String.html">String</a>.
909
915
  <div class="method-source-code"
910
916
  id="to-s-source">
911
917
  <pre>
912
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 65</span>
913
- 65: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
914
- 66: <span class="ruby-identifier">s</span> = <span class="ruby-value str">''</span>
915
- 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>
916
- 68: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
917
- 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>
918
- 70: <span class="ruby-comment cmt"># Don't output a separator before the first field of the line.</span>
919
- 71: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
920
- 72: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
921
- 73: <span class="ruby-keyword kw">else</span>
922
- 74: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@separator</span>
923
- 75: <span class="ruby-keyword kw">end</span>
924
- 76: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
925
- 77: <span class="ruby-keyword kw">end</span>
926
- 78: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n&quot;</span>
927
- 79: <span class="ruby-keyword kw">end</span>
928
- 80: <span class="ruby-identifier">s</span>
929
- 81: <span class="ruby-keyword kw">end</span></pre>
918
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 66</span>
919
+ 66: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
920
+ 67: <span class="ruby-identifier">s</span> = <span class="ruby-value str">''</span>
921
+ 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>
922
+ 69: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
923
+ 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>
924
+ 71: <span class="ruby-comment cmt"># Don't output a separator before the first field of the line.</span>
925
+ 72: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
926
+ 73: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
927
+ 74: <span class="ruby-keyword kw">else</span>
928
+ 75: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@separator</span>
929
+ 76: <span class="ruby-keyword kw">end</span>
930
+ 77: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
931
+ 78: <span class="ruby-keyword kw">end</span>
932
+ 79: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n&quot;</span>
933
+ 80: <span class="ruby-keyword kw">end</span>
934
+ 81: <span class="ruby-identifier">s</span>
935
+ 82: <span class="ruby-keyword kw">end</span></pre>
930
936
  </div>
931
937
 
932
938
  </div>
@@ -960,18 +966,18 @@ Use this function to write the table into a CSV file <tt>fileName</tt>.
960
966
  <div class="method-source-code"
961
967
  id="write-source">
962
968
  <pre>
963
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 37</span>
964
- 37: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
965
- 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>)
966
- 39: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdout</span>
967
- 40: <span class="ruby-keyword kw">else</span>
968
- 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>)
969
- 42: <span class="ruby-keyword kw">end</span>
970
- 43:
971
- 44: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">to_s</span>)
972
- 45:
973
- 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>
974
- 47: <span class="ruby-keyword kw">end</span></pre>
969
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 38</span>
970
+ 38: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
971
+ 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>)
972
+ 40: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdout</span>
973
+ 41: <span class="ruby-keyword kw">else</span>
974
+ 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>)
975
+ 43: <span class="ruby-keyword kw">end</span>
976
+ 44:
977
+ 45: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">to_s</span>)
978
+ 46:
979
+ 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>
980
+ 48: <span class="ruby-keyword kw">end</span></pre>
975
981
  </div>
976
982
 
977
983
  </div>
@@ -1011,20 +1017,20 @@ contained in the <tt>field</tt>.
1011
1017
  <div class="method-source-code"
1012
1018
  id="marshal-source">
1013
1019
  <pre>
1014
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 201</span>
1015
- 201: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
1016
- 202: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span>
1017
- 203: <span class="ruby-value str">''</span>
1018
- 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>)
1019
- 205: <span class="ruby-comment cmt"># Numbers don't have to be quoted.</span>
1020
- 206: <span class="ruby-identifier">field</span>.<span class="ruby-identifier">to_s</span>
1021
- 207: <span class="ruby-keyword kw">else</span>
1022
- 208: <span class="ruby-comment cmt"># Duplicate quote characters.</span>
1023
- 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">&quot;#{@quote * 2}&quot;</span>)
1024
- 210: <span class="ruby-comment cmt"># Enclose the field in quote characters</span>
1025
- 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>
1026
- 212: <span class="ruby-keyword kw">end</span>
1027
- 213: <span class="ruby-keyword kw">end</span></pre>
1020
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 202</span>
1021
+ 202: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
1022
+ 203: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span>
1023
+ 204: <span class="ruby-value str">''</span>
1024
+ 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>)
1025
+ 206: <span class="ruby-comment cmt"># Numbers don't have to be quoted.</span>
1026
+ 207: <span class="ruby-identifier">field</span>.<span class="ruby-identifier">to_s</span>
1027
+ 208: <span class="ruby-keyword kw">else</span>
1028
+ 209: <span class="ruby-comment cmt"># Duplicate quote characters.</span>
1029
+ 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">&quot;#{@quote * 2}&quot;</span>)
1030
+ 211: <span class="ruby-comment cmt"># Enclose the field in quote characters</span>
1031
+ 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>
1032
+ 213: <span class="ruby-keyword kw">end</span>
1033
+ 214: <span class="ruby-keyword kw">end</span></pre>
1028
1034
  </div>
1029
1035
 
1030
1036
  </div>
@@ -1059,16 +1065,16 @@ href="../String.html">String</a>.
1059
1065
  <div class="method-source-code"
1060
1066
  id="un-arshal-source">
1061
1067
  <pre>
1062
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 217</span>
1063
- 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>)
1064
- 218: <span class="ruby-comment cmt"># Quoted Strings and nil are returned verbatim.</span>
1065
- 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>
1066
- 220: <span class="ruby-identifier">field</span>
1067
- 221: <span class="ruby-keyword kw">else</span>
1068
- 222: <span class="ruby-comment cmt"># Unquoted fields are inspected for special types</span>
1069
- 223: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">field</span>)
1070
- 224: <span class="ruby-keyword kw">end</span>
1071
- 225: <span class="ruby-keyword kw">end</span></pre>
1068
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 218</span>
1069
+ 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>)
1070
+ 219: <span class="ruby-comment cmt"># Quoted Strings and nil are returned verbatim.</span>
1071
+ 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>
1072
+ 221: <span class="ruby-identifier">field</span>
1073
+ 222: <span class="ruby-keyword kw">else</span>
1074
+ 223: <span class="ruby-comment cmt"># Unquoted fields are inspected for special types</span>
1075
+ 224: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">field</span>)
1076
+ 225: <span class="ruby-keyword kw">end</span>
1077
+ 226: <span class="ruby-keyword kw">end</span></pre>
1072
1078
  </div>
1073
1079
 
1074
1080
  </div>