taskjuggler 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (415) hide show
  1. data/CHANGELOG +119 -0
  2. data/benchmarks/allocatedSlots.tjp +1602 -0
  3. data/benchmarks/booking.tjp +40 -30
  4. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/css/tjmanual.css +0 -0
  5. data/{test/TestSuite/Scheduler/Correct → benchmarks}/css/tjreport.css +1 -0
  6. data/benchmarks/gantt.tjp +57 -0
  7. data/benchmarks/htmltaskreport.tjp +26 -1
  8. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/details.png +0 -0
  9. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-green.png +0 -0
  10. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-red.png +0 -0
  11. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-yellow.png +0 -0
  12. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/resource.png +0 -0
  13. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/resourcegroup.png +0 -0
  14. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/task.png +0 -0
  15. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/taskgroup.png +0 -0
  16. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-down.png +0 -0
  17. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-flat.png +0 -0
  18. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-up.png +0 -0
  19. data/benchmarks/profile.clt +36082 -0
  20. data/benchmarks/profile.html +58182 -0
  21. data/benchmarks/runbench.rb +6 -0
  22. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/scripts/wz_tooltip.js +0 -0
  23. data/doc/AppConfig.html +85 -37
  24. data/doc/Arguments.html +11 -1
  25. data/doc/CHANGELOG.html +131 -2
  26. data/doc/COPYING.html +11 -1
  27. data/doc/Object.html +12 -3
  28. data/doc/README.html +11 -1
  29. data/doc/RuntimeConfig.html +11 -1
  30. data/doc/String.html +11 -1
  31. data/doc/StringIO.html +11 -1
  32. data/doc/TaskJuggler.html +250 -219
  33. data/doc/TaskJuggler/Account.html +11 -1
  34. data/doc/TaskJuggler/AccountAttribute.html +11 -1
  35. data/doc/TaskJuggler/AccountScenario.html +11 -1
  36. data/doc/TaskJuggler/Allocation.html +11 -1
  37. data/doc/TaskJuggler/AllocationAttribute.html +11 -1
  38. data/doc/TaskJuggler/AttributeBase.html +11 -1
  39. data/doc/TaskJuggler/AttributeDefinition.html +11 -1
  40. data/doc/TaskJuggler/BatchProcessor.html +11 -1
  41. data/doc/TaskJuggler/Booking.html +11 -1
  42. data/doc/TaskJuggler/BookingListAttribute.html +11 -1
  43. data/doc/TaskJuggler/BooleanAttribute.html +11 -1
  44. data/doc/TaskJuggler/CSVFile.html +12 -2
  45. data/doc/TaskJuggler/CellSettingPattern.html +11 -1
  46. data/doc/TaskJuggler/CellSettingPatternList.html +11 -1
  47. data/doc/TaskJuggler/Charge.html +11 -1
  48. data/doc/TaskJuggler/ChargeListAttribute.html +11 -1
  49. data/doc/TaskJuggler/ChargeSet.html +11 -1
  50. data/doc/TaskJuggler/ChargeSetListAttribute.html +11 -1
  51. data/doc/TaskJuggler/CollisionDetector.html +1063 -0
  52. data/doc/TaskJuggler/ColumnListAttribute.html +11 -1
  53. data/doc/TaskJuggler/ColumnTable.html +11 -1
  54. data/doc/TaskJuggler/Daemon.html +11 -1
  55. data/doc/TaskJuggler/{OnShiftCache.html → DataCache.html} +127 -139
  56. data/doc/TaskJuggler/DataCacheEntry.html +711 -0
  57. data/doc/TaskJuggler/DateAttribute.html +11 -1
  58. data/doc/TaskJuggler/DefinitionListAttribute.html +11 -1
  59. data/doc/TaskJuggler/DependencyListAttribute.html +11 -1
  60. data/doc/TaskJuggler/DurationAttribute.html +16 -5
  61. data/doc/TaskJuggler/FileList.html +11 -1
  62. data/doc/TaskJuggler/FileRecord.html +11 -1
  63. data/doc/TaskJuggler/FixnumAttribute.html +19 -9
  64. data/doc/TaskJuggler/FlagListAttribute.html +29 -19
  65. data/doc/TaskJuggler/FloatAttribute.html +23 -13
  66. data/doc/TaskJuggler/FormatListAttribute.html +19 -9
  67. data/doc/TaskJuggler/GanttChart.html +94 -133
  68. data/doc/TaskJuggler/GanttContainer.html +11 -1
  69. data/doc/TaskJuggler/GanttHeader.html +11 -1
  70. data/doc/TaskJuggler/GanttHeaderScaleItem.html +11 -1
  71. data/doc/TaskJuggler/GanttLine.html +11 -1
  72. data/doc/TaskJuggler/GanttLoadStack.html +11 -1
  73. data/doc/TaskJuggler/GanttMilestone.html +11 -1
  74. data/doc/TaskJuggler/GanttRouter.html +247 -596
  75. data/doc/TaskJuggler/GanttTaskBar.html +11 -1
  76. data/doc/TaskJuggler/HTMLDocument.html +11 -1
  77. data/doc/TaskJuggler/HTMLGraphics.html +11 -1
  78. data/doc/TaskJuggler/Interval.html +11 -1
  79. data/doc/TaskJuggler/IntervalListAttribute.html +33 -23
  80. data/doc/TaskJuggler/JobInfo.html +11 -1
  81. data/doc/TaskJuggler/Journal.html +11 -1
  82. data/doc/TaskJuggler/JournalEntry.html +11 -1
  83. data/doc/TaskJuggler/JournalEntryList.html +11 -1
  84. data/doc/TaskJuggler/KeywordArray.html +11 -1
  85. data/doc/TaskJuggler/KeywordDocumentation.html +16 -6
  86. data/doc/TaskJuggler/Limits.html +11 -1
  87. data/doc/TaskJuggler/Limits/Limit.html +11 -1
  88. data/doc/TaskJuggler/LimitsAttribute.html +24 -14
  89. data/doc/TaskJuggler/ListAttributeBase.html +11 -1
  90. data/doc/TaskJuggler/Log.html +11 -1
  91. data/doc/TaskJuggler/LogFile.html +11 -1
  92. data/doc/TaskJuggler/LogicalAttribute.html +11 -1
  93. data/doc/TaskJuggler/LogicalExpression.html +11 -1
  94. data/doc/TaskJuggler/LogicalExpressionAttribute.html +19 -9
  95. data/doc/TaskJuggler/LogicalFlag.html +11 -1
  96. data/doc/TaskJuggler/LogicalFunction.html +11 -1
  97. data/doc/TaskJuggler/LogicalOperation.html +11 -1
  98. data/doc/TaskJuggler/Macro.html +11 -1
  99. data/doc/TaskJuggler/MacroTable.html +11 -1
  100. data/doc/TaskJuggler/ManagerResponsibilities.html +11 -1
  101. data/doc/TaskJuggler/ManagerStatusRecord.html +11 -1
  102. data/doc/TaskJuggler/Message.html +11 -1
  103. data/doc/TaskJuggler/MessageHandler.html +11 -1
  104. data/doc/TaskJuggler/Navigator.html +12 -2
  105. data/doc/TaskJuggler/NavigatorElement.html +11 -1
  106. data/doc/TaskJuggler/NikuProject.html +11 -1
  107. data/doc/TaskJuggler/NikuReport.html +11 -1
  108. data/doc/TaskJuggler/NikuResource.html +11 -1
  109. data/doc/TaskJuggler/NodeListAttribute.html +17 -7
  110. data/doc/TaskJuggler/PlaceHolderCell.html +722 -0
  111. data/doc/TaskJuggler/ProcessIntercom.html +11 -1
  112. data/doc/TaskJuggler/ProcessIntercomIface.html +11 -1
  113. data/doc/TaskJuggler/Project.html +587 -500
  114. data/doc/TaskJuggler/ProjectBroker.html +11 -1
  115. data/doc/TaskJuggler/ProjectBrokerIface.html +11 -1
  116. data/doc/TaskJuggler/ProjectFileParser.html +205 -192
  117. data/doc/TaskJuggler/ProjectFileScanner.html +230 -207
  118. data/doc/TaskJuggler/ProjectRecord.html +11 -1
  119. data/doc/TaskJuggler/ProjectServer.html +11 -1
  120. data/doc/TaskJuggler/ProjectServerIface.html +11 -1
  121. data/doc/TaskJuggler/PropertyAttribute.html +19 -9
  122. data/doc/TaskJuggler/PropertyList.html +95 -83
  123. data/doc/TaskJuggler/PropertySet.html +11 -1
  124. data/doc/TaskJuggler/PropertyTreeNode.html +11 -1
  125. data/doc/TaskJuggler/Query.html +234 -232
  126. data/doc/TaskJuggler/RTFHandlers.html +11 -1
  127. data/doc/TaskJuggler/RTFNavigator.html +11 -1
  128. data/doc/TaskJuggler/RTFQuery.html +11 -1
  129. data/doc/TaskJuggler/RTFReport.html +11 -1
  130. data/doc/TaskJuggler/RTFReportLink.html +11 -1
  131. data/doc/TaskJuggler/RTFWithQuerySupport.html +11 -1
  132. data/doc/TaskJuggler/RealFormat.html +12 -2
  133. data/doc/TaskJuggler/RealFormatAttribute.html +15 -5
  134. data/doc/TaskJuggler/ReferenceAttribute.html +38 -28
  135. data/doc/TaskJuggler/Report.html +96 -113
  136. data/doc/TaskJuggler/ReportBase.html +161 -152
  137. data/doc/TaskJuggler/ReportContext.html +11 -1
  138. data/doc/TaskJuggler/ReportServer.html +59 -48
  139. data/doc/TaskJuggler/ReportServerIface.html +51 -41
  140. data/doc/TaskJuggler/ReportServerRecord.html +11 -1
  141. data/doc/TaskJuggler/ReportServlet.html +11 -1
  142. data/doc/TaskJuggler/ReportTable.html +46 -25
  143. data/doc/TaskJuggler/ReportTableCell.html +296 -275
  144. data/doc/TaskJuggler/ReportTableColumn.html +14 -4
  145. data/doc/TaskJuggler/ReportTableLegend.html +11 -1
  146. data/doc/TaskJuggler/ReportTableLine.html +19 -7
  147. data/doc/TaskJuggler/Resource.html +12 -2
  148. data/doc/TaskJuggler/ResourceListAttribute.html +40 -30
  149. data/doc/TaskJuggler/ResourceListRE.html +11 -1
  150. data/doc/TaskJuggler/ResourceScenario.html +708 -565
  151. data/doc/TaskJuggler/RichText.html +54 -36
  152. data/doc/TaskJuggler/RichTextAttribute.html +31 -21
  153. data/doc/TaskJuggler/RichTextDocument.html +11 -1
  154. data/doc/TaskJuggler/RichTextElement.html +11 -1
  155. data/doc/TaskJuggler/RichTextFunctionExample.html +11 -1
  156. data/doc/TaskJuggler/RichTextFunctionHandler.html +11 -1
  157. data/doc/TaskJuggler/RichTextImage.html +11 -1
  158. data/doc/TaskJuggler/RichTextIntermediate.html +81 -71
  159. data/doc/TaskJuggler/RichTextParser.html +88 -33
  160. data/doc/TaskJuggler/RichTextScanner.html +45 -35
  161. data/doc/TaskJuggler/RichTextSnip.html +11 -1
  162. data/doc/TaskJuggler/RichTextSyntaxRules.html +436 -389
  163. data/doc/TaskJuggler/Scenario.html +11 -1
  164. data/doc/TaskJuggler/ScenarioData.html +11 -1
  165. data/doc/TaskJuggler/ScenarioListAttribute.html +23 -13
  166. data/doc/TaskJuggler/Scoreboard.html +92 -73
  167. data/doc/TaskJuggler/SheetHandlerBase.html +11 -1
  168. data/doc/TaskJuggler/SheetReceiver.html +11 -1
  169. data/doc/TaskJuggler/SheetSender.html +11 -1
  170. data/doc/TaskJuggler/Shift.html +11 -1
  171. data/doc/TaskJuggler/ShiftAssignment.html +11 -1
  172. data/doc/TaskJuggler/ShiftAssignments.html +11 -1
  173. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +24 -14
  174. data/doc/TaskJuggler/ShiftScenario.html +11 -1
  175. data/doc/TaskJuggler/SimpleQueryExpander.html +11 -1
  176. data/doc/TaskJuggler/SortListAttribute.html +21 -11
  177. data/doc/TaskJuggler/SourceFileInfo.html +11 -1
  178. data/doc/TaskJuggler/StatusSheetReceiver.html +11 -1
  179. data/doc/TaskJuggler/StatusSheetReport.html +11 -1
  180. data/doc/TaskJuggler/StatusSheetSender.html +112 -11
  181. data/doc/TaskJuggler/StringAttribute.html +23 -13
  182. data/doc/TaskJuggler/SymbolAttribute.html +19 -9
  183. data/doc/TaskJuggler/SyntaxReference.html +80 -71
  184. data/doc/TaskJuggler/TOCEntry.html +11 -1
  185. data/doc/TaskJuggler/TSResourceRecord.html +11 -1
  186. data/doc/TaskJuggler/TSTaskRecord.html +11 -1
  187. data/doc/TaskJuggler/TableColumnDefinition.html +11 -1
  188. data/doc/TaskJuggler/TableOfContents.html +11 -1
  189. data/doc/TaskJuggler/TableReport.html +422 -411
  190. data/doc/TaskJuggler/Task.html +11 -1
  191. data/doc/TaskJuggler/TaskDependency.html +11 -1
  192. data/doc/TaskJuggler/TaskListAttribute.html +33 -23
  193. data/doc/TaskJuggler/TaskListRE.html +11 -1
  194. data/doc/TaskJuggler/TaskScenario.html +2007 -1919
  195. data/doc/TaskJuggler/TextFormatter.html +11 -1
  196. data/doc/TaskJuggler/TextParser.html +421 -612
  197. data/doc/TaskJuggler/TextParser/Pattern.html +410 -211
  198. data/doc/TaskJuggler/TextParser/Rule.html +224 -152
  199. data/doc/TaskJuggler/TextParser/StackElement.html +190 -28
  200. data/doc/TaskJuggler/TextParser/State.html +989 -0
  201. data/doc/TaskJuggler/TextParser/StateTransition.html +782 -0
  202. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +25 -14
  203. data/doc/TaskJuggler/TextParser/TokenDoc.html +11 -1
  204. data/doc/TaskJuggler/TextReport.html +11 -1
  205. data/doc/TaskJuggler/TextScanner.html +285 -273
  206. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +17 -7
  207. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +24 -14
  208. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +11 -1
  209. data/doc/TaskJuggler/TextScanner/StreamHandle.html +64 -52
  210. data/doc/TaskJuggler/TimeSheet.html +11 -1
  211. data/doc/TaskJuggler/TimeSheetReceiver.html +11 -1
  212. data/doc/TaskJuggler/TimeSheetRecord.html +11 -1
  213. data/doc/TaskJuggler/TimeSheetReport.html +11 -1
  214. data/doc/TaskJuggler/TimeSheetSender.html +11 -1
  215. data/doc/TaskJuggler/TimeSheetSummary.html +11 -1
  216. data/doc/TaskJuggler/TimeSheets.html +11 -1
  217. data/doc/TaskJuggler/Tj3AppBase.html +11 -1
  218. data/doc/TaskJuggler/Tj3Client.html +11 -1
  219. data/doc/TaskJuggler/Tj3Daemon.html +11 -1
  220. data/doc/TaskJuggler/Tj3SheetAppBase.html +11 -1
  221. data/doc/TaskJuggler/Tj3SsReceiver.html +11 -1
  222. data/doc/TaskJuggler/Tj3SsSender.html +11 -1
  223. data/doc/TaskJuggler/Tj3TsReceiver.html +11 -1
  224. data/doc/TaskJuggler/Tj3TsSender.html +11 -1
  225. data/doc/TaskJuggler/Tj3TsSummary.html +11 -1
  226. data/doc/TaskJuggler/TjException.html +11 -1
  227. data/doc/TaskJuggler/TjTime.html +474 -324
  228. data/doc/TaskJuggler/TjpExample.html +11 -1
  229. data/doc/TaskJuggler/TjpExportRE.html +11 -1
  230. data/doc/TaskJuggler/TjpSyntaxRules.html +3731 -3662
  231. data/doc/TaskJuggler/URLParameter.html +11 -1
  232. data/doc/TaskJuggler/UserManual.html +11 -1
  233. data/doc/TaskJuggler/VimSyntax.html +11 -1
  234. data/doc/TaskJuggler/WebServer.html +11 -1
  235. data/doc/TaskJuggler/WorkingHours.html +295 -221
  236. data/doc/TaskJuggler/WorkingHoursAttribute.html +11 -1
  237. data/doc/TaskJuggler/XMLBlob.html +11 -1
  238. data/doc/TaskJuggler/XMLComment.html +11 -1
  239. data/doc/TaskJuggler/XMLDocument.html +11 -1
  240. data/doc/TaskJuggler/XMLElement.html +11 -1
  241. data/doc/TaskJuggler/XMLNamedText.html +11 -1
  242. data/doc/TaskJuggler/XMLText.html +11 -1
  243. data/doc/index.html +694 -624
  244. data/doc/lib/AppConfig_rb.html +1 -1
  245. data/doc/lib/Attributes_rb.html +1 -1
  246. data/doc/lib/Booking_rb.html +1 -1
  247. data/doc/lib/DataCache_rb.html +69 -0
  248. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  249. data/doc/lib/ProjectFileParser_rb.html +1 -1
  250. data/doc/lib/ProjectFileScanner_rb.html +1 -1
  251. data/doc/lib/Project_rb.html +1 -1
  252. data/doc/lib/PropertyList_rb.html +1 -1
  253. data/doc/lib/Query_rb.html +1 -1
  254. data/doc/lib/RealFormat_rb.html +1 -1
  255. data/doc/lib/ResourceScenario_rb.html +1 -1
  256. data/doc/lib/Resource_rb.html +1 -1
  257. data/doc/lib/RichTextParser_rb.html +1 -1
  258. data/doc/lib/RichTextScanner_rb.html +1 -1
  259. data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
  260. data/doc/lib/RichText_rb.html +1 -1
  261. data/doc/lib/Scoreboard_rb.html +1 -1
  262. data/doc/lib/StatusSheetSender_rb.html +1 -1
  263. data/doc/lib/SyntaxReference_rb.html +1 -1
  264. data/doc/lib/TaskJuggler_rb.html +1 -1
  265. data/doc/lib/TaskScenario_rb.html +3 -1
  266. data/doc/lib/TextParser/Pattern_rb.html +3 -1
  267. data/doc/lib/TextParser/Rule_rb.html +3 -1
  268. data/doc/lib/TextParser/StackElement_rb.html +3 -1
  269. data/doc/lib/TextParser/State_rb.html +65 -0
  270. data/doc/lib/TextParser_rb.html +1 -1
  271. data/doc/lib/TextScanner_rb.html +1 -1
  272. data/doc/lib/Tj3Config_rb.html +1 -1
  273. data/doc/lib/TjTime_rb.html +1 -1
  274. data/doc/lib/TjpSyntaxRules_rb.html +1 -1
  275. data/doc/lib/WorkingHours_rb.html +3 -1
  276. data/doc/lib/daemon/ReportServer_rb.html +1 -1
  277. data/doc/lib/reports/CSVFile_rb.html +1 -1
  278. data/doc/lib/reports/CollisionDetector_rb.html +67 -0
  279. data/doc/lib/reports/GanttChart_rb.html +1 -1
  280. data/doc/lib/reports/GanttRouter_rb.html +3 -1
  281. data/doc/lib/reports/Navigator_rb.html +1 -1
  282. data/doc/lib/reports/ReportBase_rb.html +1 -1
  283. data/doc/lib/reports/ReportTableCell_rb.html +1 -1
  284. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  285. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  286. data/doc/lib/reports/ReportTable_rb.html +1 -1
  287. data/doc/lib/reports/Report_rb.html +1 -1
  288. data/doc/lib/reports/TableReport_rb.html +1 -1
  289. data/doc/lib/taskjuggler3_rb.html +1 -1
  290. data/examples/tutorial.tjp +1 -2
  291. data/lib/AppConfig.rb +10 -4
  292. data/lib/Attributes.rb +4 -4
  293. data/lib/DataCache.rb +124 -0
  294. data/lib/KeywordDocumentation.rb +5 -5
  295. data/lib/Project.rb +54 -10
  296. data/lib/ProjectFileParser.rb +10 -9
  297. data/lib/ProjectFileScanner.rb +38 -25
  298. data/lib/PropertyList.rb +6 -4
  299. data/lib/Query.rb +0 -8
  300. data/lib/RealFormat.rb +1 -1
  301. data/lib/Resource.rb +1 -1
  302. data/lib/ResourceScenario.rb +96 -31
  303. data/lib/RichText.rb +17 -5
  304. data/lib/RichTextParser.rb +22 -9
  305. data/lib/RichTextScanner.rb +34 -34
  306. data/lib/RichTextSyntaxRules.rb +41 -36
  307. data/lib/Scoreboard.rb +16 -7
  308. data/lib/StatusSheetSender.rb +63 -0
  309. data/lib/SyntaxReference.rb +9 -10
  310. data/lib/TaskJuggler.rb +28 -4
  311. data/lib/TaskScenario.rb +66 -19
  312. data/lib/TextParser.rb +219 -384
  313. data/lib/TextParser/Pattern.rb +168 -49
  314. data/lib/TextParser/Rule.rb +33 -17
  315. data/lib/TextParser/StackElement.rb +42 -2
  316. data/lib/TextParser/State.rb +175 -0
  317. data/lib/TextScanner.rb +19 -15
  318. data/lib/Tj3Config.rb +1 -1
  319. data/lib/TjTime.rb +111 -3
  320. data/lib/TjpSyntaxRules.rb +122 -66
  321. data/lib/WorkingHours.rb +91 -186
  322. data/lib/daemon/ReportServer.rb +3 -2
  323. data/lib/reports/CSVFile.rb +1 -1
  324. data/lib/reports/CollisionDetector.rb +177 -0
  325. data/lib/reports/GanttChart.rb +25 -41
  326. data/lib/reports/GanttRouter.rb +104 -233
  327. data/lib/reports/Navigator.rb +1 -1
  328. data/lib/reports/Report.rb +9 -33
  329. data/lib/reports/ReportBase.rb +0 -1
  330. data/lib/reports/ReportTable.rb +19 -8
  331. data/lib/reports/ReportTableCell.rb +61 -25
  332. data/lib/reports/ReportTableColumn.rb +2 -2
  333. data/lib/reports/ReportTableLine.rb +4 -2
  334. data/lib/reports/TableReport.rb +1 -0
  335. data/lib/taskjuggler3.rb +0 -1
  336. data/manual/Installation +7 -3
  337. data/manual/Intro +12 -10
  338. data/manual/The_TaskJuggler_Syntax +4 -4
  339. data/test/TestSuite/CSV-Reports/celltext-Reference.csv +14 -14
  340. data/test/TestSuite/CSV-Reports/genrefs +1 -1
  341. data/test/TestSuite/CSV-Reports/resourcereport-Reference.csv +4 -4
  342. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks-Reference.csv +22 -22
  343. data/test/TestSuite/CSV-Reports/sortByTree-Reference.csv +14 -14
  344. data/test/TestSuite/CSV-Reports/sortBy_duration.down-Reference.csv +14 -14
  345. data/test/TestSuite/CSV-Reports/sortBy_effort.up-Reference.csv +14 -14
  346. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down-Reference.csv +14 -14
  347. data/test/TestSuite/CSV-Reports/taskreport-Reference.csv +14 -14
  348. data/test/TestSuite/CSV-Reports/taskreport_with_resources-Reference.csv +32 -24
  349. data/test/TestSuite/CSV-Reports/weekly-Reference.csv +13 -0
  350. data/test/TestSuite/CSV-Reports/weekly.tjp +9 -0
  351. data/test/TestSuite/HTML-Reports/css/tjreport.css +7 -2
  352. data/test/TestSuite/HTML-Reports/depArrows.html +839 -830
  353. data/test/TestSuite/HTML-Reports/depArrows.tjp +12 -12
  354. data/test/TestSuite/HTML-Reports/profile.html +37581 -0
  355. data/test/TestSuite/ReportGenerator/Errors/no_report_defined.tjp +7 -0
  356. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +1 -1
  357. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/missing-reports +2 -0
  358. data/test/TestSuite/StatusSheets/run +2 -0
  359. data/test/TestSuite/Syntax/Correct/Booking.tjp +13 -5
  360. data/test/TestSuite/Syntax/Correct/ResourceRoot.tjp +21 -0
  361. data/test/TestSuite/Syntax/Correct/RollupResource.tjp +21 -0
  362. data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +1 -1
  363. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  364. data/test/TestSuite/Syntax/Errors/include_before_project.tjp +2 -0
  365. data/test/TestSuite/Syntax/Errors/no_reduce.tjp +6 -0
  366. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
  367. data/test/TestSuite/TimeSheets/run +1 -1
  368. data/test/test_CSV-Reports.rb +2 -4
  369. data/test/test_CollisionDetector.rb +85 -0
  370. data/test/test_Project.rb +2 -2
  371. data/test/test_ProjectFileScanner.rb +73 -31
  372. data/test/test_Query.rb +2 -2
  373. data/test/test_ReportGenerator.rb +1 -1
  374. data/test/test_RichText.rb +4 -4
  375. data/test/test_WorkingHours.rb +150 -11
  376. metadata +75 -67
  377. data/test/TestSuite/ReportGenerator/Errors/css/tjreport.css +0 -407
  378. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +0 -26
  379. data/test/TestSuite/Scheduler/Correct/Allocate.html +0 -3210
  380. data/test/TestSuite/Scheduler/Correct/Container.html +0 -349
  381. data/test/TestSuite/Scheduler/Correct/Limits.html +0 -4964
  382. data/test/TestSuite/Scheduler/Correct/Shift.html +0 -1719
  383. data/test/TestSuite/Scheduler/Correct/Shift2.html +0 -476
  384. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -66
  385. data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
  386. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  387. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  388. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  389. data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
  390. data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
  391. data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
  392. data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
  393. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  394. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  395. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  396. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +0 -1301
  397. data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +0 -66
  398. data/test/TestSuite/Scheduler/Errors/css/tjreport.css +0 -407
  399. data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
  400. data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
  401. data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
  402. data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
  403. data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
  404. data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
  405. data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
  406. data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
  407. data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
  408. data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
  409. data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
  410. data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +0 -1301
  411. data/test/TestSuite/StatusSheets/resrep.tji +0 -7
  412. data/test/TestSuite/StatusSheets/tj3d.log +0 -312
  413. data/test/TestSuite/Syntax/Correct/Managers.html +0 -263
  414. data/test/TestSuite/TimeSheets/acceptable_intervals +0 -1
  415. data/test/TestSuite/TimeSheets/statussheets.log +0 -1
