taskjuggler 0.0.5 → 0.0.6

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 (544) hide show
  1. data/CHANGELOG +2086 -0
  2. data/benchmarks/666tasks.tjp +3183 -0
  3. data/benchmarks/booking.tjp +14 -10
  4. data/doc/AppConfig.html +95 -73
  5. data/doc/Arguments.html +22 -2
  6. data/doc/CHANGELOG.html +2587 -0
  7. data/doc/COPYING.html +21 -1
  8. data/doc/Object.html +161 -122
  9. data/doc/README.html +21 -1
  10. data/doc/RuntimeConfig.html +26 -6
  11. data/doc/String.html +38 -18
  12. data/doc/StringIO.html +579 -0
  13. data/doc/TaskJuggler.html +251 -143
  14. data/doc/TaskJuggler/Account.html +26 -6
  15. data/doc/TaskJuggler/AccountAttribute.html +28 -8
  16. data/doc/TaskJuggler/AccountScenario.html +24 -4
  17. data/doc/TaskJuggler/Allocation.html +30 -10
  18. data/doc/TaskJuggler/AllocationAttribute.html +28 -8
  19. data/doc/TaskJuggler/AttributeBase.html +46 -26
  20. data/doc/TaskJuggler/AttributeDefinition.html +22 -2
  21. data/doc/TaskJuggler/BatchProcessor.html +40 -20
  22. data/doc/TaskJuggler/Booking.html +26 -6
  23. data/doc/TaskJuggler/BookingListAttribute.html +28 -8
  24. data/doc/TaskJuggler/BooleanAttribute.html +28 -8
  25. data/doc/TaskJuggler/CSVFile.html +308 -146
  26. data/doc/TaskJuggler/CellSettingPattern.html +22 -2
  27. data/doc/TaskJuggler/CellSettingPatternList.html +26 -6
  28. data/doc/TaskJuggler/Charge.html +26 -6
  29. data/doc/TaskJuggler/ChargeListAttribute.html +26 -6
  30. data/doc/TaskJuggler/ChargeSet.html +33 -13
  31. data/doc/TaskJuggler/ChargeSetListAttribute.html +28 -8
  32. data/doc/TaskJuggler/ColumnListAttribute.html +26 -6
  33. data/doc/TaskJuggler/ColumnTable.html +24 -4
  34. data/doc/TaskJuggler/Daemon.html +26 -6
  35. data/doc/TaskJuggler/DateAttribute.html +26 -6
  36. data/doc/TaskJuggler/DefinitionListAttribute.html +22 -2
  37. data/doc/TaskJuggler/DependencyListAttribute.html +28 -8
  38. data/doc/TaskJuggler/DurationAttribute.html +28 -8
  39. data/doc/TaskJuggler/FixnumAttribute.html +24 -4
  40. data/doc/TaskJuggler/FlagListAttribute.html +28 -8
  41. data/doc/TaskJuggler/FloatAttribute.html +26 -6
  42. data/doc/TaskJuggler/FormatListAttribute.html +24 -4
  43. data/doc/TaskJuggler/GanttChart.html +147 -126
  44. data/doc/TaskJuggler/GanttContainer.html +34 -14
  45. data/doc/TaskJuggler/GanttHeader.html +28 -8
  46. data/doc/TaskJuggler/GanttHeaderScaleItem.html +24 -4
  47. data/doc/TaskJuggler/GanttLine.html +38 -18
  48. data/doc/TaskJuggler/GanttLoadStack.html +26 -6
  49. data/doc/TaskJuggler/GanttMilestone.html +34 -14
  50. data/doc/TaskJuggler/GanttRouter.html +50 -30
  51. data/doc/TaskJuggler/GanttTaskBar.html +34 -14
  52. data/doc/TaskJuggler/HTMLDocument.html +26 -6
  53. data/doc/TaskJuggler/HTMLGraphics.html +30 -10
  54. data/doc/TaskJuggler/Interval.html +40 -22
  55. data/doc/TaskJuggler/IntervalListAttribute.html +28 -8
  56. data/doc/TaskJuggler/JobInfo.html +24 -4
  57. data/doc/TaskJuggler/Journal.html +226 -147
  58. data/doc/TaskJuggler/JournalEntry.html +22 -2
  59. data/doc/TaskJuggler/JournalEntryList.html +129 -112
  60. data/doc/TaskJuggler/KeywordArray.html +26 -6
  61. data/doc/TaskJuggler/KeywordDocumentation.html +46 -26
  62. data/doc/TaskJuggler/Limits.html +152 -123
  63. data/doc/TaskJuggler/Limits/Limit.html +149 -70
  64. data/doc/TaskJuggler/LimitsAttribute.html +36 -51
  65. data/doc/TaskJuggler/ListAttributeBase.html +24 -4
  66. data/doc/TaskJuggler/Log.html +50 -32
  67. data/doc/TaskJuggler/LogFile.html +37 -17
  68. data/doc/TaskJuggler/LogicalAttribute.html +53 -33
  69. data/doc/TaskJuggler/LogicalExpression.html +26 -6
  70. data/doc/TaskJuggler/LogicalExpressionAttribute.html +32 -12
  71. data/doc/TaskJuggler/LogicalFlag.html +42 -22
  72. data/doc/TaskJuggler/LogicalFunction.html +204 -140
  73. data/doc/TaskJuggler/LogicalOperation.html +135 -111
  74. data/doc/TaskJuggler/Macro.html +22 -2
  75. data/doc/TaskJuggler/MacroParser.html +32 -12
  76. data/doc/TaskJuggler/MacroTable.html +32 -12
  77. data/doc/TaskJuggler/ManagerResponsibilities.html +24 -4
  78. data/doc/TaskJuggler/ManagerStatusRecord.html +24 -4
  79. data/doc/TaskJuggler/Message.html +24 -4
  80. data/doc/TaskJuggler/MessageHandler.html +24 -4
  81. data/doc/TaskJuggler/Navigator.html +104 -71
  82. data/doc/TaskJuggler/NavigatorElement.html +32 -12
  83. data/doc/TaskJuggler/NikuProject.html +22 -2
  84. data/doc/TaskJuggler/NikuReport.html +310 -228
  85. data/doc/TaskJuggler/NikuResource.html +22 -2
  86. data/doc/TaskJuggler/NodeListAttribute.html +615 -0
  87. data/doc/TaskJuggler/OnShiftCache.html +32 -12
  88. data/doc/TaskJuggler/ProcessIntercom.html +205 -78
  89. data/doc/TaskJuggler/ProcessIntercomIface.html +26 -6
  90. data/doc/TaskJuggler/Project.html +708 -660
  91. data/doc/TaskJuggler/ProjectBroker.html +506 -304
  92. data/doc/TaskJuggler/ProjectBrokerIface.html +61 -41
  93. data/doc/TaskJuggler/ProjectFileParser.html +429 -373
  94. data/doc/TaskJuggler/ProjectFileScanner.html +1790 -0
  95. data/doc/TaskJuggler/ProjectRecord.html +80 -60
  96. data/doc/TaskJuggler/ProjectServer.html +312 -237
  97. data/doc/TaskJuggler/ProjectServerIface.html +101 -43
  98. data/doc/TaskJuggler/PropertyAttribute.html +32 -12
  99. data/doc/TaskJuggler/PropertyList.html +166 -145
  100. data/doc/TaskJuggler/PropertySet.html +254 -224
  101. data/doc/TaskJuggler/PropertyTreeNode.html +670 -536
  102. data/doc/TaskJuggler/Query.html +169 -148
  103. data/doc/TaskJuggler/RTFHandlers.html +622 -0
  104. data/doc/TaskJuggler/RTFNavigator.html +28 -8
  105. data/doc/TaskJuggler/RTFQuery.html +40 -20
  106. data/doc/TaskJuggler/RTFReport.html +62 -25
  107. data/doc/TaskJuggler/RTFReportLink.html +765 -0
  108. data/doc/TaskJuggler/RealFormat.html +26 -6
  109. data/doc/TaskJuggler/RealFormatAttribute.html +26 -6
  110. data/doc/TaskJuggler/ReferenceAttribute.html +59 -39
  111. data/doc/TaskJuggler/Report.html +402 -251
  112. data/doc/TaskJuggler/ReportBase.html +162 -137
  113. data/doc/TaskJuggler/ReportContext.html +112 -29
  114. data/doc/TaskJuggler/ReportServer.html +89 -64
  115. data/doc/TaskJuggler/ReportServerIface.html +75 -55
  116. data/doc/TaskJuggler/ReportServerRecord.html +54 -31
  117. data/doc/TaskJuggler/ReportServlet.html +980 -0
  118. data/doc/TaskJuggler/ReportTable.html +41 -21
  119. data/doc/TaskJuggler/ReportTableCell.html +214 -170
  120. data/doc/TaskJuggler/ReportTableColumn.html +30 -10
  121. data/doc/TaskJuggler/ReportTableLegend.html +36 -16
  122. data/doc/TaskJuggler/ReportTableLine.html +32 -12
  123. data/doc/TaskJuggler/Resource.html +99 -87
  124. data/doc/TaskJuggler/ResourceListAttribute.html +59 -39
  125. data/doc/TaskJuggler/ResourceListRE.html +47 -26
  126. data/doc/TaskJuggler/ResourceScenario.html +403 -437
  127. data/doc/TaskJuggler/RichText.html +26 -6
  128. data/doc/TaskJuggler/RichTextAttribute.html +50 -30
  129. data/doc/TaskJuggler/RichTextDocument.html +37 -17
  130. data/doc/TaskJuggler/RichTextElement.html +475 -413
  131. data/doc/TaskJuggler/RichTextException.html +22 -2
  132. data/doc/TaskJuggler/RichTextFunctionExample.html +28 -8
  133. data/doc/TaskJuggler/RichTextFunctionHandler.html +24 -4
  134. data/doc/TaskJuggler/RichTextImage.html +22 -2
  135. data/doc/TaskJuggler/RichTextIntermediate.html +38 -18
  136. data/doc/TaskJuggler/RichTextParser.html +56 -34
  137. data/doc/TaskJuggler/RichTextScanner.html +82 -61
  138. data/doc/TaskJuggler/RichTextSnip.html +34 -14
  139. data/doc/TaskJuggler/RichTextSyntaxRules.html +507 -353
  140. data/doc/TaskJuggler/Scenario.html +22 -2
  141. data/doc/TaskJuggler/ScenarioData.html +30 -46
  142. data/doc/TaskJuggler/ScenarioListAttribute.html +38 -18
  143. data/doc/TaskJuggler/Scoreboard.html +42 -22
  144. data/doc/TaskJuggler/SheetHandlerBase.html +40 -20
  145. data/doc/TaskJuggler/SheetReceiver.html +333 -295
  146. data/doc/TaskJuggler/SheetSender.html +253 -230
  147. data/doc/TaskJuggler/Shift.html +26 -6
  148. data/doc/TaskJuggler/ShiftAssignment.html +89 -73
  149. data/doc/TaskJuggler/ShiftAssignments.html +226 -234
  150. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +39 -54
  151. data/doc/TaskJuggler/ShiftScenario.html +28 -8
  152. data/doc/TaskJuggler/SortListAttribute.html +34 -14
  153. data/doc/TaskJuggler/SourceFileInfo.html +24 -4
  154. data/doc/TaskJuggler/StatusSheetReceiver.html +24 -3
  155. data/doc/TaskJuggler/StatusSheetReport.html +168 -153
  156. data/doc/TaskJuggler/StatusSheetSender.html +24 -3
  157. data/doc/TaskJuggler/StringAttribute.html +38 -18
  158. data/doc/TaskJuggler/SymbolAttribute.html +32 -12
  159. data/doc/TaskJuggler/SyntaxReference.html +40 -20
  160. data/doc/TaskJuggler/TOCEntry.html +26 -6
  161. data/doc/TaskJuggler/TSResourceRecord.html +22 -2
  162. data/doc/TaskJuggler/TSTaskRecord.html +22 -2
  163. data/doc/TaskJuggler/TableColumnDefinition.html +59 -22
  164. data/doc/TaskJuggler/TableOfContents.html +26 -6
  165. data/doc/TaskJuggler/TableReport.html +937 -904
  166. data/doc/TaskJuggler/Task.html +55 -36
  167. data/doc/TaskJuggler/TaskDependency.html +24 -4
  168. data/doc/TaskJuggler/TaskListAttribute.html +50 -30
  169. data/doc/TaskJuggler/TaskListRE.html +27 -7
  170. data/doc/TaskJuggler/TaskScenario.html +1273 -1153
  171. data/doc/TaskJuggler/TextFormatter.html +28 -8
  172. data/doc/TaskJuggler/TextParser.html +585 -338
  173. data/doc/TaskJuggler/TextParser/Pattern.html +54 -34
  174. data/doc/TaskJuggler/TextParser/Rule.html +95 -73
  175. data/doc/TaskJuggler/TextParser/StackElement.html +39 -17
  176. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +24 -4
  177. data/doc/TaskJuggler/TextParser/TokenDoc.html +22 -2
  178. data/doc/TaskJuggler/TextReport.html +28 -8
  179. data/doc/TaskJuggler/TextScanner.html +400 -1404
  180. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +28 -240
  181. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +37 -184
  182. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +682 -0
  183. data/doc/TaskJuggler/TextScanner/StreamHandle.html +342 -67
  184. data/doc/TaskJuggler/TimeSheet.html +48 -28
  185. data/doc/TaskJuggler/TimeSheetReceiver.html +24 -3
  186. data/doc/TaskJuggler/TimeSheetRecord.html +47 -27
  187. data/doc/TaskJuggler/TimeSheetReport.html +154 -133
  188. data/doc/TaskJuggler/TimeSheetSender.html +24 -3
  189. data/doc/TaskJuggler/TimeSheetSummary.html +137 -91
  190. data/doc/TaskJuggler/TimeSheets.html +26 -6
  191. data/doc/TaskJuggler/Tj3AppBase.html +85 -58
  192. data/doc/TaskJuggler/Tj3Client.html +292 -238
  193. data/doc/TaskJuggler/Tj3Daemon.html +159 -74
  194. data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -6
  195. data/doc/TaskJuggler/Tj3SsReceiver.html +26 -6
  196. data/doc/TaskJuggler/Tj3SsSender.html +53 -26
  197. data/doc/TaskJuggler/Tj3TsReceiver.html +28 -7
  198. data/doc/TaskJuggler/Tj3TsSender.html +26 -6
  199. data/doc/TaskJuggler/Tj3TsSummary.html +26 -6
  200. data/doc/TaskJuggler/TjException.html +22 -2
  201. data/doc/TaskJuggler/TjTime.html +216 -160
  202. data/doc/TaskJuggler/TjpExample.html +34 -14
  203. data/doc/TaskJuggler/TjpExportRE.html +403 -407
  204. data/doc/TaskJuggler/TjpSyntaxRules.html +4805 -4408
  205. data/doc/TaskJuggler/URLParameter.html +649 -0
  206. data/doc/TaskJuggler/UserManual.html +42 -22
  207. data/doc/TaskJuggler/WebServer.html +702 -0
  208. data/doc/TaskJuggler/WorkingHours.html +38 -18
  209. data/doc/TaskJuggler/WorkingHoursAttribute.html +61 -41
  210. data/doc/TaskJuggler/XMLBlob.html +24 -4
  211. data/doc/TaskJuggler/XMLComment.html +24 -4
  212. data/doc/TaskJuggler/XMLDocument.html +30 -10
  213. data/doc/TaskJuggler/XMLElement.html +34 -14
  214. data/doc/TaskJuggler/XMLNamedText.html +22 -2
  215. data/doc/TaskJuggler/XMLText.html +24 -4
  216. data/doc/index.html +1841 -1666
  217. data/doc/lib/AccountScenario_rb.html +1 -1
  218. data/doc/lib/Account_rb.html +1 -1
  219. data/doc/lib/Allocation_rb.html +1 -1
  220. data/doc/lib/AppConfig_rb.html +2 -2
  221. data/doc/lib/AttributeBase_rb.html +1 -1
  222. data/doc/lib/AttributeDefinition_rb.html +1 -1
  223. data/doc/lib/Attributes_rb.html +2 -2
  224. data/doc/lib/BatchProcessor_rb.html +1 -1
  225. data/doc/lib/Booking_rb.html +1 -1
  226. data/doc/lib/ChargeSet_rb.html +1 -1
  227. data/doc/lib/Charge_rb.html +1 -1
  228. data/doc/lib/HTMLDocument_rb.html +1 -1
  229. data/doc/lib/Interval_rb.html +1 -1
  230. data/doc/lib/Journal_rb.html +2 -2
  231. data/doc/lib/KeywordArray_rb.html +1 -1
  232. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  233. data/doc/lib/Limits_rb.html +2 -2
  234. data/doc/lib/LogFile_rb.html +2 -2
  235. data/doc/lib/Log_rb.html +1 -1
  236. data/doc/lib/LogicalExpression_rb.html +1 -1
  237. data/doc/lib/LogicalFunction_rb.html +2 -2
  238. data/doc/lib/LogicalOperation_rb.html +2 -2
  239. data/doc/lib/MacroParser_rb.html +1 -1
  240. data/doc/lib/MacroTable_rb.html +1 -1
  241. data/doc/lib/MessageHandler_rb.html +1 -1
  242. data/doc/lib/Message_rb.html +1 -1
  243. data/doc/lib/ProjectFileParser_rb.html +4 -8
  244. data/doc/lib/ProjectFileScanner_rb.html +67 -0
  245. data/doc/lib/Project_rb.html +2 -2
  246. data/doc/lib/PropertyList_rb.html +2 -2
  247. data/doc/lib/PropertySet_rb.html +2 -2
  248. data/doc/lib/PropertyTreeNode_rb.html +2 -2
  249. data/doc/lib/Query_rb.html +2 -2
  250. data/doc/lib/RTFHandlers_rb.html +73 -0
  251. data/doc/lib/RTFNavigator_rb.html +1 -1
  252. data/doc/lib/RTFQuery_rb.html +1 -1
  253. data/doc/lib/RTFReportLink_rb.html +71 -0
  254. data/doc/lib/RTFReport_rb.html +2 -2
  255. data/doc/lib/RealFormat_rb.html +1 -1
  256. data/doc/lib/ResourceScenario_rb.html +2 -2
  257. data/doc/lib/Resource_rb.html +2 -2
  258. data/doc/lib/RichTextDocument_rb.html +1 -1
  259. data/doc/lib/RichTextElement_rb.html +2 -2
  260. data/doc/lib/RichTextFunctionExample_rb.html +1 -1
  261. data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
  262. data/doc/lib/RichTextParser_rb.html +2 -2
  263. data/doc/lib/RichTextScanner_rb.html +2 -2
  264. data/doc/lib/RichTextSnip_rb.html +1 -1
  265. data/doc/lib/RichTextSyntaxRules_rb.html +2 -2
  266. data/doc/lib/RichText_rb.html +1 -1
  267. data/doc/lib/RuntimeConfig_rb.html +1 -1
  268. data/doc/lib/ScenarioData_rb.html +2 -2
  269. data/doc/lib/Scenario_rb.html +1 -1
  270. data/doc/lib/Scoreboard_rb.html +1 -1
  271. data/doc/lib/SheetHandlerBase_rb.html +1 -1
  272. data/doc/lib/SheetReceiver_rb.html +2 -2
  273. data/doc/lib/SheetSender_rb.html +4 -2
  274. data/doc/lib/ShiftAssignments_rb.html +4 -2
  275. data/doc/lib/ShiftScenario_rb.html +1 -1
  276. data/doc/lib/Shift_rb.html +1 -1
  277. data/doc/lib/SourceFileInfo_rb.html +1 -1
  278. data/doc/lib/StatusSheetReceiver_rb.html +2 -2
  279. data/doc/lib/StatusSheetSender_rb.html +2 -2
  280. data/doc/lib/SyntaxReference_rb.html +1 -1
  281. data/doc/lib/TOCEntry_rb.html +1 -1
  282. data/doc/lib/TableColumnDefinition_rb.html +2 -2
  283. data/doc/lib/TableOfContents_rb.html +1 -1
  284. data/doc/lib/TaskDependency_rb.html +1 -1
  285. data/doc/lib/TaskJuggler_rb.html +2 -2
  286. data/doc/lib/TaskScenario_rb.html +2 -2
  287. data/doc/lib/Task_rb.html +2 -2
  288. data/doc/lib/TextFormatter_rb.html +1 -1
  289. data/doc/lib/TextParser/Pattern_rb.html +1 -1
  290. data/doc/lib/TextParser/Rule_rb.html +2 -2
  291. data/doc/lib/TextParser/StackElement_rb.html +2 -2
  292. data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
  293. data/doc/lib/TextParser_rb.html +2 -2
  294. data/doc/lib/TextScanner_rb.html +6 -2
  295. data/doc/lib/TimeSheetReceiver_rb.html +2 -2
  296. data/doc/lib/TimeSheetSender_rb.html +2 -2
  297. data/doc/lib/TimeSheetSummary_rb.html +2 -2
  298. data/doc/lib/TimeSheets_rb.html +2 -2
  299. data/doc/lib/Tj3AppBase_rb.html +2 -2
  300. data/doc/lib/Tj3Config_rb.html +2 -2
  301. data/doc/lib/Tj3SheetAppBase_rb.html +2 -2
  302. data/doc/lib/TjException_rb.html +1 -1
  303. data/doc/lib/TjTime_rb.html +2 -2
  304. data/doc/lib/TjpExample_rb.html +1 -1
  305. data/doc/lib/TjpSyntaxRules_rb.html +2 -2
  306. data/doc/lib/URLParameter_rb.html +67 -0
  307. data/doc/lib/UTF8String_rb.html +1 -1
  308. data/doc/lib/UserManual_rb.html +1 -1
  309. data/doc/lib/WorkingHours_rb.html +1 -1
  310. data/doc/lib/XMLDocument_rb.html +2 -2
  311. data/doc/lib/XMLElement_rb.html +1 -1
  312. data/doc/lib/daemon/Daemon_rb.html +1 -1
  313. data/doc/lib/daemon/ProcessIntercom_rb.html +2 -2
  314. data/doc/lib/daemon/ProjectBroker_rb.html +4 -2
  315. data/doc/lib/daemon/ProjectServer_rb.html +2 -2
  316. data/doc/lib/daemon/ReportServer_rb.html +2 -2
  317. data/doc/lib/daemon/WebServer_rb.html +75 -0
  318. data/doc/lib/deep_copy_rb.html +2 -2
  319. data/doc/lib/reports/CSVFile_rb.html +2 -2
  320. data/doc/lib/reports/ColumnTable_rb.html +1 -1
  321. data/doc/lib/reports/GanttChart_rb.html +2 -2
  322. data/doc/lib/reports/GanttContainer_rb.html +1 -1
  323. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  324. data/doc/lib/reports/GanttHeader_rb.html +1 -1
  325. data/doc/lib/reports/GanttLine_rb.html +1 -1
  326. data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
  327. data/doc/lib/reports/GanttMilestone_rb.html +1 -1
  328. data/doc/lib/reports/GanttRouter_rb.html +1 -1
  329. data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
  330. data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
  331. data/doc/lib/reports/Navigator_rb.html +2 -2
  332. data/doc/lib/reports/NikuReport_rb.html +2 -2
  333. data/doc/lib/reports/ReportBase_rb.html +2 -2
  334. data/doc/lib/reports/ReportContext_rb.html +2 -2
  335. data/doc/lib/reports/ReportTableCell_rb.html +2 -2
  336. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  337. data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
  338. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  339. data/doc/lib/reports/ReportTable_rb.html +2 -2
  340. data/doc/lib/reports/Report_rb.html +2 -2
  341. data/doc/lib/reports/ResourceListRE_rb.html +2 -2
  342. data/doc/lib/reports/StatusSheetReport_rb.html +2 -2
  343. data/doc/lib/reports/TableReport_rb.html +2 -2
  344. data/doc/lib/reports/TaskListRE_rb.html +2 -2
  345. data/doc/lib/reports/TextReport_rb.html +1 -1
  346. data/doc/lib/reports/TimeSheetReport_rb.html +2 -2
  347. data/doc/lib/reports/TjpExportRE_rb.html +2 -2
  348. data/doc/lib/ruby-signal-bug_rb.html +1 -1
  349. data/doc/lib/taskjuggler3_rb.html +2 -2
  350. data/doc/lib/tj3client_rb.html +2 -2
  351. data/doc/lib/tj3d_rb.html +2 -2
  352. data/doc/lib/tj3man_rb.html +1 -1
  353. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  354. data/doc/lib/tj3ss_sender_rb.html +2 -2
  355. data/doc/lib/tj3ts_receiver_rb.html +2 -2
  356. data/doc/lib/tj3ts_sender_rb.html +1 -1
  357. data/doc/lib/tj3ts_summary_rb.html +1 -1
  358. data/doc/rdoc.css +9 -4
  359. data/examples/tutorial.tjp +17 -15
  360. data/gem_spec.rb +3 -0
  361. data/lib/AppConfig.rb +3 -1
  362. data/lib/Attributes.rb +10 -8
  363. data/lib/Journal.rb +55 -20
  364. data/lib/Limits.rb +72 -46
  365. data/lib/LogFile.rb +3 -3
  366. data/lib/LogicalFunction.rb +19 -6
  367. data/lib/LogicalOperation.rb +5 -1
  368. data/lib/Project.rb +37 -9
  369. data/lib/ProjectFileParser.rb +25 -22
  370. data/lib/ProjectFileScanner.rb +365 -0
  371. data/lib/PropertyList.rb +2 -1
  372. data/lib/PropertySet.rb +14 -4
  373. data/lib/PropertyTreeNode.rb +42 -29
  374. data/lib/Query.rb +3 -1
  375. data/lib/RTFHandlers.rb +35 -0
  376. data/lib/RTFReport.rb +23 -6
  377. data/lib/RTFReportLink.rb +72 -0
  378. data/lib/Resource.rb +8 -16
  379. data/lib/ResourceScenario.rb +1 -22
  380. data/lib/RichTextElement.rb +42 -0
  381. data/lib/RichTextParser.rb +6 -4
  382. data/lib/RichTextScanner.rb +5 -5
  383. data/lib/RichTextSyntaxRules.rb +48 -10
  384. data/lib/ScenarioData.rb +5 -3
  385. data/lib/SheetReceiver.rb +24 -6
  386. data/lib/SheetSender.rb +17 -13
  387. data/lib/ShiftAssignments.rb +56 -52
  388. data/lib/StatusSheetReceiver.rb +1 -0
  389. data/lib/StatusSheetSender.rb +1 -0
  390. data/lib/TableColumnDefinition.rb +4 -2
  391. data/lib/Task.rb +8 -9
  392. data/lib/TaskJuggler.rb +21 -11
  393. data/lib/TaskScenario.rb +61 -26
  394. data/lib/TextParser.rb +268 -106
  395. data/lib/TextParser/Rule.rb +4 -2
  396. data/lib/TextParser/StackElement.rb +6 -4
  397. data/lib/TextScanner.rb +283 -700
  398. data/lib/TimeSheetReceiver.rb +1 -0
  399. data/lib/TimeSheetSender.rb +1 -0
  400. data/lib/TimeSheetSummary.rb +51 -26
  401. data/lib/TimeSheets.rb +1 -1
  402. data/lib/Tj3AppBase.rb +8 -1
  403. data/lib/Tj3Config.rb +1 -1
  404. data/lib/TjTime.rb +5 -0
  405. data/lib/TjpSyntaxRules.rb +360 -144
  406. data/lib/URLParameter.rb +30 -0
  407. data/lib/XMLDocument.rb +2 -2
  408. data/lib/daemon/ProcessIntercom.rb +50 -9
  409. data/lib/daemon/ProjectBroker.rb +63 -10
  410. data/lib/daemon/ProjectServer.rb +47 -16
  411. data/lib/daemon/ReportServer.rb +9 -4
  412. data/lib/daemon/WebServer.rb +204 -0
  413. data/lib/deep_copy.rb +4 -1
  414. data/lib/reports/CSVFile.rb +150 -66
  415. data/lib/reports/GanttChart.rb +2 -1
  416. data/lib/reports/Navigator.rb +18 -5
  417. data/lib/reports/NikuReport.rb +32 -2
  418. data/lib/reports/Report.rb +65 -37
  419. data/lib/reports/ReportBase.rb +14 -9
  420. data/lib/reports/ReportContext.rb +19 -4
  421. data/lib/reports/ReportTable.rb +2 -2
  422. data/lib/reports/ReportTableCell.rb +54 -30
  423. data/lib/reports/ResourceListRE.rb +4 -3
  424. data/lib/reports/StatusSheetReport.rb +8 -13
  425. data/lib/reports/TableReport.rb +47 -32
  426. data/lib/reports/TaskListRE.rb +3 -3
  427. data/lib/reports/TimeSheetReport.rb +14 -5
  428. data/lib/reports/TjpExportRE.rb +14 -19
  429. data/lib/taskjuggler3.rb +15 -0
  430. data/lib/tj3client.rb +9 -7
  431. data/lib/tj3d.rb +38 -10
  432. data/lib/tj3ss_sender.rb +7 -0
  433. data/lib/tj3ts_receiver.rb +1 -0
  434. data/manual/Day_To_Day_Juggling +1 -1
  435. data/manual/Rich_Text_Attributes +8 -0
  436. data/manual/TaskJuggler_2x_Migration +7 -0
  437. data/manual/The_TaskJuggler_Syntax +20 -6
  438. data/prj_cfg.rb +3 -2
  439. data/tasks/changelog.rake +36 -0
  440. data/tasks/csts.rake +2 -3
  441. data/tasks/gem.rake +10 -0
  442. data/tasks/missing.rake +0 -17
  443. data/test/TestSuite/ReportGenerator/Correct/Journal.html +63 -0
  444. data/test/TestSuite/ReportGenerator/Correct/Journal.tjp +14 -0
  445. data/test/TestSuite/{HTML-Reports/LogicalFunctions.tjp → ReportGenerator/Correct/LogicalFunctions1.tjp} +2 -2
  446. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +3 -0
  447. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.tjp +19 -0
  448. data/test/TestSuite/ReportGenerator/Correct/css/tjmanual.css +66 -0
  449. data/test/TestSuite/ReportGenerator/Correct/css/tjreport.css +407 -0
  450. data/test/TestSuite/ReportGenerator/Correct/icons/details.png +0 -0
  451. data/test/TestSuite/ReportGenerator/Correct/icons/flag-green.png +0 -0
  452. data/test/TestSuite/ReportGenerator/Correct/icons/flag-red.png +0 -0
  453. data/test/TestSuite/ReportGenerator/Correct/icons/flag-yellow.png +0 -0
  454. data/test/TestSuite/ReportGenerator/Correct/icons/resource.png +0 -0
  455. data/test/TestSuite/ReportGenerator/Correct/icons/resourcegroup.png +0 -0
  456. data/test/TestSuite/ReportGenerator/Correct/icons/task.png +0 -0
  457. data/test/TestSuite/ReportGenerator/Correct/icons/taskgroup.png +0 -0
  458. data/test/TestSuite/ReportGenerator/Correct/icons/trend-down.png +0 -0
  459. data/test/TestSuite/ReportGenerator/Correct/icons/trend-flat.png +0 -0
  460. data/test/TestSuite/ReportGenerator/Correct/icons/trend-up.png +0 -0
  461. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +2 -0
  462. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +26 -0
  463. data/test/TestSuite/ReportGenerator/Correct/refs/Journal-1.csv +6 -0
  464. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions1-1.csv +7 -0
  465. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions2-1.csv +2 -0
  466. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +2 -0
  467. data/test/TestSuite/ReportGenerator/Correct/scripts/wz_tooltip.js +1301 -0
  468. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +20 -0
  469. data/test/TestSuite/Scheduler/Correct/Container.html +349 -0
  470. data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -4
  471. data/test/TestSuite/Scheduler/Correct/Shift2.html +464 -150
  472. data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +108 -0
  473. data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +7 -0
  474. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +14 -0
  475. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +233 -21
  476. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +20 -20
  477. data/test/TestSuite/StatusSheetTemplates/project.tji +35 -0
  478. data/test/TestSuite/StatusSheetTemplates/project.tjp +56 -0
  479. data/test/TestSuite/StatusSheets/run +3 -2
  480. data/test/TestSuite/Syntax/Correct/Include.tjp +1 -1
  481. data/test/TestSuite/Syntax/Correct/Macro-1.tjp +1 -1
  482. data/test/TestSuite/Syntax/Correct/Macro-2.tjp +6 -0
  483. data/test/TestSuite/Syntax/Correct/Macro-3.tjp +14 -0
  484. data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +32 -0
  485. data/test/TestSuite/Syntax/Correct/css/tjmanual.css +66 -0
  486. data/test/TestSuite/Syntax/Correct/css/tjreport.css +407 -0
  487. data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
  488. data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
  489. data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
  490. data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
  491. data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
  492. data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
  493. data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
  494. data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
  495. data/test/TestSuite/Syntax/Correct/icons/trend-down.png +0 -0
  496. data/test/TestSuite/Syntax/Correct/icons/trend-flat.png +0 -0
  497. data/test/TestSuite/Syntax/Correct/icons/trend-up.png +0 -0
  498. data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +3 -0
  499. data/test/TestSuite/Syntax/Correct/include/dir1/file5.tji +2 -0
  500. data/test/TestSuite/Syntax/Correct/include/dir3/all.tji +3 -0
  501. data/test/TestSuite/Syntax/Correct/include/dir3/file1.tji +2 -0
  502. data/test/TestSuite/Syntax/Correct/include/dir3/file2.tji +1 -0
  503. data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
  504. data/test/TestSuite/Syntax/Correct/tutorial.tjp +13 -13
  505. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  506. data/test/TestSuite/Syntax/Errors/include_recursion.tjp +1 -0
  507. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +2 -1
  508. data/test/TestSuite/Syntax/Errors/{eof_in_istring1.tjp → no_token_match1.tjp} +2 -2
  509. data/test/TestSuite/Syntax/Errors/{eof_in_istring2.tjp → no_token_match2.tjp} +2 -2
  510. data/test/TestSuite/Syntax/Errors/{eof_in_istring3.tjp → no_token_match3.tjp} +1 -1
  511. data/test/TestSuite/Syntax/Errors/{eof_in_istring4.tjp → no_token_match4.tjp} +1 -1
  512. data/test/TestSuite/Syntax/Errors/{eof_in_istring5.tjp → no_token_match5.tjp} +1 -1
  513. data/test/TestSuite/Syntax/Errors/not_scheduled.tjp +13 -0
  514. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
  515. data/test/TestSuite/TimeSheets/run +5 -5
  516. data/test/test_CSVFile.rb +75 -0
  517. data/test/test_Limits.rb +63 -5
  518. data/test/test_ProjectFileScanner.rb +163 -0
  519. data/test/test_ReportGenerator.rb +81 -0
  520. data/test/test_RichText.rb +21 -3
  521. data/test/test_Scheduler.rb +1 -1
  522. data/test/test_ShiftAssignments.rb +4 -4
  523. data/test/test_Syntax.rb +1 -1
  524. data/test/test_URLParameter.rb +30 -0
  525. metadata +126 -32
  526. data/test/TestSuite/Scheduler/Errors/not_scheduled.tjp +0 -8
  527. data/test/TestSuite/Syntax/Errors/bad_comment.tjp +0 -7
  528. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +0 -36
  529. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +0 -48
  530. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +0 -67
  531. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +0 -67
  532. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +0 -48
  533. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +0 -31
  534. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +0 -36
  535. data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +0 -1
  536. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +0 -1
  537. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +0 -54
  538. data/test/TestSuite/TimeSheets/TimeSheets/all.tji +0 -2
  539. data/test/TestSuite/TimeSheets/receiver.log +0 -102
  540. data/test/TestSuite/TimeSheets/sender.log +0 -794
  541. data/test/TestSuite/TimeSheets/summary.log +0 -884
  542. data/test/TestSuite/TimeSheets/timesheets.log +0 -45
  543. data/test/TestSuite/TimeSheets/tj3d.log +0 -292
  544. data/test/test_TextScanner.rb +0 -95
