taskjuggler 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (613) hide show
  1. data/CHANGELOG +1144 -2047
  2. data/README +1 -1
  3. data/Rakefile +6 -6
  4. data/data/css/tjmanual.css +20 -0
  5. data/data/css/tjreport.css +7 -6
  6. data/doc/AppConfig.html +136 -130
  7. data/doc/Arguments.html +46 -40
  8. data/doc/CHANGELOG.html +1162 -2057
  9. data/doc/COPYING.html +8 -2
  10. data/doc/Object.html +205 -199
  11. data/doc/README.html +9 -3
  12. data/doc/RuntimeConfig.html +75 -69
  13. data/doc/String.html +69 -63
  14. data/doc/TaskJuggler.html +350 -291
  15. data/doc/TaskJuggler/Account.html +26 -20
  16. data/doc/TaskJuggler/AccountAttribute.html +24 -18
  17. data/doc/TaskJuggler/AccountScenario.html +24 -18
  18. data/doc/TaskJuggler/Allocation.html +74 -68
  19. data/doc/TaskJuggler/AllocationAttribute.html +54 -48
  20. data/doc/TaskJuggler/AttributeBase.html +172 -93
  21. data/doc/TaskJuggler/AttributeDefinition.html +22 -16
  22. data/doc/TaskJuggler/AttributeOverwrite.html +586 -0
  23. data/doc/TaskJuggler/BatchProcessor.html +263 -257
  24. data/doc/TaskJuggler/Booking.html +44 -38
  25. data/doc/TaskJuggler/BookingListAttribute.html +25 -21
  26. data/doc/TaskJuggler/BooleanAttribute.html +24 -18
  27. data/doc/TaskJuggler/CSVFile.html +193 -187
  28. data/doc/TaskJuggler/CellSettingPattern.html +13 -7
  29. data/doc/TaskJuggler/CellSettingPatternList.html +25 -19
  30. data/doc/TaskJuggler/Charge.html +49 -43
  31. data/doc/TaskJuggler/ChargeListAttribute.html +21 -15
  32. data/doc/TaskJuggler/ChargeSet.html +94 -88
  33. data/doc/TaskJuggler/ChargeSetListAttribute.html +29 -25
  34. data/doc/TaskJuggler/CollisionDetector.html +142 -136
  35. data/doc/TaskJuggler/ColumnListAttribute.html +21 -17
  36. data/doc/TaskJuggler/ColumnTable.html +50 -44
  37. data/doc/TaskJuggler/Daemon.html +71 -50
  38. data/doc/TaskJuggler/DataCache.html +110 -58
  39. data/doc/TaskJuggler/DataCacheEntry.html +22 -16
  40. data/doc/TaskJuggler/DateAttribute.html +24 -18
  41. data/doc/TaskJuggler/DefinitionListAttribute.html +12 -6
  42. data/doc/TaskJuggler/DependencyListAttribute.html +29 -25
  43. data/doc/TaskJuggler/DurationAttribute.html +25 -19
  44. data/doc/TaskJuggler/FileList.html +25 -19
  45. data/doc/TaskJuggler/FileRecord.html +17 -11
  46. data/doc/TaskJuggler/FixnumAttribute.html +16 -10
  47. data/doc/TaskJuggler/FlagListAttribute.html +25 -21
  48. data/doc/TaskJuggler/FloatAttribute.html +20 -14
  49. data/doc/TaskJuggler/FormatListAttribute.html +17 -11
  50. data/doc/TaskJuggler/GanttChart.html +242 -236
  51. data/doc/TaskJuggler/GanttContainer.html +71 -67
  52. data/doc/TaskJuggler/GanttHeader.html +113 -107
  53. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -20
  54. data/doc/TaskJuggler/GanttLine.html +217 -210
  55. data/doc/TaskJuggler/GanttLoadStack.html +89 -83
  56. data/doc/TaskJuggler/GanttMilestone.html +11 -6
  57. data/doc/TaskJuggler/GanttRouter.html +194 -186
  58. data/doc/TaskJuggler/GanttTaskBar.html +41 -34
  59. data/doc/TaskJuggler/HTMLDocument.html +52 -46
  60. data/doc/TaskJuggler/HTMLGraphics.html +58 -52
  61. data/doc/TaskJuggler/Interval.html +90 -84
  62. data/doc/TaskJuggler/IntervalList.html +777 -0
  63. data/doc/TaskJuggler/IntervalListAttribute.html +29 -25
  64. data/doc/TaskJuggler/JobInfo.html +36 -30
  65. data/doc/TaskJuggler/Journal.html +188 -177
  66. data/doc/TaskJuggler/JournalEntry.html +36 -30
  67. data/doc/TaskJuggler/JournalEntryList.html +88 -82
  68. data/doc/TaskJuggler/KeywordArray.html +12 -6
  69. data/doc/TaskJuggler/KeywordDocumentation.html +512 -503
  70. data/doc/TaskJuggler/Limits.html +111 -105
  71. data/doc/TaskJuggler/Limits/Limit.html +71 -65
  72. data/doc/TaskJuggler/LimitsAttribute.html +21 -15
  73. data/doc/TaskJuggler/ListAttributeBase.html +16 -10
  74. data/doc/TaskJuggler/Log.html +111 -105
  75. data/doc/TaskJuggler/LogFile.html +54 -48
  76. data/doc/TaskJuggler/LogicalAttribute.html +35 -29
  77. data/doc/TaskJuggler/LogicalExpression.html +32 -26
  78. data/doc/TaskJuggler/LogicalExpressionAttribute.html +16 -10
  79. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +671 -0
  80. data/doc/TaskJuggler/LogicalFlag.html +24 -18
  81. data/doc/TaskJuggler/LogicalFunction.html +164 -158
  82. data/doc/TaskJuggler/LogicalOperation.html +138 -132
  83. data/doc/TaskJuggler/Macro.html +14 -8
  84. data/doc/TaskJuggler/MacroTable.html +42 -36
  85. data/doc/TaskJuggler/ManagerResponsibilities.html +19 -13
  86. data/doc/TaskJuggler/ManagerStatusRecord.html +23 -17
  87. data/doc/TaskJuggler/Message.html +56 -50
  88. data/doc/TaskJuggler/MessageHandler.html +73 -67
  89. data/doc/TaskJuggler/Navigator.html +92 -86
  90. data/doc/TaskJuggler/NavigatorElement.html +88 -82
  91. data/doc/TaskJuggler/NikuProject.html +15 -9
  92. data/doc/TaskJuggler/NikuReport.html +405 -370
  93. data/doc/TaskJuggler/NikuResource.html +13 -7
  94. data/doc/TaskJuggler/NodeListAttribute.html +13 -9
  95. data/doc/TaskJuggler/PlaceHolderCell.html +22 -16
  96. data/doc/TaskJuggler/ProcessIntercom.html +116 -110
  97. data/doc/TaskJuggler/ProcessIntercomIface.html +39 -33
  98. data/doc/TaskJuggler/Project.html +1064 -895
  99. data/doc/TaskJuggler/ProjectBroker.html +439 -366
  100. data/doc/TaskJuggler/ProjectBrokerIface.html +63 -53
  101. data/doc/TaskJuggler/ProjectFileParser.html +329 -319
  102. data/doc/TaskJuggler/ProjectFileScanner.html +351 -345
  103. data/doc/TaskJuggler/ProjectRecord.html +66 -60
  104. data/doc/TaskJuggler/ProjectServer.html +287 -280
  105. data/doc/TaskJuggler/ProjectServerIface.html +43 -37
  106. data/doc/TaskJuggler/PropertyAttribute.html +16 -10
  107. data/doc/TaskJuggler/PropertyList.html +205 -199
  108. data/doc/TaskJuggler/PropertySet.html +264 -296
  109. data/doc/TaskJuggler/PropertyTreeNode.html +455 -505
  110. data/doc/TaskJuggler/Query.html +309 -524
  111. data/doc/TaskJuggler/RTFHandlers.html +17 -11
  112. data/doc/TaskJuggler/RTFNavigator.html +33 -27
  113. data/doc/TaskJuggler/RTFQuery.html +135 -129
  114. data/doc/TaskJuggler/RTFReport.html +63 -57
  115. data/doc/TaskJuggler/RTFReportLink.html +55 -49
  116. data/doc/TaskJuggler/RTFWithQuerySupport.html +17 -11
  117. data/doc/TaskJuggler/RealFormat.html +64 -58
  118. data/doc/TaskJuggler/RealFormatAttribute.html +12 -6
  119. data/doc/TaskJuggler/ReferenceAttribute.html +35 -29
  120. data/doc/TaskJuggler/Report.html +294 -249
  121. data/doc/TaskJuggler/ReportBase.html +229 -223
  122. data/doc/TaskJuggler/ReportContext.html +52 -46
  123. data/doc/TaskJuggler/ReportServer.html +143 -137
  124. data/doc/TaskJuggler/ReportServerIface.html +51 -43
  125. data/doc/TaskJuggler/ReportServerRecord.html +36 -30
  126. data/doc/TaskJuggler/ReportServlet.html +167 -140
  127. data/doc/TaskJuggler/ReportTable.html +137 -131
  128. data/doc/TaskJuggler/ReportTableCell.html +332 -292
  129. data/doc/TaskJuggler/ReportTableColumn.html +46 -40
  130. data/doc/TaskJuggler/ReportTableLegend.html +43 -38
  131. data/doc/TaskJuggler/ReportTableLine.html +66 -60
  132. data/doc/TaskJuggler/Resource.html +166 -160
  133. data/doc/TaskJuggler/ResourceListAttribute.html +54 -32
  134. data/doc/TaskJuggler/ResourceListRE.html +47 -41
  135. data/doc/TaskJuggler/ResourceScenario.html +671 -644
  136. data/doc/TaskJuggler/RichText.html +51 -45
  137. data/doc/TaskJuggler/RichTextAttribute.html +28 -22
  138. data/doc/TaskJuggler/RichTextDocument.html +96 -90
  139. data/doc/TaskJuggler/RichTextElement.html +503 -497
  140. data/doc/TaskJuggler/RichTextFunctionExample.html +41 -35
  141. data/doc/TaskJuggler/RichTextFunctionHandler.html +19 -13
  142. data/doc/TaskJuggler/RichTextImage.html +14 -8
  143. data/doc/TaskJuggler/RichTextIntermediate.html +86 -80
  144. data/doc/TaskJuggler/RichTextParser.html +59 -53
  145. data/doc/TaskJuggler/RichTextScanner.html +184 -178
  146. data/doc/TaskJuggler/RichTextSnip.html +69 -63
  147. data/doc/TaskJuggler/RichTextSyntaxRules.html +416 -410
  148. data/doc/TaskJuggler/Scenario.html +13 -7
  149. data/doc/TaskJuggler/ScenarioData.html +40 -34
  150. data/doc/TaskJuggler/ScenarioListAttribute.html +21 -15
  151. data/doc/TaskJuggler/Scoreboard.html +129 -107
  152. data/doc/TaskJuggler/SheetHandlerBase.html +245 -239
  153. data/doc/TaskJuggler/SheetReceiver.html +333 -327
  154. data/doc/TaskJuggler/SheetSender.html +227 -221
  155. data/doc/TaskJuggler/Shift.html +26 -20
  156. data/doc/TaskJuggler/ShiftAssignment.html +45 -39
  157. data/doc/TaskJuggler/ShiftAssignments.html +178 -172
  158. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +21 -15
  159. data/doc/TaskJuggler/ShiftScenario.html +29 -23
  160. data/doc/TaskJuggler/SimpleQueryExpander.html +36 -30
  161. data/doc/TaskJuggler/SortListAttribute.html +17 -13
  162. data/doc/TaskJuggler/SourceFileInfo.html +19 -13
  163. data/doc/TaskJuggler/StatusSheetReceiver.html +31 -25
  164. data/doc/TaskJuggler/StatusSheetReport.html +166 -159
  165. data/doc/TaskJuggler/StatusSheetSender.html +80 -74
  166. data/doc/TaskJuggler/StringAttribute.html +20 -14
  167. data/doc/TaskJuggler/SymbolAttribute.html +16 -10
  168. data/doc/TaskJuggler/SyntaxReference.html +231 -225
  169. data/doc/TaskJuggler/TOCEntry.html +46 -40
  170. data/doc/TaskJuggler/TSResourceRecord.html +15 -9
  171. data/doc/TaskJuggler/TSTaskRecord.html +16 -10
  172. data/doc/TaskJuggler/TableColumnDefinition.html +84 -39
  173. data/doc/TaskJuggler/TableOfContents.html +28 -22
  174. data/doc/TaskJuggler/TableReport.html +906 -866
  175. data/doc/TaskJuggler/Task.html +99 -93
  176. data/doc/TaskJuggler/TaskDependency.html +24 -18
  177. data/doc/TaskJuggler/TaskListAttribute.html +29 -25
  178. data/doc/TaskJuggler/TaskListRE.html +46 -39
  179. data/doc/TaskJuggler/TaskScenario.html +2218 -1965
  180. data/doc/TaskJuggler/TextFormatter.html +154 -148
  181. data/doc/TaskJuggler/TextParser.html +362 -348
  182. data/doc/TaskJuggler/TextParser/Pattern.html +313 -307
  183. data/doc/TaskJuggler/TextParser/Rule.html +147 -141
  184. data/doc/TaskJuggler/TextParser/StackElement.html +58 -52
  185. data/doc/TaskJuggler/TextParser/State.html +88 -82
  186. data/doc/TaskJuggler/TextParser/StateTransition.html +42 -36
  187. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +20 -14
  188. data/doc/TaskJuggler/TextParser/TokenDoc.html +19 -13
  189. data/doc/TaskJuggler/TextReport.html +80 -74
  190. data/doc/TaskJuggler/TextScanner.html +284 -272
  191. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +14 -8
  192. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +21 -15
  193. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +15 -9
  194. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  195. data/doc/TaskJuggler/TimeSheet.html +123 -117
  196. data/doc/TaskJuggler/TimeSheetReceiver.html +28 -22
  197. data/doc/TaskJuggler/TimeSheetRecord.html +212 -206
  198. data/doc/TaskJuggler/TimeSheetReport.html +206 -199
  199. data/doc/TaskJuggler/TimeSheetSender.html +27 -21
  200. data/doc/TaskJuggler/TimeSheetSummary.html +140 -134
  201. data/doc/TaskJuggler/TimeSheets.html +20 -14
  202. data/doc/TaskJuggler/Tj3AppBase.html +100 -94
  203. data/doc/TaskJuggler/Tj3Client.html +407 -483
  204. data/doc/TaskJuggler/Tj3Daemon.html +116 -107
  205. data/doc/TaskJuggler/Tj3SheetAppBase.html +45 -39
  206. data/doc/TaskJuggler/Tj3SsReceiver.html +31 -25
  207. data/doc/TaskJuggler/Tj3SsSender.html +64 -58
  208. data/doc/TaskJuggler/Tj3TsReceiver.html +31 -25
  209. data/doc/TaskJuggler/Tj3TsSender.html +51 -45
  210. data/doc/TaskJuggler/Tj3TsSummary.html +59 -53
  211. data/doc/TaskJuggler/TjException.html +13 -7
  212. data/doc/TaskJuggler/TjTime.html +444 -438
  213. data/doc/TaskJuggler/TjpExample.html +84 -78
  214. data/doc/TaskJuggler/TjpExportRE.html +356 -349
  215. data/doc/TaskJuggler/TjpSyntaxRules.html +4279 -4151
  216. data/doc/TaskJuggler/URLParameter.html +16 -10
  217. data/doc/TaskJuggler/UserManual.html +185 -179
  218. data/doc/TaskJuggler/VimSyntax.html +144 -138
  219. data/doc/TaskJuggler/WebServer.html +46 -39
  220. data/doc/TaskJuggler/WelcomePage.html +769 -0
  221. data/doc/TaskJuggler/WorkingHours.html +185 -179
  222. data/doc/TaskJuggler/WorkingHoursAttribute.html +42 -36
  223. data/doc/TaskJuggler/XMLBlob.html +21 -15
  224. data/doc/TaskJuggler/XMLComment.html +17 -11
  225. data/doc/TaskJuggler/XMLDocument.html +33 -27
  226. data/doc/TaskJuggler/XMLElement.html +97 -91
  227. data/doc/TaskJuggler/XMLNamedText.html +13 -7
  228. data/doc/TaskJuggler/XMLText.html +32 -26
  229. data/doc/index.html +601 -563
  230. data/doc/lib/AccountScenario_rb.html +5 -3
  231. data/doc/lib/Account_rb.html +5 -3
  232. data/doc/lib/Allocation_rb.html +5 -3
  233. data/doc/lib/AppConfig_rb.html +5 -3
  234. data/doc/lib/AttributeBase_rb.html +5 -3
  235. data/doc/lib/AttributeDefinition_rb.html +5 -3
  236. data/doc/lib/Attributes_rb.html +5 -3
  237. data/doc/lib/BatchProcessor_rb.html +5 -3
  238. data/doc/lib/Booking_rb.html +5 -3
  239. data/doc/lib/ChargeSet_rb.html +5 -3
  240. data/doc/lib/Charge_rb.html +5 -3
  241. data/doc/lib/DataCache_rb.html +5 -3
  242. data/doc/lib/FileList_rb.html +5 -3
  243. data/doc/lib/HTMLDocument_rb.html +5 -3
  244. data/doc/lib/IntervalList_rb.html +69 -0
  245. data/doc/lib/Interval_rb.html +5 -3
  246. data/doc/lib/Journal_rb.html +5 -3
  247. data/doc/lib/KeywordArray_rb.html +5 -3
  248. data/doc/lib/KeywordDocumentation_rb.html +5 -3
  249. data/doc/lib/Limits_rb.html +5 -3
  250. data/doc/lib/LogFile_rb.html +5 -3
  251. data/doc/lib/Log_rb.html +5 -3
  252. data/doc/lib/LogicalExpression_rb.html +5 -3
  253. data/doc/lib/LogicalFunction_rb.html +5 -3
  254. data/doc/lib/LogicalOperation_rb.html +5 -3
  255. data/doc/lib/MacroTable_rb.html +5 -3
  256. data/doc/lib/MessageHandler_rb.html +5 -3
  257. data/doc/lib/ProjectFileParser_rb.html +5 -3
  258. data/doc/lib/ProjectFileScanner_rb.html +5 -3
  259. data/doc/lib/Project_rb.html +5 -3
  260. data/doc/lib/PropertyList_rb.html +5 -3
  261. data/doc/lib/PropertySet_rb.html +5 -3
  262. data/doc/lib/PropertyTreeNode_rb.html +5 -3
  263. data/doc/lib/Query_rb.html +5 -3
  264. data/doc/lib/RTFHandlers_rb.html +5 -3
  265. data/doc/lib/RTFNavigator_rb.html +5 -3
  266. data/doc/lib/RTFQuery_rb.html +5 -3
  267. data/doc/lib/RTFReportLink_rb.html +5 -3
  268. data/doc/lib/RTFReport_rb.html +5 -3
  269. data/doc/lib/RTFWithQuerySupport_rb.html +5 -3
  270. data/doc/lib/RealFormat_rb.html +5 -3
  271. data/doc/lib/ResourceScenario_rb.html +5 -3
  272. data/doc/lib/Resource_rb.html +5 -3
  273. data/doc/lib/RichTextDocument_rb.html +5 -3
  274. data/doc/lib/RichTextElement_rb.html +5 -3
  275. data/doc/lib/RichTextFunctionExample_rb.html +5 -3
  276. data/doc/lib/RichTextFunctionHandler_rb.html +5 -3
  277. data/doc/lib/RichTextParser_rb.html +5 -3
  278. data/doc/lib/RichTextScanner_rb.html +5 -3
  279. data/doc/lib/RichTextSnip_rb.html +5 -3
  280. data/doc/lib/RichTextSyntaxRules_rb.html +5 -3
  281. data/doc/lib/RichText_rb.html +5 -3
  282. data/doc/lib/RuntimeConfig_rb.html +5 -3
  283. data/doc/lib/ScenarioData_rb.html +5 -3
  284. data/doc/lib/Scenario_rb.html +5 -3
  285. data/doc/lib/Scoreboard_rb.html +7 -3
  286. data/doc/lib/SheetHandlerBase_rb.html +5 -3
  287. data/doc/lib/SheetReceiver_rb.html +5 -3
  288. data/doc/lib/SheetSender_rb.html +5 -3
  289. data/doc/lib/ShiftAssignments_rb.html +5 -3
  290. data/doc/lib/ShiftScenario_rb.html +5 -3
  291. data/doc/lib/Shift_rb.html +5 -3
  292. data/doc/lib/SimpleQueryExpander_rb.html +5 -3
  293. data/doc/lib/SourceFileInfo_rb.html +5 -3
  294. data/doc/lib/StatusSheetReceiver_rb.html +5 -3
  295. data/doc/lib/StatusSheetSender_rb.html +5 -3
  296. data/doc/lib/SyntaxReference_rb.html +5 -3
  297. data/doc/lib/TOCEntry_rb.html +5 -3
  298. data/doc/lib/TableColumnDefinition_rb.html +5 -3
  299. data/doc/lib/TableOfContents_rb.html +5 -3
  300. data/doc/lib/TaskDependency_rb.html +5 -3
  301. data/doc/lib/TaskJuggler_rb.html +5 -3
  302. data/doc/lib/TaskScenario_rb.html +5 -3
  303. data/doc/lib/Task_rb.html +5 -3
  304. data/doc/lib/TextFormatter_rb.html +6 -4
  305. data/doc/lib/TextParser/Pattern_rb.html +5 -3
  306. data/doc/lib/TextParser/Rule_rb.html +5 -3
  307. data/doc/lib/TextParser/StackElement_rb.html +5 -3
  308. data/doc/lib/TextParser/State_rb.html +6 -4
  309. data/doc/lib/TextParser/TokenDoc_rb.html +5 -3
  310. data/doc/lib/TextParser_rb.html +5 -3
  311. data/doc/lib/TextScanner_rb.html +5 -3
  312. data/doc/lib/TimeSheetReceiver_rb.html +5 -3
  313. data/doc/lib/TimeSheetSender_rb.html +5 -3
  314. data/doc/lib/TimeSheetSummary_rb.html +6 -4
  315. data/doc/lib/TimeSheets_rb.html +5 -3
  316. data/doc/lib/Tj3AppBase_rb.html +5 -3
  317. data/doc/lib/Tj3Config_rb.html +5 -3
  318. data/doc/lib/Tj3SheetAppBase_rb.html +5 -3
  319. data/doc/lib/TjException_rb.html +5 -3
  320. data/doc/lib/TjTime_rb.html +5 -3
  321. data/doc/lib/TjpExample_rb.html +5 -3
  322. data/doc/lib/TjpSyntaxRules_rb.html +5 -3
  323. data/doc/lib/URLParameter_rb.html +5 -3
  324. data/doc/lib/UTF8String_rb.html +5 -3
  325. data/doc/lib/UserManual_rb.html +5 -3
  326. data/doc/lib/VimSyntax_rb.html +6 -4
  327. data/doc/lib/WorkingHours_rb.html +5 -3
  328. data/doc/lib/XMLDocument_rb.html +5 -3
  329. data/doc/lib/XMLElement_rb.html +5 -3
  330. data/doc/lib/daemon/Daemon_rb.html +5 -3
  331. data/doc/lib/daemon/ProcessIntercom_rb.html +7 -3
  332. data/doc/lib/daemon/ProjectBroker_rb.html +5 -3
  333. data/doc/lib/daemon/ProjectServer_rb.html +5 -3
  334. data/doc/lib/daemon/ReportServer_rb.html +5 -3
  335. data/doc/lib/daemon/ReportServlet_rb.html +69 -0
  336. data/doc/lib/daemon/WebServer_rb.html +9 -3
  337. data/doc/lib/daemon/WelcomePage_rb.html +71 -0
  338. data/doc/lib/deep_copy_rb.html +5 -3
  339. data/doc/lib/reports/CSVFile_rb.html +5 -3
  340. data/doc/lib/reports/CollisionDetector_rb.html +5 -3
  341. data/doc/lib/reports/ColumnTable_rb.html +5 -3
  342. data/doc/lib/reports/GanttChart_rb.html +5 -3
  343. data/doc/lib/reports/GanttContainer_rb.html +5 -3
  344. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +5 -3
  345. data/doc/lib/reports/GanttHeader_rb.html +5 -3
  346. data/doc/lib/reports/GanttLine_rb.html +5 -3
  347. data/doc/lib/reports/GanttLoadStack_rb.html +5 -3
  348. data/doc/lib/reports/GanttMilestone_rb.html +5 -3
  349. data/doc/lib/reports/GanttRouter_rb.html +5 -3
  350. data/doc/lib/reports/GanttTaskBar_rb.html +5 -3
  351. data/doc/lib/reports/HTMLGraphics_rb.html +5 -3
  352. data/doc/lib/reports/Navigator_rb.html +5 -3
  353. data/doc/lib/reports/NikuReport_rb.html +5 -3
  354. data/doc/lib/reports/ReportBase_rb.html +5 -3
  355. data/doc/lib/reports/ReportContext_rb.html +5 -3
  356. data/doc/lib/reports/ReportTableCell_rb.html +5 -3
  357. data/doc/lib/reports/ReportTableColumn_rb.html +5 -3
  358. data/doc/lib/reports/ReportTableLegend_rb.html +5 -3
  359. data/doc/lib/reports/ReportTableLine_rb.html +5 -3
  360. data/doc/lib/reports/ReportTable_rb.html +5 -3
  361. data/doc/lib/reports/Report_rb.html +5 -3
  362. data/doc/lib/reports/ResourceListRE_rb.html +5 -3
  363. data/doc/lib/reports/StatusSheetReport_rb.html +5 -3
  364. data/doc/lib/reports/TableReport_rb.html +5 -3
  365. data/doc/lib/reports/TaskListRE_rb.html +5 -3
  366. data/doc/lib/reports/TextReport_rb.html +5 -3
  367. data/doc/lib/reports/TimeSheetReport_rb.html +5 -3
  368. data/doc/lib/reports/TjpExportRE_rb.html +5 -3
  369. data/doc/lib/{taskjuggler3_rb.html → tj3_rb.html} +7 -5
  370. data/doc/lib/tj3client_rb.html +5 -3
  371. data/doc/lib/tj3d_rb.html +6 -4
  372. data/doc/lib/tj3man_rb.html +5 -3
  373. data/doc/lib/tj3ss_receiver_rb.html +5 -3
  374. data/doc/lib/tj3ss_sender_rb.html +5 -3
  375. data/doc/lib/tj3ts_receiver_rb.html +5 -3
  376. data/doc/lib/tj3ts_sender_rb.html +5 -3
  377. data/doc/lib/tj3ts_summary_rb.html +5 -3
  378. data/examples/tutorial.tjp +13 -5
  379. data/gem_spec.rb +3 -0
  380. data/lib/Account.rb +2 -1
  381. data/lib/AccountScenario.rb +2 -1
  382. data/lib/Allocation.rb +2 -1
  383. data/lib/AppConfig.rb +2 -1
  384. data/lib/AttributeBase.rb +19 -5
  385. data/lib/AttributeDefinition.rb +2 -1
  386. data/lib/Attributes.rb +49 -38
  387. data/lib/BatchProcessor.rb +2 -1
  388. data/lib/Booking.rb +2 -1
  389. data/lib/Charge.rb +2 -1
  390. data/lib/ChargeSet.rb +2 -1
  391. data/lib/DataCache.rb +15 -1
  392. data/lib/FileList.rb +2 -1
  393. data/lib/HTMLDocument.rb +2 -1
  394. data/lib/Interval.rb +2 -1
  395. data/lib/IntervalList.rb +100 -0
  396. data/lib/Journal.rb +8 -2
  397. data/lib/KeywordArray.rb +2 -1
  398. data/lib/KeywordDocumentation.rb +10 -6
  399. data/lib/Limits.rb +2 -1
  400. data/lib/Log.rb +3 -2
  401. data/lib/LogFile.rb +2 -1
  402. data/lib/LogicalExpression.rb +2 -1
  403. data/lib/LogicalFunction.rb +2 -1
  404. data/lib/LogicalOperation.rb +2 -1
  405. data/lib/MacroTable.rb +2 -1
  406. data/lib/MessageHandler.rb +2 -1
  407. data/lib/Project.rb +92 -25
  408. data/lib/ProjectFileParser.rb +7 -2
  409. data/lib/ProjectFileScanner.rb +2 -1
  410. data/lib/PropertyList.rb +2 -1
  411. data/lib/PropertySet.rb +2 -6
  412. data/lib/PropertyTreeNode.rb +22 -44
  413. data/lib/Query.rb +32 -13
  414. data/lib/RTFHandlers.rb +2 -1
  415. data/lib/RTFNavigator.rb +2 -1
  416. data/lib/RTFQuery.rb +3 -2
  417. data/lib/RTFReport.rb +2 -1
  418. data/lib/RTFReportLink.rb +2 -1
  419. data/lib/RTFWithQuerySupport.rb +2 -1
  420. data/lib/RealFormat.rb +2 -1
  421. data/lib/Resource.rb +2 -1
  422. data/lib/ResourceScenario.rb +35 -14
  423. data/lib/RichText.rb +2 -1
  424. data/lib/RichTextDocument.rb +2 -1
  425. data/lib/RichTextElement.rb +2 -1
  426. data/lib/RichTextFunctionExample.rb +2 -1
  427. data/lib/RichTextFunctionHandler.rb +2 -1
  428. data/lib/RichTextParser.rb +2 -1
  429. data/lib/RichTextScanner.rb +2 -1
  430. data/lib/RichTextSnip.rb +2 -1
  431. data/lib/RichTextSyntaxRules.rb +2 -1
  432. data/lib/RuntimeConfig.rb +2 -1
  433. data/lib/Scenario.rb +2 -1
  434. data/lib/ScenarioData.rb +2 -1
  435. data/lib/Scoreboard.rb +27 -8
  436. data/lib/SheetHandlerBase.rb +2 -1
  437. data/lib/SheetReceiver.rb +2 -1
  438. data/lib/SheetSender.rb +2 -1
  439. data/lib/Shift.rb +2 -1
  440. data/lib/ShiftAssignments.rb +2 -1
  441. data/lib/ShiftScenario.rb +2 -1
  442. data/lib/SimpleQueryExpander.rb +2 -1
  443. data/lib/SourceFileInfo.rb +2 -1
  444. data/lib/StatusSheetReceiver.rb +2 -1
  445. data/lib/StatusSheetSender.rb +2 -1
  446. data/lib/SyntaxReference.rb +2 -1
  447. data/lib/TOCEntry.rb +2 -1
  448. data/lib/TableColumnDefinition.rb +9 -2
  449. data/lib/TableOfContents.rb +2 -1
  450. data/lib/Task.rb +2 -1
  451. data/lib/TaskDependency.rb +2 -1
  452. data/lib/TaskJuggler.rb +8 -6
  453. data/lib/TaskScenario.rb +337 -153
  454. data/lib/TextFormatter.rb +3 -2
  455. data/lib/TextParser.rb +7 -2
  456. data/lib/TextParser/Pattern.rb +2 -1
  457. data/lib/TextParser/Rule.rb +2 -1
  458. data/lib/TextParser/StackElement.rb +2 -1
  459. data/lib/TextParser/State.rb +3 -2
  460. data/lib/TextParser/TokenDoc.rb +2 -1
  461. data/lib/TextScanner.rb +12 -5
  462. data/lib/TimeSheetReceiver.rb +2 -1
  463. data/lib/TimeSheetSender.rb +2 -1
  464. data/lib/TimeSheetSummary.rb +3 -2
  465. data/lib/TimeSheets.rb +2 -1
  466. data/lib/Tj3AppBase.rb +6 -5
  467. data/lib/Tj3Config.rb +5 -4
  468. data/lib/Tj3SheetAppBase.rb +2 -1
  469. data/lib/TjException.rb +2 -1
  470. data/lib/TjTime.rb +2 -1
  471. data/lib/TjpExample.rb +2 -1
  472. data/lib/TjpSyntaxRules.rb +264 -65
  473. data/lib/URLParameter.rb +2 -1
  474. data/lib/UTF8String.rb +2 -1
  475. data/lib/UserManual.rb +2 -1
  476. data/lib/VimSyntax.rb +3 -2
  477. data/lib/WorkingHours.rb +2 -1
  478. data/lib/XMLDocument.rb +2 -1
  479. data/lib/XMLElement.rb +2 -1
  480. data/lib/daemon/Daemon.rb +3 -1
  481. data/lib/daemon/ProcessIntercom.rb +3 -1
  482. data/lib/daemon/ProjectBroker.rb +84 -32
  483. data/lib/daemon/ProjectServer.rb +5 -3
  484. data/lib/daemon/ReportServer.rb +8 -5
  485. data/lib/daemon/ReportServlet.rb +166 -0
  486. data/lib/daemon/WebServer.rb +6 -150
  487. data/lib/daemon/WelcomePage.rb +80 -0
  488. data/lib/deep_copy.rb +2 -1
  489. data/lib/reports/CSVFile.rb +2 -1
  490. data/lib/reports/CollisionDetector.rb +2 -1
  491. data/lib/reports/ColumnTable.rb +2 -1
  492. data/lib/reports/GanttChart.rb +2 -1
  493. data/lib/reports/GanttContainer.rb +3 -4
  494. data/lib/reports/GanttHeader.rb +2 -1
  495. data/lib/reports/GanttHeaderScaleItem.rb +2 -1
  496. data/lib/reports/GanttLine.rb +12 -10
  497. data/lib/reports/GanttLoadStack.rb +2 -1
  498. data/lib/reports/GanttMilestone.rb +3 -3
  499. data/lib/reports/GanttRouter.rb +4 -1
  500. data/lib/reports/GanttTaskBar.rb +9 -7
  501. data/lib/reports/HTMLGraphics.rb +2 -1
  502. data/lib/reports/Navigator.rb +2 -1
  503. data/lib/reports/NikuReport.rb +79 -49
  504. data/lib/reports/Report.rb +42 -10
  505. data/lib/reports/ReportBase.rb +2 -1
  506. data/lib/reports/ReportContext.rb +2 -1
  507. data/lib/reports/ReportTable.rb +2 -1
  508. data/lib/reports/ReportTableCell.rb +63 -28
  509. data/lib/reports/ReportTableColumn.rb +2 -1
  510. data/lib/reports/ReportTableLegend.rb +5 -5
  511. data/lib/reports/ReportTableLine.rb +2 -1
  512. data/lib/reports/ResourceListRE.rb +2 -1
  513. data/lib/reports/StatusSheetReport.rb +4 -2
  514. data/lib/reports/TableReport.rb +42 -38
  515. data/lib/reports/TaskListRE.rb +4 -2
  516. data/lib/reports/TextReport.rb +2 -1
  517. data/lib/reports/TimeSheetReport.rb +4 -2
  518. data/lib/reports/TjpExportRE.rb +4 -2
  519. data/lib/{taskjuggler3.rb → tj3.rb} +6 -5
  520. data/lib/tj3client.rb +19 -36
  521. data/lib/tj3d.rb +6 -2
  522. data/lib/tj3man.rb +4 -3
  523. data/lib/tj3ss_receiver.rb +2 -1
  524. data/lib/tj3ss_sender.rb +2 -1
  525. data/lib/tj3ts_receiver.rb +2 -1
  526. data/lib/tj3ts_sender.rb +2 -1
  527. data/lib/tj3ts_summary.rb +2 -1
  528. data/manual/Day_To_Day_Juggling +36 -0
  529. data/manual/How_To_Contribute +9 -4
  530. data/manual/Installation +10 -3
  531. data/manual/TaskJuggler_Internals +0 -2
  532. data/manual/Tutorial +25 -3
  533. data/prj_cfg.rb +4 -2
  534. data/spec/IntervalList_spec.rb +138 -0
  535. data/spec/ProjectBroker_spec.rb +133 -0
  536. data/tasks/changelog.rake +41 -24
  537. data/tasks/csts.rake +1 -0
  538. data/tasks/gem.rake +1 -0
  539. data/tasks/rcov.rake +1 -1
  540. data/tasks/spec.rake +7 -0
  541. data/tasks/test.rake +1 -0
  542. data/test/MessageChecker.rb +2 -1
  543. data/test/TestSuite/CSV-Reports/niku.tjp +70 -0
  544. data/test/TestSuite/CSV-Reports/{celltext-Reference.csv → refs/celltext.csv} +0 -0
  545. data/test/TestSuite/CSV-Reports/refs/niku.csv +5 -0
  546. data/test/TestSuite/CSV-Reports/{resourcereport-Reference.csv → refs/resourcereport.csv} +0 -0
  547. data/test/TestSuite/CSV-Reports/{resourcereport_with_tasks-Reference.csv → refs/resourcereport_with_tasks.csv} +0 -0
  548. data/test/TestSuite/CSV-Reports/{sortByTree-Reference.csv → refs/sortByTree.csv} +0 -0
  549. data/test/TestSuite/CSV-Reports/{sortBy_duration.down-Reference.csv → refs/sortBy_duration.down.csv} +0 -0
  550. data/test/TestSuite/CSV-Reports/{sortBy_effort.up-Reference.csv → refs/sortBy_effort.up.csv} +0 -0
  551. data/test/TestSuite/CSV-Reports/{sortBy_plan.start.down-Reference.csv → refs/sortBy_plan.start.down.csv} +0 -0
  552. data/test/TestSuite/CSV-Reports/{taskreport-Reference.csv → refs/taskreport.csv} +0 -0
  553. data/test/TestSuite/CSV-Reports/{taskreport_with_resources-Reference.csv → refs/taskreport_with_resources.csv} +0 -0
  554. data/test/TestSuite/CSV-Reports/{weekly-Reference.csv → refs/weekly.csv} +0 -0
  555. data/test/TestSuite/HTML-Reports/Alerts.tjp +12 -0
  556. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
  557. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +1 -2
  558. data/test/TestSuite/Scheduler/Correct/InheritedAttributes.tjp +77 -0
  559. data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +40 -0
  560. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +2 -2
  561. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +3 -4
  562. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +2 -2
  563. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +8 -7
  564. data/test/TestSuite/Scheduler/Errors/onend_wrong_direction.tjp +19 -0
  565. data/test/TestSuite/Scheduler/Errors/onstart_wrong_direction.tjp +18 -0
  566. data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +1 -2
  567. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/boss_2002-03-02.tji +46 -0
  568. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/dev2_2002-03-02.tji +22 -0
  569. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/resources.yml +11 -0
  570. data/test/TestSuite/StatusSheets/StatusSheetTemplates/acceptable_intervals +1 -0
  571. data/test/TestSuite/StatusSheets/sender.log +256 -0
  572. data/test/TestSuite/StatusSheets/statussheets.log +9 -0
  573. data/test/TestSuite/StatusSheets/tj3d.log +395 -0
  574. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +2 -0
  575. data/test/TestSuite/Syntax/Correct/Niku.tjp +6 -1
  576. data/test/TestSuite/Syntax/Correct/Scenario.tjp +4 -1
  577. data/test/TestSuite/Syntax/Correct/Supplement.tjp +12 -5
  578. data/test/TestSuite/Syntax/Correct/TaskPrefix.tji +3 -0
  579. data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +24 -0
  580. data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -2
  581. data/test/TestSuite/Syntax/Correct/tutorial.tjp +15 -5
  582. data/test/all.rb +2 -4
  583. data/test/test_BatchProcessor.rb +2 -1
  584. data/test/test_CSV-Reports.rb +34 -23
  585. data/test/test_CSVFile.rb +2 -1
  586. data/test/test_CollisionDetector.rb +3 -2
  587. data/test/test_Journal.rb +2 -1
  588. data/test/test_Limits.rb +2 -1
  589. data/test/test_LogicalExpression.rb +2 -1
  590. data/test/test_MacroTable.rb +2 -1
  591. data/test/test_Project.rb +3 -2
  592. data/test/test_ProjectFileScanner.rb +2 -1
  593. data/test/test_PropertySet.rb +2 -1
  594. data/test/test_Query.rb +2 -1
  595. data/test/test_RealFormat.rb +2 -1
  596. data/test/test_ReportGenerator.rb +2 -1
  597. data/test/test_RichText.rb +2 -1
  598. data/test/test_Scheduler.rb +2 -1
  599. data/test/test_ShiftAssignments.rb +2 -1
  600. data/test/test_SimpleQueryExpander.rb +2 -1
  601. data/test/test_Syntax.rb +2 -1
  602. data/test/test_TextFormatter.rb +3 -2
  603. data/test/test_TjTime.rb +2 -1
  604. data/test/test_TjpExample.rb +2 -1
  605. data/test/test_URLParameter.rb +2 -1
  606. data/test/test_UTF8String.rb +2 -1
  607. data/test/test_WorkingHours.rb +2 -1
  608. data/test/test_deep_copy.rb +2 -1
  609. metadata +74 -20
  610. data/doc/StringIO.html +0 -595
  611. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +0 -46
  612. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +0 -51
  613. data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +0 -11
