taskjuggler 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (613) hide show
  1. data/CHANGELOG +1144 -2047
  2. data/README +1 -1
  3. data/Rakefile +6 -6
  4. data/data/css/tjmanual.css +20 -0
  5. data/data/css/tjreport.css +7 -6
  6. data/doc/AppConfig.html +136 -130
  7. data/doc/Arguments.html +46 -40
  8. data/doc/CHANGELOG.html +1162 -2057
  9. data/doc/COPYING.html +8 -2
  10. data/doc/Object.html +205 -199
  11. data/doc/README.html +9 -3
  12. data/doc/RuntimeConfig.html +75 -69
  13. data/doc/String.html +69 -63
  14. data/doc/TaskJuggler.html +350 -291
  15. data/doc/TaskJuggler/Account.html +26 -20
  16. data/doc/TaskJuggler/AccountAttribute.html +24 -18
  17. data/doc/TaskJuggler/AccountScenario.html +24 -18
  18. data/doc/TaskJuggler/Allocation.html +74 -68
  19. data/doc/TaskJuggler/AllocationAttribute.html +54 -48
  20. data/doc/TaskJuggler/AttributeBase.html +172 -93
  21. data/doc/TaskJuggler/AttributeDefinition.html +22 -16
  22. data/doc/TaskJuggler/AttributeOverwrite.html +586 -0
  23. data/doc/TaskJuggler/BatchProcessor.html +263 -257
  24. data/doc/TaskJuggler/Booking.html +44 -38
  25. data/doc/TaskJuggler/BookingListAttribute.html +25 -21
  26. data/doc/TaskJuggler/BooleanAttribute.html +24 -18
  27. data/doc/TaskJuggler/CSVFile.html +193 -187
  28. data/doc/TaskJuggler/CellSettingPattern.html +13 -7
  29. data/doc/TaskJuggler/CellSettingPatternList.html +25 -19
  30. data/doc/TaskJuggler/Charge.html +49 -43
  31. data/doc/TaskJuggler/ChargeListAttribute.html +21 -15
  32. data/doc/TaskJuggler/ChargeSet.html +94 -88
  33. data/doc/TaskJuggler/ChargeSetListAttribute.html +29 -25
  34. data/doc/TaskJuggler/CollisionDetector.html +142 -136
  35. data/doc/TaskJuggler/ColumnListAttribute.html +21 -17
  36. data/doc/TaskJuggler/ColumnTable.html +50 -44
  37. data/doc/TaskJuggler/Daemon.html +71 -50
  38. data/doc/TaskJuggler/DataCache.html +110 -58
  39. data/doc/TaskJuggler/DataCacheEntry.html +22 -16
  40. data/doc/TaskJuggler/DateAttribute.html +24 -18
  41. data/doc/TaskJuggler/DefinitionListAttribute.html +12 -6
  42. data/doc/TaskJuggler/DependencyListAttribute.html +29 -25
  43. data/doc/TaskJuggler/DurationAttribute.html +25 -19
  44. data/doc/TaskJuggler/FileList.html +25 -19
  45. data/doc/TaskJuggler/FileRecord.html +17 -11
  46. data/doc/TaskJuggler/FixnumAttribute.html +16 -10
  47. data/doc/TaskJuggler/FlagListAttribute.html +25 -21
  48. data/doc/TaskJuggler/FloatAttribute.html +20 -14
  49. data/doc/TaskJuggler/FormatListAttribute.html +17 -11
  50. data/doc/TaskJuggler/GanttChart.html +242 -236
  51. data/doc/TaskJuggler/GanttContainer.html +71 -67
  52. data/doc/TaskJuggler/GanttHeader.html +113 -107
  53. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -20
  54. data/doc/TaskJuggler/GanttLine.html +217 -210
  55. data/doc/TaskJuggler/GanttLoadStack.html +89 -83
  56. data/doc/TaskJuggler/GanttMilestone.html +11 -6
  57. data/doc/TaskJuggler/GanttRouter.html +194 -186
  58. data/doc/TaskJuggler/GanttTaskBar.html +41 -34
  59. data/doc/TaskJuggler/HTMLDocument.html +52 -46
  60. data/doc/TaskJuggler/HTMLGraphics.html +58 -52
  61. data/doc/TaskJuggler/Interval.html +90 -84
  62. data/doc/TaskJuggler/IntervalList.html +777 -0
  63. data/doc/TaskJuggler/IntervalListAttribute.html +29 -25
  64. data/doc/TaskJuggler/JobInfo.html +36 -30
  65. data/doc/TaskJuggler/Journal.html +188 -177
  66. data/doc/TaskJuggler/JournalEntry.html +36 -30
  67. data/doc/TaskJuggler/JournalEntryList.html +88 -82
  68. data/doc/TaskJuggler/KeywordArray.html +12 -6
  69. data/doc/TaskJuggler/KeywordDocumentation.html +512 -503
  70. data/doc/TaskJuggler/Limits.html +111 -105
  71. data/doc/TaskJuggler/Limits/Limit.html +71 -65
  72. data/doc/TaskJuggler/LimitsAttribute.html +21 -15
  73. data/doc/TaskJuggler/ListAttributeBase.html +16 -10
  74. data/doc/TaskJuggler/Log.html +111 -105
  75. data/doc/TaskJuggler/LogFile.html +54 -48
  76. data/doc/TaskJuggler/LogicalAttribute.html +35 -29
  77. data/doc/TaskJuggler/LogicalExpression.html +32 -26
  78. data/doc/TaskJuggler/LogicalExpressionAttribute.html +16 -10
  79. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +671 -0
  80. data/doc/TaskJuggler/LogicalFlag.html +24 -18
  81. data/doc/TaskJuggler/LogicalFunction.html +164 -158
  82. data/doc/TaskJuggler/LogicalOperation.html +138 -132
  83. data/doc/TaskJuggler/Macro.html +14 -8
  84. data/doc/TaskJuggler/MacroTable.html +42 -36
  85. data/doc/TaskJuggler/ManagerResponsibilities.html +19 -13
  86. data/doc/TaskJuggler/ManagerStatusRecord.html +23 -17
  87. data/doc/TaskJuggler/Message.html +56 -50
  88. data/doc/TaskJuggler/MessageHandler.html +73 -67
  89. data/doc/TaskJuggler/Navigator.html +92 -86
  90. data/doc/TaskJuggler/NavigatorElement.html +88 -82
  91. data/doc/TaskJuggler/NikuProject.html +15 -9
  92. data/doc/TaskJuggler/NikuReport.html +405 -370
  93. data/doc/TaskJuggler/NikuResource.html +13 -7
  94. data/doc/TaskJuggler/NodeListAttribute.html +13 -9
  95. data/doc/TaskJuggler/PlaceHolderCell.html +22 -16
  96. data/doc/TaskJuggler/ProcessIntercom.html +116 -110
  97. data/doc/TaskJuggler/ProcessIntercomIface.html +39 -33
  98. data/doc/TaskJuggler/Project.html +1064 -895
  99. data/doc/TaskJuggler/ProjectBroker.html +439 -366
  100. data/doc/TaskJuggler/ProjectBrokerIface.html +63 -53
  101. data/doc/TaskJuggler/ProjectFileParser.html +329 -319
  102. data/doc/TaskJuggler/ProjectFileScanner.html +351 -345
  103. data/doc/TaskJuggler/ProjectRecord.html +66 -60
  104. data/doc/TaskJuggler/ProjectServer.html +287 -280
  105. data/doc/TaskJuggler/ProjectServerIface.html +43 -37
  106. data/doc/TaskJuggler/PropertyAttribute.html +16 -10
  107. data/doc/TaskJuggler/PropertyList.html +205 -199
  108. data/doc/TaskJuggler/PropertySet.html +264 -296
  109. data/doc/TaskJuggler/PropertyTreeNode.html +455 -505
  110. data/doc/TaskJuggler/Query.html +309 -524
  111. data/doc/TaskJuggler/RTFHandlers.html +17 -11
  112. data/doc/TaskJuggler/RTFNavigator.html +33 -27
  113. data/doc/TaskJuggler/RTFQuery.html +135 -129
  114. data/doc/TaskJuggler/RTFReport.html +63 -57
  115. data/doc/TaskJuggler/RTFReportLink.html +55 -49
  116. data/doc/TaskJuggler/RTFWithQuerySupport.html +17 -11
  117. data/doc/TaskJuggler/RealFormat.html +64 -58
  118. data/doc/TaskJuggler/RealFormatAttribute.html +12 -6
  119. data/doc/TaskJuggler/ReferenceAttribute.html +35 -29
  120. data/doc/TaskJuggler/Report.html +294 -249
  121. data/doc/TaskJuggler/ReportBase.html +229 -223
  122. data/doc/TaskJuggler/ReportContext.html +52 -46
  123. data/doc/TaskJuggler/ReportServer.html +143 -137
  124. data/doc/TaskJuggler/ReportServerIface.html +51 -43
  125. data/doc/TaskJuggler/ReportServerRecord.html +36 -30
  126. data/doc/TaskJuggler/ReportServlet.html +167 -140
  127. data/doc/TaskJuggler/ReportTable.html +137 -131
  128. data/doc/TaskJuggler/ReportTableCell.html +332 -292
  129. data/doc/TaskJuggler/ReportTableColumn.html +46 -40
  130. data/doc/TaskJuggler/ReportTableLegend.html +43 -38
  131. data/doc/TaskJuggler/ReportTableLine.html +66 -60
  132. data/doc/TaskJuggler/Resource.html +166 -160
  133. data/doc/TaskJuggler/ResourceListAttribute.html +54 -32
  134. data/doc/TaskJuggler/ResourceListRE.html +47 -41
  135. data/doc/TaskJuggler/ResourceScenario.html +671 -644
  136. data/doc/TaskJuggler/RichText.html +51 -45
  137. data/doc/TaskJuggler/RichTextAttribute.html +28 -22
  138. data/doc/TaskJuggler/RichTextDocument.html +96 -90
  139. data/doc/TaskJuggler/RichTextElement.html +503 -497
  140. data/doc/TaskJuggler/RichTextFunctionExample.html +41 -35
  141. data/doc/TaskJuggler/RichTextFunctionHandler.html +19 -13
  142. data/doc/TaskJuggler/RichTextImage.html +14 -8
  143. data/doc/TaskJuggler/RichTextIntermediate.html +86 -80
  144. data/doc/TaskJuggler/RichTextParser.html +59 -53
  145. data/doc/TaskJuggler/RichTextScanner.html +184 -178
  146. data/doc/TaskJuggler/RichTextSnip.html +69 -63
  147. data/doc/TaskJuggler/RichTextSyntaxRules.html +416 -410
  148. data/doc/TaskJuggler/Scenario.html +13 -7
  149. data/doc/TaskJuggler/ScenarioData.html +40 -34
  150. data/doc/TaskJuggler/ScenarioListAttribute.html +21 -15
  151. data/doc/TaskJuggler/Scoreboard.html +129 -107
  152. data/doc/TaskJuggler/SheetHandlerBase.html +245 -239
  153. data/doc/TaskJuggler/SheetReceiver.html +333 -327
  154. data/doc/TaskJuggler/SheetSender.html +227 -221
  155. data/doc/TaskJuggler/Shift.html +26 -20
  156. data/doc/TaskJuggler/ShiftAssignment.html +45 -39
  157. data/doc/TaskJuggler/ShiftAssignments.html +178 -172
  158. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +21 -15
  159. data/doc/TaskJuggler/ShiftScenario.html +29 -23
  160. data/doc/TaskJuggler/SimpleQueryExpander.html +36 -30
  161. data/doc/TaskJuggler/SortListAttribute.html +17 -13
  162. data/doc/TaskJuggler/SourceFileInfo.html +19 -13
  163. data/doc/TaskJuggler/StatusSheetReceiver.html +31 -25
  164. data/doc/TaskJuggler/StatusSheetReport.html +166 -159
  165. data/doc/TaskJuggler/StatusSheetSender.html +80 -74
  166. data/doc/TaskJuggler/StringAttribute.html +20 -14
  167. data/doc/TaskJuggler/SymbolAttribute.html +16 -10
  168. data/doc/TaskJuggler/SyntaxReference.html +231 -225
  169. data/doc/TaskJuggler/TOCEntry.html +46 -40
  170. data/doc/TaskJuggler/TSResourceRecord.html +15 -9
  171. data/doc/TaskJuggler/TSTaskRecord.html +16 -10
  172. data/doc/TaskJuggler/TableColumnDefinition.html +84 -39
  173. data/doc/TaskJuggler/TableOfContents.html +28 -22
  174. data/doc/TaskJuggler/TableReport.html +906 -866
  175. data/doc/TaskJuggler/Task.html +99 -93
  176. data/doc/TaskJuggler/TaskDependency.html +24 -18
  177. data/doc/TaskJuggler/TaskListAttribute.html +29 -25
  178. data/doc/TaskJuggler/TaskListRE.html +46 -39
  179. data/doc/TaskJuggler/TaskScenario.html +2218 -1965
  180. data/doc/TaskJuggler/TextFormatter.html +154 -148
  181. data/doc/TaskJuggler/TextParser.html +362 -348
  182. data/doc/TaskJuggler/TextParser/Pattern.html +313 -307
  183. data/doc/TaskJuggler/TextParser/Rule.html +147 -141
  184. data/doc/TaskJuggler/TextParser/StackElement.html +58 -52
  185. data/doc/TaskJuggler/TextParser/State.html +88 -82
  186. data/doc/TaskJuggler/TextParser/StateTransition.html +42 -36
  187. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +20 -14
  188. data/doc/TaskJuggler/TextParser/TokenDoc.html +19 -13
  189. data/doc/TaskJuggler/TextReport.html +80 -74
  190. data/doc/TaskJuggler/TextScanner.html +284 -272
  191. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +14 -8
  192. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +21 -15
  193. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +15 -9
  194. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  195. data/doc/TaskJuggler/TimeSheet.html +123 -117
  196. data/doc/TaskJuggler/TimeSheetReceiver.html +28 -22
  197. data/doc/TaskJuggler/TimeSheetRecord.html +212 -206
  198. data/doc/TaskJuggler/TimeSheetReport.html +206 -199
  199. data/doc/TaskJuggler/TimeSheetSender.html +27 -21
  200. data/doc/TaskJuggler/TimeSheetSummary.html +140 -134
  201. data/doc/TaskJuggler/TimeSheets.html +20 -14
  202. data/doc/TaskJuggler/Tj3AppBase.html +100 -94
  203. data/doc/TaskJuggler/Tj3Client.html +407 -483
  204. data/doc/TaskJuggler/Tj3Daemon.html +116 -107
  205. data/doc/TaskJuggler/Tj3SheetAppBase.html +45 -39
  206. data/doc/TaskJuggler/Tj3SsReceiver.html +31 -25
  207. data/doc/TaskJuggler/Tj3SsSender.html +64 -58
  208. data/doc/TaskJuggler/Tj3TsReceiver.html +31 -25
  209. data/doc/TaskJuggler/Tj3TsSender.html +51 -45
  210. data/doc/TaskJuggler/Tj3TsSummary.html +59 -53
  211. data/doc/TaskJuggler/TjException.html +13 -7
  212. data/doc/TaskJuggler/TjTime.html +444 -438
  213. data/doc/TaskJuggler/TjpExample.html +84 -78
  214. data/doc/TaskJuggler/TjpExportRE.html +356 -349
  215. data/doc/TaskJuggler/TjpSyntaxRules.html +4279 -4151
  216. data/doc/TaskJuggler/URLParameter.html +16 -10
  217. data/doc/TaskJuggler/UserManual.html +185 -179
  218. data/doc/TaskJuggler/VimSyntax.html +144 -138
  219. data/doc/TaskJuggler/WebServer.html +46 -39
  220. data/doc/TaskJuggler/WelcomePage.html +769 -0
  221. data/doc/TaskJuggler/WorkingHours.html +185 -179
  222. data/doc/TaskJuggler/WorkingHoursAttribute.html +42 -36
  223. data/doc/TaskJuggler/XMLBlob.html +21 -15
  224. data/doc/TaskJuggler/XMLComment.html +17 -11
  225. data/doc/TaskJuggler/XMLDocument.html +33 -27
  226. data/doc/TaskJuggler/XMLElement.html +97 -91
  227. data/doc/TaskJuggler/XMLNamedText.html +13 -7
  228. data/doc/TaskJuggler/XMLText.html +32 -26
  229. data/doc/index.html +601 -563
  230. data/doc/lib/AccountScenario_rb.html +5 -3
  231. data/doc/lib/Account_rb.html +5 -3
  232. data/doc/lib/Allocation_rb.html +5 -3
  233. data/doc/lib/AppConfig_rb.html +5 -3
  234. data/doc/lib/AttributeBase_rb.html +5 -3
  235. data/doc/lib/AttributeDefinition_rb.html +5 -3
  236. data/doc/lib/Attributes_rb.html +5 -3
  237. data/doc/lib/BatchProcessor_rb.html +5 -3
  238. data/doc/lib/Booking_rb.html +5 -3
  239. data/doc/lib/ChargeSet_rb.html +5 -3
  240. data/doc/lib/Charge_rb.html +5 -3
  241. data/doc/lib/DataCache_rb.html +5 -3
  242. data/doc/lib/FileList_rb.html +5 -3
  243. data/doc/lib/HTMLDocument_rb.html +5 -3
  244. data/doc/lib/IntervalList_rb.html +69 -0
  245. data/doc/lib/Interval_rb.html +5 -3
  246. data/doc/lib/Journal_rb.html +5 -3
  247. data/doc/lib/KeywordArray_rb.html +5 -3
  248. data/doc/lib/KeywordDocumentation_rb.html +5 -3
  249. data/doc/lib/Limits_rb.html +5 -3
  250. data/doc/lib/LogFile_rb.html +5 -3
  251. data/doc/lib/Log_rb.html +5 -3
  252. data/doc/lib/LogicalExpression_rb.html +5 -3
  253. data/doc/lib/LogicalFunction_rb.html +5 -3
  254. data/doc/lib/LogicalOperation_rb.html +5 -3
  255. data/doc/lib/MacroTable_rb.html +5 -3
  256. data/doc/lib/MessageHandler_rb.html +5 -3
  257. data/doc/lib/ProjectFileParser_rb.html +5 -3
  258. data/doc/lib/ProjectFileScanner_rb.html +5 -3
  259. data/doc/lib/Project_rb.html +5 -3
  260. data/doc/lib/PropertyList_rb.html +5 -3
  261. data/doc/lib/PropertySet_rb.html +5 -3
  262. data/doc/lib/PropertyTreeNode_rb.html +5 -3
  263. data/doc/lib/Query_rb.html +5 -3
  264. data/doc/lib/RTFHandlers_rb.html +5 -3
  265. data/doc/lib/RTFNavigator_rb.html +5 -3
  266. data/doc/lib/RTFQuery_rb.html +5 -3
  267. data/doc/lib/RTFReportLink_rb.html +5 -3
  268. data/doc/lib/RTFReport_rb.html +5 -3
  269. data/doc/lib/RTFWithQuerySupport_rb.html +5 -3
  270. data/doc/lib/RealFormat_rb.html +5 -3
  271. data/doc/lib/ResourceScenario_rb.html +5 -3
  272. data/doc/lib/Resource_rb.html +5 -3
  273. data/doc/lib/RichTextDocument_rb.html +5 -3
  274. data/doc/lib/RichTextElement_rb.html +5 -3
  275. data/doc/lib/RichTextFunctionExample_rb.html +5 -3
  276. data/doc/lib/RichTextFunctionHandler_rb.html +5 -3
  277. data/doc/lib/RichTextParser_rb.html +5 -3
  278. data/doc/lib/RichTextScanner_rb.html +5 -3
  279. data/doc/lib/RichTextSnip_rb.html +5 -3
  280. data/doc/lib/RichTextSyntaxRules_rb.html +5 -3
  281. data/doc/lib/RichText_rb.html +5 -3
  282. data/doc/lib/RuntimeConfig_rb.html +5 -3
  283. data/doc/lib/ScenarioData_rb.html +5 -3
  284. data/doc/lib/Scenario_rb.html +5 -3
  285. data/doc/lib/Scoreboard_rb.html +7 -3
  286. data/doc/lib/SheetHandlerBase_rb.html +5 -3
  287. data/doc/lib/SheetReceiver_rb.html +5 -3
  288. data/doc/lib/SheetSender_rb.html +5 -3
  289. data/doc/lib/ShiftAssignments_rb.html +5 -3
  290. data/doc/lib/ShiftScenario_rb.html +5 -3
  291. data/doc/lib/Shift_rb.html +5 -3
  292. data/doc/lib/SimpleQueryExpander_rb.html +5 -3
  293. data/doc/lib/SourceFileInfo_rb.html +5 -3
  294. data/doc/lib/StatusSheetReceiver_rb.html +5 -3
  295. data/doc/lib/StatusSheetSender_rb.html +5 -3
  296. data/doc/lib/SyntaxReference_rb.html +5 -3
  297. data/doc/lib/TOCEntry_rb.html +5 -3
  298. data/doc/lib/TableColumnDefinition_rb.html +5 -3
  299. data/doc/lib/TableOfContents_rb.html +5 -3
  300. data/doc/lib/TaskDependency_rb.html +5 -3
  301. data/doc/lib/TaskJuggler_rb.html +5 -3
  302. data/doc/lib/TaskScenario_rb.html +5 -3
  303. data/doc/lib/Task_rb.html +5 -3
  304. data/doc/lib/TextFormatter_rb.html +6 -4
  305. data/doc/lib/TextParser/Pattern_rb.html +5 -3
  306. data/doc/lib/TextParser/Rule_rb.html +5 -3
  307. data/doc/lib/TextParser/StackElement_rb.html +5 -3
  308. data/doc/lib/TextParser/State_rb.html +6 -4
  309. data/doc/lib/TextParser/TokenDoc_rb.html +5 -3
  310. data/doc/lib/TextParser_rb.html +5 -3
  311. data/doc/lib/TextScanner_rb.html +5 -3
  312. data/doc/lib/TimeSheetReceiver_rb.html +5 -3
  313. data/doc/lib/TimeSheetSender_rb.html +5 -3
  314. data/doc/lib/TimeSheetSummary_rb.html +6 -4
  315. data/doc/lib/TimeSheets_rb.html +5 -3
  316. data/doc/lib/Tj3AppBase_rb.html +5 -3
  317. data/doc/lib/Tj3Config_rb.html +5 -3
  318. data/doc/lib/Tj3SheetAppBase_rb.html +5 -3
  319. data/doc/lib/TjException_rb.html +5 -3
  320. data/doc/lib/TjTime_rb.html +5 -3
  321. data/doc/lib/TjpExample_rb.html +5 -3
  322. data/doc/lib/TjpSyntaxRules_rb.html +5 -3
  323. data/doc/lib/URLParameter_rb.html +5 -3
  324. data/doc/lib/UTF8String_rb.html +5 -3
  325. data/doc/lib/UserManual_rb.html +5 -3
  326. data/doc/lib/VimSyntax_rb.html +6 -4
  327. data/doc/lib/WorkingHours_rb.html +5 -3
  328. data/doc/lib/XMLDocument_rb.html +5 -3
  329. data/doc/lib/XMLElement_rb.html +5 -3
  330. data/doc/lib/daemon/Daemon_rb.html +5 -3
  331. data/doc/lib/daemon/ProcessIntercom_rb.html +7 -3
  332. data/doc/lib/daemon/ProjectBroker_rb.html +5 -3
  333. data/doc/lib/daemon/ProjectServer_rb.html +5 -3
  334. data/doc/lib/daemon/ReportServer_rb.html +5 -3
  335. data/doc/lib/daemon/ReportServlet_rb.html +69 -0
  336. data/doc/lib/daemon/WebServer_rb.html +9 -3
  337. data/doc/lib/daemon/WelcomePage_rb.html +71 -0
  338. data/doc/lib/deep_copy_rb.html +5 -3
  339. data/doc/lib/reports/CSVFile_rb.html +5 -3
  340. data/doc/lib/reports/CollisionDetector_rb.html +5 -3
  341. data/doc/lib/reports/ColumnTable_rb.html +5 -3
  342. data/doc/lib/reports/GanttChart_rb.html +5 -3
  343. data/doc/lib/reports/GanttContainer_rb.html +5 -3
  344. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +5 -3
  345. data/doc/lib/reports/GanttHeader_rb.html +5 -3
  346. data/doc/lib/reports/GanttLine_rb.html +5 -3
  347. data/doc/lib/reports/GanttLoadStack_rb.html +5 -3
  348. data/doc/lib/reports/GanttMilestone_rb.html +5 -3
  349. data/doc/lib/reports/GanttRouter_rb.html +5 -3
  350. data/doc/lib/reports/GanttTaskBar_rb.html +5 -3
  351. data/doc/lib/reports/HTMLGraphics_rb.html +5 -3
  352. data/doc/lib/reports/Navigator_rb.html +5 -3
  353. data/doc/lib/reports/NikuReport_rb.html +5 -3
  354. data/doc/lib/reports/ReportBase_rb.html +5 -3
  355. data/doc/lib/reports/ReportContext_rb.html +5 -3
  356. data/doc/lib/reports/ReportTableCell_rb.html +5 -3
  357. data/doc/lib/reports/ReportTableColumn_rb.html +5 -3
  358. data/doc/lib/reports/ReportTableLegend_rb.html +5 -3
  359. data/doc/lib/reports/ReportTableLine_rb.html +5 -3
  360. data/doc/lib/reports/ReportTable_rb.html +5 -3
  361. data/doc/lib/reports/Report_rb.html +5 -3
  362. data/doc/lib/reports/ResourceListRE_rb.html +5 -3
  363. data/doc/lib/reports/StatusSheetReport_rb.html +5 -3
  364. data/doc/lib/reports/TableReport_rb.html +5 -3
  365. data/doc/lib/reports/TaskListRE_rb.html +5 -3
  366. data/doc/lib/reports/TextReport_rb.html +5 -3
  367. data/doc/lib/reports/TimeSheetReport_rb.html +5 -3
  368. data/doc/lib/reports/TjpExportRE_rb.html +5 -3
  369. data/doc/lib/{taskjuggler3_rb.html → tj3_rb.html} +7 -5
  370. data/doc/lib/tj3client_rb.html +5 -3
  371. data/doc/lib/tj3d_rb.html +6 -4
  372. data/doc/lib/tj3man_rb.html +5 -3
  373. data/doc/lib/tj3ss_receiver_rb.html +5 -3
  374. data/doc/lib/tj3ss_sender_rb.html +5 -3
  375. data/doc/lib/tj3ts_receiver_rb.html +5 -3
  376. data/doc/lib/tj3ts_sender_rb.html +5 -3
  377. data/doc/lib/tj3ts_summary_rb.html +5 -3
  378. data/examples/tutorial.tjp +13 -5
  379. data/gem_spec.rb +3 -0
  380. data/lib/Account.rb +2 -1
  381. data/lib/AccountScenario.rb +2 -1
  382. data/lib/Allocation.rb +2 -1
  383. data/lib/AppConfig.rb +2 -1
  384. data/lib/AttributeBase.rb +19 -5
  385. data/lib/AttributeDefinition.rb +2 -1
  386. data/lib/Attributes.rb +49 -38
  387. data/lib/BatchProcessor.rb +2 -1
  388. data/lib/Booking.rb +2 -1
  389. data/lib/Charge.rb +2 -1
  390. data/lib/ChargeSet.rb +2 -1
  391. data/lib/DataCache.rb +15 -1
  392. data/lib/FileList.rb +2 -1
  393. data/lib/HTMLDocument.rb +2 -1
  394. data/lib/Interval.rb +2 -1
  395. data/lib/IntervalList.rb +100 -0
  396. data/lib/Journal.rb +8 -2
  397. data/lib/KeywordArray.rb +2 -1
  398. data/lib/KeywordDocumentation.rb +10 -6
  399. data/lib/Limits.rb +2 -1
  400. data/lib/Log.rb +3 -2
  401. data/lib/LogFile.rb +2 -1
  402. data/lib/LogicalExpression.rb +2 -1
  403. data/lib/LogicalFunction.rb +2 -1
  404. data/lib/LogicalOperation.rb +2 -1
  405. data/lib/MacroTable.rb +2 -1
  406. data/lib/MessageHandler.rb +2 -1
  407. data/lib/Project.rb +92 -25
  408. data/lib/ProjectFileParser.rb +7 -2
  409. data/lib/ProjectFileScanner.rb +2 -1
  410. data/lib/PropertyList.rb +2 -1
  411. data/lib/PropertySet.rb +2 -6
  412. data/lib/PropertyTreeNode.rb +22 -44
  413. data/lib/Query.rb +32 -13
  414. data/lib/RTFHandlers.rb +2 -1
  415. data/lib/RTFNavigator.rb +2 -1
  416. data/lib/RTFQuery.rb +3 -2
  417. data/lib/RTFReport.rb +2 -1
  418. data/lib/RTFReportLink.rb +2 -1
  419. data/lib/RTFWithQuerySupport.rb +2 -1
  420. data/lib/RealFormat.rb +2 -1
  421. data/lib/Resource.rb +2 -1
  422. data/lib/ResourceScenario.rb +35 -14
  423. data/lib/RichText.rb +2 -1
  424. data/lib/RichTextDocument.rb +2 -1
  425. data/lib/RichTextElement.rb +2 -1
  426. data/lib/RichTextFunctionExample.rb +2 -1
  427. data/lib/RichTextFunctionHandler.rb +2 -1
  428. data/lib/RichTextParser.rb +2 -1
  429. data/lib/RichTextScanner.rb +2 -1
  430. data/lib/RichTextSnip.rb +2 -1
  431. data/lib/RichTextSyntaxRules.rb +2 -1
  432. data/lib/RuntimeConfig.rb +2 -1
  433. data/lib/Scenario.rb +2 -1
  434. data/lib/ScenarioData.rb +2 -1
  435. data/lib/Scoreboard.rb +27 -8
  436. data/lib/SheetHandlerBase.rb +2 -1
  437. data/lib/SheetReceiver.rb +2 -1
  438. data/lib/SheetSender.rb +2 -1
  439. data/lib/Shift.rb +2 -1
  440. data/lib/ShiftAssignments.rb +2 -1
  441. data/lib/ShiftScenario.rb +2 -1
  442. data/lib/SimpleQueryExpander.rb +2 -1
  443. data/lib/SourceFileInfo.rb +2 -1
  444. data/lib/StatusSheetReceiver.rb +2 -1
  445. data/lib/StatusSheetSender.rb +2 -1
  446. data/lib/SyntaxReference.rb +2 -1
  447. data/lib/TOCEntry.rb +2 -1
  448. data/lib/TableColumnDefinition.rb +9 -2
  449. data/lib/TableOfContents.rb +2 -1
  450. data/lib/Task.rb +2 -1
  451. data/lib/TaskDependency.rb +2 -1
  452. data/lib/TaskJuggler.rb +8 -6
  453. data/lib/TaskScenario.rb +337 -153
  454. data/lib/TextFormatter.rb +3 -2
  455. data/lib/TextParser.rb +7 -2
  456. data/lib/TextParser/Pattern.rb +2 -1
  457. data/lib/TextParser/Rule.rb +2 -1
  458. data/lib/TextParser/StackElement.rb +2 -1
  459. data/lib/TextParser/State.rb +3 -2
  460. data/lib/TextParser/TokenDoc.rb +2 -1
  461. data/lib/TextScanner.rb +12 -5
  462. data/lib/TimeSheetReceiver.rb +2 -1
  463. data/lib/TimeSheetSender.rb +2 -1
  464. data/lib/TimeSheetSummary.rb +3 -2
  465. data/lib/TimeSheets.rb +2 -1
  466. data/lib/Tj3AppBase.rb +6 -5
  467. data/lib/Tj3Config.rb +5 -4
  468. data/lib/Tj3SheetAppBase.rb +2 -1
  469. data/lib/TjException.rb +2 -1
  470. data/lib/TjTime.rb +2 -1
  471. data/lib/TjpExample.rb +2 -1
  472. data/lib/TjpSyntaxRules.rb +264 -65
  473. data/lib/URLParameter.rb +2 -1
  474. data/lib/UTF8String.rb +2 -1
  475. data/lib/UserManual.rb +2 -1
  476. data/lib/VimSyntax.rb +3 -2
  477. data/lib/WorkingHours.rb +2 -1
  478. data/lib/XMLDocument.rb +2 -1
  479. data/lib/XMLElement.rb +2 -1
  480. data/lib/daemon/Daemon.rb +3 -1
  481. data/lib/daemon/ProcessIntercom.rb +3 -1
  482. data/lib/daemon/ProjectBroker.rb +84 -32
  483. data/lib/daemon/ProjectServer.rb +5 -3
  484. data/lib/daemon/ReportServer.rb +8 -5
  485. data/lib/daemon/ReportServlet.rb +166 -0
  486. data/lib/daemon/WebServer.rb +6 -150
  487. data/lib/daemon/WelcomePage.rb +80 -0
  488. data/lib/deep_copy.rb +2 -1
  489. data/lib/reports/CSVFile.rb +2 -1
  490. data/lib/reports/CollisionDetector.rb +2 -1
  491. data/lib/reports/ColumnTable.rb +2 -1
  492. data/lib/reports/GanttChart.rb +2 -1
  493. data/lib/reports/GanttContainer.rb +3 -4
  494. data/lib/reports/GanttHeader.rb +2 -1
  495. data/lib/reports/GanttHeaderScaleItem.rb +2 -1
  496. data/lib/reports/GanttLine.rb +12 -10
  497. data/lib/reports/GanttLoadStack.rb +2 -1
  498. data/lib/reports/GanttMilestone.rb +3 -3
  499. data/lib/reports/GanttRouter.rb +4 -1
  500. data/lib/reports/GanttTaskBar.rb +9 -7
  501. data/lib/reports/HTMLGraphics.rb +2 -1
  502. data/lib/reports/Navigator.rb +2 -1
  503. data/lib/reports/NikuReport.rb +79 -49
  504. data/lib/reports/Report.rb +42 -10
  505. data/lib/reports/ReportBase.rb +2 -1
  506. data/lib/reports/ReportContext.rb +2 -1
  507. data/lib/reports/ReportTable.rb +2 -1
  508. data/lib/reports/ReportTableCell.rb +63 -28
  509. data/lib/reports/ReportTableColumn.rb +2 -1
  510. data/lib/reports/ReportTableLegend.rb +5 -5
  511. data/lib/reports/ReportTableLine.rb +2 -1
  512. data/lib/reports/ResourceListRE.rb +2 -1
  513. data/lib/reports/StatusSheetReport.rb +4 -2
  514. data/lib/reports/TableReport.rb +42 -38
  515. data/lib/reports/TaskListRE.rb +4 -2
  516. data/lib/reports/TextReport.rb +2 -1
  517. data/lib/reports/TimeSheetReport.rb +4 -2
  518. data/lib/reports/TjpExportRE.rb +4 -2
  519. data/lib/{taskjuggler3.rb → tj3.rb} +6 -5
  520. data/lib/tj3client.rb +19 -36
  521. data/lib/tj3d.rb +6 -2
  522. data/lib/tj3man.rb +4 -3
  523. data/lib/tj3ss_receiver.rb +2 -1
  524. data/lib/tj3ss_sender.rb +2 -1
  525. data/lib/tj3ts_receiver.rb +2 -1
  526. data/lib/tj3ts_sender.rb +2 -1
  527. data/lib/tj3ts_summary.rb +2 -1
  528. data/manual/Day_To_Day_Juggling +36 -0
  529. data/manual/How_To_Contribute +9 -4
  530. data/manual/Installation +10 -3
  531. data/manual/TaskJuggler_Internals +0 -2
  532. data/manual/Tutorial +25 -3
  533. data/prj_cfg.rb +4 -2
  534. data/spec/IntervalList_spec.rb +138 -0
  535. data/spec/ProjectBroker_spec.rb +133 -0
  536. data/tasks/changelog.rake +41 -24
  537. data/tasks/csts.rake +1 -0
  538. data/tasks/gem.rake +1 -0
  539. data/tasks/rcov.rake +1 -1
  540. data/tasks/spec.rake +7 -0
  541. data/tasks/test.rake +1 -0
  542. data/test/MessageChecker.rb +2 -1
  543. data/test/TestSuite/CSV-Reports/niku.tjp +70 -0
  544. data/test/TestSuite/CSV-Reports/{celltext-Reference.csv → refs/celltext.csv} +0 -0
  545. data/test/TestSuite/CSV-Reports/refs/niku.csv +5 -0
  546. data/test/TestSuite/CSV-Reports/{resourcereport-Reference.csv → refs/resourcereport.csv} +0 -0
  547. data/test/TestSuite/CSV-Reports/{resourcereport_with_tasks-Reference.csv → refs/resourcereport_with_tasks.csv} +0 -0
  548. data/test/TestSuite/CSV-Reports/{sortByTree-Reference.csv → refs/sortByTree.csv} +0 -0
  549. data/test/TestSuite/CSV-Reports/{sortBy_duration.down-Reference.csv → refs/sortBy_duration.down.csv} +0 -0
  550. data/test/TestSuite/CSV-Reports/{sortBy_effort.up-Reference.csv → refs/sortBy_effort.up.csv} +0 -0
  551. data/test/TestSuite/CSV-Reports/{sortBy_plan.start.down-Reference.csv → refs/sortBy_plan.start.down.csv} +0 -0
  552. data/test/TestSuite/CSV-Reports/{taskreport-Reference.csv → refs/taskreport.csv} +0 -0
  553. data/test/TestSuite/CSV-Reports/{taskreport_with_resources-Reference.csv → refs/taskreport_with_resources.csv} +0 -0
  554. data/test/TestSuite/CSV-Reports/{weekly-Reference.csv → refs/weekly.csv} +0 -0
  555. data/test/TestSuite/HTML-Reports/Alerts.tjp +12 -0
  556. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
  557. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +1 -2
  558. data/test/TestSuite/Scheduler/Correct/InheritedAttributes.tjp +77 -0
  559. data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +40 -0
  560. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +2 -2
  561. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +3 -4
  562. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +2 -2
  563. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +8 -7
  564. data/test/TestSuite/Scheduler/Errors/onend_wrong_direction.tjp +19 -0
  565. data/test/TestSuite/Scheduler/Errors/onstart_wrong_direction.tjp +18 -0
  566. data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +1 -2
  567. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/boss_2002-03-02.tji +46 -0
  568. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/dev2_2002-03-02.tji +22 -0
  569. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/resources.yml +11 -0
  570. data/test/TestSuite/StatusSheets/StatusSheetTemplates/acceptable_intervals +1 -0
  571. data/test/TestSuite/StatusSheets/sender.log +256 -0
  572. data/test/TestSuite/StatusSheets/statussheets.log +9 -0
  573. data/test/TestSuite/StatusSheets/tj3d.log +395 -0
  574. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +2 -0
  575. data/test/TestSuite/Syntax/Correct/Niku.tjp +6 -1
  576. data/test/TestSuite/Syntax/Correct/Scenario.tjp +4 -1
  577. data/test/TestSuite/Syntax/Correct/Supplement.tjp +12 -5
  578. data/test/TestSuite/Syntax/Correct/TaskPrefix.tji +3 -0
  579. data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +24 -0
  580. data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -2
  581. data/test/TestSuite/Syntax/Correct/tutorial.tjp +15 -5
  582. data/test/all.rb +2 -4
  583. data/test/test_BatchProcessor.rb +2 -1
  584. data/test/test_CSV-Reports.rb +34 -23
  585. data/test/test_CSVFile.rb +2 -1
  586. data/test/test_CollisionDetector.rb +3 -2
  587. data/test/test_Journal.rb +2 -1
  588. data/test/test_Limits.rb +2 -1
  589. data/test/test_LogicalExpression.rb +2 -1
  590. data/test/test_MacroTable.rb +2 -1
  591. data/test/test_Project.rb +3 -2
  592. data/test/test_ProjectFileScanner.rb +2 -1
  593. data/test/test_PropertySet.rb +2 -1
  594. data/test/test_Query.rb +2 -1
  595. data/test/test_RealFormat.rb +2 -1
  596. data/test/test_ReportGenerator.rb +2 -1
  597. data/test/test_RichText.rb +2 -1
  598. data/test/test_Scheduler.rb +2 -1
  599. data/test/test_ShiftAssignments.rb +2 -1
  600. data/test/test_SimpleQueryExpander.rb +2 -1
  601. data/test/test_Syntax.rb +2 -1
  602. data/test/test_TextFormatter.rb +3 -2
  603. data/test/test_TjTime.rb +2 -1
  604. data/test/test_TjpExample.rb +2 -1
  605. data/test/test_URLParameter.rb +2 -1
  606. data/test/test_UTF8String.rb +2 -1
  607. data/test/test_WorkingHours.rb +2 -1
  608. data/test/test_deep_copy.rb +2 -1
  609. metadata +74 -20
  610. data/doc/StringIO.html +0 -595
  611. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +0 -46
  612. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +0 -51
  613. data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +0 -11