@@ -69,25 +69,25 @@
69
69
  <h3 class="section-header">Methods</h3>
70
70
  <ul class="link-list">
71
71
 
72
- <li><a href="#M000985">::new</a></li>
72
+ <li><a href="#method-c-new">::new</a></li>
73
73
 
74
- <li><a href="#M000989">#addToScm</a></li>
74
+ <li><a href="#method-i-addToScm">#addToScm</a></li>
75
75
 
76
- <li><a href="#M000986">#cutOut</a></li>
76
+ <li><a href="#method-i-cutOut">#cutOut</a></li>
77
77
 
78
- <li><a href="#M000992">#error</a></li>
78
+ <li><a href="#method-i-error">#error</a></li>
79
79
 
80
- <li><a href="#M000987">#fixLineBreaks</a></li>
80
+ <li><a href="#method-i-fixLineBreaks">#fixLineBreaks</a></li>
81
81
 
82
- <li><a href="#M000990">#info</a></li>
82
+ <li><a href="#method-i-info">#info</a></li>
83
83
 
84
- <li><a href="#M000993">#log</a></li>
84
+ <li><a href="#method-i-log">#log</a></li>
85
85
 
86
- <li><a href="#M000994">#sendEmail</a></li>
86
+ <li><a href="#method-i-sendEmail">#sendEmail</a></li>
87
87
 