@@ -71,6 +71,8 @@
71
71
 
72
72
  <li><a href="#method-c-new">::new</a></li>
73
73
 
74
+ <li><a href="#method-i-assignList">#assignList</a></li>
75
+
74
76
  <li><a href="#method-i-end">#end</a></li>
75
77
 
76
78
  <li><a href="#method-i-endIdx%3D">#endIdx=</a></li>
@@ -157,6 +159,8 @@
157
159
 
158
160
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
159
161
 
162
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
163
+
160
164
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
161
165
 
162
166
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -235,6 +239,8 @@
235
239
 
236
240
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
237
241
 
242
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
243
+
238
244
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
239
245
 
240
246
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -267,6 +273,8 @@
267
273
 
268
274
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
269
275
 
276
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
277
+
270
278
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
271
279
 
272
280
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -547,6 +555,8 @@
547
555
 
548
556
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
549
557
 
558
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
559
+
550
560
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
551
561
 
552
562
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -573,8 +583,6 @@
573
583
 
574
584
  <li><a href="../String.html">String</a></li>
575
585
 
576
- <li><a href="../StringIO.html">StringIO</a></li>
577
-
578
586
  </ul>
579
587
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
580
588
  </div>
@@ -623,278 +631,6 @@ contains an error message.
623
631
  <h3 class="section-header">Attributes</h3>