@@ -149,6 +149,8 @@
149
149
 
150
150
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
151
151
 
152
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
153
+
152
154
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
153
155
 
154
156
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -227,6 +229,8 @@
227
229
 
228
230
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
229
231
 
232
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
233
+
230
234
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
231
235
 
232
236
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -259,6 +263,8 @@
259
263
 
260
264
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
261
265
 
266
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
267
+
262
268
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
263
269
 
264
270
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -539,6 +545,8 @@
539
545
 
540
546
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
541
547
 
548
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
549
+
542
550
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
543
551
 
544
552
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -565,8 +573,6 @@
565
573
 
566
574
  <li><a href="../String.html">String</a></li>
567
575
 
568
- <li><a href="../StringIO.html">StringIO</a></li>
569
-
570
576
  </ul>
571
577
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
572
578
  </div>
@@ -654,33 +660,33 @@
654
660
  <div class="method-source-code"
655
661
  id="new-source">
656
662
  <pre>
657
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 24</span>
658
- 24: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">appName</span>)
659
- 25: <span class="ruby-ivar">@appName</span> = <span class="ruby-identifier">appName</span>
660
- 26: <span class="ruby-comment cmt"># User specific settings</span>
661
- 27: <span class="ruby-ivar">@smtpServer</span>= <span class="ruby-keyword kw">nil</span>
662
- 28: <span class="ruby-ivar">@senderEmail</span> = <span class="ruby-keyword kw">nil</span>
663
- 29: <span class="ruby-ivar">@workingDir</span> = <span class="ruby-keyword kw">nil</span>
664
- 30: <span class="ruby-ivar">@scmCommand</span> = <span class="ruby-keyword kw">nil</span>
665
- 31: <span class="ruby-comment cmt"># The default project ID</span>
666
- 32: <span class="ruby-ivar">@projectId</span> = <span class="ruby-value str">'prj'</span>
667
- 33:
668
- 34: <span class="ruby-comment cmt"># Controls the amount of output that is sent to the terminal.</span>
669
- 35: <span class="ruby-comment cmt"># 0: No output</span>
670
- 36: <span class="ruby-comment cmt"># 1: only errors</span>
671
- 37: <span class="ruby-comment cmt"># 2: errors and warnings</span>
672
- 38: <span class="ruby-comment cmt"># 3: All messages</span>
673
- 39: <span class="ruby-ivar">@outputLevel</span> = <span class="ruby-value">2</span>
674
- 40: <span class="ruby-comment cmt"># Controls the amount of information that is added to the log file. The</span>
675
- 41: <span class="ruby-comment cmt"># levels are identical to @outputLevel.</span>
676
- 42: <span class="ruby-ivar">@logLevel</span> = <span class="ruby-value">3</span>
677
- 43: <span class="ruby-comment cmt"># Set to true to not send any emails. Instead the email (header + body) is</span>
678
- 44: <span class="ruby-comment cmt"># printed to the terminal.</span>
679
- 45: <span class="ruby-ivar">@dryRun</span> = <span class="ruby-keyword kw">false</span>
680
- 46:
681
- 47: <span class="ruby-ivar">@logFile</span> = <span class="ruby-value str">'timesheets.log'</span>
682
- 48: <span class="ruby-ivar">@emailFailure</span> = <span class="ruby-keyword kw">false</span>
683
- 49: <span class="ruby-keyword kw">end</span></pre>
663
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 25</span>
664
+ 25: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">appName</span>)
665
+ 26: <span class="ruby-ivar">@appName</span> = <span class="ruby-identifier">appName</span>
666
+ 27: <span class="ruby-comment cmt"># User specific settings</span>
667
+ 28: <span class="ruby-ivar">@smtpServer</span>= <span class="ruby-keyword kw">nil</span>
668
+ 29: <span class="ruby-ivar">@senderEmail</span> = <span class="ruby-keyword kw">nil</span>
669
+ 30: <span class="ruby-ivar">@workingDir</span> = <span class="ruby-keyword kw">nil</span>
670
+ 31: <span class="ruby-ivar">@scmCommand</span> = <span class="ruby-keyword kw">nil</span>
671
+ 32: <span class="ruby-comment cmt"># The default project ID</span>
672
+ 33: <span class="ruby-ivar">@projectId</span> = <span class="ruby-value str">'prj'</span>
673
+ 34:
674
+ 35: <span class="ruby-comment cmt"># Controls the amount of output that is sent to the terminal.</span>
675
+ 36: <span class="ruby-comment cmt"># 0: No output</span>
676
+ 37: <span class="ruby-comment cmt"># 1: only errors</span>
677
+ 38: <span class="ruby-comment cmt"># 2: errors and warnings</span>
678
+ 39: <span class="ruby-comment cmt"># 3: All messages</span>
679
+ 40: <span class="ruby-ivar">@outputLevel</span> = <span class="ruby-value">2</span>
680
+ 41: <span class="ruby-comment cmt"># Controls the amount of information that is added to the log file. The</span>
681
+ 42: <span class="ruby-comment cmt"># levels are identical to @outputLevel.</span>
682
+ 43: <span class="ruby-ivar">@logLevel</span> = <span class="ruby-value">3</span>
683
+ 44: <span class="ruby-comment cmt"># Set to true to not send any emails. Instead the email (header + body) is</span>
684
+ 45: <span class="ruby-comment cmt"># printed to the terminal.</span>
685
+ 46: <span class="ruby-ivar">@dryRun</span> = <span class="ruby-keyword kw">false</span>
686
+ 47:
687
+ 48: <span class="ruby-ivar">@logFile</span> = <span class="ruby-value str">'timesheets.log'</span>
688
+ 49: <span class="ruby-ivar">@emailFailure</span> = <span class="ruby-keyword kw">false</span>
689
+ 50: <span class="ruby-keyword kw">end</span></pre>
684
690
  </div>