88
- <li><a href="#M000988">#setWorkingDir</a></li>
88
+ <li><a href="#method-i-setWorkingDir">#setWorkingDir</a></li>
89
89
 
90
- <li><a href="#M000991">#warning</a></li>
90
+ <li><a href="#method-i-warning">#warning</a></li>
91
91
 
92
92
  </ul>
93
93
  </div>
@@ -104,6 +104,8 @@
104
104
  <h3 class="section-header">Files</h3>
105
105
  <ul>
106
106
 
107
+ <li class="file"><a href="../CHANGELOG.html">CHANGELOG</a></li>
108
+
107
109
  <li class="file"><a href="../COPYING.html">COPYING</a></li>
108
110
 
109
111
  <li class="file"><a href="../README.html">README</a></li>
@@ -273,6 +275,8 @@
273
275
 
274
276
  <li><a href="../TaskJuggler/NikuResource.html">TaskJuggler::NikuResource</a></li>
275
277
 
278
+ <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
279
+
276
280
  <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
277
281
 
278
282
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
@@ -287,6 +291,8 @@
287
291
 
288
292
  <li><a href="../TaskJuggler/ProjectFileParser.html">TaskJuggler::ProjectFileParser</a></li>
289
293
 
294
+ <li><a href="../TaskJuggler/ProjectFileScanner.html">TaskJuggler::ProjectFileScanner</a></li>
295
+
290
296
  <li><a href="../TaskJuggler/ProjectRecord.html">TaskJuggler::ProjectRecord</a></li>
291
297
 
292
298
  <li><a href="../TaskJuggler/ProjectServer.html">TaskJuggler::ProjectServer</a></li>
@@ -303,12 +309,16 @@
303
309
 
304
310
  <li><a href="../TaskJuggler/Query.html">TaskJuggler::Query</a></li>
305
311
 
312
+ <li><a href="../TaskJuggler/RTFHandlers.html">TaskJuggler::RTFHandlers</a></li>
313
+
306
314
  <li><a href="../TaskJuggler/RTFNavigator.html">TaskJuggler::RTFNavigator</a></li>
307
315
 
308
316
  <li><a href="../TaskJuggler/RTFQuery.html">TaskJuggler::RTFQuery</a></li>
309
317
 
310
318
  <li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li>
311
319
 
320
+ <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
321
+
312
322
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
313
323
 
314
324
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -327,6 +337,8 @@
327
337
 
328
338
  <li><a href="../TaskJuggler/ReportServerRecord.html">TaskJuggler::ReportServerRecord</a></li>
329
339
 
340
+ <li><a href="../TaskJuggler/ReportServlet.html">TaskJuggler::ReportServlet</a></li>
341
+
330
342
  <li><a href="../TaskJuggler/ReportTable.html">TaskJuggler::ReportTable</a></li>
331
343
 
332
344
  <li><a href="../TaskJuggler/ReportTableCell.html">TaskJuggler::ReportTableCell</a></li>