624
632
 
625
633
 
626
- <div id="project-attribute-method" class="method-detail">
627
- <a name="project"></a>
628
-
629
- <a name="project="></a>
630
-
631
- <div class="method-heading attribute-method-heading">
632
- <span class="method-name">project</span><span
633
- class="attribute-access-type">[RW]</span>
634
- </div>
635
-
636
- <div class="method-description">
637
-
638
-
639
-
640
- </div>
641
- </div>
642
-
643
- <div id="property-ype-attribute-method" class="method-detail">
644
- <a name="propertyType"></a>
645
-
646
- <a name="propertyType="></a>
647
-
648
- <div class="method-heading attribute-method-heading">
649
- <span class="method-name">propertyType</span><span
650
- class="attribute-access-type">[RW]</span>
651
- </div>
652
-
653
- <div class="method-description">
654
-
655
-
656
-
657
- </div>
658
- </div>
659
-
660
- <div id="property-d-attribute-method" class="method-detail">
661
- <a name="propertyId"></a>
662
-
663
- <a name="propertyId="></a>
664
-
665
- <div class="method-heading attribute-method-heading">
666
- <span class="method-name">propertyId</span><span
667
- class="attribute-access-type">[RW]</span>
668
- </div>
669
-
670
- <div class="method-description">
671
-
672
-
673
-
674
- </div>
675
- </div>
676
-
677
- <div id="property-attribute-method" class="method-detail">
678
- <a name="property"></a>
679
-
680
- <a name="property="></a>
681
-
682
- <div class="method-heading attribute-method-heading">
683
- <span class="method-name">property</span><span
684
- class="attribute-access-type">[RW]</span>
685
- </div>
686
-
687
- <div class="method-description">
688
-
689
-
690
-
691
- </div>
692
- </div>
693
-
694
- <div id="scope-roperty-ype-attribute-method" class="method-detail">
695
- <a name="scopePropertyType"></a>
696
-
697
- <a name="scopePropertyType="></a>
698
-
699
- <div class="method-heading attribute-method-heading">
700
- <span class="method-name">scopePropertyType</span><span
701
- class="attribute-access-type">[RW]</span>
702
- </div>
703
-
704
- <div class="method-description">
705
-
706
-
707
-
708
- </div>
709
- </div>
710
-
711
- <div id="scope-roperty-d-attribute-method" class="method-detail">
712
- <a name="scopePropertyId"></a>
713
-
714
- <a name="scopePropertyId="></a>
715
-
716
- <div class="method-heading attribute-method-heading">
717
- <span class="method-name">scopePropertyId</span><span
718
- class="attribute-access-type">[RW]</span>
719
- </div>
720
-
721
- <div class="method-description">
722
-
723
-
724
-
725
- </div>
726
- </div>
727
-
728
- <div id="scope-roperty-attribute-method" class="method-detail">
729
- <a name="scopeProperty"></a>
730
-
731
- <a name="scopeProperty="></a>
732
-
733
- <div class="method-heading attribute-method-heading">
734
- <span class="method-name">scopeProperty</span><span
735
- class="attribute-access-type">[RW]</span>
736
- </div>
737
-
738
- <div class="method-description">
739
-
740
-
741
-
742
- </div>
743
- </div>
744
-
745
- <div id="attribute-d-attribute-method" class="method-detail">
746
- <a name="attributeId"></a>
747
-
748
- <a name="attributeId="></a>
749
-
750
- <div class="method-heading attribute-method-heading">
751
- <span class="method-name">attributeId</span><span
752
- class="attribute-access-type">[RW]</span>
753
- </div>
754
-
755
- <div class="method-description">
756
-
757
-
758
-
759
- </div>
760
- </div>
761
-
762
- <div id="scenario-dx-attribute-method" class="method-detail">
763
- <a name="scenarioIdx"></a>
764
-
765
- <a name="scenarioIdx="></a>
766
-
767
- <div class="method-heading attribute-method-heading">
768
- <span class="method-name">scenarioIdx</span><span
769
- class="attribute-access-type">[RW]</span>
770
- </div>
771
-
772
- <div class="method-description">
773
-
774
-
775
-
776
- </div>
777
- </div>
778
-
779
- <div id="time-ormat-attribute-method" class="method-detail">
780
- <a name="timeFormat"></a>
781
-
782
- <a name="timeFormat="></a>
783
-
784
- <div class="method-heading attribute-method-heading">
785
- <span class="method-name">timeFormat</span><span
786
- class="attribute-access-type">[RW]</span>
787
- </div>
788
-
789
- <div class="method-description">
790
-
791
-
792
-
793
- </div>
794
- </div>
795
-
796
- <div id="number-ormat-attribute-method" class="method-detail">
797
- <a name="numberFormat"></a>
798
-
799
- <a name="numberFormat="></a>
800
-
801
- <div class="method-heading attribute-method-heading">
802
- <span class="method-name">numberFormat</span><span
803
- class="attribute-access-type">[RW]</span>
804
- </div>
805
-
806
- <div class="method-description">
807
-
808
-
809
-
810
- </div>
811
- </div>
812
-
813
- <div id="currency-ormat-attribute-method" class="method-detail">
814
- <a name="currencyFormat"></a>
815
-
816
- <a name="currencyFormat="></a>
817
-
818
- <div class="method-heading attribute-method-heading">
819
- <span class="method-name">currencyFormat</span><span
820
- class="attribute-access-type">[RW]</span>
821
- </div>
822
-
823
- <div class="method-description">
824
-
825
-
826
-
827
- </div>
828
- </div>
829
-
830
- <div id="cost-ccount-attribute-method" class="method-detail">
831
- <a name="costAccount"></a>
832
-
833
- <a name="costAccount="></a>
834
-
835
- <div class="method-heading attribute-method-heading">
836
- <span class="method-name">costAccount</span><span
837
- class="attribute-access-type">[RW]</span>
838
- </div>
839
-
840
- <div class="method-description">
841
-
842
-
843
-
844
- </div>
845
- </div>
846
-
847
- <div id="revenue-ccount-attribute-method" class="method-detail">
848
- <a name="revenueAccount"></a>
849
-
850
- <a name="revenueAccount="></a>
851
-
852
- <div class="method-heading attribute-method-heading">
853
- <span class="method-name">revenueAccount</span><span
854
- class="attribute-access-type">[RW]</span>
855
- </div>
856
-
857
- <div class="method-description">
858
-
859
-
860
-
861
- </div>
862
- </div>
863
-
864
- <div id="load-nit-attribute-method" class="method-detail">
865
- <a name="loadUnit"></a>
866
-
867
- <a name="loadUnit="></a>
868
-
869
- <div class="method-heading attribute-method-heading">
870
- <span class="method-name">loadUnit</span><span
871
- class="attribute-access-type">[RW]</span>
872
- </div>
873
-
874
- <div class="method-description">
875
-
876
-
877
-
878
- </div>
879
- </div>
880
-
881
- <div id="self-ontained-attribute-method" class="method-detail">
882
- <a name="selfContained"></a>
883
-
884
- <a name="selfContained="></a>
885
-
886
- <div class="method-heading attribute-method-heading">
887
- <span class="method-name">selfContained</span><span
888
- class="attribute-access-type">[RW]</span>
889
- </div>
890
-
891
- <div class="method-description">
892
-
893
-
894
-
895
- </div>
896
- </div>
897
-
898
634
  <div id="ok-attribute-method" class="method-detail">