@@ -153,12 +153,18 @@
153
153
 
154
154
  <li><a href="../TaskJuggler/ChargeSetListAttribute.html">TaskJuggler::ChargeSetListAttribute</a></li>
155
155
 
156
+ <li><a href="../TaskJuggler/CollisionDetector.html">TaskJuggler::CollisionDetector</a></li>
157
+
156
158
  <li><a href="../TaskJuggler/ColumnListAttribute.html">TaskJuggler::ColumnListAttribute</a></li>
157
159
 
158
160
  <li><a href="../TaskJuggler/ColumnTable.html">TaskJuggler::ColumnTable</a></li>
159
161
 
160
162
  <li><a href="../TaskJuggler/Daemon.html">TaskJuggler::Daemon</a></li>
161
163
 
164
+ <li><a href="../TaskJuggler/DataCache.html">TaskJuggler::DataCache</a></li>
165
+
166
+ <li><a href="../TaskJuggler/DataCacheEntry.html">TaskJuggler::DataCacheEntry</a></li>
167
+
162
168
  <li><a href="../TaskJuggler/DateAttribute.html">TaskJuggler::DateAttribute</a></li>
163
169
 
164
170
  <li><a href="../TaskJuggler/DefinitionListAttribute.html">TaskJuggler::DefinitionListAttribute</a></li>
