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
@@ -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>
@@ -169,12 +169,18 @@
169
169
 
170
170
  <li><a href="../TaskJuggler/ChargeSetListAttribute.html">TaskJuggler::ChargeSetListAttribute</a></li>
171
171
 
172
+ <li><a href="../TaskJuggler/CollisionDetector.html">TaskJuggler::CollisionDetector</a></li>
173
+
172
174
  <li><a href="../TaskJuggler/ColumnListAttribute.html">TaskJuggler::ColumnListAttribute</a></li>
173
175
 
174
176
  <li><a href="../TaskJuggler/ColumnTable.html">TaskJuggler::ColumnTable</a></li>
175
177
 
176
178
  <li><a href="../TaskJuggler/Daemon.html">TaskJuggler::Daemon</a></li>
177
179
 
180
+ <li><a href="../TaskJuggler/DataCache.html">TaskJuggler::DataCache</a></li>
181
+
182
+ <li><a href="../TaskJuggler/DataCacheEntry.html">TaskJuggler::DataCacheEntry</a></li>
183
+
178
184
  <li><a href="../TaskJuggler/DateAttribute.html">TaskJuggler::DateAttribute</a></li>
179
185
 
180
186
  <li><a href="../TaskJuggler/DefinitionListAttribute.html">TaskJuggler::DefinitionListAttribute</a></li>
@@ -281,7 +287,7 @@
281
287
 
282
288
  <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
283
289
 
284
- <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
290
+ <li><a href="../TaskJuggler/PlaceHolderCell.html">TaskJuggler::PlaceHolderCell</a></li>
285
291
 
286
292
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
287
293
 
@@ -461,6 +467,10 @@
461
467
 
462
468
  <li><a href="../TaskJuggler/TextParser/StackElement.html">TaskJuggler::TextParser::StackElement</a></li>
463
469
 
470
+ <li><a href="../TaskJuggler/TextParser/State.html">TaskJuggler::TextParser::State</a></li>
471
+
472
+ <li><a href="../TaskJuggler/TextParser/StateTransition.html">TaskJuggler::TextParser::StateTransition</a></li>
473
+
464
474
  <li><a href="../TaskJuggler/TextParser/TextParserResultArray.html">TaskJuggler::TextParser::TextParserResultArray</a></li>
465
475
 
466
476
  <li><a href="../TaskJuggler/TextParser/TokenDoc.html">TaskJuggler::TextParser::TokenDoc</a></li>
@@ -165,12 +165,18 @@
165
165
 
166
166
  <li><a href="../TaskJuggler/ChargeSetListAttribute.html">TaskJuggler::ChargeSetListAttribute</a></li>
167
167
 
168
+ <li><a href="../TaskJuggler/CollisionDetector.html">TaskJuggler::CollisionDetector</a></li>
169
+
168
170
  <li><a href="../TaskJuggler/ColumnListAttribute.html">TaskJuggler::ColumnListAttribute</a></li>
169
171
 
170
172
  <li><a href="../TaskJuggler/ColumnTable.html">TaskJuggler::ColumnTable</a></li>
171
173
 
172
174
  <li><a href="../TaskJuggler/Daemon.html">TaskJuggler::Daemon</a></li>
173
175
 
176
+ <li><a href="../TaskJuggler/DataCache.html">TaskJuggler::DataCache</a></li>
177
+
178
+ <li><a href="../TaskJuggler/DataCacheEntry.html">TaskJuggler::DataCacheEntry</a></li>
179
+
174
180
  <li><a href="../TaskJuggler/DateAttribute.html">TaskJuggler::DateAttribute</a></li>
175
181
 
176
182
  <li><a href="../TaskJuggler/DefinitionListAttribute.html">TaskJuggler::DefinitionListAttribute</a></li>
@@ -277,7 +283,7 @@
277
283
 
278
284
  <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
279
285
 
280
- <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
286
+ <li><a href="../TaskJuggler/PlaceHolderCell.html">TaskJuggler::PlaceHolderCell</a></li>
281
287
 
282
288
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
283
289
 
@@ -457,6 +463,10 @@
457
463
 
458
464
  <li><a href="../TaskJuggler/TextParser/StackElement.html">TaskJuggler::TextParser::StackElement</a></li>
459
465
 
466
+ <li><a href="../TaskJuggler/TextParser/State.html">TaskJuggler::TextParser::State</a></li>
467
+
468
+ <li><a href="../TaskJuggler/TextParser/StateTransition.html">TaskJuggler::TextParser::StateTransition</a></li>
469
+
460
470
  <li><a href="../TaskJuggler/TextParser/TextParserResultArray.html">TaskJuggler::TextParser::TextParserResultArray</a></li>
461
471
 
462
472
  <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>
@@ -73,17 +73,17 @@
73
73
 
74
74
  <li><a href="#method-i-%3D%3D">#==</a></li>
75
75
 
76
- <li><a href="#method-i-dayOff%3F">#dayOff?</a></li>
77
-
78
76
  <li><a href="#method-i-getWorkingHours">#getWorkingHours</a></li>
79
77
 
78
+ <li><a href="#method-i-initScoreboard">#initScoreboard</a></li>
79
+
80
80
  <li><a href="#method-i-onShift%3F">#onShift?</a></li>
81
81
 
82
82
  <li><a href="#method-i-setWorkingHours">#setWorkingHours</a></li>
83
83
 
84
84
  <li><a href="#method-i-timeOff%3F">#timeOff?</a></li>
85
85
 
86
- <li><a href="#method-i-toLocaltime">#toLocaltime</a></li>
86
+ <li><a href="#method-i-timezone%3D">#timezone=</a></li>
87
87
 
88
88
  <li><a href="#method-i-to_s">#to_s</a></li>