@@ -455,6 +467,8 @@
455
467
 
456
468
  <li><a href="../TaskJuggler/TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
457
469
 
470
+ <li><a href="../TaskJuggler/TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
471
+
458
472
  <li><a href="../TaskJuggler/TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
459
473
 
460
474
  <li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
@@ -499,8 +513,12 @@
499
513
 
500
514
  <li><a href="../TaskJuggler/TjpSyntaxRules.html">TaskJuggler::TjpSyntaxRules</a></li>
501
515
 
516
+ <li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li>
517
+
502
518
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
503
519
 
520
+ <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
521
+
504
522
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
505
523
 
506
524
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -527,6 +545,8 @@
527
545
 
528
546
  <li><a href="../String.html">String</a></li>
529
547
 
548
+ <li><a href="../StringIO.html">StringIO</a></li>
549
+
530
550
  </ul>
531
551
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
532
552
  </div>
@@ -595,7 +615,7 @@
595
615
 
596
616
 
597
617
  <div id="new-method" class="method-detail ">
598
- <a name="M000985"></a>
618
+ <a name="method-c-new"></a>
599
619
 
600
620
  <div class="method-heading">
601
621
 
@@ -658,7 +678,7 @@
658
678
 
659
679
 
660
680
  <div id="add-o-cm-method" class="method-detail ">
661
- <a name="M000989"></a>
681
+ <a name="method-i-addToScm"></a>
662
682
 
663
683
  <div class="method-heading">
664
684
 
@@ -701,7 +721,7 @@
701
721
 
702
722
 
703
723
  <div id="cut-ut-method" class="method-detail ">
704
- <a name="M000986"></a>
724
+ <a name="method-i-cutOut"></a>
705
725
 
706
726
  <div class="method-heading">
707
727
 
@@ -768,7 +788,7 @@ from the beginnin of the line.
768
788
 
769
789
 
770
790
  <div id="error-method" class="method-detail ">
771
- <a name="M000992"></a>
791
+ <a name="method-i-error"></a>
772
792
 
773
793
  <div class="method-heading">
774
794
 
@@ -804,7 +824,7 @@ from the beginnin of the line.
804
824
 
805
825
 
806
826
  <div id="fix-ine-reaks-method" class="method-detail ">
807
- <a name="M000987"></a>
827
+ <a name="method-i-fixLineBreaks"></a>
808
828
 
809
829
  <div class="method-heading">
810
830
 
@@ -855,7 +875,7 @@ Convert all CR+LF and CR line breaks into LF line breaks.
855
875
 
856
876
 
857
877
  <div id="info-method" class="method-detail ">
858
- <a name="M000990"></a>
878
+ <a name="method-i-info"></a>
859
879
 
860
880
  <div class="method-heading">
861
881
 
@@ -890,7 +910,7 @@ Convert all CR+LF and CR line breaks into LF line breaks.
890
910
 
891
911
 
892
912
  <div id="log-method" class="method-detail ">
893
- <a name="M000993"></a>
913
+ <a name="method-i-log"></a>
894
914
 
895
915
  <div class="method-heading">
896
916
 
@@ -927,7 +947,7 @@ Convert all CR+LF and CR line breaks into LF line breaks.
927
947
 
928
948
 
929
949
  <div id="send-mail-method" class="method-detail ">
930
- <a name="M000994"></a>
950
+ <a name="method-i-sendEmail"></a>
931
951
 
932
952
  <div class="method-heading">
933
953
 
@@ -1015,7 +1035,7 @@ Convert all CR+LF and CR line breaks into LF line breaks.
1015
1035
 
1016
1036
 
1017
1037
  <div id="set-orking-ir-method" class="method-detail ">
1018
- <a name="M000988"></a>
1038
+ <a name="method-i-setWorkingDir"></a>
1019
1039
 
1020
1040
  <div class="method-heading">
1021
1041
 
@@ -1058,7 +1078,7 @@ Convert all CR+LF and CR line breaks into LF line breaks.
1058
1078
 
1059
1079
 
1060
1080
  <div id="warning-method" class="method-detail ">
1061
- <a name="M000991"></a>
1081
+ <a name="method-i-warning"></a>
1062
1082
 
1063
1083
  <div class="method-heading">
1064
1084
 
@@ -69,31 +69,31 @@
69
69
  <h3 class="section-header">Methods</h3>
70
70
  <ul class="link-list">
71
71
 
72
- <li><a href="#M001162">::new</a></li>
72
+ <li><a href="#method-c-new">::new</a></li>
73
73
 
74
- <li><a href="#M001165">#checkSheet</a></li>
74
+ <li><a href="#method-i-checkSheet">#checkSheet</a></li>
75
75
 
76
- <li><a href="#M001168">#checkSignature</a></li>
76
+ <li><a href="#method-i-checkSignature">#checkSignature</a></li>
77
77
 
78
- <li><a href="#M001169">#createDirectories</a></li>
78
+ <li><a href="#method-i-createDirectories">#createDirectories</a></li>
79
79
 
80
- <li><a href="#M001170">#error</a></li>
80
+ <li><a href="#method-i-error">#error</a></li>
81
81
 
82
- <li><a href="#M001171">#fatal</a></li>
82
+ <li><a href="#method-i-fatal">#fatal</a></li>
83
83
 
84
- <li><a href="#M001166">#fileSheet</a></li>
84
+ <li><a href="#method-i-fileSheet">#fileSheet</a></li>
85
85
 
86
- <li><a href="#M001167">#generateInclusionFile</a></li>
86
+ <li><a href="#method-i-generateInclusionFile">#generateInclusionFile</a></li>
87
87
 
88
- <li><a href="#M001173">#getResourceEmail</a></li>
88
+ <li><a href="#method-i-getResourceEmail">#getResourceEmail</a></li>
89
89
 
90
- <li><a href="#M001172">#getResourceList</a></li>
90
+ <li><a href="#method-i-getResourceList">#getResourceList</a></li>
91
91
 
92
- <li><a href="#M001174">#getResourceName</a></li>
92
+ <li><a href="#method-i-getResourceName">#getResourceName</a></li>
93
93
 
94
- <li><a href="#M001163">#processEmail</a></li>
94
+ <li><a href="#method-i-processEmail">#processEmail</a></li>
95
95
 
96
- <li><a href="#M001164">#processSheet</a></li>
96
+ <li><a href="#method-i-processSheet">#processSheet</a></li>
97
97
 
98
98
  </ul>
99
99
  </div>
@@ -110,6 +110,8 @@
110
110
  <h3 class="section-header">Files</h3>
111
111
  <ul>
112
112
 
113
+ <li class="file"><a href="../CHANGELOG.html">CHANGELOG</a></li>
114
+
113
115
  <li class="file"><a href="../COPYING.html">COPYING</a></li>
114
116
 
115
117
  <li class="file"><a href="../README.html">README</a></li>
@@ -279,6 +281,8 @@
279
281
 
280
282
  <li><a href="../TaskJuggler/NikuResource.html">TaskJuggler::NikuResource</a></li>
281
283
 
284
+ <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
285
+
282
286
  <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
283
287
 
284
288
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
@@ -293,6 +297,8 @@
293
297
 
294
298
  <li><a href="../TaskJuggler/ProjectFileParser.html">TaskJuggler::ProjectFileParser</a></li>
295
299
 
300
+ <li><a href="../TaskJuggler/ProjectFileScanner.html">TaskJuggler::ProjectFileScanner</a></li>
301
+
296
302
  <li><a href="../TaskJuggler/ProjectRecord.html">TaskJuggler::ProjectRecord</a></li>
297
303
 
298
304
  <li><a href="../TaskJuggler/ProjectServer.html">TaskJuggler::ProjectServer</a></li>
@@ -309,12 +315,16 @@
309
315
 
310
316
  <li><a href="../TaskJuggler/Query.html">TaskJuggler::Query</a></li>
311
317
 
318
+ <li><a href="../TaskJuggler/RTFHandlers.html">TaskJuggler::RTFHandlers</a></li>
319
+
312
320
  <li><a href="../TaskJuggler/RTFNavigator.html">TaskJuggler::RTFNavigator</a></li>
313
321
 
314
322
  <li><a href="../TaskJuggler/RTFQuery.html">TaskJuggler::RTFQuery</a></li>
315
323
 
316
324
  <li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li>
317
325
 
326
+ <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
327
+
318
328
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
319
329
 
320
330
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -333,6 +343,8 @@
333
343
 
334
344
  <li><a href="../TaskJuggler/ReportServerRecord.html">TaskJuggler::ReportServerRecord</a></li>
335
345
 
346
+ <li><a href="../TaskJuggler/ReportServlet.html">TaskJuggler::ReportServlet</a></li>
347
+
336
348
  <li><a href="../TaskJuggler/ReportTable.html">TaskJuggler::ReportTable</a></li>
337
349
 
338
350
  <li><a href="../TaskJuggler/ReportTableCell.html">TaskJuggler::ReportTableCell</a></li>
@@ -461,6 +473,8 @@
461
473
 
462
474
  <li><a href="../TaskJuggler/TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
463
475
 
476
+ <li><a href="../TaskJuggler/TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
477
+
464
478
  <li><a href="../TaskJuggler/TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
465
479
 
466
480
  <li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
@@ -505,8 +519,12 @@
505
519
 
506
520
  <li><a href="../TaskJuggler/TjpSyntaxRules.html">TaskJuggler::TjpSyntaxRules</a></li>
507
521
 
522
+ <li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li>
523
+
508
524
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
509
525
 
526
+ <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
527
+
510
528
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
511
529
 
512
530
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -533,6 +551,8 @@
533
551
 
534
552
  <li><a href="../String.html">String</a></li>
535
553
 
554
+ <li><a href="../StringIO.html">StringIO</a></li>
555
+
536
556
  </ul>
537
557
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
538
558
  </div>
@@ -561,7 +581,7 @@
561
581
 
562
582
 
563
583
  <div id="new-method" class="method-detail ">
564
- <a name="M001162"></a>
584
+ <a name="method-c-new"></a>
565
585
 
566
586
  <div class="method-heading">
567
587
 
@@ -600,29 +620,31 @@
600
620
  39: <span class="ruby-ivar">@signatureFile</span> = <span class="ruby-keyword kw">nil</span>
601
621
  40: <span class="ruby-comment cmt"># The log file</span>
602
622
  41: <span class="ruby-ivar">@logFile</span> = <span class="ruby-keyword kw">nil</span>
603
- 42:
604
- 43: <span class="ruby-comment cmt"># Regular expressions to identify a status sheet.</span>
605
- 44: <span class="ruby-ivar">@sheetHeader</span> = <span class="ruby-regexp re">/^[ ]*statussheet\s([a-z][a-z0-9_]*)\s([0-9]*-[0-9]*-[0-9]*)/</span>
606
- 45: <span class="ruby-comment cmt"># Regular expression to extract the sheet signature (date).</span>
607
- 46: <span class="ruby-ivar">@signatureFilter</span> = <span class="ruby-regexp re">/^[ ]*statussheet\s[a-z][a-z0-9_]*\s([0-9:\-+]*)/</span>
608
- 47: <span class="ruby-comment cmt"># The email address of the submitter of the sheet.</span>
609
- 48: <span class="ruby-ivar">@submitter</span> = <span class="ruby-keyword kw">nil</span>
610
- 49: <span class="ruby-comment cmt"># The resource ID of the submitter.</span>
611
- 50: <span class="ruby-ivar">@resourceId</span> = <span class="ruby-keyword kw">nil</span>
612
- 51: <span class="ruby-comment cmt"># The stdout content from tj3client</span>
613
- 52: <span class="ruby-ivar">@report</span> = <span class="ruby-keyword kw">nil</span>
614
- 53: <span class="ruby-comment cmt"># The stderr content from tj3client</span>
615
- 54: <span class="ruby-ivar">@warnings</span> = <span class="ruby-keyword kw">nil</span>
616
- 55:
617
- 56: <span class="ruby-comment cmt"># The extracted sheet text.</span>
618
- 57: <span class="ruby-ivar">@sheet</span> = <span class="ruby-keyword kw">nil</span>
619
- 58: <span class="ruby-comment cmt"># Will indicate whether the sheet was attached or in mail body</span>
620
- 59: <span class="ruby-ivar">@sheetWasAttached</span> = <span class="ruby-keyword kw">true</span>
621
- 60: <span class="ruby-comment cmt"># The end date of the reporting period.</span>
622
- 61: <span class="ruby-ivar">@date</span> = <span class="ruby-keyword kw">nil</span>
623
- 62: <span class="ruby-comment cmt"># The id of the incomming message.</span>
624
- 63: <span class="ruby-ivar">@messageId</span> = <span class="ruby-keyword kw">nil</span>
625
- 64: <span class="ruby-keyword kw">end</span></pre>
623
+ 42: <span class="ruby-comment cmt"># The subject of the confirmation email</span>
624
+ 43: <span class="ruby-ivar">@emailSubject</span> = <span class="ruby-keyword kw">nil</span>
625
+ 44:
626
+ 45: <span class="ruby-comment cmt"># Regular expressions to identify a status sheet.</span>
627
+ 46: <span class="ruby-ivar">@sheetHeader</span> = <span class="ruby-keyword kw">nil</span>
628
+ 47: <span class="ruby-comment cmt"># Regular expression to extract the sheet signature (date).</span>
629
+ 48: <span class="ruby-ivar">@signatureFilter</span> = <span class="ruby-keyword kw">nil</span>
630
+ 49: <span class="ruby-comment cmt"># The email address of the submitter of the sheet.</span>
631
+ 50: <span class="ruby-ivar">@submitter</span> = <span class="ruby-keyword kw">nil</span>
632
+ 51: <span class="ruby-comment cmt"># The resource ID of the submitter.</span>
633
+ 52: <span class="ruby-ivar">@resourceId</span> = <span class="ruby-keyword kw">nil</span>
634
+ 53: <span class="ruby-comment cmt"># The stdout content from tj3client</span>
635
+ 54: <span class="ruby-ivar">@report</span> = <span class="ruby-keyword kw">nil</span>
636
+ 55: <span class="ruby-comment cmt"># The stderr content from tj3client</span>
637
+ 56: <span class="ruby-ivar">@warnings</span> = <span class="ruby-keyword kw">nil</span>
638
+ 57:
639
+ 58: <span class="ruby-comment cmt"># The extracted sheet text.</span>
640
+ 59: <span class="ruby-ivar">@sheet</span> = <span class="ruby-keyword kw">nil</span>
641
+ 60: <span class="ruby-comment cmt"># Will indicate whether the sheet was attached or in mail body</span>
642
+ 61: <span class="ruby-ivar">@sheetWasAttached</span> = <span class="ruby-keyword kw">true</span>
643
+ 62: <span class="ruby-comment cmt"># The end date of the reporting period.</span>
644
+ 63: <span class="ruby-ivar">@date</span> = <span class="ruby-keyword kw">nil</span>
645
+ 64: <span class="ruby-comment cmt"># The id of the incomming message.</span>
646
+ 65: <span class="ruby-ivar">@messageId</span> = <span class="ruby-keyword kw">nil</span>
647
+ 66: <span class="ruby-keyword kw">end</span></pre>
626
648
  </div>