@@ -265,7 +271,7 @@
265
271
 
266
272
  <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
267
273
 
268
- <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
274
+ <li><a href="../TaskJuggler/PlaceHolderCell.html">TaskJuggler::PlaceHolderCell</a></li>
269
275
 
270
276
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
271
277
 
@@ -445,6 +451,10 @@
445
451
 
446
452
  <li><a href="../TaskJuggler/TextParser/StackElement.html">TaskJuggler::TextParser::StackElement</a></li>
447
453
 
454
+ <li><a href="../TaskJuggler/TextParser/State.html">TaskJuggler::TextParser::State</a></li>
455
+
456
+ <li><a href="../TaskJuggler/TextParser/StateTransition.html">TaskJuggler::TextParser::StateTransition</a></li>
457
+
448
458
  <li><a href="../TaskJuggler/TextParser/TextParserResultArray.html">TaskJuggler::TextParser::TextParserResultArray</a></li>
449
459
 
450
460
  <li><a href="../TaskJuggler/TextParser/TokenDoc.html">TaskJuggler::TextParser::TokenDoc</a></li>
@@ -151,12 +151,18 @@
151
151
 
152
152
  <li><a href="../TaskJuggler/ChargeSetListAttribute.html">TaskJuggler::ChargeSetListAttribute</a></li>