89
89
 
@@ -165,12 +165,18 @@
165
165
 
166
166
  <li><a href="../TaskJuggler/ChargeSetListAttribute.html">TaskJuggler::ChargeSetListAttribute</a></li>
167
167
 
168
+ <li><a href="../TaskJuggler/CollisionDetector.html">TaskJuggler::CollisionDetector</a></li>
169
+
168
170
  <li><a href="../TaskJuggler/ColumnListAttribute.html">TaskJuggler::ColumnListAttribute</a></li>
169
171
 
170
172
  <li><a href="../TaskJuggler/ColumnTable.html">TaskJuggler::ColumnTable</a></li>
171
173
 
172
174
  <li><a href="../TaskJuggler/Daemon.html">TaskJuggler::Daemon</a></li>
173
175
 
176
+ <li><a href="../TaskJuggler/DataCache.html">TaskJuggler::DataCache</a></li>
177
+
178
+ <li><a href="../TaskJuggler/DataCacheEntry.html">TaskJuggler::DataCacheEntry</a></li>
179
+
174
180
  <li><a href="../TaskJuggler/DateAttribute.html">TaskJuggler::DateAttribute</a></li>
175
181
 
176
182
  <li><a href="../TaskJuggler/DefinitionListAttribute.html">TaskJuggler::DefinitionListAttribute</a></li>
@@ -277,7 +283,7 @@
277
283
 
278
284
  <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
279
285
 
280
- <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
286
+ <li><a href="../TaskJuggler/PlaceHolderCell.html">TaskJuggler::PlaceHolderCell</a></li>
281
287
 
282
288
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
283
289
 
@@ -457,6 +463,10 @@
457
463
 
458
464
  <li><a href="../TaskJuggler/TextParser/StackElement.html">TaskJuggler::TextParser::StackElement</a></li>
459
465
 
466
+ <li><a href="../TaskJuggler/TextParser/State.html">TaskJuggler::TextParser::State</a></li>
467
+
468
+ <li><a href="../TaskJuggler/TextParser/StateTransition.html">TaskJuggler::TextParser::StateTransition</a></li>
469
+
460
470
  <li><a href="../TaskJuggler/TextParser/TextParserResultArray.html">TaskJuggler::TextParser::TextParserResultArray</a></li>
461
471
 
462
472
  <li><a href="../TaskJuggler/TextParser/TokenDoc.html">TaskJuggler::TextParser::TokenDoc</a></li>
@@ -593,17 +603,75 @@ times of each working period are stored as seconds after midnight.
593
603
 
594
604
 
595
605
 
606
+ </div>
607
+ </div>
608
+
609
+ <div id="start-ate-attribute-method" class="method-detail">
610
+ <a name="startDate"></a>
611
+
612
+ <div class="method-heading attribute-method-heading">
613
+ <span class="method-name">startDate</span><span
614
+ class="attribute-access-type">[R]</span>
615
+ </div>
616
+
617
+ <div class="method-description">
618
+
619
+
620
+
621
+ </div>
622
+ </div>
623
+
624
+ <div id="end-ate-attribute-method" class="method-detail">
625
+ <a name="endDate"></a>
626
+
627
+ <div class="method-heading attribute-method-heading">
628
+ <span class="method-name">endDate</span><span
629
+ class="attribute-access-type">[R]</span>
630
+ </div>
631
+
632
+ <div class="method-description">
633
+
634
+
635
+
636
+ </div>
637
+ </div>
638
+
639
+ <div id="slot-uration-attribute-method" class="method-detail">
640
+ <a name="slotDuration"></a>
641
+
642
+ <div class="method-heading attribute-method-heading">
643
+ <span class="method-name">slotDuration</span><span
644
+ class="attribute-access-type">[R]</span>
645
+ </div>
646
+
647
+ <div class="method-description">
648
+
649
+
650
+
596
651
  </div>
597
652
  </div>
598
653
 
599
654
  <div id="timezone-attribute-method" class="method-detail">
600
655
  <a name="timezone"></a>
601
656
 
602
- <a name="timezone="></a>
603
-
604
657
  <div class="method-heading attribute-method-heading">
605
658
  <span class="method-name">timezone</span><span
606
- class="attribute-access-type">[RW]</span>
659
+ class="attribute-access-type">[R]</span>
660
+ </div>
661
+
662
+ <div class="method-description">
663
+
664
+
665
+
666
+ </div>
667
+ </div>
668
+
669
+ <div id="scoreboard-attribute-method" class="method-detail">
670
+ <a name="scoreboard"></a>
671
+
672
+ <div class="method-heading attribute-method-heading">
673
+ <span class="method-name">scoreboard</span><span
674
+ class="attribute-access-type">[R]</span>
607
675
  </div>
608
676
 
609
677
  <div class="method-description">
@@ -628,7 +696,7 @@ times of each working period are stored as seconds after midnight.
628
696
  <div class="method-heading">
629
697
 
630
698
  <span class="method-name">new</span><span
631
- class="method-args">(wh = nil)</span>
699
+ class="method-args">(arg1 = nil, startDate = nil, endDate = nil)</span>
632
700
  <span class="method-click-advice">click to toggle source</span>
633
701
 
634
702
  </div>
@@ -640,6 +708,8 @@ Create a new <a href="WorkingHours.html">WorkingHours</a> object. The
640
708
  method accepts a reference to an existing <a
641
709
  href="WorkingHours.html">WorkingHours</a> object in <tt>wh</tt>. When
642
710
  it&#8217;s present, the new object will be a deep copy of the given object.
711
+ The <a href="Scoreboard.html">Scoreboard</a> object is <em>not</em> deep
712
+ copied. It will be copied on write.
643
713
  </p>
644
714
 
645
715
 