685
691
 
686
692
  </div>
@@ -717,19 +723,19 @@
717
723
  <div class="method-source-code"
718
724
  id="add-o-cm-source">
719
725
  <pre>
720
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 120</span>
721
- 120: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addToScm</span>(<span class="ruby-identifier">message</span>, <span class="ruby-identifier">fileName</span>)
722
- 121: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scmCommand</span>
723
- 122:
724
- 123: <span class="ruby-identifier">cmd</span> = <span class="ruby-ivar">@scmCommand</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/%m/</span>, <span class="ruby-identifier">message</span>)
725
- 124: <span class="ruby-identifier">cmd</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/%f/</span>, <span class="ruby-identifier">fileName</span>)
726
- 125: <span class="ruby-node">`#{cmd}`</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@dryRun</span>
727
- 126: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$?</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
728
- 127: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Added #{fileName} to SCM&quot;</span>)
729
- 128: <span class="ruby-keyword kw">else</span>
730
- 129: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;SCM command #{cmd} failed: #{$?}&quot;</span>)
731
- 130: <span class="ruby-keyword kw">end</span>
732
- 131: <span class="ruby-keyword kw">end</span></pre>
726
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 121</span>
727
+ 121: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addToScm</span>(<span class="ruby-identifier">message</span>, <span class="ruby-identifier">fileName</span>)
728
+ 122: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scmCommand</span>
729
+ 123:
730
+ 124: <span class="ruby-identifier">cmd</span> = <span class="ruby-ivar">@scmCommand</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/%m/</span>, <span class="ruby-identifier">message</span>)
731
+ 125: <span class="ruby-identifier">cmd</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/%f/</span>, <span class="ruby-identifier">fileName</span>)
732
+ 126: <span class="ruby-node">`#{cmd}`</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@dryRun</span>
733
+ 127: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$?</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
734
+ 128: <span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Added #{fileName} to SCM&quot;</span>)
735
+ 129: <span class="ruby-keyword kw">else</span>
736
+ 130: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;SCM command #{cmd} failed: #{$?}&quot;</span>)
737
+ 131: <span class="ruby-keyword kw">end</span>
738
+ 132: <span class="ruby-keyword kw">end</span></pre>
733
739
  </div>