899
635
  <a name="ok"></a>
900
636
 
@@ -1089,25 +825,21 @@ need to be sufficent to uniquely identify an attribute.
1089
825
  <div class="method-source-code"
1090
826
  id="new-source">
1091
827
  <pre>
1092
- <span class="ruby-comment cmt"># File lib/Query.rb, line 47</span>
1093
- 47: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">parameters</span> = { })
1094
- 48: <span class="ruby-identifier">ps</span> = <span class="ruby-node">%( project propertyType propertyId property scopePropertyId
1095
- 49: scopeProperty attributeId scenario scenarioIdx
1096
- 50: loadUnit numberFormat currencyFormat timeFormat
1097
- 51: costAccount revenueAccount selfContained)</span>
1098
- 52: <span class="ruby-ivar">@selfContained</span> = <span class="ruby-keyword kw">false</span>
1099
- 53: <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1100
- 54: <span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-value str">'@'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">p</span>, <span class="ruby-identifier">parameters</span>[<span class="ruby-identifier">p</span>] <span class="ruby-operator">?</span> <span class="ruby-identifier">parameters</span>[<span class="ruby-identifier">p</span>] <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>)
1101
- 55: <span class="ruby-keyword kw">end</span>
1102
- 56:
1103
- 57: <span class="ruby-comment cmt"># instance_variable_set does not call writer functions. So we need to</span>
1104
- 58: <span class="ruby-comment cmt"># handle @start, @end, @startIdx and @endIdx separately.</span>
1105
- 59: <span class="ruby-node">%( end endIdx start startIdx )</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1106
- 60: <span class="ruby-identifier">send</span>(<span class="ruby-identifier">p</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'='</span>, <span class="ruby-identifier">parameters</span>[<span class="ruby-identifier">p</span>]) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parameters</span>[<span class="ruby-identifier">p</span>]
1107
- 61: <span class="ruby-keyword kw">end</span>
1108
- 62:
1109
- 63: <span class="ruby-identifier">reset</span>
1110
- 64: <span class="ruby-keyword kw">end</span></pre>
828
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 50</span>
829
+ 50: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">parameters</span> = { })
830
+ 51: <span class="ruby-ivar">@selfContained</span> = <span class="ruby-keyword kw">false</span>
831
+ 52: <span class="ruby-identifier">@@ps</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
832
+ 53: <span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-value str">'@'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">p</span>, <span class="ruby-identifier">parameters</span>[<span class="ruby-identifier">p</span>] <span class="ruby-operator">?</span> <span class="ruby-identifier">parameters</span>[<span class="ruby-identifier">p</span>] <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>)
833
+ 54: <span class="ruby-keyword kw">end</span>
834
+ 55:
835
+ 56: <span class="ruby-comment cmt"># instance_variable_set does not call writer functions. So we need to</span>
836
+ 57: <span class="ruby-comment cmt"># handle @start, @end, @startIdx and @endIdx separately.</span>
837
+ 58: <span class="ruby-node">%( end endIdx start startIdx )</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
838
+ 59: <span class="ruby-identifier">send</span>(<span class="ruby-identifier">p</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'='</span>, <span class="ruby-identifier">parameters</span>[<span class="ruby-identifier">p</span>]) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parameters</span>[<span class="ruby-identifier">p</span>]
839
+ 60: <span class="ruby-keyword kw">end</span>
840
+ 61:
841
+ 62: <span class="ruby-identifier">reset</span>
842
+ 63: <span class="ruby-keyword kw">end</span></pre>
1111
843
  </div>