153
153
 
154
+ <li><a href="../TaskJuggler/CollisionDetector.html">TaskJuggler::CollisionDetector</a></li>
155
+
154
156
  <li><a href="../TaskJuggler/ColumnListAttribute.html">TaskJuggler::ColumnListAttribute</a></li>
155
157
 
156
158
  <li><a href="../TaskJuggler/ColumnTable.html">TaskJuggler::ColumnTable</a></li>
157
159
 
158
160
  <li><a href="../TaskJuggler/Daemon.html">TaskJuggler::Daemon</a></li>
159
161
 
162
+ <li><a href="../TaskJuggler/DataCache.html">TaskJuggler::DataCache</a></li>
163
+
164
+ <li><a href="../TaskJuggler/DataCacheEntry.html">TaskJuggler::DataCacheEntry</a></li>
165
+
160
166
  <li><a href="../TaskJuggler/DateAttribute.html">TaskJuggler::DateAttribute</a></li>
161
167
 
162
168
  <li><a href="../TaskJuggler/DefinitionListAttribute.html">TaskJuggler::DefinitionListAttribute</a></li>
@@ -263,7 +269,7 @@
263
269
 
264
270
  <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
265
271
 
266
- <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
272
+ <li><a href="../TaskJuggler/PlaceHolderCell.html">TaskJuggler::PlaceHolderCell</a></li>
267
273
 