@@ -647,33 +717,46 @@ it&#8217;s present, the new object will be a deep copy of the given object.
647
717
  <div class="method-source-code"
648
718
  id="new-source">
649
719
  <pre>
650
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 132</span>
651
- 132: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">wh</span> = <span class="ruby-keyword kw">nil</span>)
652
- 133: <span class="ruby-comment cmt"># One entry for every day of the week. Sunday === 0.</span>
653
- 134: <span class="ruby-ivar">@days</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">7</span>, [])
654
- 135: <span class="ruby-ivar">@cache</span> = <span class="ruby-keyword kw">nil</span>
655
- 136:
656
- 137: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">nil?</span>
657
- 138: <span class="ruby-comment cmt"># Create a new object with default working hours.</span>
658
- 139: <span class="ruby-ivar">@timezone</span> = <span class="ruby-keyword kw">nil</span>
659
- 140: <span class="ruby-comment cmt"># Set the default working hours. Monday to Friday 9am - 12pm, 1pm - 6pm.</span>
660
- 141: <span class="ruby-comment cmt"># Saturday and Sunday are days off.</span>
661
- 142: <span class="ruby-value">1</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-value">5</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">day</span><span class="ruby-operator">|</span>
662
- 143: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">day</span>] = [ [ <span class="ruby-value">9</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span>, <span class="ruby-value">12</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span> ],
663
- 144: [ <span class="ruby-value">13</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span>, <span class="ruby-value">18</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span> ] ]
664
- 145: <span class="ruby-keyword kw">end</span>
665
- 146: <span class="ruby-keyword kw">else</span>
666
- 147: <span class="ruby-comment cmt"># Copy the values from the given object.</span>
667
- 148: <span class="ruby-ivar">@timezone</span> = <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">timezone</span>
668
- 149: <span class="ruby-value">7</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">day</span><span class="ruby-operator">|</span>
669
- 150: <span class="ruby-identifier">hours</span> = []
670
- 151: <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">days</span>[<span class="ruby-identifier">day</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">hrs</span><span class="ruby-operator">|</span>
671
- 152: <span class="ruby-identifier">hours</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">hrs</span>.<span class="ruby-identifier">dup</span>
672
- 153: <span class="ruby-keyword kw">end</span>
673
- 154: <span class="ruby-identifier">setWorkingHours</span>(<span class="ruby-identifier">day</span>, <span class="ruby-identifier">hours</span>)
674
- 155: <span class="ruby-keyword kw">end</span>
675
- 156: <span class="ruby-keyword kw">end</span>
676
- 157: <span class="ruby-keyword kw">end</span></pre>
720
+ <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 31</span>
721
+ 31: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">arg1</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">startDate</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">endDate</span> = <span class="ruby-keyword kw">nil</span>)
722
+ 32: <span class="ruby-comment cmt"># One entry for every day of the week. Sunday === 0.</span>
723
+ 33: <span class="ruby-ivar">@days</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">7</span>, [])
724
+ 34: <span class="ruby-ivar">@scoreboard</span> = <span class="ruby-keyword kw">nil</span>
725
+ 35:
726
+ 36: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">arg1</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">WorkingHours</span>)
727
+ 37: <span class="ruby-comment cmt"># Create a copy of the passed WorkingHours object.</span>
728
+ 38: <span class="ruby-identifier">wh</span> = <span class="ruby-identifier">arg1</span>
729
+ 39: <span class="ruby-ivar">@timezone</span> = <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">timezone</span>
730
+ 40: <span class="ruby-value">7</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">day</span><span class="ruby-operator">|</span>
731
+ 41: <span class="ruby-identifier">hours</span> = []
732
+ 42: <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">days</span>[<span class="ruby-identifier">day</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">hrs</span><span class="ruby-operator">|</span>
733
+ 43: <span class="ruby-identifier">hours</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">hrs</span>.<span class="ruby-identifier">dup</span>
734
+ 44: <span class="ruby-keyword kw">end</span>
735
+ 45: <span class="ruby-identifier">setWorkingHours</span>(<span class="ruby-identifier">day</span>, <span class="ruby-identifier">hours</span>)
736
+ 46: <span class="ruby-keyword kw">end</span>
737
+ 47: <span class="ruby-ivar">@startDate</span> = <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">startDate</span>
738
+ 48: <span class="ruby-ivar">@endDate</span> = <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">endDate</span>
739
+ 49: <span class="ruby-ivar">@slotDuration</span> = <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">slotDuration</span>
740
+ 50: <span class="ruby-ivar">@scoreboard</span> = <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">scoreboard</span>
741
+ 51: <span class="ruby-keyword kw">else</span>
742
+ 52: <span class="ruby-identifier">slotDuration</span> = <span class="ruby-identifier">arg1</span>
743
+ 53: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">arg1</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">startDate</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">endDate</span>.<span class="ruby-identifier">nil?</span>
744
+ 54: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;You must supply values for slotDuration, start and end dates&quot;</span>
745
+ 55: <span class="ruby-keyword kw">end</span>
746
+ 56: <span class="ruby-ivar">@startDate</span> = <span class="ruby-identifier">startDate</span>
747
+ 57: <span class="ruby-ivar">@endDate</span> = <span class="ruby-identifier">endDate</span>
748
+ 58: <span class="ruby-ivar">@slotDuration</span> = <span class="ruby-identifier">slotDuration</span>
749
+ 59:
750
+ 60: <span class="ruby-comment cmt"># Create a new object with default working hours.</span>
751
+ 61: <span class="ruby-ivar">@timezone</span> = <span class="ruby-keyword kw">nil</span>
752
+ 62: <span class="ruby-comment cmt"># Set the default working hours. Monday to Friday 9am - 12pm, 1pm - 6pm.</span>
753
+ 63: <span class="ruby-comment cmt"># Saturday and Sunday are days off.</span>
754
+ 64: <span class="ruby-value">1</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-value">5</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">day</span><span class="ruby-operator">|</span>
755
+ 65: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">day</span>] = [ [ <span class="ruby-value">9</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span>, <span class="ruby-value">12</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span> ],
756
+ 66: [ <span class="ruby-value">13</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span>, <span class="ruby-value">18</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span> ] ]
757
+ 67: <span class="ruby-keyword kw">end</span>
758
+ 68: <span class="ruby-keyword kw">end</span>
759
+ 69: <span class="ruby-keyword kw">end</span></pre>
677
760
  </div>