1112
844
 
1113
845
  </div>
@@ -1124,6 +856,59 @@ need to be sufficent to uniquely identify an attribute.
1124
856
  <h3 class="section-header">Public Instance Methods</h3>
1125
857
 
1126
858
 
859
+ <div id="assign-ist-method" class="method-detail ">
860
+ <a name="method-i-assignList"></a>
861
+
862
+ <div class="method-heading">
863
+
864
+ <span class="method-name">assignList</span><span
865
+ class="method-args">(listItems)</span>
866
+ <span class="method-click-advice">click to toggle source</span>
867
+
868
+ </div>
869
+
870
+ <div class="method-description">
871
+
872
+ <p>
873
+ Converts the <a href="../String.html">String</a> items in
874
+ <em>listItems</em> into a <a
875
+ href="RichTextIntermediate.html">RichTextIntermediate</a> objects and
876
+ assigns it as result of the query.
877
+ </p>
878
+
879
+
880
+
881
+ <div class="method-source-code"
882
+ id="assign-ist-source">
883
+ <pre>
884
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 174</span>
885
+ 174: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">assignList</span>(<span class="ruby-identifier">listItems</span>)
886
+ 175: <span class="ruby-identifier">list</span> = <span class="ruby-value str">''</span>
887
+ 176: <span class="ruby-identifier">listItems</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">item</span><span class="ruby-operator">|</span>
888
+ 177: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@listType</span>
889
+ 178: <span class="ruby-keyword kw">when</span> <span class="ruby-keyword kw">nil</span>, <span class="ruby-value">:comma</span>
890
+ 179: <span class="ruby-identifier">list</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">', '</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">list</span>.<span class="ruby-identifier">empty?</span>
891
+ 180: <span class="ruby-identifier">list</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">item</span>
892
+ 181: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:bullets</span>
893
+ 182: <span class="ruby-identifier">list</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;* #{item}\n&quot;</span>
894
+ 183: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:numbered</span>
895
+ 184: <span class="ruby-identifier">list</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;# #{item}\n&quot;</span>
896
+ 185: <span class="ruby-keyword kw">end</span>
897
+ 186: <span class="ruby-keyword kw">end</span>
898
+ 187: <span class="ruby-ivar">@sortable</span> = <span class="ruby-ivar">@string</span> = <span class="ruby-identifier">list</span>
899
+ 188: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">list</span>)
900
+ 189: <span class="ruby-ivar">@rti</span> = <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
901
+ 190: <span class="ruby-keyword kw">end</span></pre>
902
+ </div>
903
+
904
+ </div>
905
+
906
+
907
+
908
+
909
+ </div>
910
+
911
+
1127
912
  <div id="end-method" class="method-detail ">
1128
913
  <a name="method-i-end"></a>
1129
914
 
@@ -1144,15 +929,15 @@ need to be sufficent to uniquely identify an attribute.
1144
929
  <div class="method-source-code"
1145
930
  id="end-source">
1146
931
  <pre>
1147
- <span class="ruby-comment cmt"># File lib/Query.rb, line 87</span>
1148
- 87: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">end</span>=(<span class="ruby-identifier">date</span>)
1149
- 88: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">date</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1150
- 89: <span class="ruby-ivar">@end</span> = <span class="ruby-identifier">date</span>
1151
- 90: <span class="ruby-ivar">@endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">date</span>, <span class="ruby-keyword kw">true</span>)
1152
- 91: <span class="ruby-keyword kw">else</span>
1153
- 92: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unsupported type #{date.class}&quot;</span>
1154
- 93: <span class="ruby-keyword kw">end</span>
1155
- 94: <span class="ruby-keyword kw">end</span></pre>
932
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 86</span>
933
+ 86: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">end</span>=(<span class="ruby-identifier">date</span>)
934
+ 87: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">date</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
935
+ 88: <span class="ruby-ivar">@end</span> = <span class="ruby-identifier">date</span>
936
+ 89: <span class="ruby-ivar">@endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">date</span>, <span class="ruby-keyword kw">true</span>)
937
+ 90: <span class="ruby-keyword kw">else</span>
938
+ 91: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unsupported type #{date.class}&quot;</span>
939
+ 92: <span class="ruby-keyword kw">end</span>
940
+ 93: <span class="ruby-keyword kw">end</span></pre>
1156
941
  </div>
1157
942
 
1158
943
  </div>
@@ -1183,15 +968,15 @@ need to be sufficent to uniquely identify an attribute.
1183
968
  <div class="method-source-code"
1184
969
  id="end-dx--source">
1185
970
  <pre>
1186
- <span class="ruby-comment cmt"># File lib/Query.rb, line 96</span>
1187
- 96: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">endIdx=</span>(<span class="ruby-identifier">idx</span>)
1188
- 97: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">idx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>)
1189
- 98: <span class="ruby-ivar">@endIdx</span> = <span class="ruby-identifier">idx</span>
1190
- 99: <span class="ruby-ivar">@end</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>)
1191
- 100: <span class="ruby-keyword kw">else</span>
1192
- 101: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unsupported type #{idx.class}&quot;</span>
1193
- 102: <span class="ruby-keyword kw">end</span>
1194
- 103: <span class="ruby-keyword kw">end</span></pre>
971
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 95</span>
972
+ 95: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">endIdx=</span>(<span class="ruby-identifier">idx</span>)
973
+ 96: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">idx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>)
974
+ 97: <span class="ruby-ivar">@endIdx</span> = <span class="ruby-identifier">idx</span>
975
+ 98: <span class="ruby-ivar">@end</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>)
976
+ 99: <span class="ruby-keyword kw">else</span>
977
+ 100: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unsupported type #{idx.class}&quot;</span>
978
+ 101: <span class="ruby-keyword kw">end</span>
979
+ 102: <span class="ruby-keyword kw">end</span></pre>
1195
980
  </div>
1196
981
 
1197
982
  </div>
@@ -1230,69 +1015,69 @@ href="Query.html#method-i-to_sort">to_sort</a>() and result().
1230
1015
  <div class="method-source-code"
1231
1016
  id="process-source">
1232
1017
  <pre>