268
274
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
269
275
 
@@ -443,6 +449,10 @@
443
449
 
444
450
  <li><a href="../TaskJuggler/TextParser/StackElement.html">TaskJuggler::TextParser::StackElement</a></li>
445
451
 
452
+ <li><a href="../TaskJuggler/TextParser/State.html">TaskJuggler::TextParser::State</a></li>
453
+
454
+ <li><a href="../TaskJuggler/TextParser/StateTransition.html">TaskJuggler::TextParser::StateTransition</a></li>
455
+
446
456
  <li><a href="../TaskJuggler/TextParser/TextParserResultArray.html">TaskJuggler::TextParser::TextParserResultArray</a></li>
447
457
 
448
458
  <li><a href="../TaskJuggler/TextParser/TokenDoc.html">TaskJuggler::TextParser::TokenDoc</a></li>
@@ -153,12 +153,18 @@
153
153
 
154
154
  <li><a href="../TaskJuggler/ChargeSetListAttribute.html">TaskJuggler::ChargeSetListAttribute</a></li>
155
155
 
156
+ <li><a href="../TaskJuggler/CollisionDetector.html">TaskJuggler::CollisionDetector</a></li>
157
+
156
158
  <li><a href="../TaskJuggler/ColumnListAttribute.html">TaskJuggler::ColumnListAttribute</a></li>
157
159
 
158
160
  <li><a href="../TaskJuggler/ColumnTable.html">TaskJuggler::ColumnTable</a></li>
159
161
 
160
162
  <li><a href="../TaskJuggler/Daemon.html">TaskJuggler::Daemon</a></li>
161
163
 
164
+ <li><a href="../TaskJuggler/DataCache.html">TaskJuggler::DataCache</a></li>
165
+
166
+ <li><a href="../TaskJuggler/DataCacheEntry.html">TaskJuggler::DataCacheEntry</a></li>
167
+
162
168
  <li><a href="../TaskJuggler/DateAttribute.html">TaskJuggler::DateAttribute</a></li>
163
169
 
164
170
  <li><a href="../TaskJuggler/DefinitionListAttribute.html">TaskJuggler::DefinitionListAttribute</a></li>
@@ -265,7 +271,7 @@
265
271
 
266
272
  <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
267
273
 
268
- <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
274
+ <li><a href="../TaskJuggler/PlaceHolderCell.html">TaskJuggler::PlaceHolderCell</a></li>
269
275
 
270
276
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
271
277
 
@@ -445,6 +451,10 @@
445
451
 
446
452
  <li><a href="../TaskJuggler/TextParser/StackElement.html">TaskJuggler::TextParser::StackElement</a></li>
447
453
 
454
+ <li><a href="../TaskJuggler/TextParser/State.html">TaskJuggler::TextParser::State</a></li>
455
+
456
+ <li><a href="../TaskJuggler/TextParser/StateTransition.html">TaskJuggler::TextParser::StateTransition</a></li>
457
+
448
458
  <li><a href="../TaskJuggler/TextParser/TextParserResultArray.html">TaskJuggler::TextParser::TextParserResultArray</a></li>
449
459
 
450
460
  <li><a href="../TaskJuggler/TextParser/TokenDoc.html">TaskJuggler::TextParser::TokenDoc</a></li>
@@ -5,7 +5,7 @@
5
5
  <head>
6
6
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
7
7
 
8
- <title>Class: TaskJuggler::OnShiftCache</title>
8
+ <title>Class: TaskJuggler::DataCache</title>
9
9
 
10
10
  <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
11
11
 
@@ -38,8 +38,8 @@
38
38
  <div class="section-body">
39
39
  <ul>
40
40
 
41
- <li><a href="../lib/WorkingHours_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
42
- class="thickbox" title="lib/WorkingHours.rb">lib/WorkingHours.rb</a></li>
41
+ <li><a href="../lib/DataCache_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
42
+ class="thickbox" title="lib/DataCache.rb">lib/DataCache.rb</a></li>
43
43
 
44
44
  </ul>
45
45
  </div>
@@ -71,15 +71,15 @@
71
71
 
72
72
  <li><a href="#method-c-new">::new</a></li>
73
73
 
74
- <li><a href="#method-i-dateToIndex">#dateToIndex</a></li>
74
+ <li><a href="#method-i-flush">#flush</a></li>
75
75
 
76
- <li><a href="#method-i-get">#get</a></li>
76
+ <li><a href="#method-i-load">#load</a></li>
77
77
 
78
- <li><a href="#method-i-register">#register</a></li>
78
+ <li><a href="#method-i-resize">#resize</a></li>
79
79
 
80
- <li><a href="#method-i-resetCaches">#resetCaches</a></li>
80
+ <li><a href="#method-i-store">#store</a></li>
81
81
 
82
- <li><a href="#method-i-set">#set</a></li>
82
+ <li><a href="#method-i-to_s">#to_s</a></li>
83
83
 
84
84
  </ul>
85
85
  </div>
@@ -87,6 +87,17 @@
87
87
 
88
88
  <!-- Included Modules -->
89
89
 
90
+ <div id="includes-section" class="section">
91
+ <h3 class="section-header">Included Modules</h3>
92
+ <ul class="link-list">
93
+
94
+
95
+ <li><span class="include">Singleton</span></li>
96
+
97
+
98
+ </ul>
99
+ </div>
100
+
90
101
  </div>
91
102
 
92
103
  <div id="project-metadata">
@@ -159,12 +170,18 @@
159
170
 