734
740
 
735
741
  </div>
@@ -763,40 +769,40 @@ from the beginnin of the line.
763
769
  <div class="method-source-code"
764
770
  id="cut-ut-source">
765
771
  <pre>
766
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 53</span>
767
- 53: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cutOut</span>(<span class="ruby-identifier">text</span>)
768
- 54: <span class="ruby-comment cmt"># Pattern for the section start marker</span>
769
- 55: <span class="ruby-identifier">mark1</span> = <span class="ruby-node">/(.*)# --------8&lt;--------8&lt;--------/</span>
770
- 56: <span class="ruby-comment cmt"># Pattern for the section end marker</span>
771
- 57: <span class="ruby-identifier">mark2</span> = <span class="ruby-node">/# --------&gt;8--------&gt;8--------/</span>
772
- 58: <span class="ruby-comment cmt"># The cutOut section</span>
773
- 59: <span class="ruby-identifier">cutOutText</span> = <span class="ruby-keyword kw">nil</span>
774
- 60: <span class="ruby-identifier">quoteLen</span> = <span class="ruby-value">0</span>
775
- 61: <span class="ruby-identifier">quoteMarks</span> = <span class="ruby-identifier">emptyLine</span> = <span class="ruby-value str">''</span>
776
- 62: <span class="ruby-identifier">text</span>.<span class="ruby-identifier">each_line</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
777
- 63: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cutOutText</span>.<span class="ruby-identifier">nil?</span>
778
- 64: <span class="ruby-comment cmt"># We are looking for the line with the start marker (mark1)</span>
779
- 65: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">matches</span> = <span class="ruby-identifier">mark1</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">line</span>))
780
- 66: <span class="ruby-identifier">quoteMarks</span> = <span class="ruby-identifier">matches</span>[<span class="ruby-value">1</span>]
781
- 67: <span class="ruby-identifier">quoteLen</span> = <span class="ruby-identifier">quoteMarks</span>.<span class="ruby-identifier">length</span>
782
- 68: <span class="ruby-comment cmt"># Special case for quoted empty lines without trailing spaces.</span>
783
- 69: <span class="ruby-identifier">emptyLine</span> = <span class="ruby-identifier">quoteMarks</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">chomp</span>(<span class="ruby-value str">' '</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span>
784
- 70: <span class="ruby-identifier">cutOutText</span> = <span class="ruby-identifier">line</span>[<span class="ruby-identifier">quoteLen</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]
785
- 71: <span class="ruby-keyword kw">end</span>
786
- 72: <span class="ruby-keyword kw">else</span>
787
- 73: <span class="ruby-comment cmt"># Remove quote marks from the beginning of the line.</span>
788
- 74: <span class="ruby-identifier">line</span> = <span class="ruby-identifier">line</span>[<span class="ruby-identifier">quoteLen</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span>[<span class="ruby-value">0</span>, <span class="ruby-identifier">quoteLen</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">quoteMarks</span>
789
- 75: <span class="ruby-identifier">line</span> = <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">emptyLine</span>
790
- 76:
791
- 77: <span class="ruby-identifier">cutOutText</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">line</span>
792
- 78: <span class="ruby-comment cmt"># We are gathering text until we hit the end marker (mark2)</span>
793
- 79: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">cutOutText</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">mark2</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">line</span>)
794
- 80: <span class="ruby-keyword kw">end</span>
795
- 81: <span class="ruby-keyword kw">end</span>
796
- 82:
797
- 83: <span class="ruby-comment cmt"># There are no cut markers. We just return the original text.</span>
798
- 84: <span class="ruby-identifier">text</span>
799
- 85: <span class="ruby-keyword kw">end</span></pre>
772
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 54</span>
773
+ 54: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cutOut</span>(<span class="ruby-identifier">text</span>)
774
+ 55: <span class="ruby-comment cmt"># Pattern for the section start marker</span>
775
+ 56: <span class="ruby-identifier">mark1</span> = <span class="ruby-node">/(.*)# --------8&lt;--------8&lt;--------/</span>
776
+ 57: <span class="ruby-comment cmt"># Pattern for the section end marker</span>
777
+ 58: <span class="ruby-identifier">mark2</span> = <span class="ruby-node">/# --------&gt;8--------&gt;8--------/</span>
778
+ 59: <span class="ruby-comment cmt"># The cutOut section</span>
779
+ 60: <span class="ruby-identifier">cutOutText</span> = <span class="ruby-keyword kw">nil</span>
780
+ 61: <span class="ruby-identifier">quoteLen</span> = <span class="ruby-value">0</span>
781
+ 62: <span class="ruby-identifier">quoteMarks</span> = <span class="ruby-identifier">emptyLine</span> = <span class="ruby-value str">''</span>
782
+ 63: <span class="ruby-identifier">text</span>.<span class="ruby-identifier">each_line</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
783
+ 64: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cutOutText</span>.<span class="ruby-identifier">nil?</span>
784
+ 65: <span class="ruby-comment cmt"># We are looking for the line with the start marker (mark1)</span>
785
+ 66: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">matches</span> = <span class="ruby-identifier">mark1</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">line</span>))
786
+ 67: <span class="ruby-identifier">quoteMarks</span> = <span class="ruby-identifier">matches</span>[<span class="ruby-value">1</span>]
787
+ 68: <span class="ruby-identifier">quoteLen</span> = <span class="ruby-identifier">quoteMarks</span>.<span class="ruby-identifier">length</span>
788
+ 69: <span class="ruby-comment cmt"># Special case for quoted empty lines without trailing spaces.</span>
789
+ 70: <span class="ruby-identifier">emptyLine</span> = <span class="ruby-identifier">quoteMarks</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">chomp</span>(<span class="ruby-value str">' '</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span>
790
+ 71: <span class="ruby-identifier">cutOutText</span> = <span class="ruby-identifier">line</span>[<span class="ruby-identifier">quoteLen</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]
791
+ 72: <span class="ruby-keyword kw">end</span>
792
+ 73: <span class="ruby-keyword kw">else</span>
793
+ 74: <span class="ruby-comment cmt"># Remove quote marks from the beginning of the line.</span>
794
+ 75: <span class="ruby-identifier">line</span> = <span class="ruby-identifier">line</span>[<span class="ruby-identifier">quoteLen</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span>[<span class="ruby-value">0</span>, <span class="ruby-identifier">quoteLen</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">quoteMarks</span>
795
+ 76: <span class="ruby-identifier">line</span> = <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">emptyLine</span>
796
+ 77:
797
+ 78: <span class="ruby-identifier">cutOutText</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">line</span>
798
+ 79: <span class="ruby-comment cmt"># We are gathering text until we hit the end marker (mark2)</span>
799
+ 80: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">cutOutText</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">mark2</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">line</span>)
800
+ 81: <span class="ruby-keyword kw">end</span>
801
+ 82: <span class="ruby-keyword kw">end</span>
802
+ 83:
803
+ 84: <span class="ruby-comment cmt"># There are no cut markers. We just return the original text.</span>
804
+ 85: <span class="ruby-identifier">text</span>
805
+ 86: <span class="ruby-keyword kw">end</span></pre>
800
806
  </div>
801
807
 
802
808
  </div>
@@ -827,12 +833,12 @@ from the beginnin of the line.
827
833
  <div class="method-source-code"
828
834
  id="error-source">
829
835
  <pre>
830
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 143</span>
831
- 143: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">message</span>)
832
- 144: <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>
833
- 145: <span class="ruby-identifier">log</span>(<span class="ruby-value str">&quot;ERROR&quot;</span>, <span class="ruby-identifier">message</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>
834
- 146: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
835
- 147: <span class="ruby-keyword kw">end</span></pre>
836
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 144</span>
837
+ 144: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">message</span>)
838
+ 145: <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>
839
+ 146: <span class="ruby-identifier">log</span>(<span class="ruby-value str">&quot;ERROR&quot;</span>, <span class="ruby-identifier">message</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>
840
+ 147: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
841
+ 148: <span class="ruby-keyword kw">end</span></pre>
836
842
  </div>
837
843
 
838
844
  </div>
@@ -865,25 +871,25 @@ Convert all CR+LF and CR line breaks into LF line breaks.
865
871
  <div class="method-source-code"
866
872
  id="fix-ine-reaks-source">
867
873
  <pre>
868
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 88</span>
869
- 88: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fixLineBreaks</span>(<span class="ruby-identifier">text</span>)
870
- 89: <span class="ruby-identifier">out</span> = <span class="ruby-value str">''</span>
871
- 90: <span class="ruby-identifier">cr</span> = <span class="ruby-keyword kw">false</span>
872
- 91: <span class="ruby-identifier">text</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
873
- 92: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\r&quot;</span>
874
- 93: <span class="ruby-comment cmt"># We don't know yet if it's a CR or CR+LF.</span>
875
- 94: <span class="ruby-identifier">cr</span> = <span class="ruby-keyword kw">true</span>
876
- 95: <span class="ruby-keyword kw">else</span>
877
- 96: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cr</span>
878
- 97: <span class="ruby-comment cmt"># If we only found a CR. Replace it with a LF.</span>
879
- 98: <span class="ruby-identifier">out</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">&quot;\n&quot;</span>
880
- 99: <span class="ruby-identifier">cr</span> = <span class="ruby-keyword kw">false</span>
881
- 100: <span class="ruby-keyword kw">end</span>
882
- 101: <span class="ruby-identifier">out</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
883
- 102: <span class="ruby-keyword kw">end</span>
884
- 103: <span class="ruby-keyword kw">end</span>
885
- 104: <span class="ruby-identifier">out</span>
886
- 105: <span class="ruby-keyword kw">end</span></pre>
874
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 89</span>
875
+ 89: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fixLineBreaks</span>(<span class="ruby-identifier">text</span>)
876
+ 90: <span class="ruby-identifier">out</span> = <span class="ruby-value str">''</span>
877
+ 91: <span class="ruby-identifier">cr</span> = <span class="ruby-keyword kw">false</span>
878
+ 92: <span class="ruby-identifier">text</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
879
+ 93: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\r&quot;</span>
880
+ 94: <span class="ruby-comment cmt"># We don't know yet if it's a CR or CR+LF.</span>
881
+ 95: <span class="ruby-identifier">cr</span> = <span class="ruby-keyword kw">true</span>
882
+ 96: <span class="ruby-keyword kw">else</span>
883
+ 97: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cr</span>
884
+ 98: <span class="ruby-comment cmt"># If we only found a CR. Replace it with a LF.</span>
885
+ 99: <span class="ruby-identifier">out</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">&quot;\n&quot;</span>
886
+ 100: <span class="ruby-identifier">cr</span> = <span class="ruby-keyword kw">false</span>
887
+ 101: <span class="ruby-keyword kw">end</span>
888
+ 102: <span class="ruby-identifier">out</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
889
+ 103: <span class="ruby-keyword kw">end</span>
890
+ 104: <span class="ruby-keyword kw">end</span>
891
+ 105: <span class="ruby-identifier">out</span>
892
+ 106: <span class="ruby-keyword kw">end</span></pre>
887
893
  </div>
888
894
 
889
895
  </div>
@@ -914,33 +920,33 @@ Convert all CR+LF and CR line breaks into LF line breaks.
914
920
  <div class="method-source-code"
915
921
  id="html-ail-ody-source">
916
922
  <pre>
917
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 240</span>
918
- 240: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">htmlMailBody</span>(<span class="ruby-identifier">message</span>)
919
- 241: <span class="ruby-identifier">html</span> = <span class="ruby-constant">HTMLDocument</span>.<span class="ruby-identifier">new</span>
920
- 242: <span class="ruby-identifier">head</span> = <span class="ruby-identifier">html</span>.<span class="ruby-identifier">generateHead</span>(<span class="ruby-node">&quot;TaskJuggler Report - #{@name}&quot;</span>,
921
- 243: <span class="ruby-value str">'description'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'TaskJuggler Report'</span>,
922
- 244: <span class="ruby-value str">'keywords'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'taskjuggler, project, management'</span>)
923
- 245:
924
- 246: <span class="ruby-identifier">auxSrcDir</span> = <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataDirs</span>(<span class="ruby-value str">'data/css'</span>)[<span class="ruby-value">0</span>]
925
- 247: <span class="ruby-identifier">cssFileName</span> = (<span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/tjreport.css'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
926
- 248: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
927
- 249: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">auxSrcDir</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">cssFileName</span>)
928
- 250: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">cssFileName</span>)
929
- 251: <span class="ruby-keyword kw">end</span>
930
- 252: <span class="ruby-identifier">cssFile</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cssFileName</span>)
931
- 253: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cssFile</span>.<span class="ruby-identifier">empty?</span>
932
- 254: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">Cannot read '#{cssFileName}'. Make sure the file is not empty and you haveread access permission.</span>
933
- 255: <span class="ruby-keyword kw">end</span>
934
- 256: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'meta'</span>, <span class="ruby-value str">'http-equiv'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Content-Style-Type'</span>,
935
- 257: <span class="ruby-value str">'content'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css; charset=utf-8'</span>)
936
- 258: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">style</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'style'</span>, <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>))
937
- 259: <span class="ruby-identifier">style</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLBlob</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cssFile</span>)
938
- 260:
939
- 261: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">body</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'body'</span>))
940
- 262: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">message</span>.<span class="ruby-identifier">to_html</span>
941
- 263:
942
- 264: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">to_s</span>
943
- 265: <span class="ruby-keyword kw">end</span></pre>
923
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 241</span>
924
+ 241: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">htmlMailBody</span>(<span class="ruby-identifier">message</span>)
925
+ 242: <span class="ruby-identifier">html</span> = <span class="ruby-constant">HTMLDocument</span>.<span class="ruby-identifier">new</span>
926
+ 243: <span class="ruby-identifier">head</span> = <span class="ruby-identifier">html</span>.<span class="ruby-identifier">generateHead</span>(<span class="ruby-node">&quot;TaskJuggler Report - #{@name}&quot;</span>,
927
+ 244: <span class="ruby-value str">'description'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'TaskJuggler Report'</span>,
928
+ 245: <span class="ruby-value str">'keywords'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'taskjuggler, project, management'</span>)
929
+ 246:
930
+ 247: <span class="ruby-identifier">auxSrcDir</span> = <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataDirs</span>(<span class="ruby-value str">'data/css'</span>)[<span class="ruby-value">0</span>]
931
+ 248: <span class="ruby-identifier">cssFileName</span> = (<span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/tjreport.css'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
932
+ 249: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
933
+ 250: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">auxSrcDir</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">cssFileName</span>)
934
+ 251: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">cssFileName</span>)
935
+ 252: <span class="ruby-keyword kw">end</span>
936
+ 253: <span class="ruby-identifier">cssFile</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cssFileName</span>)
937
+ 254: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cssFile</span>.<span class="ruby-identifier">empty?</span>
938
+ 255: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">Cannot read '#{cssFileName}'. Make sure the file is not empty and you haveread access permission.</span>
939
+ 256: <span class="ruby-keyword kw">end</span>
940
+ 257: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'meta'</span>, <span class="ruby-value str">'http-equiv'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Content-Style-Type'</span>,
941
+ 258: <span class="ruby-value str">'content'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css; charset=utf-8'</span>)
942
+ 259: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">style</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'style'</span>, <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>))
943
+ 260: <span class="ruby-identifier">style</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLBlob</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cssFile</span>)
944
+ 261:
945
+ 262: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">body</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'body'</span>))
946
+ 263: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">message</span>.<span class="ruby-identifier">to_html</span>
947
+ 264:
948
+ 265: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">to_s</span>
949
+ 266: <span class="ruby-keyword kw">end</span></pre>
944
950
  </div>
