backlog 0.7.12 → 0.8.0

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 (444) hide show
  1. data/History.txt +9 -0
  2. data/Rakefile +2 -2
  3. data/app/controllers/estimates_controller.rb +20 -3
  4. data/app/controllers/task_files_controller.rb +19 -0
  5. data/app/controllers/tasks_controller.rb +7 -2
  6. data/app/helpers/task_files_helper.rb +2 -0
  7. data/app/models/task.rb +3 -3
  8. data/app/models/task_file.rb +7 -0
  9. data/app/views/layouts/_left_top.rhtml +12 -2
  10. data/app/views/tasks/_form.rhtml +16 -1
  11. data/app/views/tasks/edit.rhtml +1 -1
  12. data/db/migrate/020_create_task_files.rb +17 -0
  13. data/db/schema.rb +11 -21
  14. data/doc/classes/ActiveRecord/Base.html +40 -40
  15. data/doc/classes/ActiveRecord/Base.src/M000432.html +13 -56
  16. data/doc/classes/ActiveRecord/Base.src/M000433.html +14 -3
  17. data/doc/classes/ActiveRecord/Base.src/{M000428.html → M000434.html} +0 -0
  18. data/doc/classes/ActiveRecord/Base.src/{M000429.html → M000435.html} +0 -0
  19. data/doc/classes/ActiveRecord/Base.src/{M000426.html → M000436.html} +0 -0
  20. data/doc/classes/ActiveRecord/Base.src/{M000427.html → M000437.html} +0 -0
  21. data/doc/classes/ActiveRecord/Base.src/M000438.html +72 -0
  22. data/doc/classes/ActiveRecord/Base.src/M000439.html +16 -0
  23. data/doc/classes/ApplicationController.html +18 -18
  24. data/doc/classes/ApplicationController.src/{M000318.html → M000322.html} +0 -0
  25. data/doc/classes/ApplicationController.src/{M000319.html → M000323.html} +0 -0
  26. data/doc/classes/ApplicationHelper.html +91 -91
  27. data/doc/classes/ApplicationHelper.src/M000440.html +7 -4
  28. data/doc/classes/ApplicationHelper.src/M000441.html +4 -8
  29. data/doc/classes/ApplicationHelper.src/M000442.html +11 -15
  30. data/doc/classes/ApplicationHelper.src/M000443.html +6 -7
  31. data/doc/classes/ApplicationHelper.src/M000444.html +6 -4
  32. data/doc/classes/ApplicationHelper.src/M000445.html +7 -11
  33. data/doc/classes/ApplicationHelper.src/M000446.html +4 -6
  34. data/doc/classes/ApplicationHelper.src/M000447.html +8 -6
  35. data/doc/classes/ApplicationHelper.src/M000448.html +15 -7
  36. data/doc/classes/ApplicationHelper.src/M000449.html +7 -4
  37. data/doc/classes/ApplicationHelper.src/M000450.html +4 -8
  38. data/doc/classes/ApplicationHelper.src/M000451.html +11 -15
  39. data/doc/classes/ApplicationHelper.src/{M000437.html → M000452.html} +0 -0
  40. data/doc/classes/ApplicationHelper.src/{M000438.html → M000453.html} +0 -0
  41. data/doc/classes/ApplicationHelper.src/{M000439.html → M000454.html} +0 -0
  42. data/doc/classes/ApplicationHelper.src/M000455.html +18 -0
  43. data/doc/classes/ApplicationHelper.src/M000456.html +22 -0
  44. data/doc/classes/ApplicationHelper.src/M000457.html +30 -0
  45. data/doc/classes/Backlog.html +1 -1
  46. data/doc/classes/BacklogsHelper.html +1 -1
  47. data/doc/classes/BigDecimal.html +10 -10
  48. data/doc/classes/BigDecimal.src/{M000364.html → M000366.html} +0 -0
  49. data/doc/classes/BigDecimal.src/{M000365.html → M000367.html} +0 -0
  50. data/doc/classes/Chart.html +1 -1
  51. data/doc/classes/Clock.html +30 -30
  52. data/doc/classes/Clock.src/{M000394.html → M000400.html} +0 -0
  53. data/doc/classes/Clock.src/{M000395.html → M000401.html} +0 -0
  54. data/doc/classes/Clock.src/{M000396.html → M000402.html} +0 -0
  55. data/doc/classes/Clock.src/{M000397.html → M000403.html} +0 -0
  56. data/doc/classes/Clock.src/{M000398.html → M000404.html} +0 -0
  57. data/doc/classes/Clock.src/{M000399.html → M000405.html} +0 -0
  58. data/doc/classes/Estimate.html +11 -11
  59. data/doc/classes/Estimate.src/{M000400.html → M000406.html} +0 -0
  60. data/doc/classes/Estimate.src/{M000401.html → M000407.html} +0 -0
  61. data/doc/classes/EstimatesController.html +10 -10
  62. data/doc/classes/EstimatesController.src/M000398.html +39 -0
  63. data/doc/classes/EstimatesController.src/M000399.html +39 -0
  64. data/doc/classes/EstimatesHelper.html +1 -1
  65. data/doc/classes/Group.html +1 -1
  66. data/doc/classes/GroupsController.html +80 -80
  67. data/doc/classes/GroupsController.src/M000324.html +5 -4
  68. data/doc/classes/GroupsController.src/M000325.html +4 -10
  69. data/doc/classes/GroupsController.src/M000326.html +4 -7
  70. data/doc/classes/GroupsController.src/M000327.html +8 -8
  71. data/doc/classes/GroupsController.src/M000328.html +7 -5
  72. data/doc/classes/GroupsController.src/M000329.html +7 -9
  73. data/doc/classes/GroupsController.src/M000330.html +5 -5
  74. data/doc/classes/GroupsController.src/M000331.html +12 -4
  75. data/doc/classes/GroupsController.src/M000332.html +5 -4
  76. data/doc/classes/GroupsController.src/M000333.html +4 -10
  77. data/doc/classes/GroupsController.src/M000334.html +4 -7
  78. data/doc/classes/GroupsController.src/M000335.html +8 -8
  79. data/doc/classes/GroupsController.src/M000336.html +7 -5
  80. data/doc/classes/GroupsController.src/M000337.html +7 -9
  81. data/doc/classes/GroupsController.src/{M000323.html → M000338.html} +5 -4
  82. data/doc/classes/GroupsController.src/M000339.html +26 -0
  83. data/doc/classes/GroupsHelper.html +1 -1
  84. data/doc/classes/Localization.html +30 -30
  85. data/doc/classes/Localization.src/{M000414.html → M000420.html} +0 -0
  86. data/doc/classes/Localization.src/{M000415.html → M000421.html} +0 -0
  87. data/doc/classes/Localization.src/{M000416.html → M000422.html} +0 -0
  88. data/doc/classes/Localization.src/{M000417.html → M000423.html} +0 -0
  89. data/doc/classes/Localization.src/{M000418.html → M000424.html} +0 -0
  90. data/doc/classes/Localization.src/{M000419.html → M000425.html} +0 -0
  91. data/doc/classes/Localization/LString.html +20 -20
  92. data/doc/classes/Localization/LString.src/{M000420.html → M000426.html} +0 -0
  93. data/doc/classes/Localization/LString.src/{M000421.html → M000427.html} +0 -0
  94. data/doc/classes/Localization/LString.src/{M000422.html → M000428.html} +0 -0
  95. data/doc/classes/Localization/LString.src/{M000423.html → M000429.html} +0 -0
  96. data/doc/classes/PartiesHelper.html +1 -1
  97. data/doc/classes/Party.html +41 -41
  98. data/doc/classes/Party.src/M000340.html +4 -4
  99. data/doc/classes/Party.src/M000341.html +4 -11
  100. data/doc/classes/Party.src/M000342.html +4 -4
  101. data/doc/classes/Party.src/M000343.html +11 -4
  102. data/doc/classes/Party.src/M000344.html +4 -4
  103. data/doc/classes/Party.src/M000345.html +4 -11
  104. data/doc/classes/Party.src/{M000338.html → M000346.html} +4 -4
  105. data/doc/classes/Party.src/M000347.html +25 -0
  106. data/doc/classes/Period.html +1 -1
  107. data/doc/classes/PeriodsController.html +130 -130
  108. data/doc/classes/PeriodsController.src/M000372.html +9 -8
  109. data/doc/classes/PeriodsController.src/M000373.html +19 -6
  110. data/doc/classes/PeriodsController.src/M000374.html +5 -4
  111. data/doc/classes/PeriodsController.src/M000375.html +15 -4
  112. data/doc/classes/PeriodsController.src/M000376.html +11 -4
  113. data/doc/classes/PeriodsController.src/M000377.html +3 -5
  114. data/doc/classes/PeriodsController.src/M000378.html +8 -6
  115. data/doc/classes/PeriodsController.src/M000379.html +6 -11
  116. data/doc/classes/PeriodsController.src/M000380.html +4 -19
  117. data/doc/classes/PeriodsController.src/M000381.html +4 -5
  118. data/doc/classes/PeriodsController.src/M000382.html +4 -15
  119. data/doc/classes/PeriodsController.src/M000383.html +6 -11
  120. data/doc/classes/PeriodsController.src/M000384.html +8 -4
  121. data/doc/classes/PeriodsController.src/M000385.html +9 -8
  122. data/doc/classes/PeriodsController.src/M000386.html +19 -6
  123. data/doc/classes/PeriodsController.src/M000387.html +5 -4
  124. data/doc/classes/PeriodsController.src/M000388.html +15 -4
  125. data/doc/classes/PeriodsController.src/M000389.html +11 -4
  126. data/doc/classes/PeriodsController.src/M000390.html +3 -5
  127. data/doc/classes/PeriodsController.src/M000391.html +8 -6
  128. data/doc/classes/PeriodsController.src/M000392.html +20 -0
  129. data/doc/classes/{GroupsController.src/M000322.html → PeriodsController.src/M000393.html} +4 -5
  130. data/doc/classes/PeriodsController.src/{M000371.html → M000394.html} +4 -4
  131. data/doc/classes/{Party.src/M000339.html → PeriodsController.src/M000395.html} +4 -4
  132. data/doc/classes/PeriodsController.src/M000396.html +20 -0
  133. data/doc/classes/PeriodsController.src/M000397.html +22 -0
  134. data/doc/classes/PeriodsHelper.html +1 -1
  135. data/doc/classes/SearchHelper.html +1 -1
  136. data/doc/classes/SearchResult.html +11 -11
  137. data/doc/classes/SearchResult.src/{M000239.html → M000241.html} +0 -0
  138. data/doc/classes/SearchResult.src/{M000240.html → M000242.html} +0 -0
  139. data/doc/classes/Task.html +385 -385
  140. data/doc/classes/Task.src/M000243.html +7 -14
  141. data/doc/classes/Task.src/M000244.html +4 -4
  142. data/doc/classes/Task.src/M000245.html +16 -4
  143. data/doc/classes/Task.src/M000246.html +4 -24
  144. data/doc/classes/Task.src/M000247.html +4 -4
  145. data/doc/classes/Task.src/M000248.html +24 -11
  146. data/doc/classes/Task.src/M000249.html +4 -6
  147. data/doc/classes/Task.src/M000250.html +11 -12
  148. data/doc/classes/Task.src/M000251.html +6 -10
  149. data/doc/classes/Task.src/M000252.html +9 -40
  150. data/doc/classes/Task.src/M000253.html +8 -10
  151. data/doc/classes/Task.src/M000254.html +42 -7
  152. data/doc/classes/Task.src/M000255.html +12 -4
  153. data/doc/classes/Task.src/M000256.html +8 -4
  154. data/doc/classes/Task.src/M000257.html +4 -4
  155. data/doc/classes/Task.src/M000258.html +4 -4
  156. data/doc/classes/Task.src/M000259.html +4 -4
  157. data/doc/classes/Task.src/M000260.html +4 -4
  158. data/doc/classes/Task.src/M000261.html +4 -4
  159. data/doc/classes/Task.src/M000262.html +4 -6
  160. data/doc/classes/Task.src/M000263.html +4 -4
  161. data/doc/classes/Task.src/M000264.html +6 -4
  162. data/doc/classes/Task.src/M000265.html +4 -4
  163. data/doc/classes/Task.src/M000266.html +4 -4
  164. data/doc/classes/Task.src/M000267.html +4 -4
  165. data/doc/classes/Task.src/M000268.html +4 -4
  166. data/doc/classes/Task.src/M000269.html +4 -4
  167. data/doc/classes/Task.src/M000270.html +4 -4
  168. data/doc/classes/Task.src/M000271.html +4 -10
  169. data/doc/classes/Task.src/M000272.html +4 -19
  170. data/doc/classes/Task.src/M000273.html +9 -9
  171. data/doc/classes/Task.src/M000274.html +17 -18
  172. data/doc/classes/Task.src/M000275.html +10 -4
  173. data/doc/classes/Task.src/M000276.html +20 -4
  174. data/doc/classes/Task.src/M000277.html +4 -4
  175. data/doc/classes/Task.src/M000278.html +4 -9
  176. data/doc/classes/Task.src/M000279.html +4 -9
  177. data/doc/classes/Task.src/M000280.html +9 -4
  178. data/doc/classes/Task.src/M000281.html +7 -14
  179. data/doc/classes/Task.src/M000282.html +4 -4
  180. data/doc/classes/Task.src/M000283.html +16 -4
  181. data/doc/classes/Task.src/M000284.html +4 -24
  182. data/doc/classes/Task.src/M000285.html +4 -4
  183. data/doc/classes/Task.src/M000286.html +24 -11
  184. data/doc/classes/Task.src/M000287.html +4 -6
  185. data/doc/classes/Task.src/M000288.html +11 -12
  186. data/doc/classes/Task.src/M000289.html +6 -10
  187. data/doc/classes/Task.src/M000290.html +9 -40
  188. data/doc/classes/Task.src/M000291.html +8 -10
  189. data/doc/classes/Task.src/M000292.html +42 -7
  190. data/doc/classes/Task.src/M000293.html +12 -4
  191. data/doc/classes/Task.src/M000294.html +8 -4
  192. data/doc/classes/Task.src/M000295.html +4 -4
  193. data/doc/classes/Task.src/M000296.html +4 -4
  194. data/doc/classes/Task.src/M000297.html +4 -4
  195. data/doc/classes/Task.src/M000298.html +4 -4
  196. data/doc/classes/Task.src/M000299.html +4 -4
  197. data/doc/classes/Task.src/M000300.html +4 -6
  198. data/doc/classes/Task.src/M000301.html +4 -4
  199. data/doc/classes/Task.src/M000302.html +6 -4
  200. data/doc/classes/Task.src/M000303.html +4 -4
  201. data/doc/classes/Task.src/M000304.html +4 -4
  202. data/doc/classes/Task.src/M000305.html +4 -4
  203. data/doc/classes/Task.src/M000306.html +4 -4
  204. data/doc/classes/Task.src/M000307.html +4 -4
  205. data/doc/classes/Task.src/M000308.html +18 -0
  206. data/doc/classes/Task.src/M000309.html +4 -4
  207. data/doc/classes/Task.src/M000311.html +4 -19
  208. data/doc/classes/Task.src/M000312.html +9 -9
  209. data/doc/classes/Task.src/M000313.html +17 -18
  210. data/doc/classes/Task.src/M000314.html +10 -4
  211. data/doc/classes/Task.src/M000315.html +20 -4
  212. data/doc/classes/Task.src/M000316.html +4 -4
  213. data/doc/classes/Task.src/M000317.html +4 -9
  214. data/doc/classes/Task.src/M000318.html +18 -0
  215. data/doc/classes/Task.src/M000319.html +23 -0
  216. data/doc/classes/TaskFile.html +165 -0
  217. data/doc/classes/TaskFile.src/M000239.html +18 -0
  218. data/doc/classes/TaskFile.src/M000240.html +18 -0
  219. data/doc/classes/TaskFilesController.html +195 -0
  220. data/doc/classes/TaskFilesController.src/M000368.html +22 -0
  221. data/doc/classes/TaskFilesController.src/M000369.html +24 -0
  222. data/doc/classes/TaskFilesController.src/M000370.html +22 -0
  223. data/doc/classes/TaskFilesController.src/M000371.html +24 -0
  224. data/doc/classes/TaskFilesHelper.html +115 -0
  225. data/doc/classes/TasksController.src/M000107.html +6 -1
  226. data/doc/classes/TasksController.src/M000108.html +1 -1
  227. data/doc/classes/TasksController.src/M000109.html +1 -1
  228. data/doc/classes/TasksController.src/M000110.html +1 -1
  229. data/doc/classes/TasksController.src/M000111.html +1 -1
  230. data/doc/classes/TasksController.src/M000112.html +1 -1
  231. data/doc/classes/TasksController.src/M000113.html +1 -1
  232. data/doc/classes/TasksController.src/M000114.html +1 -1
  233. data/doc/classes/TasksController.src/M000115.html +1 -1
  234. data/doc/classes/TasksController.src/M000116.html +1 -1
  235. data/doc/classes/TasksController.src/M000117.html +1 -1
  236. data/doc/classes/TasksController.src/M000118.html +1 -1
  237. data/doc/classes/TasksController.src/M000119.html +1 -1
  238. data/doc/classes/TasksController.src/M000120.html +1 -1
  239. data/doc/classes/TasksController.src/M000121.html +2 -2
  240. data/doc/classes/TasksController.src/M000122.html +1 -1
  241. data/doc/classes/TasksController.src/M000127.html +6 -1
  242. data/doc/classes/TasksController.src/M000128.html +1 -1
  243. data/doc/classes/TasksController.src/M000129.html +1 -1
  244. data/doc/classes/TasksController.src/M000130.html +1 -1
  245. data/doc/classes/TasksController.src/M000131.html +1 -1
  246. data/doc/classes/TasksController.src/M000132.html +1 -1
  247. data/doc/classes/TasksController.src/M000133.html +1 -1
  248. data/doc/classes/TasksController.src/M000134.html +1 -1
  249. data/doc/classes/TasksController.src/M000135.html +1 -1
  250. data/doc/classes/TasksController.src/M000136.html +1 -1
  251. data/doc/classes/TasksController.src/M000137.html +1 -1
  252. data/doc/classes/TasksController.src/M000138.html +1 -1
  253. data/doc/classes/TasksController.src/M000139.html +1 -1
  254. data/doc/classes/TasksController.src/M000140.html +1 -1
  255. data/doc/classes/TasksController.src/M000141.html +2 -2
  256. data/doc/classes/TasksController.src/M000142.html +1 -1
  257. data/doc/classes/TasksHelper.html +1 -1
  258. data/doc/classes/Time.html +1 -1
  259. data/doc/classes/User.html +1 -1
  260. data/doc/classes/UserHelper.html +55 -55
  261. data/doc/classes/UserHelper.src/{M000402.html → M000414.html} +0 -0
  262. data/doc/classes/UserHelper.src/{M000403.html → M000415.html} +0 -0
  263. data/doc/classes/UserHelper.src/{M000404.html → M000416.html} +0 -0
  264. data/doc/classes/UserHelper.src/{M000405.html → M000417.html} +0 -0
  265. data/doc/classes/UserHelper.src/{M000406.html → M000418.html} +0 -0
  266. data/doc/classes/UserHelper.src/{M000407.html → M000419.html} +0 -0
  267. data/doc/classes/UserNotify.html +1 -1
  268. data/doc/classes/UserSystem.html +56 -56
  269. data/doc/classes/UserSystem.src/{M000452.html → M000464.html} +0 -0
  270. data/doc/classes/UserSystem.src/{M000453.html → M000465.html} +0 -0
  271. data/doc/classes/UserSystem.src/{M000454.html → M000466.html} +0 -0
  272. data/doc/classes/UserSystem.src/{M000455.html → M000467.html} +0 -0
  273. data/doc/classes/UserSystem.src/{M000456.html → M000468.html} +0 -0
  274. data/doc/classes/UserSystem.src/{M000457.html → M000469.html} +0 -0
  275. data/doc/classes/Work.html +91 -91
  276. data/doc/classes/Work.src/M000348.html +4 -14
  277. data/doc/classes/Work.src/M000349.html +4 -24
  278. data/doc/classes/Work.src/M000350.html +14 -4
  279. data/doc/classes/Work.src/M000351.html +24 -4
  280. data/doc/classes/Work.src/M000352.html +4 -7
  281. data/doc/classes/Work.src/M000353.html +4 -4
  282. data/doc/classes/Work.src/M000354.html +5 -5
  283. data/doc/classes/Work.src/M000355.html +4 -4
  284. data/doc/classes/Work.src/M000356.html +7 -4
  285. data/doc/classes/Work.src/M000357.html +4 -14
  286. data/doc/classes/Work.src/M000358.html +4 -24
  287. data/doc/classes/Work.src/M000359.html +14 -4
  288. data/doc/classes/Work.src/M000360.html +24 -4
  289. data/doc/classes/Work.src/M000361.html +4 -7
  290. data/doc/classes/Work.src/M000362.html +4 -4
  291. data/doc/classes/Work.src/M000363.html +5 -5
  292. data/doc/classes/Work.src/{M000346.html → M000364.html} +4 -4
  293. data/doc/classes/Work.src/M000365.html +21 -0
  294. data/doc/classes/WorksHelper.html +11 -11
  295. data/doc/classes/WorksHelper.src/{M000424.html → M000430.html} +0 -0
  296. data/doc/classes/WorksHelper.src/{M000425.html → M000431.html} +0 -0
  297. data/doc/created.rid +1 -1
  298. data/doc/dot/f_0.png +0 -0
  299. data/doc/dot/f_1.png +0 -0
  300. data/doc/dot/f_2.png +0 -0
  301. data/doc/dot/f_24.png +0 -0
  302. data/doc/dot/f_25.png +0 -0
  303. data/doc/dot/f_26.png +0 -0
  304. data/doc/dot/f_27.png +0 -0
  305. data/doc/dot/f_28.png +0 -0
  306. data/doc/dot/f_29.png +0 -0
  307. data/doc/dot/f_3.png +0 -0
  308. data/doc/dot/f_30.png +0 -0
  309. data/doc/dot/f_31.png +0 -0
  310. data/doc/dot/f_32.png +0 -0
  311. data/doc/dot/f_33.png +0 -0
  312. data/doc/dot/f_34.dot +32 -0
  313. data/doc/dot/f_34.png +0 -0
  314. data/doc/dot/f_4.png +0 -0
  315. data/doc/dot/f_46.dot +4 -4
  316. data/doc/dot/f_46.png +0 -0
  317. data/doc/dot/f_47.dot +4 -18
  318. data/doc/dot/f_47.png +0 -0
  319. data/doc/dot/f_48.dot +4 -13
  320. data/doc/dot/f_48.png +0 -0
  321. data/doc/dot/f_49.dot +18 -4
  322. data/doc/dot/f_49.png +0 -0
  323. data/doc/dot/f_5.png +0 -0
  324. data/doc/dot/f_50.dot +13 -4
  325. data/doc/dot/f_50.png +0 -0
  326. data/doc/dot/f_51.dot +4 -4
  327. data/doc/dot/f_51.png +0 -0
  328. data/doc/dot/f_52.dot +4 -4
  329. data/doc/dot/f_52.png +0 -0
  330. data/doc/dot/f_53.dot +4 -4
  331. data/doc/dot/f_53.png +0 -0
  332. data/doc/dot/{f_44.dot → f_54.dot} +4 -4
  333. data/doc/dot/f_54.png +0 -0
  334. data/doc/dot/{f_65.dot → f_55.dot} +4 -4
  335. data/doc/dot/f_55.png +0 -0
  336. data/doc/dot/{f_45.dot → f_56.dot} +4 -4
  337. data/doc/dot/f_56.png +0 -0
  338. data/doc/dot/f_6.png +0 -0
  339. data/doc/dot/f_68.dot +4 -4
  340. data/doc/dot/f_68.png +0 -0
  341. data/doc/dot/f_69.dot +15 -31
  342. data/doc/dot/f_69.png +0 -0
  343. data/doc/dot/f_7.png +0 -0
  344. data/doc/dot/f_70.dot +12 -3
  345. data/doc/dot/f_70.png +0 -0
  346. data/doc/dot/f_71.dot +7 -7
  347. data/doc/dot/f_71.png +0 -0
  348. data/doc/dot/f_72.dot +4 -4
  349. data/doc/dot/f_72.png +0 -0
  350. data/doc/dot/f_73.dot +9 -9
  351. data/doc/dot/f_73.png +0 -0
  352. data/doc/dot/f_74.dot +3 -12
  353. data/doc/dot/f_74.png +0 -0
  354. data/doc/dot/{f_64.dot → f_75.dot} +4 -4
  355. data/doc/dot/f_75.png +0 -0
  356. data/doc/dot/{f_67.dot → f_76.dot} +7 -7
  357. data/doc/dot/f_76.png +0 -0
  358. data/doc/dot/f_77.dot +32 -0
  359. data/doc/dot/f_77.png +0 -0
  360. data/doc/dot/f_78.dot +46 -0
  361. data/doc/dot/f_78.png +0 -0
  362. data/doc/dot/{f_66.dot → f_79.dot} +4 -4
  363. data/doc/dot/f_79.png +0 -0
  364. data/doc/dot/{m_48_0.dot → m_50_0.dot} +0 -0
  365. data/doc/dot/{m_48_0.png → m_50_0.png} +0 -0
  366. data/doc/files/History_txt.html +23 -2
  367. data/doc/files/app/controllers/estimates_controller_rb.html +1 -1
  368. data/doc/files/app/controllers/task_files_controller_rb.html +108 -0
  369. data/doc/files/app/controllers/tasks_controller_rb.html +1 -1
  370. data/doc/files/app/helpers/application_helper_rb.html +1 -1
  371. data/doc/files/app/helpers/backlogs_helper_rb.html +1 -1
  372. data/doc/files/app/helpers/estimates_helper_rb.html +1 -1
  373. data/doc/files/app/helpers/groups_helper_rb.html +1 -1
  374. data/doc/files/app/helpers/parties_helper_rb.html +1 -1
  375. data/doc/files/app/helpers/periods_helper_rb.html +1 -1
  376. data/doc/files/app/helpers/search_helper_rb.html +1 -1
  377. data/doc/files/app/helpers/task_files_helper_rb.html +107 -0
  378. data/doc/files/app/helpers/tasks_helper_rb.html +1 -1
  379. data/doc/files/app/helpers/user_helper_rb.html +1 -1
  380. data/doc/files/app/helpers/works_helper_rb.html +1 -1
  381. data/doc/files/app/models/backlog_rb.html +1 -1
  382. data/doc/files/app/models/chart_rb.html +1 -1
  383. data/doc/files/app/models/estimate_rb.html +1 -1
  384. data/doc/files/app/models/group_rb.html +1 -1
  385. data/doc/files/app/models/party_rb.html +1 -1
  386. data/doc/files/app/models/period_rb.html +1 -1
  387. data/doc/files/app/models/search_result_rb.html +1 -1
  388. data/doc/files/app/models/task_file_rb.html +108 -0
  389. data/doc/files/app/models/task_rb.html +2 -2
  390. data/doc/files/app/models/user_notify_rb.html +1 -1
  391. data/doc/files/app/models/user_rb.html +1 -1
  392. data/doc/files/app/models/work_rb.html +1 -1
  393. data/doc/fr_class_index.html +3 -0
  394. data/doc/fr_file_index.html +6 -0
  395. data/doc/fr_method_index.html +295 -289
  396. data/doc/index.html +2 -2
  397. data/lang/en.yaml +2 -0
  398. data/lang/no.yaml +2 -0
  399. data/post-clean.rb +12 -0
  400. data/post-install.rb +51 -0
  401. data/post-setup.rb +254 -0
  402. data/public/500.html +2 -1
  403. data/public/images/text-x-generic.png +0 -0
  404. data/public/stylesheets/backlog.css +15 -2
  405. data/public/stylesheets/mwrt002.css +1 -1
  406. data/public/stylesheets/user.css +1 -1
  407. data/test/fixtures/task_files.yml +13 -0
  408. data/test/functional/backlogs_controller_test.rb +2 -1
  409. data/test/functional/estimates_controller_test.rb +2 -0
  410. data/test/functional/groups_controller_test.rb +1 -1
  411. data/test/functional/periods_controller_test.rb +1 -1
  412. data/test/functional/task_files_controller_test.rb +29 -0
  413. data/test/functional/tasks_controller_test.rb +2 -2
  414. data/test/functional/user_controller_test.rb +1 -1
  415. data/test/functional/works_controller_test.rb +1 -1
  416. data/test/unit/estimate_test.rb +1 -1
  417. data/test/unit/period_test.rb +1 -1
  418. data/test/unit/task_file_test.rb +10 -0
  419. data/test/unit/task_test.rb +1 -1
  420. metadata +115 -88
  421. data/doc/classes/ActiveRecord/Base.src/M000430.html +0 -29
  422. data/doc/classes/ActiveRecord/Base.src/M000431.html +0 -27
  423. data/doc/classes/ApplicationHelper.src/M000434.html +0 -21
  424. data/doc/classes/ApplicationHelper.src/M000435.html +0 -18
  425. data/doc/classes/ApplicationHelper.src/M000436.html +0 -26
  426. data/doc/classes/EstimatesController.src/M000392.html +0 -22
  427. data/doc/classes/EstimatesController.src/M000393.html +0 -22
  428. data/doc/classes/PeriodsController.src/M000366.html +0 -25
  429. data/doc/classes/PeriodsController.src/M000367.html +0 -33
  430. data/doc/classes/PeriodsController.src/M000368.html +0 -19
  431. data/doc/classes/PeriodsController.src/M000369.html +0 -29
  432. data/doc/classes/PeriodsController.src/M000370.html +0 -25
  433. data/doc/classes/Task.src/M000241.html +0 -23
  434. data/doc/classes/Task.src/M000242.html +0 -18
  435. data/doc/classes/Task.src/M000310.html +0 -24
  436. data/doc/classes/Work.src/M000347.html +0 -18
  437. data/doc/dot/f_44.png +0 -0
  438. data/doc/dot/f_45.png +0 -0
  439. data/doc/dot/f_64.png +0 -0
  440. data/doc/dot/f_65.png +0 -0
  441. data/doc/dot/f_66.png +0 -0
  442. data/doc/dot/f_67.png +0 -0
  443. data/vendor/plugins/activerecord_foreign_key_extensions/init.rb +0 -2
  444. data/vendor/plugins/activerecord_foreign_key_extensions/lib/active_record_extensions.rb +0 -215
