taskjuggler 0.0.7 → 0.0.8

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 (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>