160
171
  <li><a href="../TaskJuggler/ChargeSetListAttribute.html">TaskJuggler::ChargeSetListAttribute</a></li>
161
172
 
173
+ <li><a href="../TaskJuggler/CollisionDetector.html">TaskJuggler::CollisionDetector</a></li>
174
+
162
175
  <li><a href="../TaskJuggler/ColumnListAttribute.html">TaskJuggler::ColumnListAttribute</a></li>
163
176
 
164
177
  <li><a href="../TaskJuggler/ColumnTable.html">TaskJuggler::ColumnTable</a></li>
165
178
 
166
179
  <li><a href="../TaskJuggler/Daemon.html">TaskJuggler::Daemon</a></li>
167
180
 
181
+ <li><a href="../TaskJuggler/DataCache.html">TaskJuggler::DataCache</a></li>
182
+
183
+ <li><a href="../TaskJuggler/DataCacheEntry.html">TaskJuggler::DataCacheEntry</a></li>
184
+
168
185
  <li><a href="../TaskJuggler/DateAttribute.html">TaskJuggler::DateAttribute</a></li>
169
186
 
170
187
  <li><a href="../TaskJuggler/DefinitionListAttribute.html">TaskJuggler::DefinitionListAttribute</a></li>
@@ -271,7 +288,7 @@
271
288
 
272
289
  <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
273
290
 
274
- <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
291
+ <li><a href="../TaskJuggler/PlaceHolderCell.html">TaskJuggler::PlaceHolderCell</a></li>
275
292
 
276
293
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
277
294
 
@@ -451,6 +468,10 @@
451
468
 
452
469
  <li><a href="../TaskJuggler/TextParser/StackElement.html">TaskJuggler::TextParser::StackElement</a></li>
453
470
 
471
+ <li><a href="../TaskJuggler/TextParser/State.html">TaskJuggler::TextParser::State</a></li>
472
+
473
+ <li><a href="../TaskJuggler/TextParser/StateTransition.html">TaskJuggler::TextParser::StateTransition</a></li>
474
+
454
475
  <li><a href="../TaskJuggler/TextParser/TextParserResultArray.html">TaskJuggler::TextParser::TextParserResultArray</a></li>
455
476
 
456
477
  <li><a href="../TaskJuggler/TextParser/TokenDoc.html">TaskJuggler::TextParser::TokenDoc</a></li>
@@ -554,18 +575,16 @@
554
575
  </div>
555
576
 
556
577
  <div id="documentation">
557
- <h1 class="class">TaskJuggler::OnShiftCache</h1>
578
+ <h1 class="class">TaskJuggler::DataCache</h1>
558
579
 
559
580
  <div id="description">
560
581
  <p>
561
- This cache class is used to speedup accesses to the frequently used
562
- WorkingHours::onShift? function. It saves the result the first time the
563
- function is called for a particular date and working hour set and returns
564
- it on subsequent calls again. Each partucular set of working hours needs
565
- its separate cache. The <a href="OnShiftCache.html">OnShiftCache</a> object
566
- is shared amongst all <a href="WorkingHours.html">WorkingHours</a> objects
567
- so that <a href="WorkingHours.html">WorkingHours</a> objects with identical
568
- working hours can share the cache.
582
+ This class provides a global data cache that can be used to store and
583
+ retrieve values indexed by a key. The cache is size limited. When maximum
584
+ capacity is reached, a certain percentage of the least requested values is
585
+ dropped from the cache. The primary purpose of this global cache is to
586
+ store values that are expensive to compute but may be need on several
587
+ occasions during the program execution.
569
588
  </p>
570
589
 
571
590
  </div>
@@ -595,28 +614,24 @@ working hours can share the cache.
595
614
 
596
615
  <div class="method-description">
597
616
 
598
- <p>
599
- Create the <a href="OnShiftCache.html">OnShiftCache</a> object. There
600
- should be only one for the application.
601
- </p>
617
+
602
618
 
603
619
 
604
620
 
605
621
  <div class="method-source-code"
606
622
  id="new-source">
607
623
  <pre>
608
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 28</span>
609
- 28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>
610
- 29: <span class="ruby-ivar">@caches</span> = []
611
- 30: <span class="ruby-ivar">@workingHoursTable</span> = []
612
- 31: <span class="ruby-comment cmt"># The cache is an array with entries for each date. To minimize the</span>
613
- 32: <span class="ruby-comment cmt"># necessary storage space, we need to guess the smallest used date</span>
614
- 33: <span class="ruby-comment cmt"># (which gets index 0 then) and the smallest distance between dates.</span>
615
- 34: <span class="ruby-ivar">@minDate</span> = <span class="ruby-keyword kw">nil</span>
616
- 35: <span class="ruby-comment cmt"># We assume a timing resolution of 1 hour (the TaskJuggler default)</span>
617
- 36: <span class="ruby-comment cmt"># first.</span>
618
- 37: <span class="ruby-ivar">@minDateDelta</span> = <span class="ruby-value">60</span> * <span class="ruby-value">60</span>
619
- 38: <span class="ruby-keyword kw">end</span></pre>
624
+ <span class="ruby-comment cmt"># File lib/DataCache.rb, line 53</span>
625
+ 53: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>
626
+ 54: <span class="ruby-identifier">resize</span>
627
+ 55: <span class="ruby-identifier">flush</span>
628
+ 56: <span class="ruby-comment cmt"># Counter for the number of writes to the cache.</span>
629
+ 57: <span class="ruby-ivar">@stores</span> = <span class="ruby-value">0</span>
630
+ 58: <span class="ruby-comment cmt"># Counter for the number of found values.</span>
631
+ 59: <span class="ruby-ivar">@hits</span> = <span class="ruby-value">0</span>
632
+ 60: <span class="ruby-comment cmt"># Counter for the number of not found values.</span>
633
+ 61: <span class="ruby-ivar">@misses</span> = <span class="ruby-value">0</span>
634
+ 62: <span class="ruby-keyword kw">end</span></pre>
620
635
  </div>
621
636
 
622
637
  </div>
@@ -633,13 +648,13 @@ should be only one for the application.
633
648
  <h3 class="section-header">Public Instance Methods</h3>
634
649
 
635
650
 
636
- <div id="get-method" class="method-detail ">
637
- <a name="method-i-get"></a>
651
+ <div id="flush-method" class="method-detail ">
652
+ <a name="method-i-flush"></a>
638
653
 
639
654
  <div class="method-heading">
640
655
 
641
- <span class="method-name">get</span><span
642
- class="method-args">(cache, date)</span>
656
+ <span class="method-name">flush</span><span
657
+ class="method-args">()</span>
643
658
  <span class="method-click-advice">click to toggle source</span>
644
659
 
645
660
  </div>
@@ -647,18 +662,19 @@ should be only one for the application.
647
662
  <div class="method-description">
648
663
 
649
664
  <p>
650
- Get the value for a given <tt>cache</tt> and <tt>date</tt>.
665
+ Completely flush the cache. The statistic counters will remain intact, but
666
+ all data values are lost.
651
667
  </p>
652
668
 
653
669
 
654
670
 
655
671
  <div class="method-source-code"
656
- id="get-source">
672
+ id="flush-source">
657
673
  <pre>