627
649
 
628
650
  </div>
@@ -640,7 +662,7 @@
640
662
 
641
663
 
642
664
  <div id="process-mail-method" class="method-detail ">
643
- <a name="M001163"></a>
665
+ <a name="method-i-processEmail"></a>
644
666
 
645
667
  <div class="method-heading">
646
668
 
@@ -664,43 +686,52 @@ accessed via tj3client.
664
686
  <div class="method-source-code"
665
687
  id="process-mail-source">
666
688
  <pre>
667
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 71</span>
668
- 71: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">processEmail</span>
669
- 72: <span class="ruby-identifier">setWorkingDir</span>
670
- 73:
671
- 74: <span class="ruby-identifier">createDirectories</span>
689
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 73</span>
690
+ 73: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">processEmail</span>
691
+ 74: <span class="ruby-identifier">setWorkingDir</span>
672
692
  75:
673
- 76: <span class="ruby-identifier">mail</span> = <span class="ruby-constant">Mail</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">$stdin</span>.<span class="ruby-identifier">read</span>)
693
+ 76: <span class="ruby-identifier">createDirectories</span>
674
694
  77:
675
- 78: <span class="ruby-comment cmt"># Who sent this email?</span>
676
- 79: <span class="ruby-ivar">@submitter</span> = <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">from</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'[]'</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">from</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">from</span>
677
- 80: <span class="ruby-comment cmt"># Getting the message ID.</span>
678
- 81: <span class="ruby-ivar">@messageId</span> = <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">message_id</span> <span class="ruby-operator">||</span> <span class="ruby-value str">'unknown'</span>
679
- 82: <span class="ruby-ivar">@idDigest</span> = <span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">MD5</span>.<span class="ruby-identifier">hexdigest</span>(<span class="ruby-ivar">@messageId</span>)
680
- 83: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Processing #{@sheetType} mail from #{@submitter} &quot;</span> <span class="ruby-operator">+</span>
681
- 84: <span class="ruby-node">&quot;with ID #{@messageId} (#{@idDigest})&quot;</span>)
682
- 85:
683
- 86: <span class="ruby-comment cmt"># Store the mail in the failedMailsDir in case something goes wrong.</span>
684
- 87: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-node">&quot;#{@failedMailsDir}/#{@idDigest}&quot;</span>, <span class="ruby-value str">'w'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
685
- 88: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">mail</span>)
686
- 89: <span class="ruby-keyword kw">end</span>
687
- 90:
688
- 91: <span class="ruby-comment cmt"># First we search the attachments and then the body.</span>
689
- 92: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">attachments</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attachment</span><span class="ruby-operator">|</span>
690
- 93: <span class="ruby-comment cmt"># We are looking for an attached file with a .tji extension.</span>
691
- 94: <span class="ruby-identifier">fileName</span> = <span class="ruby-identifier">attachment</span>.<span class="ruby-identifier">filename</span>
692
- 95: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">fileName</span>[<span class="ruby-value">4</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'.tji'</span>
695
+ 78: <span class="ruby-keyword kw">begin</span>
696
+ 79: <span class="ruby-identifier">rawMail</span> = <span class="ruby-identifier">$stdin</span>.<span class="ruby-identifier">read</span>
697
+ 80: <span class="ruby-identifier">mail</span> = <span class="ruby-constant">Mail</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">rawMail</span>)
698
+ 81: <span class="ruby-keyword kw">rescue</span>
699
+ 82: <span class="ruby-comment cmt"># Try to extract the mail sender the dirty way so we can at least send</span>
700
+ 83: <span class="ruby-comment cmt"># a response to the submitter.</span>
701
+ 84: <span class="ruby-identifier">fromLine</span> = <span class="ruby-identifier">rawMail</span>.<span class="ruby-identifier">match</span>(<span class="ruby-value str">'^From: .*'</span>)[<span class="ruby-value">0</span>]
702
+ 85: <span class="ruby-ivar">@submitter</span> = <span class="ruby-identifier">fromLine</span>[<span class="ruby-value">6</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fromLine</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
703
+ 86: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Incoming mail could not be processed: #{$!}&quot;</span>)
704
+ 87: <span class="ruby-keyword kw">end</span>
705
+ 88:
706
+ 89: <span class="ruby-comment cmt"># Who sent this email?</span>
707
+ 90: <span class="ruby-ivar">@submitter</span> = <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">from</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'[]'</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">from</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">from</span>
708
+ 91: <span class="ruby-comment cmt"># Getting the message ID.</span>
709
+ 92: <span class="ruby-ivar">@messageId</span> = <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">message_id</span> <span class="ruby-operator">||</span> <span class="ruby-value str">'unknown'</span>
710
+ 93: <span class="ruby-ivar">@idDigest</span> = <span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">MD5</span>.<span class="ruby-identifier">hexdigest</span>(<span class="ruby-ivar">@messageId</span>)
711
+ 94: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Processing #{@sheetType} mail from #{@submitter} &quot;</span> <span class="ruby-operator">+</span>
712
+ 95: <span class="ruby-node">&quot;with ID #{@messageId} (#{@idDigest})&quot;</span>)
693
713
  96:
694
- 97: <span class="ruby-comment cmt"># Further inspect the attachment. If we could process it, we are done.</span>
695
- 98: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">processSheet</span>(<span class="ruby-identifier">attachment</span>.<span class="ruby-identifier">body</span>.<span class="ruby-identifier">decoded</span>)
696
- 99: <span class="ruby-keyword kw">end</span>
697
- 100: <span class="ruby-comment cmt"># None of the attachements worked, so let's try the mail body.</span>
698
- 101: <span class="ruby-ivar">@sheetWasAttached</span> = <span class="ruby-keyword kw">false</span>
699
- 102: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">processSheet</span>(<span class="ruby-identifier">mail</span>.<span class="ruby-identifier">body</span>.<span class="ruby-identifier">decoded</span>)
700
- 103:
701
- 104: <span class="ruby-identifier">error</span>(<span class="ruby-value str">No #{@sheetType} sheet found in email. Please make sure the header syntax iscorrect and contained in a single line that starts at the begining of theline. If you had the #{@sheetType} sheet attached, the file name must have a'.tji' extension to be found.</span>
702
- 105: )
703
- 106: <span class="ruby-keyword kw">end</span></pre>
714
+ 97: <span class="ruby-comment cmt"># Store the mail in the failedMailsDir in case something goes wrong.</span>
715
+ 98: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-node">&quot;#{@failedMailsDir}/#{@idDigest}&quot;</span>, <span class="ruby-value str">'w'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
716
+ 99: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">mail</span>)
717
+ 100: <span class="ruby-keyword kw">end</span>
718
+ 101:
719
+ 102: <span class="ruby-comment cmt"># First we search the attachments and then the body.</span>
720
+ 103: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">attachments</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attachment</span><span class="ruby-operator">|</span>
721
+ 104: <span class="ruby-comment cmt"># We are looking for an attached file with a .tji extension.</span>
722
+ 105: <span class="ruby-identifier">fileName</span> = <span class="ruby-identifier">attachment</span>.<span class="ruby-identifier">filename</span>
723
+ 106: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">fileName</span>[<span class="ruby-value">4</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'.tji'</span>
724
+ 107:
725
+ 108: <span class="ruby-comment cmt"># Further inspect the attachment. If we could process it, we are done.</span>
726
+ 109: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">processSheet</span>(<span class="ruby-identifier">attachment</span>.<span class="ruby-identifier">body</span>.<span class="ruby-identifier">decoded</span>)
727
+ 110: <span class="ruby-keyword kw">end</span>
728
+ 111: <span class="ruby-comment cmt"># None of the attachements worked, so let's try the mail body.</span>
729
+ 112: <span class="ruby-ivar">@sheetWasAttached</span> = <span class="ruby-keyword kw">false</span>
730
+ 113: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">processSheet</span>(<span class="ruby-identifier">mail</span>.<span class="ruby-identifier">body</span>.<span class="ruby-identifier">decoded</span>)
731
+ 114:
732
+ 115: <span class="ruby-identifier">error</span>(<span class="ruby-value str">No #{@sheetType} sheet found in email. Please make sure the header syntax iscorrect and contained in a single line that starts at the begining of theline. If you had the #{@sheetType} sheet attached, the file name must have a'.tji' extension to be found.</span>
733
+ 116: )
734
+ 117: <span class="ruby-keyword kw">end</span></pre>
704
735
  </div>
705
736
 
706
737
  </div>
@@ -718,7 +749,7 @@ accessed via tj3client.
718
749
 
719
750
 
720
751
  <div id="check-heet-method" class="method-detail ">
721
- <a name="M001165"></a>
752
+ <a name="method-i-checkSheet"></a>
722
753
 
723
754
  <div class="method-heading">
724
755
 
@@ -737,35 +768,35 @@ accessed via tj3client.
737
768
  <div class="method-source-code"
738
769
  id="check-heet-source">
739
770
  <pre>
740
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 142</span>
741
- 142: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkSheet</span>(<span class="ruby-identifier">sheet</span>)
742
- 143: <span class="ruby-identifier">err</span> = <span class="ruby-value str">''</span>
743
- 144: <span class="ruby-identifier">status</span> = <span class="ruby-keyword kw">nil</span>
744
- 145: <span class="ruby-keyword kw">begin</span>
745
- 146: <span class="ruby-comment cmt"># Save a copy of the sheet for debugging purposes.</span>
746
- 147: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-node">&quot;#{@failedSheetsDir}/#{@resourceId}-#{@date}.tji&quot;</span>, <span class="ruby-value str">'w'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
747
- 148: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">sheet</span>)
748
- 149: <span class="ruby-keyword kw">end</span>
749
- 150: <span class="ruby-identifier">command</span> = <span class="ruby-node">&quot;tj3client --silent #{@tj3clientOption} #{@projectId} .&quot;</span>
750
- 151: <span class="ruby-identifier">status</span> = <span class="ruby-constant">Open4</span>.<span class="ruby-identifier">popen4</span>(<span class="ruby-identifier">command</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pid</span>, <span class="ruby-identifier">stdin</span>, <span class="ruby-identifier">stdout</span>, <span class="ruby-identifier">stderr</span><span class="ruby-operator">|</span>
751
- 152: <span class="ruby-comment cmt"># Send the report to the tj3client process via stdin.</span>
752
- 153: <span class="ruby-identifier">stdin</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">sheet</span>)
753
- 154: <span class="ruby-identifier">stdin</span>.<span class="ruby-identifier">close</span>
754
- 155: <span class="ruby-ivar">@report</span> = <span class="ruby-identifier">stdout</span>.<span class="ruby-identifier">read</span>
755
- 156: <span class="ruby-ivar">@warnings</span> = <span class="ruby-identifier">stderr</span>.<span class="ruby-identifier">read</span>
756
- 157: <span class="ruby-keyword kw">end</span>
757
- 158: <span class="ruby-keyword kw">rescue</span>
758
- 159: <span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Cannot check #{@sheetType} sheet: #{$!}&quot;</span>)
759
- 160: <span class="ruby-keyword kw">end</span>
760
- 161: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">status</span>.<span class="ruby-identifier">exitstatus</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
761
- 162: <span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-node">&quot;#{@failedSheetsDir}/#{@resourceId}-#{@date}.tji&quot;</span>)
762
- 163: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
763
- 164: <span class="ruby-keyword kw">end</span>
764
- 165:
765
- 166: <span class="ruby-comment cmt"># The exit status was not 0. The stderr output should not be empty and</span>
766
- 167: <span class="ruby-comment cmt"># will contain error and warning messages.</span>
767
- 168: <span class="ruby-identifier">error</span>(<span class="ruby-ivar">@warnings</span>)
768
- 169: <span class="ruby-keyword kw">end</span></pre>
771
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 160</span>
772
+ 160: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkSheet</span>(<span class="ruby-identifier">sheet</span>)
773
+ 161: <span class="ruby-identifier">err</span> = <span class="ruby-value str">''</span>
774
+ 162: <span class="ruby-identifier">status</span> = <span class="ruby-keyword kw">nil</span>
775
+ 163: <span class="ruby-keyword kw">begin</span>
776
+ 164: <span class="ruby-comment cmt"># Save a copy of the sheet for debugging purposes.</span>
777
+ 165: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-node">&quot;#{@failedSheetsDir}/#{@resourceId}-#{@date}.tji&quot;</span>, <span class="ruby-value str">'w'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
778
+ 166: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">sheet</span>)
779
+ 167: <span class="ruby-keyword kw">end</span>
780
+ 168: <span class="ruby-identifier">command</span> = <span class="ruby-node">&quot;tj3client --silent #{@tj3clientOption} #{@projectId} .&quot;</span>
781
+ 169: <span class="ruby-identifier">status</span> = <span class="ruby-constant">Open4</span>.<span class="ruby-identifier">popen4</span>(<span class="ruby-identifier">command</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pid</span>, <span class="ruby-identifier">stdin</span>, <span class="ruby-identifier">stdout</span>, <span class="ruby-identifier">stderr</span><span class="ruby-operator">|</span>
782
+ 170: <span class="ruby-comment cmt"># Send the report to the tj3client process via stdin.</span>
783
+ 171: <span class="ruby-identifier">stdin</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">sheet</span>)
784
+ 172: <span class="ruby-identifier">stdin</span>.<span class="ruby-identifier">close</span>
785
+ 173: <span class="ruby-ivar">@report</span> = <span class="ruby-identifier">stdout</span>.<span class="ruby-identifier">read</span>
786
+ 174: <span class="ruby-ivar">@warnings</span> = <span class="ruby-identifier">stderr</span>.<span class="ruby-identifier">read</span>
787
+ 175: <span class="ruby-keyword kw">end</span>
788
+ 176: <span class="ruby-keyword kw">rescue</span>
789
+ 177: <span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Cannot check #{@sheetType} sheet: #{$!}&quot;</span>)
790
+ 178: <span class="ruby-keyword kw">end</span>
791
+ 179: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">status</span>.<span class="ruby-identifier">exitstatus</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
792
+ 180: <span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-node">&quot;#{@failedSheetsDir}/#{@resourceId}-#{@date}.tji&quot;</span>)
793
+ 181: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
794
+ 182: <span class="ruby-keyword kw">end</span>
795
+ 183:
796
+ 184: <span class="ruby-comment cmt"># The exit status was not 0. The stderr output should not be empty and</span>
797
+ 185: <span class="ruby-comment cmt"># will contain error and warning messages.</span>
798
+ 186: <span class="ruby-identifier">error</span>(<span class="ruby-ivar">@warnings</span>)
799
+ 187: <span class="ruby-keyword kw">end</span></pre>
769
800
  </div>
770
801
 
771
802
  </div>
@@ -777,7 +808,7 @@ accessed via tj3client.
777
808
 
778
809
 
779
810
  <div id="check-ignature-method" class="method-detail ">
780
- <a name="M001168"></a>
811
+ <a name="method-i-checkSignature"></a>
781
812
 
782
813
  <div class="method-heading">
783
814
 
@@ -796,30 +827,30 @@ accessed via tj3client.
796
827
  <div class="method-source-code"
797
828
  id="check-ignature-source">
798
829
  <pre>
799
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 247</span>
800
- 247: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkSignature</span>(<span class="ruby-identifier">sheet</span>)
801
- 248: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">matches</span> = <span class="ruby-ivar">@signatureFilter</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">sheet</span>)
802
- 249: <span class="ruby-identifier">interval</span> = <span class="ruby-identifier">matches</span>[<span class="ruby-value">1</span>]
803
- 250: <span class="ruby-keyword kw">else</span>
804
- 251: <span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;No #{@sheetType}sheet header found&quot;</span>)
805
- 252: <span class="ruby-keyword kw">end</span>
806
- 253:
807
- 254: <span class="ruby-identifier">acceptedSignatures</span> = []
808
- 255: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-ivar">@signatureFile</span>)
809
- 256: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-ivar">@signatureFile</span>, <span class="ruby-value str">'r'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
810
- 257: <span class="ruby-identifier">acceptedSignatures</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">readlines</span>
811
- 258: <span class="ruby-keyword kw">end</span>
812
- 259: <span class="ruby-identifier">acceptedSignatures</span>.<span class="ruby-identifier">map!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">chomp</span> }
813
- 260: <span class="ruby-identifier">acceptedSignatures</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">empty?</span> }
814
- 261: <span class="ruby-keyword kw">else</span>
815
- 262: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;#{@signatureFile} does not exist yet.&quot;</span>)
816
- 263: <span class="ruby-keyword kw">end</span>
817
- 264:
818
- 265: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">acceptedSignatures</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">interval</span>)
819
- 266: <span class="ruby-identifier">error</span>(<span class="ruby-value str">The reporting period #{interval}was not accepted! Either you have modified the sheet header,you are submitting the sheet too late or too early.</span>
820
- 267: )
821
- 268: <span class="ruby-keyword kw">end</span>
822
- 269: <span class="ruby-keyword kw">end</span></pre>
830
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 265</span>
831
+ 265: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkSignature</span>(<span class="ruby-identifier">sheet</span>)
832
+ 266: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">matches</span> = <span class="ruby-ivar">@signatureFilter</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">sheet</span>)
833
+ 267: <span class="ruby-identifier">interval</span> = <span class="ruby-identifier">matches</span>[<span class="ruby-value">1</span>]
834
+ 268: <span class="ruby-keyword kw">else</span>
835
+ 269: <span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;No #{@sheetType}sheet header found&quot;</span>)
836
+ 270: <span class="ruby-keyword kw">end</span>
837
+ 271:
838
+ 272: <span class="ruby-identifier">acceptedSignatures</span> = []
839
+ 273: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-ivar">@signatureFile</span>)
840
+ 274: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-ivar">@signatureFile</span>, <span class="ruby-value str">'r'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
841
+ 275: <span class="ruby-identifier">acceptedSignatures</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">readlines</span>
842
+ 276: <span class="ruby-keyword kw">end</span>
843
+ 277: <span class="ruby-identifier">acceptedSignatures</span>.<span class="ruby-identifier">map!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">chomp</span> }
844
+ 278: <span class="ruby-identifier">acceptedSignatures</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">empty?</span> }
845
+ 279: <span class="ruby-keyword kw">else</span>
846
+ 280: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;#{@signatureFile} does not exist yet.&quot;</span>)
847
+ 281: <span class="ruby-keyword kw">end</span>
848
+ 282:
849
+ 283: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">acceptedSignatures</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">interval</span>)
850
+ 284: <span class="ruby-identifier">error</span>(<span class="ruby-value str">The reporting period #{interval}was not accepted! Either you have modified the sheet header,you are submitting the sheet too late or too early.</span>
851
+ 285: )
852
+ 286: <span class="ruby-keyword kw">end</span>
853
+ 287: <span class="ruby-keyword kw">end</span></pre>
823
854
  </div>