945
951
 
946
952
  </div>
@@ -971,11 +977,11 @@ Convert all CR+LF and CR line breaks into LF line breaks.
971
977
  <div class="method-source-code"
972
978
  id="info-source">
973
979
  <pre>
974
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 133</span>
975
- 133: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">info</span>(<span class="ruby-identifier">message</span>)
976
- 134: <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">3</span>
977
- 135: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'INFO'</span>, <span class="ruby-identifier">message</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@logLevel</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">3</span>
978
- 136: <span class="ruby-keyword kw">end</span></pre>
980
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 134</span>
981
+ 134: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">info</span>(<span class="ruby-identifier">message</span>)
982
+ 135: <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">3</span>
983
+ 136: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'INFO'</span>, <span class="ruby-identifier">message</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@logLevel</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">3</span>
984
+ 137: <span class="ruby-keyword kw">end</span></pre>
979
985
  </div>
980
986
 
981
987
  </div>
@@ -1006,13 +1012,13 @@ Convert all CR+LF and CR line breaks into LF line breaks.
1006
1012
  <div class="method-source-code"
1007
1013
  id="log-source">
1008
1014
  <pre>
1009
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 149</span>
1010
- 149: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">log</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">message</span>)
1011
- 150: <span class="ruby-identifier">timeStamp</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">new</span>.<span class="ruby-identifier">strftime</span>(<span class="ruby-value str">&quot;%Y-%m-%d %H:%M:%S&quot;</span>)
1012
- 151: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-ivar">@logFile</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>
1013
- 152: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">&quot;#{timeStamp} #{type} #{@appName}: #{message}\n&quot;</span>)
1014
- 153: <span class="ruby-keyword kw">end</span>
1015
- 154: <span class="ruby-keyword kw">end</span></pre>
1015
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 150</span>
1016
+ 150: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">log</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">message</span>)
1017
+ 151: <span class="ruby-identifier">timeStamp</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">new</span>.<span class="ruby-identifier">strftime</span>(<span class="ruby-value str">&quot;%Y-%m-%d %H:%M:%S&quot;</span>)
1018
+ 152: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-ivar">@logFile</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>
1019
+ 153: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">&quot;#{timeStamp} #{type} #{@appName}: #{message}\n&quot;</span>)
1020
+ 154: <span class="ruby-keyword kw">end</span>
1021
+ 155: <span class="ruby-keyword kw">end</span></pre>
1016
1022
  </div>