1233
- <span class="ruby-comment cmt"># File lib/Query.rb, line 110</span>
1234
- 110: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process</span>
1235
- 111: <span class="ruby-identifier">reset</span>
1236
- 112: <span class="ruby-keyword kw">begin</span>
1237
- 113: <span class="ruby-comment cmt"># Resolve property reference from property ID.</span>
1238
- 114: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@propertyId</span>.<span class="ruby-identifier">nil?</span>
1239
- 115: <span class="ruby-ivar">@property</span> = <span class="ruby-identifier">resolvePropertyId</span>(<span class="ruby-ivar">@propertyType</span>, <span class="ruby-ivar">@propertyId</span>)
1240
- 116: <span class="ruby-keyword kw">end</span>
1241
- 117:
1242
- 118: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@property</span>
1243
- 119: <span class="ruby-comment cmt"># No property was provided. We are looking for a project attribute.</span>
1244
- 120: <span class="ruby-identifier">supportedAttrs</span> = <span class="ruby-node">%( copyright currency end name now projectid
1245
- 121: start version )</span>
1246
- 122: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">supportedAttrs</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@attributeId</span>)
1247
- 123: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
1248
- 124: <span class="ruby-node">&quot;Unsupported project attribute '#{@attributeId}'&quot;</span>
1249
- 125: <span class="ruby-keyword kw">end</span>
1250
- 126: <span class="ruby-identifier">attr</span> = <span class="ruby-ivar">@project</span>[<span class="ruby-ivar">@attributeId</span>]
1251
- 127: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">attr</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1252
- 128: <span class="ruby-ivar">@sortable</span> = <span class="ruby-ivar">@numerical</span> = <span class="ruby-identifier">attr</span>
1253
- 129: <span class="ruby-ivar">@string</span> = <span class="ruby-identifier">attr</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-ivar">@timeFormat</span>)
1254
- 130: <span class="ruby-keyword kw">else</span>
1255
- 131: <span class="ruby-ivar">@sortable</span> = <span class="ruby-ivar">@string</span> = <span class="ruby-identifier">attr</span>
1256
- 132: <span class="ruby-keyword kw">end</span>
1257
- 133: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@ok</span> = <span class="ruby-keyword kw">true</span>
1258
- 134: <span class="ruby-keyword kw">end</span>
1259
- 135:
1260
- 136: <span class="ruby-comment cmt"># Same for the scope property.</span>
1261
- 137: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@scopeProperty</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@scopePropertyId</span>.<span class="ruby-identifier">nil?</span>
1262
- 138: <span class="ruby-ivar">@scopeProperty</span> = <span class="ruby-identifier">resolvePropertyId</span>(<span class="ruby-ivar">@scopePropertyType</span>,
1263
- 139: <span class="ruby-ivar">@scopePropertyId</span>)
1264
- 140: <span class="ruby-keyword kw">end</span>
1265
- 141: <span class="ruby-comment cmt"># Make sure the have a reference to the project.</span>
1266
- 142: <span class="ruby-ivar">@project</span> = <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">project</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@project</span>
1267
- 143:
1268
- 144: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scenario</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@scenarioIdx</span>
1269
- 145: <span class="ruby-ivar">@scenarioIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-ivar">@scenario</span>)
1270
- 146: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scenarioIdx</span>
1271
- 147: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Query cannot resolve scenario '#{@scenario}'&quot;</span>
1272
- 148: <span class="ruby-keyword kw">end</span>
1273
- 149: <span class="ruby-keyword kw">end</span>
1274
- 150:
1275
- 151: <span class="ruby-identifier">queryMethodName</span> = <span class="ruby-value str">'query_'</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@attributeId</span>
1276
- 152: <span class="ruby-comment cmt"># First we check for non-scenario-specific query functions.</span>
1277
- 153: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">queryMethodName</span>)
1278
- 154: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">queryMethodName</span>, <span class="ruby-keyword kw">self</span>)
1279
- 155: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@scenarioIdx</span> <span class="ruby-operator">&amp;&amp;</span>
1280
- 156: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">data</span>[<span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">queryMethodName</span>)
1281
- 157: <span class="ruby-comment cmt"># Then we check for scenario-specific ones via the @data member.</span>
1282
- 158: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">queryMethodName</span>, <span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-keyword kw">self</span>)
1283
- 159: <span class="ruby-keyword kw">else</span>
1284
- 160: <span class="ruby-comment cmt"># The result is a BaseAttribute</span>
1285
- 161: <span class="ruby-keyword kw">unless</span> (<span class="ruby-ivar">@attr</span> = <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">getAttribute</span>(<span class="ruby-ivar">@attributeId</span>, <span class="ruby-ivar">@scenarioIdx</span>))
1286
- 162: <span class="ruby-ivar">@errorMessage</span> = <span class="ruby-node">&quot;Unknown attribute #{@attributeId} queried&quot;</span>
1287
- 163: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@ok</span> = <span class="ruby-keyword kw">false</span>
1288
- 164: <span class="ruby-keyword kw">end</span>
1289
- 165: <span class="ruby-keyword kw">end</span>
1290
- 166: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
1291
- 167: <span class="ruby-ivar">@errorMessage</span> = <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">message</span>
1292
- 168: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@ok</span> = <span class="ruby-keyword kw">false</span>
1293
- 169: <span class="ruby-keyword kw">end</span>
1294
- 170: <span class="ruby-ivar">@ok</span> = <span class="ruby-keyword kw">true</span>
1295
- 171: <span class="ruby-keyword kw">end</span></pre>
1018
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 109</span>
1019
+ 109: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process</span>
1020
+ 110: <span class="ruby-identifier">reset</span>
1021
+ 111: <span class="ruby-keyword kw">begin</span>
1022
+ 112: <span class="ruby-comment cmt"># Resolve property reference from property ID.</span>
1023
+ 113: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@propertyId</span>.<span class="ruby-identifier">nil?</span>
1024
+ 114: <span class="ruby-ivar">@property</span> = <span class="ruby-identifier">resolvePropertyId</span>(<span class="ruby-ivar">@propertyType</span>, <span class="ruby-ivar">@propertyId</span>)
1025
+ 115: <span class="ruby-keyword kw">end</span>
1026
+ 116:
1027
+ 117: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@property</span>
1028
+ 118: <span class="ruby-comment cmt"># No property was provided. We are looking for a project attribute.</span>
1029
+ 119: <span class="ruby-identifier">supportedAttrs</span> = <span class="ruby-node">%( copyright currency end name now projectid
1030
+ 120: start version )</span>
1031
+ 121: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">supportedAttrs</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@attributeId</span>)
1032
+ 122: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
1033
+ 123: <span class="ruby-node">&quot;Unsupported project attribute '#{@attributeId}'&quot;</span>
1034
+ 124: <span class="ruby-keyword kw">end</span>
1035
+ 125: <span class="ruby-identifier">attr</span> = <span class="ruby-ivar">@project</span>[<span class="ruby-ivar">@attributeId</span>]
1036
+ 126: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">attr</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1037
+ 127: <span class="ruby-ivar">@sortable</span> = <span class="ruby-ivar">@numerical</span> = <span class="ruby-identifier">attr</span>
1038
+ 128: <span class="ruby-ivar">@string</span> = <span class="ruby-identifier">attr</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-ivar">@timeFormat</span>)
1039
+ 129: <span class="ruby-keyword kw">else</span>
1040
+ 130: <span class="ruby-ivar">@sortable</span> = <span class="ruby-ivar">@string</span> = <span class="ruby-identifier">attr</span>
1041
+ 131: <span class="ruby-keyword kw">end</span>
1042
+ 132: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@ok</span> = <span class="ruby-keyword kw">true</span>
1043
+ 133: <span class="ruby-keyword kw">end</span>
1044
+ 134:
1045
+ 135: <span class="ruby-comment cmt"># Same for the scope property.</span>
1046
+ 136: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@scopeProperty</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@scopePropertyId</span>.<span class="ruby-identifier">nil?</span>
1047
+ 137: <span class="ruby-ivar">@scopeProperty</span> = <span class="ruby-identifier">resolvePropertyId</span>(<span class="ruby-ivar">@scopePropertyType</span>,
1048
+ 138: <span class="ruby-ivar">@scopePropertyId</span>)
1049
+ 139: <span class="ruby-keyword kw">end</span>
1050
+ 140: <span class="ruby-comment cmt"># Make sure the have a reference to the project.</span>
1051
+ 141: <span class="ruby-ivar">@project</span> = <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">project</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@project</span>
1052
+ 142:
1053
+ 143: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scenario</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@scenarioIdx</span>
1054
+ 144: <span class="ruby-ivar">@scenarioIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-ivar">@scenario</span>)
1055
+ 145: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scenarioIdx</span>
1056
+ 146: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Query cannot resolve scenario '#{@scenario}'&quot;</span>
1057
+ 147: <span class="ruby-keyword kw">end</span>
1058
+ 148: <span class="ruby-keyword kw">end</span>
1059
+ 149:
1060
+ 150: <span class="ruby-identifier">queryMethodName</span> = <span class="ruby-value str">'query_'</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@attributeId</span>
1061
+ 151: <span class="ruby-comment cmt"># First we check for non-scenario-specific query functions.</span>
1062
+ 152: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">queryMethodName</span>)
1063
+ 153: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">queryMethodName</span>, <span class="ruby-keyword kw">self</span>)
1064
+ 154: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@scenarioIdx</span> <span class="ruby-operator">&amp;&amp;</span>
1065
+ 155: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">data</span>[<span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">queryMethodName</span>)
1066
+ 156: <span class="ruby-comment cmt"># Then we check for scenario-specific ones via the @data member.</span>
1067
+ 157: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">queryMethodName</span>, <span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-keyword kw">self</span>)
1068
+ 158: <span class="ruby-keyword kw">else</span>
1069
+ 159: <span class="ruby-comment cmt"># The result is a BaseAttribute</span>
1070
+ 160: <span class="ruby-keyword kw">unless</span> (<span class="ruby-ivar">@attr</span> = <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">getAttribute</span>(<span class="ruby-ivar">@attributeId</span>, <span class="ruby-ivar">@scenarioIdx</span>))
1071
+ 161: <span class="ruby-ivar">@errorMessage</span> = <span class="ruby-node">&quot;Unknown attribute #{@attributeId} queried&quot;</span>
1072
+ 162: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@ok</span> = <span class="ruby-keyword kw">false</span>
1073
+ 163: <span class="ruby-keyword kw">end</span>
1074
+ 164: <span class="ruby-keyword kw">end</span>
1075
+ 165: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
1076
+ 166: <span class="ruby-ivar">@errorMessage</span> = <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">message</span>
1077
+ 167: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@ok</span> = <span class="ruby-keyword kw">false</span>
1078
+ 168: <span class="ruby-keyword kw">end</span>
1079
+ 169: <span class="ruby-ivar">@ok</span> = <span class="ruby-keyword kw">true</span>
1080
+ 170: <span class="ruby-keyword kw">end</span></pre>
1296
1081
  </div>
1297
1082
 
1298
1083
  </div>
@@ -1325,22 +1110,22 @@ Return the result in the orginal form. It may be nil.
1325
1110
  <div class="method-source-code"
1326
1111
  id="result-source">
1327
1112
  <pre>
1328
- <span class="ruby-comment cmt"># File lib/Query.rb, line 196</span>
1329
- 196: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">result</span>
1330
- 197: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attr</span>
1331
- 198: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">value</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">ReferenceAttribute</span>)
1332
- 199: <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">value</span>[<span class="ruby-value">0</span>]
1333
- 200: <span class="ruby-keyword kw">else</span>
1334
- 201: <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">value</span>
1335
- 202: <span class="ruby-keyword kw">end</span>
1336
- 203: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@rti</span>
1337
- 204: <span class="ruby-ivar">@rti</span>
1338
- 205: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@numerical</span>
1339
- 206: <span class="ruby-ivar">@numerical</span>
1340
- 207: <span class="ruby-keyword kw">else</span>
1341
- 208: <span class="ruby-ivar">@string</span>
1342
- 209: <span class="ruby-keyword kw">end</span>
1343
- 210: <span class="ruby-keyword kw">end</span></pre>
1113
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 215</span>
1114
+ 215: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">result</span>
1115
+ 216: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attr</span>
1116
+ 217: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">value</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">ReferenceAttribute</span>)
1117
+ 218: <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">value</span>[<span class="ruby-value">0</span>]
1118
+ 219: <span class="ruby-keyword kw">else</span>
1119
+ 220: <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">value</span>
1120
+ 221: <span class="ruby-keyword kw">end</span>
1121
+ 222: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@rti</span>
1122
+ 223: <span class="ruby-ivar">@rti</span>
1123
+ 224: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@numerical</span>
1124
+ 225: <span class="ruby-ivar">@numerical</span>
1125
+ 226: <span class="ruby-keyword kw">else</span>
1126
+ 227: <span class="ruby-ivar">@string</span>
1127
+ 228: <span class="ruby-keyword kw">end</span>
1128
+ 229: <span class="ruby-keyword kw">end</span></pre>
1344
1129
  </div>
1345
1130
 
1346
1131
  </div>
@@ -1375,10 +1160,10 @@ optional unit as a <a href="../String.html">String</a>.
1375
1160
  <div class="method-source-code"
1376
1161
  id="scale-uration-source">
1377
1162
  <pre>