824
855
 
825
856
  </div>
@@ -831,7 +862,7 @@ accessed via tj3client.
831
862
 
832
863
 
833
864
  <div id="create-irectories-method" class="method-detail ">
834
- <a name="M001169"></a>
865
+ <a name="method-i-createDirectories"></a>
835
866
 
836
867
  <div class="method-heading">
837
868
 
@@ -850,15 +881,15 @@ accessed via tj3client.
850
881
  <div class="method-source-code"
851
882
  id="create-irectories-source">
852
883
  <pre>
853
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 275</span>
854
- 275: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">createDirectories</span>
855
- 276: [ <span class="ruby-ivar">@sheetDir</span>, <span class="ruby-ivar">@failedMailsDir</span>, <span class="ruby-ivar">@failedSheetsDir</span> ].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dir</span><span class="ruby-operator">|</span>
856
- 277: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">dir</span>)
857
- 278: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Creating directory #{dir}&quot;</span>)
858
- 279: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">mkdir</span>(<span class="ruby-identifier">dir</span>)
859
- 280: <span class="ruby-keyword kw">end</span>
860
- 281: <span class="ruby-keyword kw">end</span>
861
- 282: <span class="ruby-keyword kw">end</span></pre>
884
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 293</span>
885
+ 293: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">createDirectories</span>
886
+ 294: [ <span class="ruby-ivar">@sheetDir</span>, <span class="ruby-ivar">@failedMailsDir</span>, <span class="ruby-ivar">@failedSheetsDir</span> ].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dir</span><span class="ruby-operator">|</span>
887
+ 295: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">dir</span>)
888
+ 296: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Creating directory #{dir}&quot;</span>)
889
+ 297: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">mkdir</span>(<span class="ruby-identifier">dir</span>)
890
+ 298: <span class="ruby-keyword kw">end</span>
891
+ 299: <span class="ruby-keyword kw">end</span>
892
+ 300: <span class="ruby-keyword kw">end</span></pre>
862
893
  </div>
863
894
 
864
895
  </div>
@@ -870,7 +901,7 @@ accessed via tj3client.
870
901
 
871
902
 
872
903
  <div id="error-method" class="method-detail ">
873
- <a name="M001170"></a>
904
+ <a name="method-i-error"></a>
874
905
 
875
906
  <div class="method-heading">
876
907
 
@@ -889,24 +920,24 @@ accessed via tj3client.
889
920
  <div class="method-source-code"
890
921
  id="error-source">
891
922
  <pre>