1017
1023
 
1018
1024
  </div>
@@ -1043,72 +1049,72 @@ Convert all CR+LF and CR line breaks into LF line breaks.
1043
1049
  <div class="method-source-code"
1044
1050
  id="send-mail-source">
1045
1051
  <pre>
1046
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 174</span>
1047
- 174: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sendEmail</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">subject</span>, <span class="ruby-identifier">message</span>, <span class="ruby-identifier">attachment</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">from</span> = <span class="ruby-keyword kw">nil</span>,
1048
- 175: <span class="ruby-identifier">inReplyTo</span> = <span class="ruby-keyword kw">nil</span>)
1049
- 176: <span class="ruby-constant">Mail</span>.<span class="ruby-identifier">defaults</span> <span class="ruby-keyword kw">do</span>
1050
- 177: <span class="ruby-identifier">delivery_method</span> <span class="ruby-value">:smtp</span>, {
1051
- 178: <span class="ruby-value">:address</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@smtpServer</span>,
1052
- 179: <span class="ruby-value">:port</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">25</span>
1053
- 180: }
1054
- 181: <span class="ruby-keyword kw">end</span>
1055
- 182:
1056
- 183: <span class="ruby-keyword kw">begin</span>
1057
- 184: <span class="ruby-identifier">self_</span> = <span class="ruby-keyword kw">self</span>
1058
- 185: <span class="ruby-identifier">mail</span> = <span class="ruby-constant">Mail</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
1059
- 186: <span class="ruby-identifier">subject</span> <span class="ruby-identifier">subject</span>
1060
- 187: <span class="ruby-identifier">text_part</span> <span class="ruby-keyword kw">do</span>
1061
- 188: <span class="ruby-identifier">content_type</span> [ <span class="ruby-value str">'text'</span>, <span class="ruby-value str">'plain'</span>, { <span class="ruby-value str">'charset'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'UTF-8'</span> } ]
1062
- 189: <span class="ruby-identifier">content_transfer_encoding</span> <span class="ruby-value str">'quoted-printable'</span>
1063
- 190: <span class="ruby-identifier">body</span> <span class="ruby-identifier">message</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_quoted_printable</span>
1064
- 191: <span class="ruby-keyword kw">end</span>
1065
- 192: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">message</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">RichTextIntermediate</span>)
1066
- 193: <span class="ruby-identifier">html_part</span> <span class="ruby-keyword kw">do</span>
1067
- 194: <span class="ruby-identifier">content_type</span> <span class="ruby-value str">'text/html; charset=UTF-8'</span>
1068
- 195: <span class="ruby-identifier">content_transfer_encoding</span> <span class="ruby-value str">'quoted-printable'</span>
1069
- 196: <span class="ruby-identifier">body</span> <span class="ruby-identifier">self_</span>.<span class="ruby-identifier">htmlMailBody</span>(<span class="ruby-identifier">message</span>).<span class="ruby-identifier">to_quoted_printable</span>
1070
- 197: <span class="ruby-keyword kw">end</span>
1071
- 198: <span class="ruby-keyword kw">end</span>
1072
- 199: <span class="ruby-keyword kw">end</span>
1073
- 200: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">to</span> = <span class="ruby-identifier">to</span>
1074
- 201: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">from</span> = <span class="ruby-identifier">from</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@senderEmail</span>
1075
- 202: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">in_reply_to</span> = <span class="ruby-identifier">inReplyTo</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">inReplyTo</span>
1076
- 203: <span class="ruby-identifier">mail</span>[<span class="ruby-value str">'User-Agent'</span>] = <span class="ruby-node">&quot;#{AppConfig.softwareName}/#{AppConfig.version}&quot;</span>
1077
- 204: <span class="ruby-identifier">mail</span>[<span class="ruby-value str">'X-TaskJuggler'</span>] = <span class="ruby-ivar">@appName</span>
1078
- 205: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">attachment</span>
1079
- 206: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">add_file</span> ({
1080
- 207: <span class="ruby-value">:filename</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">attachment</span>),
1081
- 208: <span class="ruby-value">:content</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">attachment</span>)
1082
- 209: })
1083
- 210: <span class="ruby-keyword kw">end</span>
1084
- 211: <span class="ruby-comment cmt">#raise &quot;Mail header problem&quot; unless mail.errors.empty?</span>
1085
- 212: <span class="ruby-keyword kw">rescue</span>
1086
- 213: <span class="ruby-ivar">@emailFailure</span> = <span class="ruby-keyword kw">true</span>
1087
- 214: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Email processing failed: #{$!}&quot;</span>)
1088
- 215: <span class="ruby-keyword kw">end</span>
1089
- 216:
1090
- 217: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@dryRun</span>
1091
- 218: <span class="ruby-comment cmt"># For testing and debugging, we only print out the email.</span>
1092
- 219: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">to_s</span>
1093
- 220: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'INFO'</span>, <span class="ruby-node">&quot;Show email '#{subject}' to #{to}&quot;</span>)
1094
- 221: <span class="ruby-keyword kw">else</span>
1095
- 222: <span class="ruby-comment cmt"># Actually send out the email via SMTP.</span>
1096
- 223: <span class="ruby-keyword kw">begin</span>
1097
- 224: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">deliver</span>
1098
- 225: <span class="ruby-keyword kw">rescue</span>
1099
- 226: <span class="ruby-comment cmt"># We try to send out another email. If that fails again, we abort</span>
1100
- 227: <span class="ruby-comment cmt"># without further attempts.</span>
1101
- 228: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@emailFailure</span>
1102
- 229: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'ERROR'</span>, <span class="ruby-node">&quot;Email double fault: #{$!}&quot;</span>)
1103
- 230: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
1104
- 231: <span class="ruby-keyword kw">else</span>
1105
- 232: <span class="ruby-ivar">@emailFailure</span> = <span class="ruby-keyword kw">true</span>
1106
- 233: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Email transmission failed: #{$!}&quot;</span>)
1107
- 234: <span class="ruby-keyword kw">end</span>
1108
- 235: <span class="ruby-keyword kw">end</span>
1109
- 236: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'INFO'</span>, <span class="ruby-node">&quot;Sent email '#{subject}' to #{to}&quot;</span>)
1110
- 237: <span class="ruby-keyword kw">end</span>
1111
- 238: <span class="ruby-keyword kw">end</span></pre>
1052
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 175</span>
1053
+ 175: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sendEmail</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">subject</span>, <span class="ruby-identifier">message</span>, <span class="ruby-identifier">attachment</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">from</span> = <span class="ruby-keyword kw">nil</span>,
1054
+ 176: <span class="ruby-identifier">inReplyTo</span> = <span class="ruby-keyword kw">nil</span>)
1055
+ 177: <span class="ruby-constant">Mail</span>.<span class="ruby-identifier">defaults</span> <span class="ruby-keyword kw">do</span>
1056
+ 178: <span class="ruby-identifier">delivery_method</span> <span class="ruby-value">:smtp</span>, {
1057
+ 179: <span class="ruby-value">:address</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@smtpServer</span>,
1058
+ 180: <span class="ruby-value">:port</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">25</span>
1059
+ 181: }
1060
+ 182: <span class="ruby-keyword kw">end</span>
1061
+ 183:
1062
+ 184: <span class="ruby-keyword kw">begin</span>
1063
+ 185: <span class="ruby-identifier">self_</span> = <span class="ruby-keyword kw">self</span>
1064
+ 186: <span class="ruby-identifier">mail</span> = <span class="ruby-constant">Mail</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
1065
+ 187: <span class="ruby-identifier">subject</span> <span class="ruby-identifier">subject</span>
1066
+ 188: <span class="ruby-identifier">text_part</span> <span class="ruby-keyword kw">do</span>
1067
+ 189: <span class="ruby-identifier">content_type</span> [ <span class="ruby-value str">'text'</span>, <span class="ruby-value str">'plain'</span>, { <span class="ruby-value str">'charset'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'UTF-8'</span> } ]
1068
+ 190: <span class="ruby-identifier">content_transfer_encoding</span> <span class="ruby-value str">'quoted-printable'</span>
1069
+ 191: <span class="ruby-identifier">body</span> <span class="ruby-identifier">message</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_quoted_printable</span>
1070
+ 192: <span class="ruby-keyword kw">end</span>
1071
+ 193: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">message</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">RichTextIntermediate</span>)
1072
+ 194: <span class="ruby-identifier">html_part</span> <span class="ruby-keyword kw">do</span>
1073
+ 195: <span class="ruby-identifier">content_type</span> <span class="ruby-value str">'text/html; charset=UTF-8'</span>
1074
+ 196: <span class="ruby-identifier">content_transfer_encoding</span> <span class="ruby-value str">'quoted-printable'</span>
1075
+ 197: <span class="ruby-identifier">body</span> <span class="ruby-identifier">self_</span>.<span class="ruby-identifier">htmlMailBody</span>(<span class="ruby-identifier">message</span>).<span class="ruby-identifier">to_quoted_printable</span>
1076
+ 198: <span class="ruby-keyword kw">end</span>
1077
+ 199: <span class="ruby-keyword kw">end</span>
1078
+ 200: <span class="ruby-keyword kw">end</span>
1079
+ 201: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">to</span> = <span class="ruby-identifier">to</span>
1080
+ 202: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">from</span> = <span class="ruby-identifier">from</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@senderEmail</span>
1081
+ 203: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">in_reply_to</span> = <span class="ruby-identifier">inReplyTo</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">inReplyTo</span>
1082
+ 204: <span class="ruby-identifier">mail</span>[<span class="ruby-value str">'User-Agent'</span>] = <span class="ruby-node">&quot;#{AppConfig.softwareName}/#{AppConfig.version}&quot;</span>
1083
+ 205: <span class="ruby-identifier">mail</span>[<span class="ruby-value str">'X-TaskJuggler'</span>] = <span class="ruby-ivar">@appName</span>
1084
+ 206: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">attachment</span>
1085
+ 207: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">add_file</span> ({
1086
+ 208: <span class="ruby-value">:filename</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">attachment</span>),
1087
+ 209: <span class="ruby-value">:content</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">attachment</span>)
1088
+ 210: })
1089
+ 211: <span class="ruby-keyword kw">end</span>
1090
+ 212: <span class="ruby-comment cmt">#raise &quot;Mail header problem&quot; unless mail.errors.empty?</span>
1091
+ 213: <span class="ruby-keyword kw">rescue</span>
1092
+ 214: <span class="ruby-ivar">@emailFailure</span> = <span class="ruby-keyword kw">true</span>
1093
+ 215: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Email processing failed: #{$!}&quot;</span>)
1094
+ 216: <span class="ruby-keyword kw">end</span>
1095
+ 217:
1096
+ 218: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@dryRun</span>
1097
+ 219: <span class="ruby-comment cmt"># For testing and debugging, we only print out the email.</span>
1098
+ 220: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">to_s</span>
1099
+ 221: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'INFO'</span>, <span class="ruby-node">&quot;Show email '#{subject}' to #{to}&quot;</span>)
1100
+ 222: <span class="ruby-keyword kw">else</span>
1101
+ 223: <span class="ruby-comment cmt"># Actually send out the email via SMTP.</span>
1102
+ 224: <span class="ruby-keyword kw">begin</span>
1103
+ 225: <span class="ruby-identifier">mail</span>.<span class="ruby-identifier">deliver</span>
1104
+ 226: <span class="ruby-keyword kw">rescue</span>
1105
+ 227: <span class="ruby-comment cmt"># We try to send out another email. If that fails again, we abort</span>
1106
+ 228: <span class="ruby-comment cmt"># without further attempts.</span>
1107
+ 229: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@emailFailure</span>
1108
+ 230: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'ERROR'</span>, <span class="ruby-node">&quot;Email double fault: #{$!}&quot;</span>)
1109
+ 231: <span class="ruby-identifier">exit</span> <span class="ruby-value">1</span>
1110
+ 232: <span class="ruby-keyword kw">else</span>
1111
+ 233: <span class="ruby-ivar">@emailFailure</span> = <span class="ruby-keyword kw">true</span>
1112
+ 234: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Email transmission failed: #{$!}&quot;</span>)
1113
+ 235: <span class="ruby-keyword kw">end</span>
1114
+ 236: <span class="ruby-keyword kw">end</span>
1115
+ 237: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'INFO'</span>, <span class="ruby-node">&quot;Sent email '#{subject}' to #{to}&quot;</span>)
1116
+ 238: <span class="ruby-keyword kw">end</span>
1117
+ 239: <span class="ruby-keyword kw">end</span></pre>
1112
1118
  </div>