678
761
 
679
762
  </div>
@@ -713,59 +796,23 @@ object <tt>wh</tt> is identical to this object.
713
796
  <div class="method-source-code"
714
797
  id="--source">
715
798
  <pre>
716
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 161</span>
717
- 161: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">==</span>(<span class="ruby-identifier">wh</span>)
718
- 162: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@timezone</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">timezone</span>
719
- 163:
720
- 164: <span class="ruby-value">7</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
721
- 165: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">d</span>].<span class="ruby-identifier">length</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">days</span>[<span class="ruby-identifier">d</span>].<span class="ruby-identifier">length</span>
722
- 166: <span class="ruby-comment cmt"># Check all working hour intervals</span>
723
- 167: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">d</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>
724
- 168: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">d</span>][<span class="ruby-identifier">i</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">days</span>[<span class="ruby-identifier">d</span>][<span class="ruby-identifier">i</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">||</span>
725
- 169: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">d</span>][<span class="ruby-identifier">i</span>][<span class="ruby-value">1</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">days</span>[<span class="ruby-identifier">d</span>][<span class="ruby-identifier">i</span>][<span class="ruby-value">1</span>]
726
- 170: <span class="ruby-keyword kw">end</span>
727
- 171: <span class="ruby-keyword kw">end</span>
728
- 172: <span class="ruby-keyword kw">true</span>
729
- 173: <span class="ruby-keyword kw">end</span></pre>
730
- </div>
731
-
732
- </div>
733
-
734
-
735
-
736
-
737
- </div>
738
-
739
-
740
- <div id="day-ff--method" class="method-detail ">
741
- <a name="method-i-dayOff%3F"></a>
742
-
743
- <div class="method-heading">
744
-
745
- <span class="method-name">dayOff?</span><span
746
- class="method-args">(date)</span>
747
- <span class="method-click-advice">click to toggle source</span>
748
-
749
- </div>
750
-
751
- <div class="method-description">
752
-
753
- <p>
754
- Probably should be put into <a
755
- href="ShiftAssignment.html">ShiftAssignment</a> as well.
756
- </p>
757
-
758
-
759
-
760
- <div class="method-source-code"
761
- id="day-ff--source">
762
- <pre>
763
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 263</span>
764
- 263: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dayOff?</span>(<span class="ruby-identifier">date</span>)
765
- 264: <span class="ruby-identifier">projectDate</span> = <span class="ruby-identifier">toLocaltime</span>(<span class="ruby-identifier">date</span>)
766
- 265: <span class="ruby-identifier">dow</span> = <span class="ruby-identifier">projectDate</span>.<span class="ruby-identifier">wday</span>
767
- 266: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">dow</span>].<span class="ruby-identifier">empty?</span>
768
- 267: <span class="ruby-keyword kw">end</span></pre>
799
+ <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 73</span>
800
+ 73: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">==</span>(<span class="ruby-identifier">wh</span>)
801
+ 74: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@timezone</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">timezone</span> <span class="ruby-operator">||</span>
802
+ 75: <span class="ruby-ivar">@startDate</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">startDate</span> <span class="ruby-operator">||</span>
803
+ 76: <span class="ruby-ivar">@endDate</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">endDate</span> <span class="ruby-operator">||</span>
804
+ 77: <span class="ruby-ivar">@slotDuration</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">slotDuration</span>
805
+ 78:
806
+ 79: <span class="ruby-value">7</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
807
+ 80: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">d</span>].<span class="ruby-identifier">length</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">days</span>[<span class="ruby-identifier">d</span>].<span class="ruby-identifier">length</span>
808
+ 81: <span class="ruby-comment cmt"># Check all working hour intervals</span>
809
+ 82: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">d</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>
810
+ 83: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">d</span>][<span class="ruby-identifier">i</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">days</span>[<span class="ruby-identifier">d</span>][<span class="ruby-identifier">i</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">||</span>
811
+ 84: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">d</span>][<span class="ruby-identifier">i</span>][<span class="ruby-value">1</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">wh</span>.<span class="ruby-identifier">days</span>[<span class="ruby-identifier">d</span>][<span class="ruby-identifier">i</span>][<span class="ruby-value">1</span>]
812
+ 85: <span class="ruby-keyword kw">end</span>
813
+ 86: <span class="ruby-keyword kw">end</span>
814
+ 87: <span class="ruby-keyword kw">true</span>
815
+ 88: <span class="ruby-keyword kw">end</span></pre>
769
816
  </div>
770
817
 
771
818
  </div>
@@ -800,10 +847,10 @@ an Array that contains Arrays of 2 Fixnums.
800
847
  <div class="method-source-code"
801
848
  id="get-orking-ours-source">
802
849
  <pre>
803
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 205</span>
804
- 205: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getWorkingHours</span>(<span class="ruby-identifier">dayOfWeek</span>)
805
- 206: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">dayOfWeek</span>]
806
- 207: <span class="ruby-keyword kw">end</span></pre>
850
+ <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 125</span>
851
+ 125: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getWorkingHours</span>(<span class="ruby-identifier">dayOfWeek</span>)
852
+ 126: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">dayOfWeek</span>]
853
+ 127: <span class="ruby-keyword kw">end</span></pre>
807
854
  </div>
808
855
 
809
856
  </div>
@@ -836,37 +883,12 @@ Return true if <em>date</em> is within the defined working hours.
836
883
  <div class="method-source-code"
837
884
  id="on-hift--source">
838
885
  <pre>
839
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 210</span>
840
- 210: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
841
- 211: <span class="ruby-ivar">@cache</span> = <span class="ruby-identifier">@@onShiftCache</span>.<span class="ruby-identifier">register</span>(<span class="ruby-keyword kw">self</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@cache</span>
842
- 212:
843
- 213: <span class="ruby-comment cmt"># If we have the result cached already, return it.</span>
844
- 214: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">os</span> = <span class="ruby-identifier">@@onShiftCache</span>.<span class="ruby-identifier">get</span>(<span class="ruby-ivar">@cache</span>, <span class="ruby-identifier">date</span>)).<span class="ruby-identifier">nil?</span>
845
- 215: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">os</span>
846
- 216: <span class="ruby-keyword kw">end</span>
847
- 217:
848
- 218: <span class="ruby-comment cmt"># The date is in UTC. The weekday needs to be calculated according to the</span>
849
- 219: <span class="ruby-comment cmt"># timezone of the project.</span>
850
- 220: <span class="ruby-identifier">projectDate</span> = <span class="ruby-identifier">toLocaltime</span>(<span class="ruby-identifier">date</span>)
851
- 221: <span class="ruby-identifier">dow</span> = <span class="ruby-identifier">projectDate</span>.<span class="ruby-identifier">wday</span>
852
- 222:
853
- 223: <span class="ruby-comment cmt"># The working hours need to be put into the proper time zone.</span>
854
- 224: <span class="ruby-identifier">localDate</span> = <span class="ruby-identifier">toLocaltime</span>(<span class="ruby-identifier">date</span>, <span class="ruby-ivar">@timezone</span>)
855
- 225: <span class="ruby-identifier">secondsOfDay</span> = <span class="ruby-identifier">localDate</span>.<span class="ruby-identifier">secondsOfDay</span>
856
- 226:
857
- 227: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">dow</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
858
- 228: <span class="ruby-comment cmt"># Check the working hours of that day if they overlap with +date+.</span>
859
- 229: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">secondsOfDay</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">secondsOfDay</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">1</span>]
860
- 230: <span class="ruby-comment cmt"># Store the result in the cache.</span>
861
- 231: <span class="ruby-identifier">@@onShiftCache</span>.<span class="ruby-identifier">set</span>(<span class="ruby-ivar">@cache</span>, <span class="ruby-identifier">date</span>, <span class="ruby-keyword kw">true</span>)
862
- 232: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
863
- 233: <span class="ruby-keyword kw">end</span>
864
- 234: <span class="ruby-keyword kw">end</span>
865
- 235:
866
- 236: <span class="ruby-comment cmt"># Store the result in the cache.</span>
867
- 237: <span class="ruby-identifier">@@onShiftCache</span>.<span class="ruby-identifier">set</span>(<span class="ruby-ivar">@cache</span>, <span class="ruby-identifier">date</span>, <span class="ruby-keyword kw">false</span>)
868
- 238: <span class="ruby-keyword kw">false</span>
869
- 239: <span class="ruby-keyword kw">end</span></pre>
886
+ <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 130</span>
887
+ 130: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
888
+ 131: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>
889
+ 132:
890
+ 133: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">date</span>)
891
+ 134: <span class="ruby-keyword kw">end</span></pre>
870
892
  </div>
871
893
 
872
894
  </div>
@@ -903,28 +925,26 @@ start time of the interval, the second the end time.
903
925
  <div class="method-source-code"
904
926
  id="set-orking-ours-source">
905
927
  <pre>
906
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 180</span>
907
- 180: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setWorkingHours</span>(<span class="ruby-identifier">dayOfWeek</span>, <span class="ruby-identifier">intervals</span>)
908
- 181: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cache</span>
909
- 182: <span class="ruby-identifier">raise</span> <span class="ruby-value str">'You cannot change the working hours after onShift? has been '</span> <span class="ruby-operator">+</span>
910
- 183: <span class="ruby-value str">'called.'</span>
911
- 184: <span class="ruby-keyword kw">end</span>
912
- 185:
913
- 186: <span class="ruby-comment cmt"># Legal values range from 0 Sunday to 6 Saturday.</span>
914
- 187: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dayOfWeek</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">dayOfWeek</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">6</span>
915
- 188: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;dayOfWeek out of range: #{dayOfWeek}&quot;</span>
916
- 189: <span class="ruby-keyword kw">end</span>
917
- 190: <span class="ruby-identifier">intervals</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
918
- 191: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&gt;=</span> <span class="ruby-value">24</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span> <span class="ruby-operator">||</span>
919
- 192: <span class="ruby-identifier">iv</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&gt;=</span> <span class="ruby-value">24</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span>
920
- 193: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Time interval has illegal values: #{iv[0]} - #{iv[1]}&quot;</span>
921
- 194: <span class="ruby-keyword kw">end</span>
922
- 195: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">1</span>]
923
- 196: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Interval end time must be larger than start time&quot;</span>
924
- 197: <span class="ruby-keyword kw">end</span>
925
- 198: <span class="ruby-keyword kw">end</span>
926
- 199: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">dayOfWeek</span>] = <span class="ruby-identifier">intervals</span>
927
- 200: <span class="ruby-keyword kw">end</span></pre>
928
+ <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 95</span>
929
+ 95: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setWorkingHours</span>(<span class="ruby-identifier">dayOfWeek</span>, <span class="ruby-identifier">intervals</span>)
930
+ 96: <span class="ruby-comment cmt"># Changing the working hours requires the score board to be regenerated.</span>
931
+ 97: <span class="ruby-ivar">@scoreboard</span> = <span class="ruby-keyword kw">nil</span>
932
+ 98:
933
+ 99: <span class="ruby-comment cmt"># Legal values range from 0 Sunday to 6 Saturday.</span>
934
+ 100: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dayOfWeek</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">dayOfWeek</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">6</span>
935
+ 101: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;dayOfWeek out of range: #{dayOfWeek}&quot;</span>
936
+ 102: <span class="ruby-keyword kw">end</span>
937
+ 103: <span class="ruby-identifier">intervals</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
938
+ 104: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&gt;=</span> <span class="ruby-value">24</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span> <span class="ruby-operator">||</span>
939
+ 105: <span class="ruby-identifier">iv</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&gt;=</span> <span class="ruby-value">24</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span>
940
+ 106: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Time interval has illegal values: #{iv[0]} - #{iv[1]}&quot;</span>
941
+ 107: <span class="ruby-keyword kw">end</span>
942
+ 108: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">1</span>]
943
+ 109: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Interval end time must be larger than start time&quot;</span>
944
+ 110: <span class="ruby-keyword kw">end</span>
945
+ 111: <span class="ruby-keyword kw">end</span>
946
+ 112: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">dayOfWeek</span>] = <span class="ruby-identifier">intervals</span>
947
+ 113: <span class="ruby-keyword kw">end</span></pre>
928
948
  </div>
929
949
 
930
950
  </div>
@@ -949,8 +969,7 @@ start time of the interval, the second the end time.
949
969
  <div class="method-description">
950
970
 
951
971
  <p>
952
- This function does not belong here! It should be handled via the <a
953
- href="ShiftAssignment.html">ShiftAssignment</a>.
972
+ Return true only if all slots in the <em>interval</em> are offhour slots.
954
973
  </p>
955
974
 
956
975
 
@@ -958,25 +977,56 @@ href="ShiftAssignment.html">ShiftAssignment</a>.
958
977
  <div class="method-source-code"
959
978
  id="time-ff--source">
960
979
  <pre>
961
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 243</span>
962
- 243: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">timeOff?</span>(<span class="ruby-identifier">interval</span>)
963
- 244: <span class="ruby-identifier">t</span> = <span class="ruby-identifier">interval</span>.<span class="ruby-identifier">start</span>.<span class="ruby-identifier">midnight</span>
964
- 245: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">t</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">interval</span>.<span class="ruby-identifier">end</span>
965
- 246: <span class="ruby-identifier">dow</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">wday</span>
966
- 247: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">dow</span>].<span class="ruby-identifier">empty?</span>
967
- 248: <span class="ruby-identifier">dayStart</span> = <span class="ruby-identifier">t</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">interval</span>.<span class="ruby-identifier">start</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">interval</span>.<span class="ruby-identifier">start</span>.<span class="ruby-identifier">secondsOfDay</span> <span class="ruby-operator">:</span>
968
- 249: <span class="ruby-identifier">t</span>.<span class="ruby-identifier">secondsOfDay</span>
969
- 250: <span class="ruby-identifier">dayEnd</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">sameTimeNextDay</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">interval</span>.<span class="ruby-identifier">end</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">interval</span>.<span class="ruby-identifier">end</span>.<span class="ruby-identifier">secondsOfDay</span> <span class="ruby-operator">:</span>
970
- 251: <span class="ruby-value">60</span> * <span class="ruby-value">60</span> * <span class="ruby-value">24</span>;
971
- 252: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">dow</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
972
- 253: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">dayStart</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">dayEnd</span>) <span class="ruby-operator">||</span>
973
- 254: (<span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">dayStart</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dayStart</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">1</span>])
974
- 255: <span class="ruby-keyword kw">end</span>
975
- 256: <span class="ruby-keyword kw">end</span>
976
- 257: <span class="ruby-identifier">t</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">sameTimeNextDay</span>
977
- 258: <span class="ruby-keyword kw">end</span>
978
- 259: <span class="ruby-keyword kw">true</span>
979
- 260: <span class="ruby-keyword kw">end</span></pre>
980
+ <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 137</span>
981
+ 137: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">timeOff?</span>(<span class="ruby-identifier">interval</span>)
982
+ 138: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>
983
+ 139:
984
+ 140: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">interval</span>.<span class="ruby-identifier">start</span>, <span class="ruby-keyword kw">true</span>)
985
+ 141: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">interval</span>.<span class="ruby-identifier">end</span>, <span class="ruby-keyword kw">true</span>)
986
+ 142:
987
+ 143: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
988
+ 144: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>]
989
+ 145: <span class="ruby-keyword kw">end</span>
990
+ 146: <span class="ruby-keyword kw">true</span>
991
+ 147: <span class="ruby-keyword kw">end</span></pre>
992
+ </div>
993
+
994
+ </div>
995
+
996
+
997
+
998
+
999
+ </div>
1000
+
1001
+
1002
+ <div id="timezone--method" class="method-detail ">
1003
+ <a name="method-i-timezone%3D"></a>
1004
+
1005
+ <div class="method-heading">
1006
+
1007
+ <span class="method-name">timezone=</span><span
1008
+ class="method-args">(zone)</span>
1009
+ <span class="method-click-advice">click to toggle source</span>
1010
+
1011
+ </div>
1012
+
1013
+ <div class="method-description">
1014
+
1015
+ <p>
1016
+ Set the time zone <em>zone</em> for the working hours. This will reset the
1017
+ @scoreboard.
1018
+ </p>
1019
+
1020
+
1021
+
1022
+ <div class="method-source-code"
1023
+ id="timezone--source">
1024
+ <pre>
1025
+ <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 117</span>
1026
+ 117: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">timezone=</span>(<span class="ruby-identifier">zone</span>)
1027
+ 118: <span class="ruby-ivar">@scoreboard</span> = <span class="ruby-keyword kw">nil</span>
1028
+ 119: <span class="ruby-ivar">@timezone</span> = <span class="ruby-identifier">zone</span>
1029
+ 120: <span class="ruby-keyword kw">end</span></pre>
980
1030
  </div>