@@ -1,29 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>find_with_default_eager_loading (ActiveRecord::Base)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/class_table_inheritance.rb, line 7</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">find_with_default_eager_loading</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">params</span>)
15
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">default_eager_loading</span>
16
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">params</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
17
- <span class="ruby-identifier">opts</span> = <span class="ruby-identifier">params</span>.<span class="ruby-identifier">last</span>
18
- <span class="ruby-keyword kw">else</span>
19
- <span class="ruby-identifier">opts</span> = {}
20
- <span class="ruby-identifier">params</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">opts</span>)
21
- <span class="ruby-keyword kw">end</span>
22
- <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:include</span>] <span class="ruby-operator">||=</span> []
23
- <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:include</span>] = [<span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:include</span>]] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:include</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
24
- <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:include</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">default_eager_loading</span>
25
- <span class="ruby-keyword kw">end</span>
26
- <span class="ruby-identifier">find_without_default_eager_loading</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">params</span>)
27
- <span class="ruby-keyword kw">end</span></pre>
28
- </body>
29
- </html>
@@ -1,27 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>class_table_inheritance (ActiveRecord::Base)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/class_table_inheritance.rb, line 24</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">class_table_inheritance</span>(<span class="ruby-identifier">options</span> = {})
15
- <span class="ruby-identifier">table_name</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:subclass_table</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">demodulize</span>.<span class="ruby-identifier">tableize</span>
16
- <span class="ruby-identifier">primary_key_name</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:subclass_foreign_key</span>] <span class="ruby-operator">||</span> <span class="ruby-node">&quot;#{superclass.name.demodulize.underscore}_id&quot;</span>
17
-
18
- <span class="ruby-identifier">has_extra_columns_from</span>(
19
- <span class="ruby-identifier">:table</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">table_name</span>, <span class="ruby-identifier">:foreign_key</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">primary_key_name</span>,
20
- <span class="ruby-identifier">:proxy_class_name</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'ExtraColumns'</span>,
21
- <span class="ruby-identifier">:proxy_class_belongs_to</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">name</span>,
22
- <span class="ruby-identifier">:delegate_new_associations</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>,
23
- <span class="ruby-identifier">:save_before_superclass_callbacks</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>
24
- )
25
- <span class="ruby-keyword kw">end</span></pre>
26
- </body>
27
- </html>
@@ -1,21 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>image_button_to (ApplicationHelper)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/helpers/application_helper.rb, line 6</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">image_button_to</span>(<span class="ruby-identifier">image_source</span>, <span class="ruby-identifier">title</span>, <span class="ruby-identifier">options</span>)
15
- <span class="ruby-identifier">html</span> = <span class="ruby-value str">''</span>
16
- <span class="ruby-identifier">html</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">image_submit_tag</span> <span class="ruby-identifier">image_source</span>, <span class="ruby-identifier">:class</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'image-submit'</span>, <span class="ruby-identifier">:alt</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">title</span>, <span class="ruby-identifier">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">title</span>,
17
- <span class="ruby-identifier">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{title}_#{options[:id]}&quot;</span>, <span class="ruby-identifier">:name</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">title</span>,
18
- <span class="ruby-identifier">:onclick</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;form.action='#{url_for(options)}'&quot;</span>
19
- <span class="ruby-keyword kw">end</span></pre>
20
- </body>
21
- </html>
@@ -1,18 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>detour_to (ApplicationHelper)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/helpers/application_helper.rb, line 13</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">detour_to</span>(<span class="ruby-identifier">title</span>, <span class="ruby-identifier">options</span>, <span class="ruby-identifier">html_options</span> = <span class="ruby-keyword kw">nil</span>)
15
- <span class="ruby-identifier">link_to</span> <span class="ruby-identifier">title</span>, <span class="ruby-identifier">with_detour</span>(<span class="ruby-identifier">options</span>), <span class="ruby-identifier">html_options</span>
16
- <span class="ruby-keyword kw">end</span></pre>
17
- </body>
18
- </html>
@@ -1,26 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>with_detour (ApplicationHelper)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/helpers/application_helper.rb, line 17</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">with_detour</span>(<span class="ruby-identifier">options</span>)
15
- <span class="ruby-identifier">detour_options</span> = {<span class="ruby-identifier">:detour</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>.<span class="ruby-identifier">reject</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">:detour</span>, <span class="ruby-identifier">:return_from_detour</span>].<span class="ruby-identifier">include?</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_sym</span>}}.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">options</span>)
16
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:layout</span>]<span class="ruby-operator">==</span> <span class="ruby-keyword kw">false</span>
17
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:action</span>] <span class="ruby-operator">!~</span> <span class="ruby-regexp re">/_no_layout$/</span>
18
- <span class="ruby-identifier">detour_options</span>[<span class="ruby-identifier">:detour</span>].<span class="ruby-identifier">update</span>({<span class="ruby-identifier">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:action</span>] <span class="ruby-operator">+</span> <span class="ruby-value str">'_no_layout'</span>})
19
- <span class="ruby-keyword kw">end</span>
20
- <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:action</span>] <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/_no_layout$/</span>
21
- <span class="ruby-identifier">detour_options</span>[<span class="ruby-identifier">:detour</span>].<span class="ruby-identifier">update</span>({<span class="ruby-identifier">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:action</span>][<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">-11</span>]})
22
- <span class="ruby-keyword kw">end</span>
23
- <span class="ruby-identifier">detour_options</span>
24
- <span class="ruby-keyword kw">end</span></pre>
25
- </body>
26
- </html>
@@ -1,22 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>create (EstimatesController)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/controllers/estimates_controller.rb, line 4</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create</span>
15
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:id</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:estimate</span>]
16
- <span class="ruby-ivar">@task</span> = <span class="ruby-constant">Task</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-identifier">:id</span>])
17
- <span class="ruby-ivar">@task</span>.<span class="ruby-identifier">estimate</span>(<span class="ruby-identifier">params</span>[<span class="ruby-identifier">:estimate</span>][<span class="ruby-identifier">:todo</span>])
18
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-identifier">:controller</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'periods'</span>, <span class="ruby-identifier">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:show</span>, <span class="ruby-identifier">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@task</span>.<span class="ruby-identifier">period</span>, <span class="ruby-identifier">:task_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@task</span>.<span class="ruby-identifier">id</span>
19
- <span class="ruby-keyword kw">end</span>
20
- <span class="ruby-keyword kw">end</span></pre>
21
- </body>
22
- </html>
@@ -1,22 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>create (EstimatesController)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/controllers/estimates_controller.rb, line 4</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create</span>
15
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:id</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:estimate</span>]
16
- <span class="ruby-ivar">@task</span> = <span class="ruby-constant">Task</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-identifier">:id</span>])
17
- <span class="ruby-ivar">@task</span>.<span class="ruby-identifier">estimate</span>(<span class="ruby-identifier">params</span>[<span class="ruby-identifier">:estimate</span>][<span class="ruby-identifier">:todo</span>])
18
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-identifier">:controller</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'periods'</span>, <span class="ruby-identifier">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:show</span>, <span class="ruby-identifier">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@task</span>.<span class="ruby-identifier">period</span>, <span class="ruby-identifier">:task_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@task</span>.<span class="ruby-identifier">id</span>
19
- <span class="ruby-keyword kw">end</span>
20
- <span class="ruby-keyword kw">end</span></pre>
21
- </body>
22
- </html>
@@ -1,25 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>index (PeriodsController)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/controllers/periods_controller.rb, line 5</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">index</span>
15
- <span class="ruby-identifier">active_periods</span> = <span class="ruby-constant">Period</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">:all</span>).<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">period</span><span class="ruby-operator">|</span> <span class="ruby-identifier">period</span>.<span class="ruby-identifier">active?</span>(<span class="ruby-keyword kw">true</span>)}
16
- <span class="ruby-identifier">my_active_periods</span> = <span class="ruby-identifier">active_periods</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">period</span><span class="ruby-operator">|</span> <span class="ruby-identifier">period</span>.<span class="ruby-identifier">party</span>.<span class="ruby-identifier">includes?</span>(<span class="ruby-identifier">current_user</span>)}
17
- <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">my_active_periods</span>.<span class="ruby-identifier">empty?</span>
18
- <span class="ruby-identifier">most_urgent_period</span> = <span class="ruby-identifier">my_active_periods</span>.<span class="ruby-identifier">sort_by</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">required_speed</span>}.<span class="ruby-identifier">last</span>
19
- <span class="ruby-keyword kw">else</span>
20
- <span class="ruby-identifier">most_urgent_period</span> = <span class="ruby-identifier">active_periods</span>.<span class="ruby-identifier">sort_by</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">required_speed</span>}.<span class="ruby-identifier">last</span>
21
- <span class="ruby-keyword kw">end</span>
22
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-identifier">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'show'</span>, <span class="ruby-identifier">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">most_urgent_period</span>
23
- <span class="ruby-keyword kw">end</span></pre>
24
- </body>
25
- </html>
@@ -1,33 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>show (PeriodsController)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/controllers/periods_controller.rb, line 19</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">show</span>
15
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:task_id</span>]
16
- <span class="ruby-ivar">@selected_task</span> = <span class="ruby-constant">Task</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-identifier">:task_id</span>])
17
- <span class="ruby-keyword kw">end</span>
18
- <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@selected_task</span>
19
- <span class="ruby-ivar">@period</span> = <span class="ruby-ivar">@selected_task</span>.<span class="ruby-identifier">period</span>
20
- <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:id</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@period</span> = <span class="ruby-constant">Period</span>.<span class="ruby-identifier">find_by_id</span>(<span class="ruby-identifier">params</span>[<span class="ruby-identifier">:id</span>])
21
- <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@period</span> = <span class="ruby-constant">Period</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">:first</span>)
22
- <span class="ruby-keyword kw">else</span>
23
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-identifier">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:new</span>
24
- <span class="ruby-keyword kw">return</span>
25
- <span class="ruby-keyword kw">end</span>
26
- <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@selected_task</span>.<span class="ruby-identifier">nil?</span>
27
- <span class="ruby-ivar">@selected_task</span> = <span class="ruby-constant">Task</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">:first</span>, <span class="ruby-identifier">:conditions</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;position = 1 AND period_id = #{@period.id}&quot;</span>)
28
- <span class="ruby-keyword kw">end</span>
29
- <span class="ruby-ivar">@tasks</span> = <span class="ruby-ivar">@period</span>.<span class="ruby-identifier">open_tasks</span>
30
- <span class="ruby-ivar">@completed_tasks</span> = <span class="ruby-ivar">@period</span>.<span class="ruby-identifier">completed_tasks</span>.<span class="ruby-identifier">reverse</span>
31
- <span class="ruby-keyword kw">end</span></pre>
32
- </body>
33
- </html>
@@ -1,19 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>show_no_layout (PeriodsController)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/controllers/periods_controller.rb, line 38</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">show_no_layout</span>
15
- <span class="ruby-identifier">show</span>
16
- <span class="ruby-identifier">render</span> <span class="ruby-identifier">:partial</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'show_active'</span>, <span class="ruby-identifier">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">:locals</span> =<span class="ruby-operator">&gt;</span> {<span class="ruby-identifier">:i</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>}
17
- <span class="ruby-keyword kw">end</span></pre>
18
- </body>
19
- </html>
@@ -1,29 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>new (PeriodsController)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/controllers/periods_controller.rb, line 43</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">new</span>
15
- <span class="ruby-ivar">@period</span> = <span class="ruby-constant">Period</span>.<span class="ruby-identifier">new</span>
16
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:period</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:period</span>][<span class="ruby-identifier">:party_id</span>]
17
- <span class="ruby-ivar">@period</span>.<span class="ruby-identifier">party_id</span> = <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:period</span>][<span class="ruby-identifier">:party_id</span>]
18
- <span class="ruby-identifier">previous</span> = <span class="ruby-ivar">@period</span>.<span class="ruby-identifier">party</span>.<span class="ruby-identifier">periods</span>.<span class="ruby-identifier">last</span>
19
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">previous</span>
20
- <span class="ruby-ivar">@period</span>.<span class="ruby-identifier">start_on</span> = <span class="ruby-identifier">previous</span>.<span class="ruby-identifier">end_on</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
21
- <span class="ruby-ivar">@period</span>.<span class="ruby-identifier">end_on</span> = <span class="ruby-identifier">previous</span>.<span class="ruby-identifier">end_on</span> <span class="ruby-operator">+</span> (<span class="ruby-value">1</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">previous</span>.<span class="ruby-identifier">end_on</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">previous</span>.<span class="ruby-identifier">start_on</span>))
22
- <span class="ruby-keyword kw">else</span>
23
- <span class="ruby-ivar">@period</span>.<span class="ruby-identifier">start_on</span> = <span class="ruby-constant">Date</span>.<span class="ruby-identifier">today</span>
24
- <span class="ruby-keyword kw">end</span>
25
- <span class="ruby-keyword kw">end</span>
26
- <span class="ruby-ivar">@parties</span> = <span class="ruby-constant">Party</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">:all</span>)
27
- <span class="ruby-keyword kw">end</span></pre>
28
- </body>
29
- </html>
@@ -1,25 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>create (PeriodsController)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/controllers/periods_controller.rb, line 58</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create</span>
15
- <span class="ruby-ivar">@period</span> = <span class="ruby-constant">Period</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">params</span>[<span class="ruby-identifier">:period</span>])
16
- <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@period</span>.<span class="ruby-identifier">save</span>
17
- <span class="ruby-ivar">@period</span>.<span class="ruby-identifier">reload</span>
18
- <span class="ruby-identifier">flash</span>[<span class="ruby-identifier">:notice</span>] = <span class="ruby-value str">'Period was successfully created.'</span>
19
- <span class="ruby-identifier">back_or_redirect_to</span> <span class="ruby-identifier">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'show'</span>, <span class="ruby-identifier">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@period</span>.<span class="ruby-identifier">higher_item</span> <span class="ruby-value">? </span><span class="ruby-ivar">@period</span>.<span class="ruby-identifier">higher_item</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@period</span>
20
- <span class="ruby-keyword kw">else</span>
21
- <span class="ruby-identifier">render</span> <span class="ruby-identifier">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'new'</span>
22
- <span class="ruby-keyword kw">end</span>
23
- <span class="ruby-keyword kw">end</span></pre>
24
- </body>
25
- </html>
@@ -1,23 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>validate (Task)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/models/task.rb, line 36</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">validate</span>
15
- <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parent_id</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">period_id</span> <span class="ruby-operator">||</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">backlog_id</span>)
16
- <span class="ruby-identifier">errors</span>.<span class="ruby-identifier">add</span> <span class="ruby-identifier">:parent_id</span>, <span class="ruby-value str">&quot;A subtask may not have neither period nor backlog set.&quot;</span>
17
- <span class="ruby-keyword kw">end</span>
18
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">new_record?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">period</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">period</span>.<span class="ruby-identifier">passed?</span>
19
- <span class="ruby-identifier">errors</span>.<span class="ruby-identifier">add</span> <span class="ruby-identifier">:period_id</span>, <span class="ruby-value str">&quot;You may not add a task to a past period.&quot;</span>
20
- <span class="ruby-keyword kw">end</span>
21
- <span class="ruby-keyword kw">end</span></pre>
22
- </body>
23
- </html>
@@ -1,18 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>find_open (Task)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/models/task.rb, line 45</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find_open</span>
15
- <span class="ruby-identifier">find</span>(<span class="ruby-identifier">:all</span>, <span class="ruby-identifier">:conditions</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'finished_at IS NULL'</span>, <span class="ruby-identifier">:order</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'description'</span>)
16
- <span class="ruby-keyword kw">end</span></pre>
17
- </body>
18
- </html>
@@ -1,24 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>depth (Task)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/models/task.rb, line 270</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">depth</span>
15
- <span class="ruby-identifier">root_task</span> = <span class="ruby-keyword kw">self</span>
16
- <span class="ruby-identifier">depth</span> = <span class="ruby-value">0</span>
17
- <span class="ruby-keyword kw">while</span> <span class="ruby-operator">!</span><span class="ruby-identifier">root_task</span>.<span class="ruby-identifier">root?</span>
18
- <span class="ruby-identifier">root_task</span> = <span class="ruby-identifier">root_task</span>.<span class="ruby-identifier">parent</span>
19
- <span class="ruby-identifier">depth</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
20
- <span class="ruby-keyword kw">end</span>
21
- <span class="ruby-identifier">depth</span>
22
- <span class="ruby-keyword kw">end</span></pre>
23
- </body>
24
- </html>
@@ -1,18 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>track_times? (Work)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File app/models/work.rb, line 14</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">track_times?</span>
15
- <span class="ruby-identifier">task</span>.<span class="ruby-identifier">backlog</span>.<span class="ruby-identifier">track_times?</span>
16
- <span class="ruby-keyword kw">end</span></pre>
17
- </body>
18
- </html>
data/doc/dot/f_44.png DELETED
Binary file
data/doc/dot/f_45.png DELETED
Binary file
data/doc/dot/f_64.png DELETED
Binary file
data/doc/dot/f_65.png DELETED
Binary file
data/doc/dot/f_66.png DELETED
Binary file
data/doc/dot/f_67.png DELETED
Binary file
@@ -1,2 +0,0 @@
1
- require 'active_record/schema_dumper'
2
- require 'active_record_extensions'
@@ -1,215 +0,0 @@
1
- # Postgres and MySQL by bubbleware.com
2
- # Oracle and cleanups by atmos.org
3
- require 'digest/sha1'
4
-
5
- module ActiveRecord
6
- class SchemaDumper
7
- private
8
- alias old_tables tables
9
- def tables(stream)
10
- old_tables(stream)
11
- @connection.tables.sort.each do |tbl|
12
- next if tbl == "schema_info"
13
- foreign_key_constraints(tbl, stream)
14
- end
15
- end
16
-
17
- def foreign_key_constraints(table, stream)
18
- keys = @connection.foreign_key_constraints(table)
19
- keys.each do |key|
20
- stream.print " add_foreign_key_constraint #{table.inspect}, #{key.foreign_key.inspect}, #{key.reference_table.inspect}, #{key.reference_column.inspect}, :name => #{key.name.inspect}, :on_update => #{key.on_update.inspect}, :on_delete => #{key.on_delete.inspect}"
21
- stream.puts
22
- end
23
- stream.puts unless keys.empty?
24
- end
25
- end
26
-
27
- module ConnectionAdapters
28
- class ForeignKeyConstraintDefinition < Struct.new(:name, :foreign_key, :reference_table, :reference_column, :on_update, :on_delete) #:nodoc:
29
- end
30
-
31
- class AbstractAdapter
32
- protected
33
- def symbolize_foreign_key_constraint_action(constraint_action)
34
- constraint_action.downcase.gsub(/\s/, '_').to_sym
35
- end
36
- end
37
-
38
- class PostgreSQLAdapter < AbstractAdapter
39
- def foreign_key_constraints(table, name = nil)
40
- sql = "SELECT conname, pg_catalog.pg_get_constraintdef(oid) AS consrc FROM pg_catalog.pg_constraint WHERE contype='f' "
41
- sql += "AND conrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='#{table}')"
42
-
43
- query(sql,name).collect do |row|
44
- if row[1] =~ /FOREIGN KEY \((.+)\) REFERENCES (.+)\((.+)\)(?: ON UPDATE (\w+))?(?: ON DELETE (\w+))?/
45
- ForeignKeyConstraintDefinition.new(row[0], $1, $2, $3,
46
- ($4 ? symbolize_foreign_key_constraint_action($4) : nil),
47
- ($5 ? symbolize_foreign_key_constraint_action($5) : nil))
48
- end
49
- end
50
- end
51
-
52
- def remove_foreign_key_constraint(table_name, constraint_name)
53
- execute "ALTER TABLE #{table_name} DROP CONSTRAINT #{constraint_name}"
54
- end
55
-
56
- alias old_default_value default_value
57
- def default_value(value)
58
- return ":now" if value =~ /^now\(\)|^\('now'::text\)::(date|timestamp)/i
59
- return old_default_value(value)
60
- end
61
- end
62
-
63
- class OracleAdapter < AbstractAdapter
64
- def foreign_key_constraints(table, name = nil)
65
- uc = 'user_constraints'
66
- ucc = 'user_cons_columns'
67
-
68
- sql = %Q{SELECT
69
- c.table_name, cc.column_name,
70
- r.table_name as rtable_name, rc.column_name as rcolumn_name,
71
- c.delete_rule
72
- from
73
- #{uc} c, #{uc} r, #{ucc} cc, #{ucc} rc
74
- where
75
- c.constraint_type = 'R' and
76
- c.table_name = UPPER('#{table}') and
77
- c.r_constraint_name = r.constraint_name and
78
- c.constraint_name = cc.constraint_name and
79
- r.constraint_name = rc.constraint_name and
80
- cc.position = rc.position}.gsub(/(\n|^\W+)/, ' ')
81
-
82
- select(sql).collect do |row|
83
- ForeignKeyConstraintDefinition.new('', row['column_name'].downcase,
84
- row['rtable_name'].downcase, row['rcolumn_name'].downcase,
85
- nil, symbolize_foreign_key_constraint_action(row['delete_rule']))
86
- end
87
- end
88
- def remove_foreign_key_constraint(table_name, constraint_name)
89
- constraint = 'c'+Digest::SHA1.hexdigest(constraint_name)[0,29]
90
- execute "ALTER TABLE #{table_name} DROP FOREIGN KEY #{constraint}"
91
- end
92
- end
93
-
94
- class MysqlAdapter < AbstractAdapter
95
- def foreign_key_constraints(table, name = nil)
96
- constraints = []
97
- execute("SHOW CREATE TABLE #{table}", name).each do |row|
98
- row[1].each do |create_line|
99
- if create_line.strip =~ /CONSTRAINT `([^`]+)` FOREIGN KEY \(`([^`]+)`\) REFERENCES `([^`]+)` \(`([^`]+)`\)([^,]*)/
100
- constraint = ForeignKeyConstraintDefinition.new(Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3), Regexp.last_match(4), nil, nil)
101
-
102
- constraint_params = {}
103
-
104
- unless Regexp.last_match(5).nil?
105
- Regexp.last_match(5).strip.split('ON ').each do |param|
106
- constraint_params[Regexp.last_match(1).upcase] = Regexp.last_match(2).strip.upcase if param.strip =~ /([^ ]+) (.+)/
107
- end
108
- end
109
-
110
- constraint.on_update = symbolize_foreign_key_constraint_action(constraint_params['UPDATE']) if constraint_params.include? 'UPDATE'
111
- constraint.on_delete = symbolize_foreign_key_constraint_action(constraint_params['DELETE']) if constraint_params.include? 'DELETE'
112
-
113
- constraints << constraint
114
- end
115
- end
116
- end
117
-
118
- constraints
119
- end
120
-
121
- def remove_foreign_key_constraint(table_name, constraint_name)
122
- execute "ALTER TABLE #{table_name} DROP FOREIGN KEY #{constraint_name}"
123
- end
124
-
125
- alias :rename_column_without_foreign_keys :rename_column
126
- def rename_column(table_name, old_column_name, new_column_name)
127
- f_keys = tables.map {|t| foreign_keys(t)}.flatten
128
- in_keys = f_keys.select {|f_key| f_key.references_table_name == table_name.to_s}
129
- out_keys = f_keys.select {|f_key| f_key.table_name == table_name.to_s}
130
- (in_keys + out_keys).each do |f_key|
131
- remove_foreign_key(f_key.table_name, f_key.name)
132
- end
133
- rename_column_without_foreign_keys(table_name, old_column_name, new_column_name)
134
- in_keys.each do |f_key|
135
- add_foreign_key(f_key.table_name,
136
- f_key.column_names,
137
- f_key.references_table_name,
138
- f_key.references_column_names.map {|col| col == old_column_name.to_s ? new_column_name.to_s : col},
139
- {:on_update => f_key.on_update, :on_delete => f_key.on_delete})
140
- end
141
- out_keys.each do |f_key|
142
- add_foreign_key(f_key.table_name,
143
- f_key.column_names.map {|col| col == old_column_name.to_s ? new_column_name.to_s : col},
144
- f_key.references_table_name,
145
- f_key.references_column_names,
146
- {:on_update => f_key.on_update, :on_delete => f_key.on_delete})
147
- end
148
- end
149
-
150
- alias :remove_column_without_keys :remove_column
151
- def remove_column(table_name, column_name)
152
- indexes = indexes(table_name).select {|i| i.columns.include? column_name.to_s}
153
- indexes.each do |i|
154
- remove_index(i.table, :name => i.name)
155
- end
156
- remove_column_without_keys(table_name, column_name)
157
- end
158
-
159
- end
160
- class Column
161
- private
162
- alias old_extract_limit extract_limit
163
- def extract_limit(sql_type)
164
- return 255 if sql_type =~ /enum/i
165
- old_extract_limit(sql_type)
166
- end
167
-
168
- alias old_simplified_type simplified_type
169
- def simplified_type(field_type)
170
- return :string if field_type =~ /enum/i
171
- old_simplified_type(field_type)
172
- end
173
- end
174
-
175
- module SchemaStatements
176
- # Adds a new foreign key constraint to the table.
177
- #
178
- # The constrinat will be named after the table and the reference table and column
179
- # unless you pass +:name+ as an option.
180
- #
181
- # options: :name, :on_update, :on_delete
182
- def foreign_key_constraint_statement(condition, fkc_sym)
183
- action = { :restrict => 'RESTRICT', :cascade => 'CASCADE', :set_null => 'SET NULL' }[fkc_sym]
184
- action ? ' ON ' << condition << ' ' << action : ''
185
- end
186
-
187
- def add_foreign_key_constraint(table_name, foreign_key, reference_table, reference_column, options = {})
188
- constraint_name = options[:name] || "#{table_name}_ibfk_#{foreign_key}"
189
-
190
- # oracle chokes on constraints longer than 30 chars
191
- if adapter_name =~ /^(oci|oracle)$/i
192
- constraint_name = 'c'+Digest::SHA1.hexdigest(constraint_name)[0,29]
193
- end
194
-
195
- sql = "ALTER TABLE #{table_name} ADD CONSTRAINT #{constraint_name} FOREIGN KEY (#{foreign_key}) REFERENCES #{reference_table} (#{reference_column})"
196
-
197
- sql << foreign_key_constraint_statement('UPDATE', options[:on_update])
198
- sql << foreign_key_constraint_statement('DELETE', options[:on_delete])
199
-
200
- execute sql
201
- end
202
-
203
- # options: Must enter one of the two options:
204
- # 1) :name => the name of the foreign key constraint
205
- # 2) :foreign_key => the name of the column for which the foreign key was created
206
- # (only if the default constraint_name was used)
207
- def remove_foreign_key_constraint(table_name, options={})
208
- constraint_name = options[:name] || "#{table_name}_ibfk_#{foreign_key}"
209
- raise ArgumentError, "You must specify the constraint name" if constraint_name.blank?
210
-
211
- @connection.remove_foreign_key_constraint(table_name, constraint_name)
212
- end
213
- end
214
- end
215
- end