1378
- <span class="ruby-comment cmt"># File lib/Query.rb, line 215</span>
1379
- 215: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scaleDuration</span>(<span class="ruby-identifier">value</span>)
1380
- 216: <span class="ruby-identifier">scaleValue</span>(<span class="ruby-identifier">value</span>, [ <span class="ruby-value">24</span> * <span class="ruby-value">60</span>, <span class="ruby-value">24</span>, <span class="ruby-value">1</span>, <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-value">7</span>, <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-value">30.42</span>, <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-value">365</span> ])
1381
- 217: <span class="ruby-keyword kw">end</span></pre>
1163
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 234</span>
1164
+ 234: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scaleDuration</span>(<span class="ruby-identifier">value</span>)
1165
+ 235: <span class="ruby-identifier">scaleValue</span>(<span class="ruby-identifier">value</span>, [ <span class="ruby-value">24</span> * <span class="ruby-value">60</span>, <span class="ruby-value">24</span>, <span class="ruby-value">1</span>, <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-value">7</span>, <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-value">30.42</span>, <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-value">365</span> ])
1166
+ 236: <span class="ruby-keyword kw">end</span></pre>
1382
1167
  </div>
1383
1168
 
1384
1169
  </div>
@@ -1413,15 +1198,15 @@ value with optional unit as a <a href="../String.html">String</a>.
1413
1198
  <div class="method-source-code"
1414
1199
  id="scale-oad-source">
1415
1200
  <pre>
1416
- <span class="ruby-comment cmt"># File lib/Query.rb, line 222</span>
1417
- 222: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scaleLoad</span>(<span class="ruby-identifier">value</span>)
1418
- 223: <span class="ruby-identifier">scaleValue</span>(<span class="ruby-identifier">value</span>, [ <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dailyWorkingHours</span> * <span class="ruby-value">60</span>,
1419
- 224: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dailyWorkingHours</span>,
1420
- 225: <span class="ruby-value">1.0</span>,
1421
- 226: <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">weeklyWorkingDays</span>,
1422
- 227: <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">monthlyWorkingDays</span>,
1423
- 228: <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">yearlyWorkingDays</span> ])
1424
- 229: <span class="ruby-keyword kw">end</span></pre>
1201
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 241</span>
1202
+ 241: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scaleLoad</span>(<span class="ruby-identifier">value</span>)
1203
+ 242: <span class="ruby-identifier">scaleValue</span>(<span class="ruby-identifier">value</span>, [ <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dailyWorkingHours</span> * <span class="ruby-value">60</span>,
1204
+ 243: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dailyWorkingHours</span>,
1205
+ 244: <span class="ruby-value">1.0</span>,
1206
+ 245: <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">weeklyWorkingDays</span>,
1207
+ 246: <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">monthlyWorkingDays</span>,
1208
+ 247: <span class="ruby-value">1.0</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">yearlyWorkingDays</span> ])
1209
+ 248: <span class="ruby-keyword kw">end</span></pre>
1425
1210
  </div>
1426
1211
 
1427
1212
  </div>
@@ -1456,15 +1241,15 @@ index. We store both, but we need to assure they are always in sync.
1456
1241
  <div class="method-source-code"
1457
1242
  id="start--source">
1458
1243
  <pre>
1459
- <span class="ruby-comment cmt"># File lib/Query.rb, line 69</span>
1460
- 69: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start=</span>(<span class="ruby-identifier">date</span>)
1461
- 70: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">date</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1462
- 71: <span class="ruby-ivar">@start</span> = <span class="ruby-identifier">date</span>
1463
- 72: <span class="ruby-ivar">@startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">date</span>, <span class="ruby-keyword kw">true</span>)
1464
- 73: <span class="ruby-keyword kw">else</span>
1465
- 74: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unsupported type #{date.class}&quot;</span>
1466
- 75: <span class="ruby-keyword kw">end</span>
1467
- 76: <span class="ruby-keyword kw">end</span></pre>
1244
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 68</span>
1245
+ 68: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start=</span>(<span class="ruby-identifier">date</span>)
1246
+ 69: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">date</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1247
+ 70: <span class="ruby-ivar">@start</span> = <span class="ruby-identifier">date</span>
1248
+ 71: <span class="ruby-ivar">@startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">date</span>, <span class="ruby-keyword kw">true</span>)
1249
+ 72: <span class="ruby-keyword kw">else</span>
1250
+ 73: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unsupported type #{date.class}&quot;</span>
1251
+ 74: <span class="ruby-keyword kw">end</span>
1252
+ 75: <span class="ruby-keyword kw">end</span></pre>
1468
1253
  </div>
1469
1254
 
1470
1255
  </div>
@@ -1495,15 +1280,15 @@ index. We store both, but we need to assure they are always in sync.
1495
1280
  <div class="method-source-code"
1496
1281
  id="start-dx--source">
1497
1282
  <pre>
1498
- <span class="ruby-comment cmt"># File lib/Query.rb, line 78</span>
1499
- 78: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">startIdx=</span>(<span class="ruby-identifier">idx</span>)
1500
- 79: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">idx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>)
1501
- 80: <span class="ruby-ivar">@startIdx</span> = <span class="ruby-identifier">idx</span>
1502
- 81: <span class="ruby-ivar">@start</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>)
1503
- 82: <span class="ruby-keyword kw">else</span>
1504
- 83: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unsupported type #{idx.class}&quot;</span>
1505
- 84: <span class="ruby-keyword kw">end</span>
1506
- 85: <span class="ruby-keyword kw">end</span></pre>
1283
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 77</span>
1284
+ 77: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">startIdx=</span>(<span class="ruby-identifier">idx</span>)
1285
+ 78: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">idx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>)
1286
+ 79: <span class="ruby-ivar">@startIdx</span> = <span class="ruby-identifier">idx</span>
1287
+ 80: <span class="ruby-ivar">@start</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>)
1288
+ 81: <span class="ruby-keyword kw">else</span>
1289
+ 82: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unsupported type #{idx.class}&quot;</span>
1290
+ 83: <span class="ruby-keyword kw">end</span>
1291
+ 84: <span class="ruby-keyword kw">end</span></pre>
1507
1292
  </div>
1508
1293
 
1509
1294
  </div>
@@ -1537,10 +1322,10 @@ The result may be nil.
1537
1322
  <div class="method-source-code"
1538
1323
  id="to-num-source">
1539
1324
  <pre>
1540
- <span class="ruby-comment cmt"># File lib/Query.rb, line 180</span>
1541
- 180: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_num</span>
1542
- 181: <span class="ruby-ivar">@attr</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">to_num</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@numerical</span>
1543
- 182: <span class="ruby-keyword kw">end</span></pre>
1325
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 199</span>
1326
+ 199: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_num</span>
1327
+ 200: <span class="ruby-ivar">@attr</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">to_num</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@numerical</span>
1328
+ 201: <span class="ruby-keyword kw">end</span></pre>
1544
1329
  </div>
1545
1330
 
1546
1331
  </div>
@@ -1575,10 +1360,10 @@ result may be nil.
1575
1360
  <div class="method-source-code"
1576
1361
  id="to-rti-source">
1577
1362
  <pre>
1578
- <span class="ruby-comment cmt"># File lib/Query.rb, line 191</span>
1579
- 191: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_rti</span>
1580
- 192: <span class="ruby-ivar">@attr</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">to_rti</span>(<span class="ruby-keyword kw">self</span>) <span class="ruby-operator">:</span> <span class="ruby-ivar">@rti</span>
1581
- 193: <span class="ruby-keyword kw">end</span></pre>
1363
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 210</span>
1364
+ 210: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_rti</span>
1365
+ 211: <span class="ruby-ivar">@attr</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">to_rti</span>(<span class="ruby-keyword kw">self</span>) <span class="ruby-operator">:</span> <span class="ruby-ivar">@rti</span>
1366
+ 212: <span class="ruby-keyword kw">end</span></pre>
1582
1367
  </div>
1583
1368
 
1584
1369
  </div>
@@ -1612,10 +1397,10 @@ href="../String.html">String</a>. The result may be nil.
1612
1397
  <div class="method-source-code"
1613
1398
  id="to-s-source">
1614
1399
  <pre>
1615
- <span class="ruby-comment cmt"># File lib/Query.rb, line 174</span>
1616
- 174: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
1617
- 175: <span class="ruby-ivar">@attr</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-keyword kw">self</span>) <span class="ruby-operator">:</span> (<span class="ruby-ivar">@rti</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@rti</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">:</span> (<span class="ruby-ivar">@string</span> <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>))
1618
- 176: <span class="ruby-keyword kw">end</span></pre>
1400
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 193</span>
1401
+ 193: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
1402
+ 194: <span class="ruby-ivar">@attr</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-keyword kw">self</span>) <span class="ruby-operator">:</span> (<span class="ruby-ivar">@rti</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@rti</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">:</span> (<span class="ruby-ivar">@string</span> <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>))
1403
+ 195: <span class="ruby-keyword kw">end</span></pre>
1619
1404
  </div>
1620
1405
 
1621
1406
  </div>
@@ -1649,10 +1434,10 @@ result may be nil.
1649
1434
  <div class="method-source-code"
1650
1435
  id="to-sort-source">
1651
1436
  <pre>
1652
- <span class="ruby-comment cmt"># File lib/Query.rb, line 186</span>
1653
- 186: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_sort</span>
1654
- 187: <span class="ruby-ivar">@attr</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">to_sort</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@sortable</span>
1655
- 188: <span class="ruby-keyword kw">end</span></pre>
1437
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 205</span>
1438
+ 205: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_sort</span>
1439
+ 206: <span class="ruby-ivar">@attr</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@attr</span>.<span class="ruby-identifier">to_sort</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@sortable</span>
1440
+ 207: <span class="ruby-keyword kw">end</span></pre>
1656
1441
  </div>
1657
1442
 
1658
1443
  </div>
@@ -1692,12 +1477,12 @@ result data.
1692
1477
  <div class="method-source-code"
1693
1478
  id="reset-source">
1694
1479
  <pre>
1695
- <span class="ruby-comment cmt"># File lib/Query.rb, line 323</span>
1696
- 323: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reset</span>
1697
- 324: <span class="ruby-ivar">@attr</span> = <span class="ruby-ivar">@numerical</span> = <span class="ruby-ivar">@sortable</span> = <span class="ruby-ivar">@string</span> = <span class="ruby-ivar">@rti</span> = <span class="ruby-keyword kw">nil</span>
1698
- 325: <span class="ruby-ivar">@ok</span> = <span class="ruby-keyword kw">true</span>
1699
- 326: <span class="ruby-ivar">@errorMessage</span> = <span class="ruby-keyword kw">nil</span>
1700
- 327: <span class="ruby-keyword kw">end</span></pre>
1480
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 342</span>
1481
+ 342: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reset</span>
1482
+ 343: <span class="ruby-ivar">@attr</span> = <span class="ruby-ivar">@numerical</span> = <span class="ruby-ivar">@sortable</span> = <span class="ruby-ivar">@string</span> = <span class="ruby-ivar">@rti</span> = <span class="ruby-keyword kw">nil</span>
1483
+ 344: <span class="ruby-ivar">@ok</span> = <span class="ruby-keyword kw">true</span>
1484
+ 345: <span class="ruby-ivar">@errorMessage</span> = <span class="ruby-keyword kw">nil</span>
1485
+ 346: <span class="ruby-keyword kw">end</span></pre>
1701
1486
  </div>
1702
1487
 
1703
1488
  </div>
@@ -1728,22 +1513,22 @@ result data.
1728
1513
  <div class="method-source-code"
1729
1514
  id="resolve-roperty-d-source">
1730
1515
  <pre>
1731
- <span class="ruby-comment cmt"># File lib/Query.rb, line 233</span>
1732
- 233: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resolvePropertyId</span>(<span class="ruby-identifier">pType</span>, <span class="ruby-identifier">pId</span>)
1733
- 234: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@project</span>
1734
- 235: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Need Project reference to process the query&quot;</span>
1735
- 236: <span class="ruby-keyword kw">end</span>
1736
- 237: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">pType</span>
1737
- 238: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:Account</span>
1738
- 239: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">account</span>(<span class="ruby-identifier">pId</span>)
1739
- 240: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:Task</span>
1740
- 241: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">task</span>(<span class="ruby-identifier">pId</span>)
1741
- 242: <span class="ruby-keyword kw">when</span><span class="ruby-value">:Resource</span>
1742
- 243: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">resource</span>(<span class="ruby-identifier">pId</span>)
1743
- 244: <span class="ruby-keyword kw">else</span>
1744
- 245: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown property type #{pType}&quot;</span>
1745
- 246: <span class="ruby-keyword kw">end</span>
1746
- 247: <span class="ruby-keyword kw">end</span></pre>
1516
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 252</span>
1517
+ 252: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resolvePropertyId</span>(<span class="ruby-identifier">pType</span>, <span class="ruby-identifier">pId</span>)
1518
+ 253: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@project</span>
1519
+ 254: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Need Project reference to process the query&quot;</span>
1520
+ 255: <span class="ruby-keyword kw">end</span>
1521
+ 256: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">pType</span>
1522
+ 257: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:Account</span>
1523
+ 258: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">account</span>(<span class="ruby-identifier">pId</span>)
1524
+ 259: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:Task</span>
1525
+ 260: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">task</span>(<span class="ruby-identifier">pId</span>)
1526
+ 261: <span class="ruby-keyword kw">when</span><span class="ruby-value">:Resource</span>
1527
+ 262: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">resource</span>(<span class="ruby-identifier">pId</span>)
1528
+ 263: <span class="ruby-keyword kw">else</span>
1529
+ 264: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown property type #{pType}&quot;</span>
1530
+ 265: <span class="ruby-keyword kw">end</span>
1531
+ 266: <span class="ruby-keyword kw">end</span></pre>
1747
1532
  </div>
1748
1533
 
1749
1534
  </div>
@@ -1780,71 +1565,71 @@ the different units.
1780
1565
  <div class="method-source-code"
1781
1566
  id="scale-alue-source">
1782
1567
  <pre>
1783
- <span class="ruby-comment cmt"># File lib/Query.rb, line 254</span>
1784
- 254: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scaleValue</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">factors</span>)
1785
- 255: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:shortauto</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:longauto</span>
1786
- 256: <span class="ruby-comment cmt"># We try all possible units and store the resulting strings here.</span>
1787
- 257: <span class="ruby-identifier">options</span> = []
1788
- 258: <span class="ruby-comment cmt"># For each option we also save the delta between the String value and</span>
1789
- 259: <span class="ruby-comment cmt"># the original value.</span>
1790
- 260: <span class="ruby-identifier">delta</span> = []
1791
- 261: <span class="ruby-comment cmt"># For each of the units we can define a maximum value that the value</span>
1792
- 262: <span class="ruby-comment cmt"># should not exceed. nil means no limit.</span>
1793
- 263: <span class="ruby-identifier">max</span> = [ <span class="ruby-value">60</span>, <span class="ruby-value">48</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-value">8</span>, <span class="ruby-value">24</span>, <span class="ruby-keyword kw">nil</span> ]
1794
- 264:
1795
- 265: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1796
- 266: <span class="ruby-identifier">factors</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">factor</span><span class="ruby-operator">|</span>
1797
- 267: <span class="ruby-identifier">scaledValue</span> = <span class="ruby-identifier">value</span> * <span class="ruby-identifier">factor</span>
1798
- 268: <span class="ruby-identifier">str</span> = <span class="ruby-ivar">@numberFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">scaledValue</span>)
1799
- 269: <span class="ruby-identifier">delta</span>[<span class="ruby-identifier">i</span>] = ((<span class="ruby-identifier">scaledValue</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_f</span>).<span class="ruby-identifier">abs</span> * <span class="ruby-value">1000</span>).<span class="ruby-identifier">to_i</span>
1800
- 270: <span class="ruby-comment cmt"># We ignore results that are 0 or exceed the maximum. To ensure that</span>
1801
- 271: <span class="ruby-comment cmt"># we have at least one result the unscaled value is always taken.</span>
1802
- 272: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">factor</span> <span class="ruby-operator">!=</span> <span class="ruby-value">1.0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-regexp re">/^[0.]*$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span>) <span class="ruby-operator">||</span>
1803
- 273: (<span class="ruby-identifier">max</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">scaledValue</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max</span>[<span class="ruby-identifier">i</span>])
1804
- 274: <span class="ruby-identifier">options</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">nil</span>
1805
- 275: <span class="ruby-keyword kw">else</span>
1806
- 276: <span class="ruby-identifier">options</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">str</span>
1807
- 277: <span class="ruby-keyword kw">end</span>
1808
- 278: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1809
- 279: <span class="ruby-keyword kw">end</span>
1810
- 280:
1811
- 281: <span class="ruby-comment cmt"># Find the value that is the closest to the original value. This will be</span>
1812
- 282: <span class="ruby-comment cmt"># the default if all values have the same length.</span>
1813
- 283: <span class="ruby-identifier">shortest</span> = <span class="ruby-value">2</span>
1814
- 284: <span class="ruby-identifier">delta</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">j</span><span class="ruby-operator">|</span>
1815
- 285: <span class="ruby-identifier">shortest</span> = <span class="ruby-identifier">j</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>][<span class="ruby-value">0</span>, <span class="ruby-value">2</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">'0.'</span> <span class="ruby-operator">&amp;&amp;</span>
1816
- 286: <span class="ruby-identifier">delta</span>[<span class="ruby-identifier">j</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">delta</span>[<span class="ruby-identifier">shortest</span>]
1817
- 287: <span class="ruby-keyword kw">end</span>
1818
- 288:
1819
- 289: <span class="ruby-comment cmt"># Find the shortest option.</span>
1820
- 290: <span class="ruby-value">6</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">j</span><span class="ruby-operator">|</span>
1821
- 291: <span class="ruby-identifier">shortest</span> = <span class="ruby-identifier">j</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>][<span class="ruby-value">0</span>, <span class="ruby-value">2</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">'0.'</span> <span class="ruby-operator">&amp;&amp;</span>
1822
- 292: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>].<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">shortest</span>].<span class="ruby-identifier">length</span>
1823
- 293: <span class="ruby-keyword kw">end</span>
1824
- 294:
1825
- 295: <span class="ruby-identifier">str</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">shortest</span>]
1826
- 296: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:longauto</span>
1827
- 297: <span class="ruby-comment cmt"># For the long units we handle singular and plural properly. For</span>
1828
- 298: <span class="ruby-comment cmt"># English we just need to append an 's', but this code will work for</span>
1829
- 299: <span class="ruby-comment cmt"># other languages as well.</span>
1830
- 300: <span class="ruby-identifier">units</span> = []
1831
- 301: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;1&quot;</span>
1832
- 302: <span class="ruby-identifier">units</span> = <span class="ruby-node">%( minute hour day week month year )</span>
1833
- 303: <span class="ruby-keyword kw">else</span>
1834
- 304: <span class="ruby-identifier">units</span> = <span class="ruby-node">%( minutes hours days weeks months years )</span>
1835
- 305: <span class="ruby-keyword kw">end</span>
1836
- 306: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">units</span>[<span class="ruby-identifier">shortest</span>]
1837
- 307: <span class="ruby-keyword kw">else</span>
1838
- 308: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">%( min h d w m y )</span>[<span class="ruby-identifier">shortest</span>]
1839
- 309: <span class="ruby-keyword kw">end</span>
1840
- 310: <span class="ruby-keyword kw">else</span>
1841
- 311: <span class="ruby-comment cmt"># For fixed units we just need to do the conversion. No unit is</span>
1842
- 312: <span class="ruby-comment cmt"># included.</span>
1843
- 313: <span class="ruby-identifier">units</span> = [ <span class="ruby-value">:minutes</span>, <span class="ruby-value">:hours</span>, <span class="ruby-value">:days</span>, <span class="ruby-value">:weeks</span>, <span class="ruby-value">:months</span>, <span class="ruby-value">:years</span> ]
1844
- 314: <span class="ruby-identifier">str</span> = <span class="ruby-ivar">@numberFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">value</span> * <span class="ruby-identifier">factors</span>[<span class="ruby-identifier">units</span>.<span class="ruby-identifier">index</span>(<span class="ruby-ivar">@loadUnit</span>)])
1845
- 315: <span class="ruby-keyword kw">end</span>
1846
- 316: <span class="ruby-identifier">str</span>
1847
- 317: <span class="ruby-keyword kw">end</span></pre>
1568
+ <span class="ruby-comment cmt"># File lib/Query.rb, line 273</span>
1569
+ 273: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scaleValue</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">factors</span>)
1570
+ 274: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:shortauto</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:longauto</span>
1571
+ 275: <span class="ruby-comment cmt"># We try all possible units and store the resulting strings here.</span>
1572
+ 276: <span class="ruby-identifier">options</span> = []
1573
+ 277: <span class="ruby-comment cmt"># For each option we also save the delta between the String value and</span>
1574
+ 278: <span class="ruby-comment cmt"># the original value.</span>
1575
+ 279: <span class="ruby-identifier">delta</span> = []
1576
+ 280: <span class="ruby-comment cmt"># For each of the units we can define a maximum value that the value</span>
1577
+ 281: <span class="ruby-comment cmt"># should not exceed. nil means no limit.</span>
1578
+ 282: <span class="ruby-identifier">max</span> = [ <span class="ruby-value">60</span>, <span class="ruby-value">48</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-value">8</span>, <span class="ruby-value">24</span>, <span class="ruby-keyword kw">nil</span> ]
1579
+ 283:
1580
+ 284: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1581
+ 285: <span class="ruby-identifier">factors</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">factor</span><span class="ruby-operator">|</span>
1582
+ 286: <span class="ruby-identifier">scaledValue</span> = <span class="ruby-identifier">value</span> * <span class="ruby-identifier">factor</span>
1583
+ 287: <span class="ruby-identifier">str</span> = <span class="ruby-ivar">@numberFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">scaledValue</span>)
1584
+ 288: <span class="ruby-identifier">delta</span>[<span class="ruby-identifier">i</span>] = ((<span class="ruby-identifier">scaledValue</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_f</span>).<span class="ruby-identifier">abs</span> * <span class="ruby-value">1000</span>).<span class="ruby-identifier">to_i</span>
1585
+ 289: <span class="ruby-comment cmt"># We ignore results that are 0 or exceed the maximum. To ensure that</span>
1586
+ 290: <span class="ruby-comment cmt"># we have at least one result the unscaled value is always taken.</span>
1587
+ 291: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">factor</span> <span class="ruby-operator">!=</span> <span class="ruby-value">1.0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-regexp re">/^[0.]*$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span>) <span class="ruby-operator">||</span>
1588
+ 292: (<span class="ruby-identifier">max</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">scaledValue</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max</span>[<span class="ruby-identifier">i</span>])
1589
+ 293: <span class="ruby-identifier">options</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">nil</span>
1590
+ 294: <span class="ruby-keyword kw">else</span>
1591
+ 295: <span class="ruby-identifier">options</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">str</span>
1592
+ 296: <span class="ruby-keyword kw">end</span>
1593
+ 297: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1594
+ 298: <span class="ruby-keyword kw">end</span>
1595
+ 299:
1596
+ 300: <span class="ruby-comment cmt"># Find the value that is the closest to the original value. This will be</span>
1597
+ 301: <span class="ruby-comment cmt"># the default if all values have the same length.</span>
1598
+ 302: <span class="ruby-identifier">shortest</span> = <span class="ruby-value">2</span>
1599
+ 303: <span class="ruby-identifier">delta</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">j</span><span class="ruby-operator">|</span>
1600
+ 304: <span class="ruby-identifier">shortest</span> = <span class="ruby-identifier">j</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>][<span class="ruby-value">0</span>, <span class="ruby-value">2</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">'0.'</span> <span class="ruby-operator">&amp;&amp;</span>
1601
+ 305: <span class="ruby-identifier">delta</span>[<span class="ruby-identifier">j</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">delta</span>[<span class="ruby-identifier">shortest</span>]
1602
+ 306: <span class="ruby-keyword kw">end</span>
1603
+ 307:
1604
+ 308: <span class="ruby-comment cmt"># Find the shortest option.</span>
1605
+ 309: <span class="ruby-value">6</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">j</span><span class="ruby-operator">|</span>
1606
+ 310: <span class="ruby-identifier">shortest</span> = <span class="ruby-identifier">j</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>][<span class="ruby-value">0</span>, <span class="ruby-value">2</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">'0.'</span> <span class="ruby-operator">&amp;&amp;</span>
1607
+ 311: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>].<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">shortest</span>].<span class="ruby-identifier">length</span>
1608
+ 312: <span class="ruby-keyword kw">end</span>
1609
+ 313:
1610
+ 314: <span class="ruby-identifier">str</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">shortest</span>]
1611
+ 315: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:longauto</span>
1612
+ 316: <span class="ruby-comment cmt"># For the long units we handle singular and plural properly. For</span>
1613
+ 317: <span class="ruby-comment cmt"># English we just need to append an 's', but this code will work for</span>
1614
+ 318: <span class="ruby-comment cmt"># other languages as well.</span>
1615
+ 319: <span class="ruby-identifier">units</span> = []
1616
+ 320: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;1&quot;</span>
1617
+ 321: <span class="ruby-identifier">units</span> = <span class="ruby-node">%( minute hour day week month year )</span>
1618
+ 322: <span class="ruby-keyword kw">else</span>
1619
+ 323: <span class="ruby-identifier">units</span> = <span class="ruby-node">%( minutes hours days weeks months years )</span>
1620
+ 324: <span class="ruby-keyword kw">end</span>
1621
+ 325: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">units</span>[<span class="ruby-identifier">shortest</span>]
1622
+ 326: <span class="ruby-keyword kw">else</span>
1623
+ 327: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">%( min h d w m y )</span>[<span class="ruby-identifier">shortest</span>]
1624
+ 328: <span class="ruby-keyword kw">end</span>
1625
+ 329: <span class="ruby-keyword kw">else</span>
1626
+ 330: <span class="ruby-comment cmt"># For fixed units we just need to do the conversion. No unit is</span>
1627
+ 331: <span class="ruby-comment cmt"># included.</span>
1628
+ 332: <span class="ruby-identifier">units</span> = [ <span class="ruby-value">:minutes</span>, <span class="ruby-value">:hours</span>, <span class="ruby-value">:days</span>, <span class="ruby-value">:weeks</span>, <span class="ruby-value">:months</span>, <span class="ruby-value">:years</span> ]
1629
+ 333: <span class="ruby-identifier">str</span> = <span class="ruby-ivar">@numberFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">value</span> * <span class="ruby-identifier">factors</span>[<span class="ruby-identifier">units</span>.<span class="ruby-identifier">index</span>(<span class="ruby-ivar">@loadUnit</span>)])
1630
+ 334: <span class="ruby-keyword kw">end</span>
1631
+ 335: <span class="ruby-identifier">str</span>
1632
+ 336: <span class="ruby-keyword kw">end</span></pre>
1848
1633
  </div>
1849
1634
 
1850
1635
  </div>