981
1031
 
982
1032
  </div>
@@ -1009,32 +1059,32 @@ Returns the time interval settings for each day in a human readable form.
1009
1059
  <div class="method-source-code"
1010
1060
  id="to-s-source">
1011
1061
  <pre>
1012
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 270</span>
1013
- 270: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
1014
- 271: <span class="ruby-identifier">dayNames</span> = <span class="ruby-node">%( Sun Mon Tue Wed Thu Fri Sat )</span>
1015
- 272: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
1016
- 273: <span class="ruby-value">7</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">day</span><span class="ruby-operator">|</span>
1017
- 274: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{dayNames[day]}: &quot;</span>
1018
- 275: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">day</span>].<span class="ruby-identifier">empty?</span>
1019
- 276: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;off&quot;</span>
1020
- 277: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">day</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">6</span>
1021
- 278: <span class="ruby-keyword kw">next</span>
1022
- 279: <span class="ruby-keyword kw">end</span>
1023
- 280: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
1024
- 281: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">day</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
1025
- 282: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
1026
- 283: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
1027
- 284: <span class="ruby-keyword kw">else</span>
1028
- 285: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">', '</span>
1029
- 286: <span class="ruby-keyword kw">end</span>
1030
- 287: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{iv[0] / 3600}:&quot;</span> <span class="ruby-operator">+</span>
1031
- 288: <span class="ruby-node">&quot;#{iv[0] % 3600 == 0 ? '00' : iv[0] % 3600} - &quot;</span> <span class="ruby-operator">+</span>
1032
- 289: <span class="ruby-node">&quot;#{iv[1] / 3600}:#{iv[1] % 3600 == 0 ? '00' : iv[1] % 3600}&quot;</span>
1033
- 290: <span class="ruby-keyword kw">end</span>
1034
- 291: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">day</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">6</span>
1035
- 292: <span class="ruby-keyword kw">end</span>
1036
- 293: <span class="ruby-identifier">str</span>
1037
- 294: <span class="ruby-keyword kw">end</span></pre>
1062
+ <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 150</span>
1063
+ 150: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
1064
+ 151: <span class="ruby-identifier">dayNames</span> = <span class="ruby-node">%( Sun Mon Tue Wed Thu Fri Sat )</span>
1065
+ 152: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
1066
+ 153: <span class="ruby-value">7</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">day</span><span class="ruby-operator">|</span>
1067
+ 154: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{dayNames[day]}: &quot;</span>
1068
+ 155: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">day</span>].<span class="ruby-identifier">empty?</span>
1069
+ 156: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;off&quot;</span>
1070
+ 157: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">day</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">6</span>
1071
+ 158: <span class="ruby-keyword kw">next</span>
1072
+ 159: <span class="ruby-keyword kw">end</span>
1073
+ 160: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
1074
+ 161: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">day</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
1075
+ 162: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
1076
+ 163: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
1077
+ 164: <span class="ruby-keyword kw">else</span>
1078
+ 165: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">', '</span>
1079
+ 166: <span class="ruby-keyword kw">end</span>
1080
+ 167: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{iv[0] / 3600}:&quot;</span> <span class="ruby-operator">+</span>
1081
+ 168: <span class="ruby-node">&quot;#{iv[0] % 3600 == 0 ? '00' : iv[0] % 3600} - &quot;</span> <span class="ruby-operator">+</span>
1082
+ 169: <span class="ruby-node">&quot;#{iv[1] / 3600}:#{iv[1] % 3600 == 0 ? '00' : iv[1] % 3600}&quot;</span>
1083
+ 170: <span class="ruby-keyword kw">end</span>
1084
+ 171: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">day</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">6</span>
1085
+ 172: <span class="ruby-keyword kw">end</span>
1086
+ 173: <span class="ruby-identifier">str</span>
1087
+ 174: <span class="ruby-keyword kw">end</span></pre>
1038
1088
  </div>