892
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 284</span>
893
- 284: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">message</span>)
894
- 285: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">message</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@outputLevel</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">1</span>
895
- 286:
896
- 287: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'ERROR'</span>, <span class="ruby-node">&quot;#{message}&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@logLevel</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">1</span>
897
- 288:
898
- 289: <span class="ruby-comment cmt"># Append the submitted sheet for further tries. We may run into encoding</span>
899
- 290: <span class="ruby-comment cmt"># errors here. In this case we send the answer without the incoming time</span>
900
- 291: <span class="ruby-comment cmt"># sheet.</span>
901
- 292: <span class="ruby-keyword kw">begin</span>
902
- 293: <span class="ruby-identifier">message</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@sheet</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@sheet</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@sheetWasAttached</span>
903
- 294: <span class="ruby-keyword kw">rescue</span>
904
- 295: <span class="ruby-keyword kw">end</span>
905
- 296:
906
- 297: <span class="ruby-identifier">sendEmail</span>(<span class="ruby-ivar">@submitter</span>, <span class="ruby-value str">'Your time sheet submission failed!'</span>, <span class="ruby-identifier">message</span>)
907
- 298:
908
- 299: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
909
- 300: <span class="ruby-keyword kw">end</span></pre>
923
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 302</span>
924
+ 302: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">message</span>)
925
+ 303: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">message</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@outputLevel</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">1</span>
926
+ 304:
927
+ 305: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'ERROR'</span>, <span class="ruby-node">&quot;#{message}&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@logLevel</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">1</span>
928
+ 306:
929
+ 307: <span class="ruby-comment cmt"># Append the submitted sheet for further tries. We may run into encoding</span>
930
+ 308: <span class="ruby-comment cmt"># errors here. In this case we send the answer without the incoming time</span>
931
+ 309: <span class="ruby-comment cmt"># sheet.</span>
932
+ 310: <span class="ruby-keyword kw">begin</span>
933
+ 311: <span class="ruby-identifier">message</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@sheet</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@sheet</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@sheetWasAttached</span>
934
+ 312: <span class="ruby-keyword kw">rescue</span>
935
+ 313: <span class="ruby-keyword kw">end</span>
936
+ 314:
937
+ 315: <span class="ruby-identifier">sendEmail</span>(<span class="ruby-ivar">@submitter</span>, <span class="ruby-node">&quot;Your #{@sheetType} sheet submission failed!&quot;</span>, <span class="ruby-identifier">message</span>)
938
+ 316:
939
+ 317: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
940
+ 318: <span class="ruby-keyword kw">end</span></pre>
910
941
  </div>
911
942
 
912
943
  </div>
@@ -918,7 +949,7 @@ accessed via tj3client.
918
949
 
919
950
 
920
951
  <div id="fatal-method" class="method-detail ">
921
- <a name="M001171"></a>
952
+ <a name="method-i-fatal"></a>
922
953
 
923
954
  <div class="method-heading">
924
955
 
@@ -937,17 +968,17 @@ accessed via tj3client.
937
968
  <div class="method-source-code"
938
969
  id="fatal-source">
939
970
  <pre>
940
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 302</span>
941
- 302: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fatal</span>(<span class="ruby-identifier">message</span>)
942
- 303: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'FATAL'</span>, <span class="ruby-node">&quot;#{message}&quot;</span>)
943
- 304:
944
- 305: <span class="ruby-comment cmt"># Append the submitted sheet for further tries.</span>
945
- 306: <span class="ruby-identifier">message</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@sheet</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@sheet</span>
946
- 307:
947
- 308: <span class="ruby-identifier">sendEmail</span>(<span class="ruby-ivar">@submitter</span>, <span class="ruby-value str">'Temporary server error'</span>, <span class="ruby-value str">We are sorry! The #{@sheetType} sheet server detected a configurationproblem and is temporarily out of service. The administratorhas been notified and will try to rectify the situation assoon as possible. Please re-submit your #{@sheetType} sheet later!</span>
948
- 309: )
949
- 310: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
950
- 311: <span class="ruby-keyword kw">end</span></pre>
971
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 320</span>
972
+ 320: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fatal</span>(<span class="ruby-identifier">message</span>)
973
+ 321: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'FATAL'</span>, <span class="ruby-node">&quot;#{message}&quot;</span>)
974
+ 322:
975
+ 323: <span class="ruby-comment cmt"># Append the submitted sheet for further tries.</span>
976
+ 324: <span class="ruby-identifier">message</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@sheet</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@sheet</span>
977
+ 325:
978
+ 326: <span class="ruby-identifier">sendEmail</span>(<span class="ruby-ivar">@submitter</span>, <span class="ruby-value str">'Temporary server error'</span>, <span class="ruby-value str">We are sorry! The #{@sheetType} sheet server detected a configurationproblem and is temporarily out of service. The administratorhas been notified and will try to rectify the situation assoon as possible. Please re-submit your #{@sheetType} sheet later!</span>
979
+ 327: )
980
+ 328: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
981
+ 329: <span class="ruby-keyword kw">end</span></pre>
951
982
  </div>
952
983
 
953
984
  </div>
@@ -959,7 +990,7 @@ accessed via tj3client.
959
990
 
960
991
 
961
992
  <div id="file-heet-method" class="method-detail ">
962
- <a name="M001166"></a>
993
+ <a name="method-i-fileSheet"></a>
963
994
 
964
995
  <div class="method-heading">
965
996
 
@@ -978,52 +1009,52 @@ accessed via tj3client.
978
1009
  <div class="method-source-code"
979
1010
  id="file-heet-source">
980
1011
  <pre>
981
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 171</span>
982
- 171: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fileSheet</span>(<span class="ruby-identifier">sheet</span>)
983
- 172: <span class="ruby-comment cmt"># Create the appropriate directory structure if it doesn't exist.</span>
984
- 173: <span class="ruby-identifier">dir</span> = <span class="ruby-node">&quot;#{@sheetDir}/#{@date}&quot;</span>
985
- 174: <span class="ruby-identifier">fileName</span> = <span class="ruby-node">&quot;#{dir}/#{@resourceId}_#{@date}.tji&quot;</span>
986
- 175: <span class="ruby-identifier">newDir</span> = <span class="ruby-keyword kw">false</span>
987
- 176: <span class="ruby-keyword kw">begin</span>
988
- 177: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">dir</span>)
989
- 178: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">mkdir</span>(<span class="ruby-identifier">dir</span>)
990
- 179: <span class="ruby-identifier">addToScm</span>(<span class="ruby-value str">'Adding new directory'</span>, <span class="ruby-identifier">dir</span>)
991
- 180: <span class="ruby-identifier">newDir</span> = <span class="ruby-keyword kw">true</span>
992
- 181: <span class="ruby-keyword kw">end</span>
993
- 182: <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>) { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">sheet</span>) }
994
- 183: <span class="ruby-identifier">addToScm</span>(<span class="ruby-node">&quot;Adding/updating #{fileName}&quot;</span>, <span class="ruby-identifier">fileName</span>)
995
- 184: <span class="ruby-keyword kw">rescue</span>
996
- 185: <span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Cannot store #{@sheetType} sheet #{fileName}: #{$!}&quot;</span>)
997
- 186: <span class="ruby-keyword kw">return</span>
998
- 187: <span class="ruby-keyword kw">end</span>
999
- 188:
1000
- 189: <span class="ruby-comment cmt"># Create or update the file that includes all *.tji in the directory.</span>
1001
- 190: <span class="ruby-identifier">generateInclusionFile</span>(<span class="ruby-identifier">dir</span>)
1002
- 191:
1003
- 192: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">newDir</span>
1004
- 193: <span class="ruby-comment cmt"># Add the new directory to the parent all.tji file.</span>
1005
- 194: <span class="ruby-identifier">allFile</span> = <span class="ruby-node">&quot;#{@sheetDir}/all.tji&quot;</span>
1006
- 195: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">allFile</span>, <span class="ruby-value str">'a'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
1007
- 196: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">&quot;\ninclude '#{@date}/all.tji' { }&quot;</span>)
1008
- 197: <span class="ruby-keyword kw">end</span>
1009
- 198: <span class="ruby-identifier">addToScm</span>(<span class="ruby-value str">'Adding new directory to all.tji'</span>, <span class="ruby-identifier">allFile</span>)
1010
- 199: <span class="ruby-keyword kw">end</span>
1011
- 200:
1012
- 201: <span class="ruby-identifier">text</span> = <span class="ruby-value str">Report from #{getResourceName} for the period ending #{@date}:</span>
1013
- 202:
1014
- 203: <span class="ruby-comment cmt"># Add warnings if we had any.</span>
1015
- 204: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@warnings</span>.<span class="ruby-identifier">empty?</span>
1016
- 205: <span class="ruby-identifier">text</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">Your report does contain some issues that you may want to fix or address withyour manager or project manager:#{@warnings}</span>
1017
- 206: <span class="ruby-keyword kw">end</span>
1018
- 207:
1019
- 208: <span class="ruby-comment cmt"># Append the pretty printed version of the submitted status sheet.</span>
1020
- 209: <span class="ruby-identifier">text</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@report</span>
1021
- 210:
1022
- 211: <span class="ruby-comment cmt"># Send out the email.</span>
1023
- 212: <span class="ruby-identifier">sendEmail</span>(<span class="ruby-ivar">@submitter</span>, <span class="ruby-node">&quot;Report from #{getResourceName} for #{@date}&quot;</span>, <span class="ruby-identifier">text</span>,
1024
- 213: <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@messageId</span>)
1025
- 214: <span class="ruby-keyword kw">true</span>
1026
- 215: <span class="ruby-keyword kw">end</span></pre>
1012
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 189</span>
1013
+ 189: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fileSheet</span>(<span class="ruby-identifier">sheet</span>)
1014
+ 190: <span class="ruby-comment cmt"># Create the appropriate directory structure if it doesn't exist.</span>
1015
+ 191: <span class="ruby-identifier">dir</span> = <span class="ruby-node">&quot;#{@sheetDir}/#{@date}&quot;</span>
1016
+ 192: <span class="ruby-identifier">fileName</span> = <span class="ruby-node">&quot;#{dir}/#{@resourceId}_#{@date}.tji&quot;</span>
1017
+ 193: <span class="ruby-identifier">newDir</span> = <span class="ruby-keyword kw">false</span>
1018
+ 194: <span class="ruby-keyword kw">begin</span>
1019
+ 195: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">dir</span>)
1020
+ 196: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">mkdir</span>(<span class="ruby-identifier">dir</span>)
1021
+ 197: <span class="ruby-identifier">addToScm</span>(<span class="ruby-value str">'Adding new directory'</span>, <span class="ruby-identifier">dir</span>)
1022
+ 198: <span class="ruby-identifier">newDir</span> = <span class="ruby-keyword kw">true</span>
1023
+ 199: <span class="ruby-keyword kw">end</span>
1024
+ 200: <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>) { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">sheet</span>) }
1025
+ 201: <span class="ruby-identifier">addToScm</span>(<span class="ruby-node">&quot;Adding/updating #{fileName}&quot;</span>, <span class="ruby-identifier">fileName</span>)
1026
+ 202: <span class="ruby-keyword kw">rescue</span>
1027
+ 203: <span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Cannot store #{@sheetType} sheet #{fileName}: #{$!}&quot;</span>)
1028
+ 204: <span class="ruby-keyword kw">return</span>
1029
+ 205: <span class="ruby-keyword kw">end</span>
1030
+ 206:
1031
+ 207: <span class="ruby-comment cmt"># Create or update the file that includes all *.tji in the directory.</span>
1032
+ 208: <span class="ruby-identifier">generateInclusionFile</span>(<span class="ruby-identifier">dir</span>)
1033
+ 209:
1034
+ 210: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">newDir</span>
1035
+ 211: <span class="ruby-comment cmt"># Add the new directory to the parent all.tji file.</span>
1036
+ 212: <span class="ruby-identifier">allFile</span> = <span class="ruby-node">&quot;#{@sheetDir}/all.tji&quot;</span>
1037
+ 213: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">allFile</span>, <span class="ruby-value str">'a'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
1038
+ 214: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">&quot;\ninclude '#{@date}/all.tji' { }&quot;</span>)
1039
+ 215: <span class="ruby-keyword kw">end</span>
1040
+ 216: <span class="ruby-identifier">addToScm</span>(<span class="ruby-value str">'Adding new directory to all.tji'</span>, <span class="ruby-identifier">allFile</span>)
1041
+ 217: <span class="ruby-keyword kw">end</span>
1042
+ 218:
1043
+ 219: <span class="ruby-identifier">text</span> = <span class="ruby-value str">Report from #{getResourceName} for the period ending #{@date}:</span>
1044
+ 220:
1045
+ 221: <span class="ruby-comment cmt"># Add warnings if we had any.</span>
1046
+ 222: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@warnings</span>.<span class="ruby-identifier">empty?</span>
1047
+ 223: <span class="ruby-identifier">text</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">Your report does contain some issues that you may want to fix or address withyour manager or project manager:#{@warnings}</span>
1048
+ 224: <span class="ruby-keyword kw">end</span>
1049
+ 225:
1050
+ 226: <span class="ruby-comment cmt"># Append the pretty printed version of the submitted status sheet.</span>
1051
+ 227: <span class="ruby-identifier">text</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@report</span>
1052
+ 228:
1053
+ 229: <span class="ruby-comment cmt"># Send out the email.</span>
1054
+ 230: <span class="ruby-identifier">sendEmail</span>(<span class="ruby-ivar">@submitter</span>, <span class="ruby-identifier">sprintf</span>(<span class="ruby-ivar">@emailSubject</span>, <span class="ruby-identifier">getResourceName</span>, <span class="ruby-ivar">@date</span>), <span class="ruby-identifier">text</span>,
1055
+ 231: <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@messageId</span>)
1056
+ 232: <span class="ruby-keyword kw">true</span>
1057
+ 233: <span class="ruby-keyword kw">end</span></pre>
1027
1058
  </div>
1028
1059
 
1029
1060
  </div>
@@ -1035,7 +1066,7 @@ accessed via tj3client.
1035
1066
 
1036
1067
 
1037
1068
  <div id="generate-nclusion-ile-method" class="method-detail ">
1038
- <a name="M001167"></a>
1069
+ <a name="method-i-generateInclusionFile"></a>
1039
1070
 
1040
1071
  <div class="method-heading">
1041
1072
 
@@ -1058,24 +1089,24 @@ this directory as well.
1058
1089
  <div class="method-source-code"
1059
1090
  id="generate-nclusion-ile-source">
1060
1091
  <pre>
1061
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 229</span>
1062
- 229: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateInclusionFile</span>(<span class="ruby-identifier">dir</span>)
1063
- 230: <span class="ruby-identifier">pwd</span> = <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">pwd</span>
1064
- 231: <span class="ruby-keyword kw">begin</span>
1065
- 232: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">dir</span>)
1066
- 233: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-value str">'all.tji'</span>, <span class="ruby-value str">'w'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
1067
- 234: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-value str">'*.tji'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">tji</span><span class="ruby-operator">|</span>
1068
- 235: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">puts</span>(<span class="ruby-node">&quot;include '#{tji}' { }&quot;</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">tji</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'all.tji'</span>
1069
- 236: <span class="ruby-keyword kw">end</span>
1070
- 237: <span class="ruby-keyword kw">end</span>
1071
- 238: <span class="ruby-keyword kw">rescue</span>
1072
- 239: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't create inclusion file: #{$!}&quot;</span>)
1073
- 240: <span class="ruby-keyword kw">ensure</span>
1074
- 241: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">pwd</span>)
1075
- 242: <span class="ruby-keyword kw">end</span>
1076
- 243: <span class="ruby-comment cmt"># Report the change to the SCM handler.</span>
1077
- 244: <span class="ruby-identifier">addToScm</span>(<span class="ruby-value str">'Adding/updating summary include file.'</span>, <span class="ruby-node">&quot;#{dir}/all.tji&quot;</span>)
1078
- 245: <span class="ruby-keyword kw">end</span></pre>
1092
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 247</span>
1093
+ 247: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateInclusionFile</span>(<span class="ruby-identifier">dir</span>)
1094
+ 248: <span class="ruby-identifier">pwd</span> = <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">pwd</span>
1095
+ 249: <span class="ruby-keyword kw">begin</span>
1096
+ 250: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">dir</span>)
1097
+ 251: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-value str">'all.tji'</span>, <span class="ruby-value str">'w'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
1098
+ 252: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-value str">'*.tji'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">tji</span><span class="ruby-operator">|</span>
1099
+ 253: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">puts</span>(<span class="ruby-node">&quot;include '#{tji}' { }&quot;</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">tji</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'all.tji'</span>
1100
+ 254: <span class="ruby-keyword kw">end</span>
1101
+ 255: <span class="ruby-keyword kw">end</span>
1102
+ 256: <span class="ruby-keyword kw">rescue</span>
1103
+ 257: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Can't create inclusion file: #{$!}&quot;</span>)
1104
+ 258: <span class="ruby-keyword kw">ensure</span>
1105
+ 259: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">pwd</span>)
1106
+ 260: <span class="ruby-keyword kw">end</span>
1107
+ 261: <span class="ruby-comment cmt"># Report the change to the SCM handler.</span>
1108
+ 262: <span class="ruby-identifier">addToScm</span>(<span class="ruby-value str">'Adding/updating summary include file.'</span>, <span class="ruby-node">&quot;#{dir}/all.tji&quot;</span>)
1109
+ 263: <span class="ruby-keyword kw">end</span></pre>
1079
1110
  </div>
1080
1111
 
1081
1112
  </div>
@@ -1087,7 +1118,7 @@ this directory as well.
1087
1118
 
1088
1119
 
1089
1120
  <div id="get-esource-mail-method" class="method-detail ">
1090
- <a name="M001173"></a>
1121
+ <a name="method-i-getResourceEmail"></a>
1091
1122
 
1092
1123
  <div class="method-heading">
1093
1124
 
@@ -1106,15 +1137,15 @@ this directory as well.
1106
1137
  <div class="method-source-code"
1107
1138
  id="get-esource-mail-source">
1108
1139
  <pre>
1109
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 335</span>
1110
- 335: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getResourceEmail</span>(<span class="ruby-identifier">id</span> = <span class="ruby-ivar">@resourceId</span>)
1111
- 336: <span class="ruby-identifier">getResourceList</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@resourceList</span>
1112
- 337:
1113
- 338: <span class="ruby-ivar">@resourceList</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1114
- 339: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">resource</span>[<span class="ruby-value">2</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">id</span>
1115
- 340: <span class="ruby-keyword kw">end</span>
1116
- 341: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Resource ID '#{id}' not found in list&quot;</span>)
1117
- 342: <span class="ruby-keyword kw">end</span></pre>
1140
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 353</span>
1141
+ 353: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getResourceEmail</span>(<span class="ruby-identifier">id</span> = <span class="ruby-ivar">@resourceId</span>)
1142
+ 354: <span class="ruby-identifier">getResourceList</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@resourceList</span>
1143
+ 355:
1144
+ 356: <span class="ruby-ivar">@resourceList</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1145
+ 357: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">resource</span>[<span class="ruby-value">2</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">id</span>
1146
+ 358: <span class="ruby-keyword kw">end</span>
1147
+ 359: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Resource ID '#{id}' not found in list&quot;</span>)
1148
+ 360: <span class="ruby-keyword kw">end</span></pre>
1118
1149
  </div>
1119
1150
 
1120
1151
  </div>
@@ -1126,7 +1157,7 @@ this directory as well.
1126
1157
 
1127
1158
 
1128
1159
  <div id="get-esource-ist-method" class="method-detail ">
1129
- <a name="M001172"></a>
1160
+ <a name="method-i-getResourceList"></a>
1130
1161
 
1131
1162
  <div class="method-heading">
1132
1163
 
@@ -1150,19 +1181,19 @@ href="../String.html">String</a> objects.
1150
1181
  <div class="method-source-code"
1151
1182
  id="get-esource-ist-source">
1152
1183
  <pre>
1153
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 322</span>
1154
- 322: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getResourceList</span>
1155
- 323: <span class="ruby-identifier">fatal</span>(<span class="ruby-value str">'@date not set'</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@date</span>
1156
- 324:
1157
- 325: <span class="ruby-identifier">fileName</span> = <span class="ruby-node">&quot;#{@templateDir}/#{@date}/resources.yml&quot;</span>
1158
- 326: <span class="ruby-keyword kw">begin</span>
1159
- 327: <span class="ruby-ivar">@resourceList</span> = <span class="ruby-constant">YAML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">fileName</span>))
1160
- 328: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;#{@resourceList.length} resources loaded&quot;</span>)
1161
- 329: <span class="ruby-keyword kw">rescue</span>
1162
- 330: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Cannot read resource file #{fileName}: #{$!}&quot;</span>)
1163
- 331: <span class="ruby-keyword kw">end</span>
1164
- 332: <span class="ruby-ivar">@resourceList</span>
1165
- 333: <span class="ruby-keyword kw">end</span></pre>
1184
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 340</span>
1185
+ 340: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getResourceList</span>
1186
+ 341: <span class="ruby-identifier">fatal</span>(<span class="ruby-value str">'@date not set'</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@date</span>
1187
+ 342:
1188
+ 343: <span class="ruby-identifier">fileName</span> = <span class="ruby-node">&quot;#{@templateDir}/#{@date}/resources.yml&quot;</span>
1189
+ 344: <span class="ruby-keyword kw">begin</span>
1190
+ 345: <span class="ruby-ivar">@resourceList</span> = <span class="ruby-constant">YAML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">fileName</span>))
1191
+ 346: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;#{@resourceList.length} resources loaded&quot;</span>)
1192
+ 347: <span class="ruby-keyword kw">rescue</span>
1193
+ 348: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Cannot read resource file #{fileName}: #{$!}&quot;</span>)
1194
+ 349: <span class="ruby-keyword kw">end</span>
1195
+ 350: <span class="ruby-ivar">@resourceList</span>
1196
+ 351: <span class="ruby-keyword kw">end</span></pre>
1166
1197
  </div>
1167
1198
 
1168
1199
  </div>
@@ -1174,7 +1205,7 @@ href="../String.html">String</a> objects.
1174
1205
 
1175
1206
 
1176
1207
  <div id="get-esource-ame-method" class="method-detail ">
1177
- <a name="M001174"></a>
1208
+ <a name="method-i-getResourceName"></a>
1178
1209
 
1179
1210
  <div class="method-heading">
1180
1211
 
@@ -1193,15 +1224,15 @@ href="../String.html">String</a> objects.
1193
1224
  <div class="method-source-code"
1194
1225
  id="get-esource-ame-source">
1195
1226
  <pre>
1196
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 344</span>
1197
- 344: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getResourceName</span>(<span class="ruby-identifier">id</span> = <span class="ruby-ivar">@resourceId</span>)
1198
- 345: <span class="ruby-identifier">getResourceList</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@resourceList</span>
1199
- 346:
1200
- 347: <span class="ruby-ivar">@resourceList</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1201
- 348: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">resource</span>[<span class="ruby-value">1</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">id</span>
1202
- 349: <span class="ruby-keyword kw">end</span>
1203
- 350: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Resource ID '#{id}' not found in list&quot;</span>)
1204
- 351: <span class="ruby-keyword kw">end</span></pre>
1227
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 362</span>
1228
+ 362: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getResourceName</span>(<span class="ruby-identifier">id</span> = <span class="ruby-ivar">@resourceId</span>)
1229
+ 363: <span class="ruby-identifier">getResourceList</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@resourceList</span>
1230
+ 364:
1231
+ 365: <span class="ruby-ivar">@resourceList</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1232
+ 366: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">resource</span>[<span class="ruby-value">1</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">id</span>
1233
+ 367: <span class="ruby-keyword kw">end</span>
1234
+ 368: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Resource ID '#{id}' not found in list&quot;</span>)
1235
+ 369: <span class="ruby-keyword kw">end</span></pre>
1205
1236
  </div>
1206
1237
 
1207
1238
  </div>
@@ -1213,7 +1244,7 @@ href="../String.html">String</a> objects.
1213
1244
 
1214
1245
 
1215
1246
  <div id="process-heet-method" class="method-detail ">
1216
- <a name="M001164"></a>
1247
+ <a name="method-i-processSheet"></a>
1217
1248
 
1218
1249
  <div class="method-heading">
1219
1250
 
@@ -1234,32 +1265,39 @@ Isolate the actual syntax from <em>sheet</em> and process it.
1234
1265
  <div class="method-source-code"
1235
1266
  id="process-heet-source">
1236
1267
  <pre>
1237
- <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 116</span>
1238
- 116: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">processSheet</span>(<span class="ruby-identifier">sheet</span>)
1239
- 117: <span class="ruby-comment cmt"># Store the detected sheet so we can include it with error reports if</span>
1240
- 118: <span class="ruby-comment cmt"># needed.</span>
1241
- 119: <span class="ruby-ivar">@sheet</span> = <span class="ruby-identifier">cutOut</span>(<span class="ruby-identifier">fixLineBreaks</span>(<span class="ruby-identifier">sheet</span>))
1242
- 120: <span class="ruby-comment cmt"># A valid sheet must have the poper header line.</span>
1243
- 121: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@sheetHeader</span>.<span class="ruby-identifier">match</span>(<span class="ruby-ivar">@sheet</span>)
1244
- 122: <span class="ruby-identifier">checkSignature</span>(<span class="ruby-ivar">@sheet</span>)
1245
- 123: <span class="ruby-comment cmt"># Extract the resource ID and the end date from the sheet.</span>
1246
- 124: <span class="ruby-identifier">matches</span> = <span class="ruby-ivar">@sheetHeader</span>.<span class="ruby-identifier">match</span>(<span class="ruby-ivar">@sheet</span>)
1247
- 125: <span class="ruby-ivar">@resourceId</span>, <span class="ruby-ivar">@date</span> = <span class="ruby-identifier">matches</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">2</span>]
1248
- 126: <span class="ruby-comment cmt"># Email answers will only go the email address on file!</span>
1249
- 127: <span class="ruby-ivar">@submitter</span> = <span class="ruby-identifier">getResourceEmail</span>(<span class="ruby-ivar">@resourceId</span>)
1250
- 128: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Found #{@sheetWasAttached ? 'attached ' : ''}sheet for &quot;</span> <span class="ruby-operator">+</span>
1251
- 129: <span class="ruby-node">&quot;#{@resourceId} dated #{@date}&quot;</span>)
1252
- 130: <span class="ruby-comment cmt"># Ok, found. Now check the full sheet.</span>
1253
- 131: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">checkSheet</span>(<span class="ruby-ivar">@sheet</span>)
1254
- 132: <span class="ruby-comment cmt"># Everything is fine. Store it away.</span>
1255
- 133: <span class="ruby-identifier">fileSheet</span>(<span class="ruby-ivar">@sheet</span>)
1256
- 134: <span class="ruby-comment cmt"># Remove the mail from the failedMailsDir</span>
1257
- 135: <span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-node">&quot;#{@failedMailsDir}/#{@idDigest}&quot;</span>)
1258
- 136: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Accepted sheet for #{@resourceId} dated #{@date}&quot;</span>)
1259
- 137: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
1260
- 138: <span class="ruby-keyword kw">end</span>
1261
- 139: <span class="ruby-keyword kw">end</span>
1262
- 140: <span class="ruby-keyword kw">end</span></pre>
1268
+ <span class="ruby-comment cmt"># File lib/SheetReceiver.rb, line 127</span>
1269
+ 127: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">processSheet</span>(<span class="ruby-identifier">sheet</span>)
1270
+ 128: <span class="ruby-comment cmt"># Make sure the sheet is really valid UTF-8</span>
1271
+ 129: <span class="ruby-keyword kw">begin</span>
1272
+ 130: <span class="ruby-identifier">sheet</span>.<span class="ruby-identifier">encode!</span>(<span class="ruby-value str">'UTF-8'</span>)
1273
+ 131: <span class="ruby-keyword kw">rescue</span>
1274
+ 132: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;The sheet contains badly encoded characters. #{$!}&quot;</span>)
1275
+ 133: <span class="ruby-keyword kw">end</span>
1276
+ 134: <span class="ruby-comment cmt"># Store the detected sheet so we can include it with error reports if</span>
1277
+ 135: <span class="ruby-comment cmt"># needed.</span>
1278
+ 136: <span class="ruby-ivar">@sheet</span> = <span class="ruby-identifier">fixLineBreaks</span>(<span class="ruby-identifier">sheet</span>)
1279
+ 137: <span class="ruby-ivar">@sheet</span> = <span class="ruby-identifier">cutOut</span>(<span class="ruby-ivar">@sheet</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@sheetWasAttached</span>
1280
+ 138: <span class="ruby-comment cmt"># A valid sheet must have the poper header line.</span>
1281
+ 139: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@sheetHeader</span>.<span class="ruby-identifier">match</span>(<span class="ruby-ivar">@sheet</span>)
1282
+ 140: <span class="ruby-identifier">checkSignature</span>(<span class="ruby-ivar">@sheet</span>)
1283
+ 141: <span class="ruby-comment cmt"># Extract the resource ID and the end date from the sheet.</span>
1284
+ 142: <span class="ruby-identifier">matches</span> = <span class="ruby-ivar">@sheetHeader</span>.<span class="ruby-identifier">match</span>(<span class="ruby-ivar">@sheet</span>)
1285
+ 143: <span class="ruby-ivar">@resourceId</span>, <span class="ruby-ivar">@date</span> = <span class="ruby-identifier">matches</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">2</span>]
1286
+ 144: <span class="ruby-comment cmt"># Email answers will only go the email address on file!</span>
1287
+ 145: <span class="ruby-ivar">@submitter</span> = <span class="ruby-identifier">getResourceEmail</span>(<span class="ruby-ivar">@resourceId</span>)
1288
+ 146: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Found #{@sheetWasAttached ? 'attached ' : ''}sheet for &quot;</span> <span class="ruby-operator">+</span>
1289
+ 147: <span class="ruby-node">&quot;#{@resourceId} dated #{@date}&quot;</span>)
1290
+ 148: <span class="ruby-comment cmt"># Ok, found. Now check the full sheet.</span>
1291
+ 149: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">checkSheet</span>(<span class="ruby-ivar">@sheet</span>)
1292
+ 150: <span class="ruby-comment cmt"># Everything is fine. Store it away.</span>
1293
+ 151: <span class="ruby-identifier">fileSheet</span>(<span class="ruby-ivar">@sheet</span>)
1294
+ 152: <span class="ruby-comment cmt"># Remove the mail from the failedMailsDir</span>
1295
+ 153: <span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-node">&quot;#{@failedMailsDir}/#{@idDigest}&quot;</span>)
1296
+ 154: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Accepted sheet for #{@resourceId} dated #{@date}&quot;</span>)
1297
+ 155: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
1298
+ 156: <span class="ruby-keyword kw">end</span>
1299
+ 157: <span class="ruby-keyword kw">end</span>
1300
+ 158: <span class="ruby-keyword kw">end</span></pre>
1263
1301
  </div>
1264
1302
 
1265
1303
  </div>