658
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 66</span>
659
- 66: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get</span>(<span class="ruby-identifier">cache</span>, <span class="ruby-identifier">date</span>)
660
- 67: <span class="ruby-identifier">cache</span>[<span class="ruby-identifier">dateToIndex</span>(<span class="ruby-identifier">date</span>)]
661
- 68: <span class="ruby-keyword kw">end</span></pre>
674
+ <span class="ruby-comment cmt"># File lib/DataCache.rb, line 75</span>
675
+ 75: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">flush</span>
676
+ 76: <span class="ruby-ivar">@entries</span> = {}
677
+ 77: <span class="ruby-keyword kw">end</span></pre>
662
678
  </div>
663
679
 
664
680
  </div>
@@ -669,13 +685,13 @@ Get the value for a given <tt>cache</tt> and <tt>date</tt>.
669
685
  </div>
670
686
 
671
687
 
672
- <div id="register-method" class="method-detail ">
673
- <a name="method-i-register"></a>
688
+ <div id="load-method" class="method-detail ">
689
+ <a name="method-i-load"></a>
674
690
 
675
691
  <div class="method-heading">
676
692
 
677
- <span class="method-name">register</span><span
678
- class="method-args">(wh)</span>
693
+ <span class="method-name">load</span><span
694
+ class="method-args">(key)</span>
679
695
  <span class="method-click-advice">click to toggle source</span>
680
696
 
681
697
  </div>
@@ -683,34 +699,25 @@ Get the value for a given <tt>cache</tt> and <tt>date</tt>.
683
699
  <div class="method-description">
684
700
 
685
701
  <p>
686
- Register the <a href="WorkingHours.html">WorkingHours</a> object with the
687
- caches. The function will return the actual cache used for this particular
688
- set of working hours. The <a href="WorkingHours.html">WorkingHours</a>
689
- object may not change its working hours after this call. The returned cache
690
- reference is used as a handle for subsequent OnShiftCache::set and
691
- OnShiftCache::get calls.
702
+ Retrieve the value indexed by <em>key</em> from the cache. If it&#8217;s
703
+ not found, nil is returned.
692
704
  </p>
693
705
 
694
706
 
695
707
 
696
708
  <div class="method-source-code"
697
- id="register-source">
709
+ id="load-source">
698
710
  <pre>
699
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 45</span>
700
- 45: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">register</span>(<span class="ruby-identifier">wh</span>)
701
- 46: <span class="ruby-comment cmt"># Search the list of already registered caches for an identical set of</span>
702
- 47: <span class="ruby-comment cmt"># WorkingHours. In case one is found, return the reference to this</span>
703
- 48: <span class="ruby-comment cmt"># cache.</span>
704
- 49: <span class="ruby-ivar">@workingHoursTable</span>.<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
705
- 50: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@workingHoursTable</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">wh</span>
706
- 51: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@caches</span>[<span class="ruby-identifier">i</span>]
707
- 52: <span class="ruby-keyword kw">end</span>
708
- 53: <span class="ruby-keyword kw">end</span>
709
- 54: <span class="ruby-comment cmt"># If this is a new set of WorkingHours we create a new cache for it.</span>
710
- 55: <span class="ruby-ivar">@workingHoursTable</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">WorkingHours</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">wh</span>)
711
- 56: <span class="ruby-ivar">@caches</span> <span class="ruby-operator">&lt;&lt;</span> []
712
- 57: <span class="ruby-ivar">@caches</span>.<span class="ruby-identifier">last</span>
713
- 58: <span class="ruby-keyword kw">end</span></pre>
711
+ <span class="ruby-comment cmt"># File lib/DataCache.rb, line 103</span>
712
+ 103: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">load</span>(<span class="ruby-identifier">key</span>)
713
+ 104: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">e</span> = <span class="ruby-ivar">@entries</span>[<span class="ruby-identifier">key</span>])
714
+ 105: <span class="ruby-ivar">@hits</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
715
+ 106: <span class="ruby-identifier">e</span>.<span class="ruby-identifier">value</span>
716
+ 107: <span class="ruby-keyword kw">else</span>
717
+ 108: <span class="ruby-ivar">@misses</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
718
+ 109: <span class="ruby-keyword kw">nil</span>
719
+ 110: <span class="ruby-keyword kw">end</span>
720
+ 111: <span class="ruby-keyword kw">end</span></pre>
714
721
  </div>
715
722
 
716
723
  </div>
@@ -721,13 +728,13 @@ OnShiftCache::get calls.
721
728
  </div>
722
729
 
723
730
 
724
- <div id="set-method" class="method-detail ">
725
- <a name="method-i-set"></a>
731
+ <div id="resize-method" class="method-detail ">
732
+ <a name="method-i-resize"></a>
726
733
 
727
734
  <div class="method-heading">
728
735
 
729
- <span class="method-name">set</span><span
730
- class="method-args">(cache, date, value)</span>
736
+ <span class="method-name">resize</span><span
737
+ class="method-args">(size = 100000)</span>
731
738
  <span class="method-click-advice">click to toggle source</span>
732
739
 
733
740
  </div>
@@ -735,18 +742,22 @@ OnShiftCache::get calls.
735
742
  <div class="method-description">
736
743
 
737
744
  <p>
738
- Set the <tt>value</tt> for a given <tt>cache</tt> and <tt>date</tt>.
745
+ For now, we use this randomly determined size.
739
746
  </p>
740
747
 
741
748
 
742
749
 
743
750
  <div class="method-source-code"
744
- id="set-source">
751
+ id="resize-source">
745
752
  <pre>
746
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 61</span>
747
- 61: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set</span>(<span class="ruby-identifier">cache</span>, <span class="ruby-identifier">date</span>, <span class="ruby-identifier">value</span>)
748
- 62: <span class="ruby-identifier">cache</span>[<span class="ruby-identifier">dateToIndex</span>(<span class="ruby-identifier">date</span>)] = <span class="ruby-identifier">value</span>
749
- 63: <span class="ruby-keyword kw">end</span></pre>
753
+ <span class="ruby-comment cmt"># File lib/DataCache.rb, line 65</span>
754
+ 65: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resize</span>(<span class="ruby-identifier">size</span> = <span class="ruby-value">100000</span>)
755
+ 66: <span class="ruby-ivar">@highWaterMark</span> = <span class="ruby-identifier">size</span>
756
+ 67: <span class="ruby-comment cmt"># Flushing out the least used entries is fairly expensive. So we only</span>
757
+ 68: <span class="ruby-comment cmt"># want to do this once in a while. The lowWaterMark determines how much</span>
758
+ 69: <span class="ruby-comment cmt"># of the entries will survive the flush.</span>
759
+ 70: <span class="ruby-ivar">@lowWaterMark</span> = <span class="ruby-identifier">size</span> * <span class="ruby-value">0.9</span>
760
+ 71: <span class="ruby-keyword kw">end</span></pre>
750
761
  </div>
751
762
 
752
763
  </div>
@@ -757,19 +768,13 @@ Set the <tt>value</tt> for a given <tt>cache</tt> and <tt>date</tt>.
757
768
  </div>
758
769
 
759
770
 
760
- </div>
761
-
762
- <div id="private-instance-method-details" class="method-section section">
763
- <h3 class="section-header">Private Instance Methods</h3>
764
-
765
-
766
- <div id="date-o-ndex-method" class="method-detail ">
767
- <a name="method-i-dateToIndex"></a>
771
+ <div id="store-method" class="method-detail ">
772
+ <a name="method-i-store"></a>
768
773
 
769
774
  <div class="method-heading">
770
775
 