1113
1119
 
1114
1120
  </div>
@@ -1143,21 +1149,21 @@ text/plain and a text/html part.
1143
1149
  <div class="method-source-code"
1144
1150
  id="send-ich-ext-mail-source">
1145
1151
  <pre>
1146
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 159</span>
1147
- 159: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sendRichTextEmail</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">subject</span>, <span class="ruby-identifier">message</span>, <span class="ruby-identifier">attachment</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">from</span> = <span class="ruby-keyword kw">nil</span>,
1148
- 160: <span class="ruby-identifier">inReplyTo</span> = <span class="ruby-keyword kw">nil</span>)
1149
- 161: <span class="ruby-identifier">rti</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">message</span>).<span class="ruby-identifier">generateIntermediateFormat</span>
1150
- 162: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">lineWidth</span> = <span class="ruby-value">72</span>
1151
- 163: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">indent</span> = <span class="ruby-value">2</span>
1152
- 164: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">titleIndent</span> = <span class="ruby-value">0</span>
1153
- 165: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">listIndent</span> = <span class="ruby-value">2</span>
1154
- 166: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">parIndent</span> = <span class="ruby-value">2</span>
1155
- 167: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">preIndent</span> = <span class="ruby-value">4</span>
1156
- 168: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">sectionNumbers</span> = <span class="ruby-keyword kw">false</span>
1157
- 169:
1158
- 170: <span class="ruby-comment cmt"># Send out the email.</span>
1159
- 171: <span class="ruby-identifier">sendEmail</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">subject</span>, <span class="ruby-identifier">rti</span>, <span class="ruby-identifier">attachment</span>, <span class="ruby-identifier">from</span>, <span class="ruby-identifier">inReplyTo</span>)
1160
- 172: <span class="ruby-keyword kw">end</span></pre>
1152
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 160</span>
1153
+ 160: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sendRichTextEmail</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">subject</span>, <span class="ruby-identifier">message</span>, <span class="ruby-identifier">attachment</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">from</span> = <span class="ruby-keyword kw">nil</span>,
1154
+ 161: <span class="ruby-identifier">inReplyTo</span> = <span class="ruby-keyword kw">nil</span>)
1155
+ 162: <span class="ruby-identifier">rti</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">message</span>).<span class="ruby-identifier">generateIntermediateFormat</span>
1156
+ 163: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">lineWidth</span> = <span class="ruby-value">72</span>
1157
+ 164: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">indent</span> = <span class="ruby-value">2</span>
1158
+ 165: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">titleIndent</span> = <span class="ruby-value">0</span>
1159
+ 166: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">listIndent</span> = <span class="ruby-value">2</span>
1160
+ 167: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">parIndent</span> = <span class="ruby-value">2</span>
1161
+ 168: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">preIndent</span> = <span class="ruby-value">4</span>
1162
+ 169: <span class="ruby-identifier">rti</span>.<span class="ruby-identifier">sectionNumbers</span> = <span class="ruby-keyword kw">false</span>
1163
+ 170:
1164
+ 171: <span class="ruby-comment cmt"># Send out the email.</span>
1165
+ 172: <span class="ruby-identifier">sendEmail</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">subject</span>, <span class="ruby-identifier">rti</span>, <span class="ruby-identifier">attachment</span>, <span class="ruby-identifier">from</span>, <span class="ruby-identifier">inReplyTo</span>)
1166
+ 173: <span class="ruby-keyword kw">end</span></pre>
1161
1167
  </div>