1039
1089
 
1040
1090
  </div>
@@ -1051,49 +1101,73 @@ Returns the time interval settings for each day in a human readable form.
1051
1101
  <h3 class="section-header">Private Instance Methods</h3>
1052
1102
 
1053
1103
 
1054
- <div id="to-ocaltime-method" class="method-detail ">
1055
- <a name="method-i-toLocaltime"></a>
1104
+ <div id="init-coreboard-method" class="method-detail ">
1105
+ <a name="method-i-initScoreboard"></a>
1056
1106
 
1057
1107
  <div class="method-heading">
1058
1108
 
1059
- <span class="method-name">toLocaltime</span><span
1060
- class="method-args">(date, tz = nil)</span>
1109
+ <span class="method-name">initScoreboard</span><span
1110
+ class="method-args">()</span>
1061
1111
  <span class="method-click-advice">click to toggle source</span>
1062
1112
 
1063
1113
  </div>
1064
1114
 
1065
1115
  <div class="method-description">
1066
1116
 
1067
- <p>
1068
- Convert a UTC date into the corresponding date in the local time zone. This
1069
- is either the current system setting or the time zone specified by
1070
- <em>tz</em>.
1071
- </p>
1117
+
1072
1118
 
1073
1119
 
1074
1120
 
1075
1121
  <div class="method-source-code"