771
- <span class="method-name">dateToIndex</span><span
772
- class="method-args">(date)</span>
776
+ <span class="method-name">store</span><span
777
+ class="method-args">(value, key)</span>
773
778
  <span class="method-click-advice">click to toggle source</span>
774
779
 
775
780
  </div>
@@ -777,49 +782,35 @@ Set the <tt>value</tt> for a given <tt>cache</tt> and <tt>date</tt>.
777
782
  <div class="method-description">
778
783
 
779
784
  <p>
780
- Convert a <a href="TjTime.html">TjTime</a> <tt>date</tt> to an index in the
781
- cache Array. To optimize the size of the cache, we have to guess the
782
- smallest used date and the regular distance between the date values. If we
783
- have to correct these guessed values, we have to clear the caches.
785
+ Store <em>value</em> into the cache using <em>key</em> to tag it.
786
+ <em>key</em> must be unique and must be used to load the value from the
787
+ cache again. You cannot store nil values!
784
788
  </p>
785
789
 
786
790
 
787
791
 
788
792
  <div class="method-source-code"
789
- id="date-o-ndex-source">
793
+ id="store-source">
790
794
  <pre>
791
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 82</span>
792
- 82: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dateToIndex</span>(<span class="ruby-identifier">date</span>)
793
- 83: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@minDate</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@minDate</span>
794
- 84: <span class="ruby-ivar">@minDate</span> = <span class="ruby-identifier">date</span>
795
- 85: <span class="ruby-identifier">resetCaches</span>
796
- 86: <span class="ruby-keyword kw">end</span>
797
- 87: <span class="ruby-identifier">startDate</span> = <span class="ruby-identifier">date</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@minDate</span>
798
- 88: <span class="ruby-identifier">div</span>, <span class="ruby-identifier">mod</span> = <span class="ruby-identifier">startDate</span>.<span class="ruby-identifier">divmod</span>(<span class="ruby-ivar">@minDateDelta</span>)
799
- 89: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">mod</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
800
- 90: <span class="ruby-identifier">resetCaches</span>
801
- 91: <span class="ruby-comment cmt"># We have to guess the timingresolution of the project here. Possible</span>
802
- 92: <span class="ruby-comment cmt"># values are 5, 10, 15, 20, 30 or 60 minutes.</span>
803
- 93: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@minDateDelta</span> <span class="ruby-operator">/</span> <span class="ruby-value">60</span>
804
- 94: <span class="ruby-keyword kw">when</span> <span class="ruby-value">60</span>
805
- 95: <span class="ruby-ivar">@minDateDelta</span> = <span class="ruby-value">30</span>
806
- 96: <span class="ruby-keyword kw">when</span> <span class="ruby-value">30</span>
807
- 97: <span class="ruby-ivar">@minDateDelta</span> = <span class="ruby-value">20</span>
808
- 98: <span class="ruby-keyword kw">when</span> <span class="ruby-value">20</span>
809
- 99: <span class="ruby-ivar">@minDateDelta</span> = <span class="ruby-value">15</span>
810
- 100: <span class="ruby-keyword kw">when</span> <span class="ruby-value">15</span>
811
- 101: <span class="ruby-ivar">@minDateDelta</span> = <span class="ruby-value">10</span>
812
- 102: <span class="ruby-keyword kw">when</span> <span class="ruby-value">10</span>
813
- 103: <span class="ruby-ivar">@minDateDelta</span> = <span class="ruby-value">5</span>
814
- 104: <span class="ruby-keyword kw">else</span>
815
- 105: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Illegal timing resolution!&quot;</span>
816
- 106: <span class="ruby-keyword kw">end</span>
817
- 107: <span class="ruby-ivar">@minDateDelta</span> <span class="ruby-operator">*=</span> <span class="ruby-value">60</span>
818
- 108: <span class="ruby-identifier">div</span> = <span class="ruby-identifier">startDate</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@minDateDelta</span>
819
- 109: <span class="ruby-keyword kw">end</span>
820
- 110:
821
- 111: <span class="ruby-identifier">div</span>
822
- 112: <span class="ruby-keyword kw">end</span></pre>
795
+ <span class="ruby-comment cmt"># File lib/DataCache.rb, line 82</span>
796
+ 82: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">store</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">key</span>)
797
+ 83: <span class="ruby-ivar">@stores</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
798
+ 84:
799
+ 85: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@entries</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@highWaterMark</span>
800
+ 86: <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@entries</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@lowWaterMark</span>
801
+ 87: <span class="ruby-comment cmt"># How many entries do we need to delete to get to the low watermark?</span>
802
+ 88: <span class="ruby-identifier">toDelete</span> = <span class="ruby-ivar">@entries</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@lowWaterMark</span>
803
+ 89: <span class="ruby-ivar">@entries</span>.<span class="ruby-identifier">delete_if</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">foo</span>, <span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
804
+ 90: <span class="ruby-comment cmt"># Hit counts age with every cleanup.</span>
805
+ 91: (<span class="ruby-identifier">e</span>.<span class="ruby-identifier">hits</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>) <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">toDelete</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>) <span class="ruby-operator">&gt;=</span> <span class="ruby-value">0</span>
806
+ 92: <span class="ruby-keyword kw">end</span>
807
+ 93: <span class="ruby-keyword kw">end</span>
808
+ 94: <span class="ruby-keyword kw">end</span>
809
+ 95:
810
+ 96: <span class="ruby-ivar">@entries</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-constant">DataCacheEntry</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">value</span>)
811
+ 97:
812
+ 98: <span class="ruby-identifier">value</span>
813
+ 99: <span class="ruby-keyword kw">end</span></pre>
823
814
  </div>
824
815
 
825
816
  </div>
@@ -830,12 +821,12 @@ have to correct these guessed values, we have to clear the caches.
830
821
  </div>
831
822
 
832
823
 
833
- <div id="reset-aches-method" class="method-detail ">
834
- <a name="method-i-resetCaches"></a>
824
+ <div id="to-s-method" class="method-detail ">
825
+ <a name="method-i-to_s"></a>
835
826
 
836
827
  <div class="method-heading">
837
828
 
838
- <span class="method-name">resetCaches</span><span
829
+ <span class="method-name">to_s</span><span
839
830
  class="method-args">()</span>
840
831
  <span class="method-click-advice">click to toggle source</span>
841
832
 
@@ -843,20 +834,17 @@ have to correct these guessed values, we have to clear the caches.
843
834
 
844
835
  <div class="method-description">
845
836
 
846
- <p>
847
- When the @minDate or @minDateDelta values need to be changed, we have to
848
- clear all the caches again.
849
- </p>
837
+
850
838
 
851
839
 
852
840
 
853
841
  <div class="method-source-code"
854
- id="reset-aches-source">
842
+ id="to-s-source">
855
843
  <pre>
856
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 74</span>
857
- 74: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resetCaches</span>
858
- 75: <span class="ruby-ivar">@caches</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">clear</span> }
859
- 76: <span class="ruby-keyword kw">end</span></pre>
844
+ <span class="ruby-comment cmt"># File lib/DataCache.rb, line 113</span>
845
+ 113: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
846
+ 114: <span class="ruby-value str">Entries: #{@entries.size} Stores: #{@stores}Hits: #{@hits} Misses: #{@misses}Hit Rate: #{@hits * 100.0 / (@hits + @misses)}%</span>
847
+ 115: <span class="ruby-keyword kw">end</span></pre>
860
848
  </div>
861
849
 
862
850
  </div>