1162
1168
 
1163
1169
  </div>
@@ -1188,19 +1194,19 @@ text/plain and a text/html part.
1188
1194
  <div class="method-source-code"
1189
1195
  id="set-orking-ir-source">
1190
1196
  <pre>
1191
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 107</span>
1192
- 107: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setWorkingDir</span>
1193
- 108: <span class="ruby-comment cmt"># Make sure the user has provided a properly setup config file.</span>
1194
- 109: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'\smtpServer\ not configured'</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@smtpServer</span>
1195
- 110: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'\senderEmail\ not configured'</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@senderEmail</span>
1196
- 111:
1197
- 112: <span class="ruby-comment cmt"># Change into the specified working directory</span>
1198
- 113: <span class="ruby-keyword kw">begin</span>
1199
- 114: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-ivar">@workingDir</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@workingDir</span>
1200
- 115: <span class="ruby-keyword kw">rescue</span>
1201
- 116: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Working directory #{@workingDir} not found&quot;</span>)
1202
- 117: <span class="ruby-keyword kw">end</span>
1203
- 118: <span class="ruby-keyword kw">end</span></pre>
1197
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 108</span>
1198
+ 108: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setWorkingDir</span>
1199
+ 109: <span class="ruby-comment cmt"># Make sure the user has provided a properly setup config file.</span>
1200
+ 110: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'\smtpServer\ not configured'</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@smtpServer</span>
1201
+ 111: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'\senderEmail\ not configured'</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@senderEmail</span>
1202
+ 112:
1203
+ 113: <span class="ruby-comment cmt"># Change into the specified working directory</span>
1204
+ 114: <span class="ruby-keyword kw">begin</span>
1205
+ 115: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-ivar">@workingDir</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@workingDir</span>
1206
+ 116: <span class="ruby-keyword kw">rescue</span>
1207
+ 117: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Working directory #{@workingDir} not found&quot;</span>)
1208
+ 118: <span class="ruby-keyword kw">end</span>
1209
+ 119: <span class="ruby-keyword kw">end</span></pre>
1204
1210
  </div>
1205
1211
 
1206
1212
  </div>
@@ -1231,11 +1237,11 @@ text/plain and a text/html part.
1231
1237
  <div class="method-source-code"
1232
1238
  id="warning-source">
1233
1239
  <pre>
1234
- <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 138</span>
1235
- 138: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">warning</span>(<span class="ruby-identifier">message</span>)
1236
- 139: <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">2</span>
1237
- 140: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'WARN'</span>, <span class="ruby-identifier">message</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@logLevel</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">2</span>
1238
- 141: <span class="ruby-keyword kw">end</span></pre>
1240
+ <span class="ruby-comment cmt"># File lib/SheetHandlerBase.rb, line 139</span>
1241
+ 139: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">warning</span>(<span class="ruby-identifier">message</span>)
1242
+ 140: <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">2</span>
1243
+ 141: <span class="ruby-identifier">log</span>(<span class="ruby-value str">'WARN'</span>, <span class="ruby-identifier">message</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@logLevel</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">2</span>
1244
+ 142: <span class="ruby-keyword kw">end</span></pre>
1239
1245
  </div>
1240
1246
 
1241
1247
  </div>