1076
- id="to-ocaltime-source">
1122
+ id="init-coreboard-source">
1077
1123
  <pre>
1078
- <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 301</span>
1079
- 301: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">toLocaltime</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">tz</span> = <span class="ruby-keyword kw">nil</span>)
1080
- 302: <span class="ruby-identifier">oldTimezone</span> = <span class="ruby-keyword kw">nil</span>
1081
- 303: <span class="ruby-comment cmt"># Set environment variable TZ to appropriate time zone</span>
1082
- 304: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@timezone</span>
1083
- 305: <span class="ruby-identifier">oldTimezone</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'tz'</span>]
1084
- 306: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'tz'</span>] = <span class="ruby-ivar">@timezone</span>
1085
- 307: <span class="ruby-keyword kw">end</span>
1086
- 308:
1087
- 309: <span class="ruby-identifier">localDate</span> = <span class="ruby-identifier">date</span>.<span class="ruby-identifier">dup</span>
1088
- 310: <span class="ruby-identifier">localDate</span>.<span class="ruby-identifier">localtime</span>
1089
- 311:
1090
- 312: <span class="ruby-comment cmt"># Restore environment</span>
1091
- 313: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">oldTimezone</span>
1092
- 314: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'tz'</span>] = <span class="ruby-identifier">oldTimezone</span>
1093
- 315: <span class="ruby-keyword kw">end</span>
1094
- 316:
1095
- 317: <span class="ruby-identifier">localDate</span>
1096
- 318: <span class="ruby-keyword kw">end</span></pre>
1124
+ <span class="ruby-comment cmt"># File lib/WorkingHours.rb, line 178</span>
1125
+ 178: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initScoreboard</span>
1126
+ 179: <span class="ruby-comment cmt"># The scoreboard is an Array of True/False values. It spans a certain</span>
1127
+ 180: <span class="ruby-comment cmt"># time period with one entry per time slot.</span>
1128
+ 181: <span class="ruby-ivar">@scoreboard</span> = <span class="ruby-constant">Scoreboard</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@startDate</span>, <span class="ruby-ivar">@endDate</span>, <span class="ruby-ivar">@slotDuration</span>, <span class="ruby-keyword kw">false</span>)
1129
+ 182:
1130
+ 183: <span class="ruby-identifier">oldTimezone</span> = <span class="ruby-keyword kw">nil</span>
1131
+ 184: <span class="ruby-comment cmt"># Set environment variable TZ to appropriate time zone</span>
1132
+ 185: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@timezone</span>
1133
+ 186: <span class="ruby-identifier">oldTimezone</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'TZ'</span>]
1134
+ 187: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'TZ'</span>] = <span class="ruby-ivar">@timezone</span>
1135
+ 188: <span class="ruby-keyword kw">end</span>
1136
+ 189:
1137
+ 190: <span class="ruby-identifier">date</span> = <span class="ruby-ivar">@startDate</span>
1138
+ 191: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">collect!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">slot</span><span class="ruby-operator">|</span>
1139
+ 192: <span class="ruby-identifier">localDate</span> = <span class="ruby-identifier">date</span>.<span class="ruby-identifier">dup</span>
1140
+ 193: <span class="ruby-identifier">localDate</span>.<span class="ruby-identifier">localtime</span>
1141
+ 194:
1142
+ 195: <span class="ruby-comment cmt"># The date is in UTC. The weekday needs to be calculated according to</span>
1143
+ 196: <span class="ruby-comment cmt"># the local timezone.</span>
1144
+ 197: <span class="ruby-identifier">weekday</span> = <span class="ruby-identifier">localDate</span>.<span class="ruby-identifier">wday</span>
1145
+ 198: <span class="ruby-identifier">secondsOfDay</span> = <span class="ruby-identifier">localDate</span>.<span class="ruby-identifier">secondsOfDay</span>
1146
+ 199:
1147
+ 200: <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">false</span>
1148
+ 201: <span class="ruby-ivar">@days</span>[<span class="ruby-identifier">weekday</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">iv</span><span class="ruby-operator">|</span>
1149
+ 202: <span class="ruby-comment cmt"># Check the working hours of that day if they overlap with +date+.</span>
1150
+ 203: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">secondsOfDay</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">secondsOfDay</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">iv</span>[<span class="ruby-value">1</span>]
1151
+ 204: <span class="ruby-comment cmt"># The time slot is a working slot.</span>
1152
+ 205: <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">true</span>
1153
+ 206: <span class="ruby-keyword kw">break</span>
1154
+ 207: <span class="ruby-keyword kw">end</span>
1155
+ 208: <span class="ruby-keyword kw">end</span>
1156
+ 209: <span class="ruby-comment cmt"># Calculate date of next scoreboard slot</span>
1157
+ 210: <span class="ruby-identifier">date</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@slotDuration</span>
1158
+ 211:
1159
+ 212: <span class="ruby-identifier">result</span>
1160
+ 213: <span class="ruby-keyword kw">end</span>
1161
+ 214:
1162
+ 215: <span class="ruby-comment cmt"># Restore environment</span>
1163
+ 216: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@timezone</span>
1164
+ 217: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">oldTimezone</span>
1165
+ 218: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'TZ'</span>] = <span class="ruby-identifier">oldTimezone</span>
1166
+ 219: <span class="ruby-keyword kw">else</span>
1167
+ 220: <span class="ruby-constant">ENV</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-value str">'TZ'</span>)
1168
+ 221: <span class="ruby-keyword kw">end</span>
1169
+ 222: <span class="ruby-keyword kw">end</span>
1170
+ 223: <span class="ruby-keyword kw">end</span></pre>
1097
1171
  </div>
1098
1172
 
1099
1173
  </div>