backlog 0.37.2 → 0.41.4

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 (568) hide show
  1. checksums.yaml +7 -0
  2. data/History.txt +128 -0
  3. data/README.txt +4 -2
  4. data/bin/backlog +1 -1
  5. data/lib/array_helper.rb +4 -4
  6. data/{vendor/plugins → lib}/backlog_jira/README +0 -0
  7. data/{vendor/plugins → lib}/backlog_jira/Rakefile +0 -0
  8. data/{vendor/plugins → lib}/backlog_jira/generators/backlog_jira/backlog_jira_generator.rb +0 -0
  9. data/{vendor/plugins → lib}/backlog_jira/generators/backlog_jira/templates/migration.rb +0 -0
  10. data/{vendor/plugins → lib}/backlog_jira/generators/history_model/history_model_generator.rb +0 -0
  11. data/{vendor/plugins → lib}/backlog_jira/generators/history_model/templates/fixtures.yml +0 -0
  12. data/{vendor/plugins → lib}/backlog_jira/generators/history_model/templates/functional_test.rb +0 -0
  13. data/{vendor/plugins → lib}/backlog_jira/generators/history_model/templates/model.rb +0 -0
  14. data/{vendor/plugins → lib}/backlog_jira/generators/history_model/templates/unit_test.rb +0 -0
  15. data/lib/backlog_jira/init.rb +66 -0
  16. data/{vendor/plugins → lib}/backlog_jira/install.rb +0 -0
  17. data/{vendor/plugins → lib}/backlog_jira/lib/backlog_jira.rb +0 -0
  18. data/{vendor/plugins → lib}/backlog_jira/lib/tasks/backlog_jira_tasks.rake +0 -0
  19. data/{vendor/plugins → lib}/backlog_jira/test/backlog_jira_test.rb +0 -0
  20. data/{vendor/plugins → lib}/backlog_jira/uninstall.rb +0 -0
  21. data/lib/big_decimal_yaml_fix.rb +16 -25
  22. data/lib/tasks/backup.rake +18 -18
  23. data/lib/time_extras.rb +6 -6
  24. data/lib/user_system.rb +41 -38
  25. data/lib/version_from_history.rb +2 -2
  26. metadata +196 -749
  27. data/Capfile +0 -2
  28. data/Gemfile +0 -34
  29. data/Gemfile.lock +0 -139
  30. data/MODIFICATIONS.txt +0 -13
  31. data/Manifest.txt +0 -0
  32. data/README_LOGIN_SUGAR +0 -194
  33. data/Rakefile +0 -73
  34. data/Rakefile~ +0 -73
  35. data/Screenshot.png +0 -0
  36. data/app/controllers/absences_controller.rb +0 -67
  37. data/app/controllers/application_controller.rb +0 -185
  38. data/app/controllers/application_controller.rb.rails2 +0 -186
  39. data/app/controllers/customers_controller.rb +0 -51
  40. data/app/controllers/dashboard_controller.rb +0 -17
  41. data/app/controllers/estimates_controller.rb +0 -49
  42. data/app/controllers/groups_controller.rb +0 -65
  43. data/app/controllers/parties_controller.rb +0 -33
  44. data/app/controllers/periods_controller.rb +0 -242
  45. data/app/controllers/projects_controller.rb +0 -185
  46. data/app/controllers/public_holidays_controller.rb +0 -70
  47. data/app/controllers/search_controller.rb +0 -15
  48. data/app/controllers/task_files_controller.rb +0 -19
  49. data/app/controllers/tasks_controller.rb +0 -305
  50. data/app/controllers/user_controller.rb +0 -251
  51. data/app/controllers/welcome_controller.rb +0 -29
  52. data/app/controllers/work_locks_controller.rb +0 -88
  53. data/app/controllers/works_controller.rb +0 -383
  54. data/app/helpers/absences_helper.rb +0 -2
  55. data/app/helpers/application_helper.rb +0 -119
  56. data/app/helpers/application_helper.rb.rails2 +0 -118
  57. data/app/helpers/customers_helper.rb +0 -2
  58. data/app/helpers/dashboard_helper.rb +0 -2
  59. data/app/helpers/estimates_helper.rb +0 -2
  60. data/app/helpers/groups_helper.rb +0 -2
  61. data/app/helpers/parties_helper.rb +0 -2
  62. data/app/helpers/periods_helper.rb +0 -57
  63. data/app/helpers/projects_helper.rb +0 -74
  64. data/app/helpers/public_holidays_helper.rb +0 -2
  65. data/app/helpers/search_helper.rb +0 -2
  66. data/app/helpers/task_files_helper.rb +0 -2
  67. data/app/helpers/tasks_helper.rb +0 -2
  68. data/app/helpers/user_helper.rb +0 -53
  69. data/app/helpers/welcome_helper.rb +0 -2
  70. data/app/helpers/work_locks_helper.rb +0 -2
  71. data/app/helpers/works_helper.rb +0 -5
  72. data/app/mailers/user_notify.rb +0 -76
  73. data/app/models/absence.rb +0 -27
  74. data/app/models/chart.rb +0 -5
  75. data/app/models/clock.rb +0 -14
  76. data/app/models/configuration.rb +0 -2
  77. data/app/models/customer.rb +0 -2
  78. data/app/models/estimate.rb +0 -17
  79. data/app/models/group.rb +0 -16
  80. data/app/models/party.rb +0 -27
  81. data/app/models/period.rb +0 -251
  82. data/app/models/project.rb +0 -49
  83. data/app/models/public_holiday.rb +0 -13
  84. data/app/models/report_filter.rb +0 -29
  85. data/app/models/search_result.rb +0 -8
  86. data/app/models/sidebar.rb +0 -41
  87. data/app/models/task.rb +0 -425
  88. data/app/models/task_file.rb +0 -7
  89. data/app/models/task_notify.rb +0 -27
  90. data/app/models/user.rb +0 -146
  91. data/app/models/work.rb +0 -191
  92. data/app/models/work_lock.rb +0 -11
  93. data/app/models/work_lock_nagger.rb +0 -60
  94. data/app/models/work_lock_notify.rb +0 -43
  95. data/app/models/works_report_filter.rb +0 -27
  96. data/app/views/absences/_form.rhtml +0 -10
  97. data/app/views/absences/edit.rhtml +0 -9
  98. data/app/views/absences/list.rhtml +0 -25
  99. data/app/views/absences/new.rhtml +0 -8
  100. data/app/views/absences/show.rhtml +0 -8
  101. data/app/views/customers/_form.rhtml +0 -7
  102. data/app/views/customers/_name_list.rhtml +0 -5
  103. data/app/views/customers/edit.rhtml +0 -9
  104. data/app/views/customers/list.rhtml +0 -28
  105. data/app/views/customers/new.rhtml +0 -8
  106. data/app/views/customers/show.rhtml +0 -8
  107. data/app/views/dashboard/show.rhtml +0 -24
  108. data/app/views/display_notice.rjs +0 -1
  109. data/app/views/groups/_form.rhtml +0 -7
  110. data/app/views/groups/edit.rhtml +0 -57
  111. data/app/views/groups/list.rhtml +0 -26
  112. data/app/views/groups/new.rhtml +0 -7
  113. data/app/views/groups/set_member.rjs +0 -1
  114. data/app/views/layouts/_headers.rhtml +0 -24
  115. data/app/views/layouts/_left_top.rhtml +0 -33
  116. data/app/views/layouts/_notice.rhtml +0 -12
  117. data/app/views/layouts/_shortcuts.rhtml +0 -22
  118. data/app/views/layouts/_shortcuts_js.rhtml +0 -19
  119. data/app/views/layouts/mwrt002.html.erb +0 -44
  120. data/app/views/layouts/wide.rhtml +0 -23
  121. data/app/views/periods/_burn_down_chart.rhtml +0 -9
  122. data/app/views/periods/_form.rhtml +0 -74
  123. data/app/views/periods/_link.rhtml +0 -3
  124. data/app/views/periods/_show_active.rhtml +0 -61
  125. data/app/views/periods/_sidebar_block.rhtml +0 -11
  126. data/app/views/periods/_title.rhtml +0 -18
  127. data/app/views/periods/edit.rhtml +0 -10
  128. data/app/views/periods/finish_task.rjs +0 -4
  129. data/app/views/periods/move_task_to_period.rjs +0 -4
  130. data/app/views/periods/new.rhtml +0 -9
  131. data/app/views/periods/order.rjs +0 -0
  132. data/app/views/periods/reopen_task.rjs +0 -6
  133. data/app/views/periods/show.rhtml +0 -56
  134. data/app/views/projects/_buttons.rhtml +0 -4
  135. data/app/views/projects/_form.rhtml +0 -44
  136. data/app/views/projects/_name_list.rhtml +0 -5
  137. data/app/views/projects/edit.rhtml +0 -14
  138. data/app/views/projects/finish_task.rjs +0 -3
  139. data/app/views/projects/list.rhtml +0 -16
  140. data/app/views/projects/move_task_to_period.rjs +0 -3
  141. data/app/views/projects/new.rhtml +0 -11
  142. data/app/views/projects/reopen_task.rjs +0 -3
  143. data/app/views/projects/show.rhtml +0 -39
  144. data/app/views/public_holidays/_form.rhtml +0 -7
  145. data/app/views/public_holidays/edit.rhtml +0 -9
  146. data/app/views/public_holidays/list.rhtml +0 -25
  147. data/app/views/public_holidays/new.rhtml +0 -8
  148. data/app/views/public_holidays/show.rhtml +0 -8
  149. data/app/views/redirect.rjs +0 -1
  150. data/app/views/search/results.rhtml +0 -40
  151. data/app/views/task_notify/invite.en.html.erb +0 -13
  152. data/app/views/task_notify/invite.no.html.erb +0 -13
  153. data/app/views/tasks/_backlog_header.rhtml +0 -17
  154. data/app/views/tasks/_completed.rhtml +0 -18
  155. data/app/views/tasks/_fields_header.rhtml +0 -13
  156. data/app/views/tasks/_form.rhtml +0 -125
  157. data/app/views/tasks/_invite.rjs +0 -1
  158. data/app/views/tasks/_period_header.rhtml +0 -1
  159. data/app/views/tasks/_task.rhtml +0 -116
  160. data/app/views/tasks/_update.rjs +0 -2
  161. data/app/views/tasks/edit.rhtml +0 -81
  162. data/app/views/tasks/grab.rhtml +0 -9
  163. data/app/views/tasks/invite.rhtml +0 -9
  164. data/app/views/tasks/list.rhtml +0 -77
  165. data/app/views/tasks/list_started.rhtml +0 -62
  166. data/app/views/tasks/new.rhtml +0 -10
  167. data/app/views/tasks/notes.rhtml +0 -12
  168. data/app/views/tasks/start_work.rjs +0 -1
  169. data/app/views/tasks/update_estimate.rjs +0 -3
  170. data/app/views/user/_edit.rhtml +0 -31
  171. data/app/views/user/_password.rhtml +0 -21
  172. data/app/views/user/change_password.rhtml +0 -19
  173. data/app/views/user/delete.rhtml +0 -14
  174. data/app/views/user/edit.rhtml +0 -154
  175. data/app/views/user/forgot_password.rhtml +0 -19
  176. data/app/views/user/login.rhtml +0 -33
  177. data/app/views/user/logout.rhtml +0 -8
  178. data/app/views/user/set_group.rjs +0 -1
  179. data/app/views/user/signup.rhtml +0 -15
  180. data/app/views/user/toggle_work_lock_monitoring.rjs +0 -2
  181. data/app/views/user/welcome.rhtml +0 -8
  182. data/app/views/user_notify/change_password.en.html.erb +0 -10
  183. data/app/views/user_notify/change_password.no.html.erb +0 -10
  184. data/app/views/user_notify/forgot_password.en.html.erb +0 -11
  185. data/app/views/user_notify/forgot_password.no.html.erb +0 -11
  186. data/app/views/user_notify/monitoring.en.html.erb +0 -3
  187. data/app/views/user_notify/monitoring.no.html.erb +0 -3
  188. data/app/views/user_notify/monitoring_invitation.en.html.erb +0 -7
  189. data/app/views/user_notify/monitoring_invitation.no.html.erb +0 -7
  190. data/app/views/user_notify/signup.en.html.erb +0 -12
  191. data/app/views/user_notify/signup.no.html.erb +0 -12
  192. data/app/views/work_lock_notify/lock.en.html.erb +0 -7
  193. data/app/views/work_lock_notify/lock.no.html.erb +0 -7
  194. data/app/views/work_lock_notify/nag.en.html.erb +0 -6
  195. data/app/views/work_lock_notify/nag.no.html.erb +0 -7
  196. data/app/views/work_locks/_form.rhtml +0 -10
  197. data/app/views/work_locks/edit.rhtml +0 -9
  198. data/app/views/work_locks/list.rhtml +0 -25
  199. data/app/views/work_locks/new.rhtml +0 -8
  200. data/app/views/work_locks/show.rhtml +0 -8
  201. data/app/views/works/_buttons.rhtml +0 -2
  202. data/app/views/works/_description_list.rhtml +0 -5
  203. data/app/views/works/_form.rhtml +0 -107
  204. data/app/views/works/_new_row.rhtml +0 -141
  205. data/app/views/works/_row.rhtml +0 -115
  206. data/app/views/works/_row_field.rhtml +0 -17
  207. data/app/views/works/_task_id_list.rhtml +0 -5
  208. data/app/views/works/_weekly_work_sheet_buttons.rhtml +0 -22
  209. data/app/views/works/daily_work_sheet.rhtml +0 -108
  210. data/app/views/works/edit.rhtml +0 -11
  211. data/app/views/works/list.rhtml +0 -148
  212. data/app/views/works/list_excel.rhtml +0 -114
  213. data/app/views/works/new.rhtml +0 -12
  214. data/app/views/works/show.rhtml +0 -10
  215. data/app/views/works/timeliste.rhtml +0 -884
  216. data/app/views/works/update_new_row.rjs +0 -28
  217. data/app/views/works/update_row.rjs +0 -18
  218. data/app/views/works/update_time.rjs +0 -3
  219. data/app/views/works/weekly_work_sheet.rhtml +0 -64
  220. data/app/views/works/weekly_work_sheet_details.rhtml +0 -102
  221. data/backlog.gemspec +0 -44
  222. data/config.ru +0 -4
  223. data/config/application.rb +0 -11
  224. data/config/boot.rb +0 -13
  225. data/config/database.yml +0 -15
  226. data/config/database.yml~ +0 -17
  227. data/config/environment.rb +0 -100
  228. data/config/environments/development.rb +0 -30
  229. data/config/environments/development.rb.rails2 +0 -26
  230. data/config/environments/production.rb +0 -33
  231. data/config/environments/test.rb +0 -24
  232. data/config/environments/user_environment.rb +0 -21
  233. data/config/initializers/backtrace_silencers.rb +0 -7
  234. data/config/initializers/inflections.rb +0 -10
  235. data/config/initializers/jdbc.rb +0 -7
  236. data/config/initializers/mime_types.rb +0 -5
  237. data/config/initializers/secret_token.rb +0 -7
  238. data/config/initializers/session_store.rb +0 -8
  239. data/config/locales/en.yml +0 -200
  240. data/config/locales/no.yml +0 -193
  241. data/config/mime_types.yaml +0 -1
  242. data/config/routes.rb +0 -5
  243. data/config/war.rb +0 -27
  244. data/config/warble.rb +0 -84
  245. data/cruise_build.sh +0 -14
  246. data/cruise_config.rb +0 -5
  247. data/db/migrate/001_create_tasks.rb +0 -22
  248. data/db/migrate/003_add_estimation_points.rb +0 -16
  249. data/db/migrate/004_add_period.rb +0 -63
  250. data/db/migrate/005_add_field_work_started_at.rb +0 -9
  251. data/db/migrate/006_works_data_fix.rb +0 -13
  252. data/db/migrate/007_add_task_created_at.rb +0 -23
  253. data/db/migrate/008_add_backlog_options.rb +0 -13
  254. data/db/migrate/009_add_subtasks.rb +0 -29
  255. data/db/migrate/010_add_work_start.rb +0 -9
  256. data/db/migrate/011_login_sugar.rb +0 -21
  257. data/db/migrate/012_add_resolution.rb +0 -12
  258. data/db/migrate/013_create_estimates.rb +0 -20
  259. data/db/migrate/014_add_customer_option.rb +0 -11
  260. data/db/migrate/015_add_user_option.rb +0 -33
  261. data/db/migrate/016_add_invoicable_flag.rb +0 -11
  262. data/db/migrate/017_increase_backlog_name_limit.rb +0 -10
  263. data/db/migrate/018_create_groups.rb +0 -118
  264. data/db/migrate/019_remove_unique_index_for_period_position.rb +0 -9
  265. data/db/migrate/020_create_task_files.rb +0 -17
  266. data/db/migrate/021_create_work_accounts.rb +0 -111
  267. data/db/migrate/022_remove_track_done_flag.rb +0 -9
  268. data/db/migrate/023_add_indices_for_burn_down_chart.rb +0 -13
  269. data/db/migrate/024_add_sprint_option.rb +0 -10
  270. data/db/migrate/025_add_simple_auditing_of_tasks.rb +0 -11
  271. data/db/migrate/026_add_users_to_tasks.rb +0 -14
  272. data/db/migrate/027_create_work_locks.rb +0 -25
  273. data/db/migrate/028_create_absences.rb +0 -34
  274. data/db/migrate/029_add_work_comments.rb +0 -9
  275. data/db/migrate/030_create_public_holidays.rb +0 -11
  276. data/db/migrate/031_expand_work_done_precision.rb +0 -9
  277. data/db/migrate/20100720124707_merge_work_account_into_backlog.rb +0 -74
  278. data/db/migrate/20101006092700_rename_backlogs_to_projects.rb +0 -22
  279. data/db/migrate/20101006092700_rename_backlogs_to_projects.rb~ +0 -22
  280. data/db/schema.rb +0 -159
  281. data/db/seeds.rb +0 -7
  282. data/db/test.db +0 -0
  283. data/etc/backlog.conf +0 -32
  284. data/ext/mkrf_conf.rb +0 -26
  285. data/lib/class_table_inheritance.rb +0 -224
  286. data/lib/postgresql-8.2-504.jdbc4.jar +0 -0
  287. data/lib/tasks/jdbc.rake +0 -8
  288. data/lib/url_for_fix.rb +0 -30
  289. data/nbproject/private/config.properties +0 -0
  290. data/nbproject/private/private.properties +0 -1
  291. data/nbproject/private/private.xml +0 -4
  292. data/nbproject/private/rake-t.txt +0 -95
  293. data/nbproject/project.properties +0 -4
  294. data/nbproject/project.xml +0 -9
  295. data/public/404.html +0 -26
  296. data/public/422.html +0 -26
  297. data/public/500.html +0 -26
  298. data/public/Frav/303/246rsskjema.xls +0 -0
  299. data/public/applets/bsf.jar +0 -0
  300. data/public/applets/jruby.jar +0 -0
  301. data/public/favicon.ico +0 -0
  302. data/public/images/add.png +0 -0
  303. data/public/images/add.svg +0 -70
  304. data/public/images/ajax-loading.gif +0 -0
  305. data/public/images/appunti_architetto_franc_01.svg +0 -92
  306. data/public/images/arrow-down.gif +0 -0
  307. data/public/images/arrow-up.gif +0 -0
  308. data/public/images/arrow07_2.png +0 -0
  309. data/public/images/arrow07_4.png +0 -0
  310. data/public/images/arrow_down.png +0 -0
  311. data/public/images/arrow_down.svg +0 -59
  312. data/public/images/arrow_left.png +0 -0
  313. data/public/images/arrow_left.svg +0 -59
  314. data/public/images/arrow_right.png +0 -0
  315. data/public/images/arrow_right.svg +0 -59
  316. data/public/images/arrow_up.png +0 -0
  317. data/public/images/arrow_up.svg +0 -59
  318. data/public/images/black-70.png +0 -0
  319. data/public/images/black.png +0 -0
  320. data/public/images/blank.jpg +0 -0
  321. data/public/images/blank.png +0 -0
  322. data/public/images/cestino_pieno_architetto_01.svg +0 -470
  323. data/public/images/checkmark.png +0 -0
  324. data/public/images/checkmark_org.png +0 -0
  325. data/public/images/clipboard.png +0 -0
  326. data/public/images/clipboard.svg +0 -62
  327. data/public/images/construction_hammer_jon__01.svg +0 -116
  328. data/public/images/delete.png +0 -0
  329. data/public/images/email.png +0 -0
  330. data/public/images/email_grey.png +0 -0
  331. data/public/images/eraser.png +0 -0
  332. data/public/images/eraser_org.png +0 -0
  333. data/public/images/ernes_stop.png +0 -0
  334. data/public/images/ernes_stop_org.png +0 -0
  335. data/public/images/flag_red.png +0 -0
  336. data/public/images/flag_yellow.png +0 -0
  337. data/public/images/grab.png +0 -0
  338. data/public/images/grab_gray.png +0 -0
  339. data/public/images/group.png +0 -0
  340. data/public/images/hammer.png +0 -0
  341. data/public/images/header.jpg +0 -0
  342. data/public/images/nextlabel.gif +0 -0
  343. data/public/images/pagebak.jpg +0 -0
  344. data/public/images/paper3.svg +0 -54
  345. data/public/images/period.png +0 -0
  346. data/public/images/period_org.png +0 -0
  347. data/public/images/person.org.png +0 -0
  348. data/public/images/prevlabel.gif +0 -0
  349. data/public/images/question.svg +0 -56
  350. data/public/images/rails.png +0 -0
  351. data/public/images/refresh.png +0 -0
  352. data/public/images/rmagick.gif +0 -0
  353. data/public/images/rmagick_270.gif +0 -0
  354. data/public/images/tabella_architetto_franc_01.svg +0 -105
  355. data/public/images/task.png +0 -0
  356. data/public/images/text-x-generic.png +0 -0
  357. data/public/images/user group.png +0 -0
  358. data/public/images/user.png +0 -0
  359. data/public/images/view_fullscreen.png +0 -0
  360. data/public/images/work_account.png +0 -0
  361. data/public/javascripts/application.js +0 -2
  362. data/public/javascripts/builder.js +0 -136
  363. data/public/javascripts/controls.js +0 -965
  364. data/public/javascripts/dragdrop.js +0 -974
  365. data/public/javascripts/effects.js +0 -1123
  366. data/public/javascripts/lightwindow.js +0 -1921
  367. data/public/javascripts/prototype.js +0 -6001
  368. data/public/javascripts/rails.js +0 -175
  369. data/public/javascripts/ruby.js +0 -46
  370. data/public/javascripts/scriptaculous.js +0 -58
  371. data/public/javascripts/slider.js +0 -275
  372. data/public/javascripts/sound.js +0 -55
  373. data/public/javascripts/unittest.js +0 -568
  374. data/public/javascripts/zapatec/utils/transport.js +0 -2217
  375. data/public/javascripts/zapatec/utils/utils.js +0 -1799
  376. data/public/javascripts/zapatec/utils/zapatec.js +0 -90
  377. data/public/javascripts/zapatec/utils/zpeventdriven.js +0 -212
  378. data/public/javascripts/zapatec/utils/zpwidget.js +0 -729
  379. data/public/javascripts/zapatec/zpcal/lang/calendar-no.js +0 -124
  380. data/public/javascripts/zapatec/zpcal/src/calendar-core.js +0 -2878
  381. data/public/javascripts/zapatec/zpcal/src/calendar-date-core.js +0 -348
  382. data/public/javascripts/zapatec/zpcal/src/calendar-setup.js +0 -360
  383. data/public/javascripts/zapatec/zpcal/src/calendar.js +0 -35
  384. data/public/robots.txt +0 -5
  385. data/public/stylesheets/backlog.css +0 -135
  386. data/public/stylesheets/lightwindow.css +0 -376
  387. data/public/stylesheets/mwrt002.css +0 -54
  388. data/public/stylesheets/mwrt002MAC.css +0 -3
  389. data/public/stylesheets/mwrt002NN.css +0 -3
  390. data/public/stylesheets/scaffold.css +0 -74
  391. data/public/stylesheets/user.css +0 -74
  392. data/public/stylesheets/zpcal/themes/green.css +0 -153
  393. data/public/stylesheets/zpcal/themes/layouts/layout-2d.css +0 -134
  394. data/public/stylesheets/zpcal/themes/layouts/layout-common.css +0 -74
  395. data/public/stylesheets/zpcal/themes/menuarrow.gif +0 -0
  396. data/public/stylesheets/zpcal/themes/scroller-down.gif +0 -0
  397. data/public/stylesheets/zpcal/themes/scroller-up.gif +0 -0
  398. data/script/rails +0 -6
  399. data/test/client/login.rb +0 -23
  400. data/test/client/login_test.rb +0 -64
  401. data/test/client/setup.rb +0 -25
  402. data/test/fixtures/absences.yml +0 -11
  403. data/test/fixtures/configurations.yml +0 -5
  404. data/test/fixtures/customers.yml +0 -7
  405. data/test/fixtures/estimates.yml +0 -10
  406. data/test/fixtures/groups.yml +0 -6
  407. data/test/fixtures/groups_users.yml +0 -3
  408. data/test/fixtures/parties.yml +0 -32
  409. data/test/fixtures/periods.yml +0 -24
  410. data/test/fixtures/projects.yml +0 -8
  411. data/test/fixtures/public_holidays.yml +0 -7
  412. data/test/fixtures/task_files.yml +0 -13
  413. data/test/fixtures/tasks.yml +0 -82
  414. data/test/fixtures/users.yml +0 -59
  415. data/test/fixtures/work_lock_subscriptions.yml +0 -7
  416. data/test/fixtures/work_locks.yml +0 -11
  417. data/test/fixtures/works.yml +0 -47
  418. data/test/functional/absences_controller_test.rb +0 -93
  419. data/test/functional/customers_controller_test.rb +0 -93
  420. data/test/functional/dashboard_controller_test.rb +0 -18
  421. data/test/functional/estimates_controller_test.rb +0 -40
  422. data/test/functional/groups_controller_test.rb +0 -120
  423. data/test/functional/parties_controller_test.rb +0 -35
  424. data/test/functional/periods_controller_test.rb +0 -297
  425. data/test/functional/projects_controller_test.rb +0 -152
  426. data/test/functional/public_holidays_controller_test.rb +0 -93
  427. data/test/functional/search_controller_test.rb +0 -24
  428. data/test/functional/task_files_controller_test.rb +0 -29
  429. data/test/functional/tasks_controller_test.rb +0 -229
  430. data/test/functional/user_controller_test.rb +0 -261
  431. data/test/functional/welcome_controller_test.rb +0 -62
  432. data/test/functional/work_locks_controller_test.rb +0 -93
  433. data/test/functional/works_controller_test.rb +0 -220
  434. data/test/integration/user_system_test.rb +0 -95
  435. data/test/mocks/test/clock.rb +0 -14
  436. data/test/performance/browsing_test.rb +0 -9
  437. data/test/performance/common.rb +0 -91
  438. data/test/performance/jetty_test.rb +0 -15
  439. data/test/performance/server_test.rb +0 -17
  440. data/test/test_helper.rb +0 -119
  441. data/test/test_helper.rb~ +0 -121
  442. data/test/unit/absence_test.rb +0 -29
  443. data/test/unit/big_decimal_yaml_fix_test.rb +0 -15
  444. data/test/unit/configuration_test.rb +0 -10
  445. data/test/unit/customer_test.rb +0 -10
  446. data/test/unit/estimate_test.rb +0 -10
  447. data/test/unit/group_test.rb +0 -10
  448. data/test/unit/party_test.rb +0 -10
  449. data/test/unit/period_test.rb +0 -9
  450. data/test/unit/public_holiday_test.rb +0 -10
  451. data/test/unit/task_file_test.rb +0 -10
  452. data/test/unit/task_test.rb +0 -73
  453. data/test/unit/time_of_day_test.rb +0 -23
  454. data/test/unit/user_test.rb +0 -148
  455. data/test/unit/work_lock_subscription_test.rb +0 -10
  456. data/test/unit/work_lock_test.rb +0 -10
  457. data/test/unit/work_test.rb +0 -81
  458. data/vendor/plugins/acts_as_list/README +0 -23
  459. data/vendor/plugins/acts_as_list/init.rb +0 -3
  460. data/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +0 -256
  461. data/vendor/plugins/acts_as_list/test/list_test.rb +0 -332
  462. data/vendor/plugins/acts_as_tree/README +0 -26
  463. data/vendor/plugins/acts_as_tree/Rakefile +0 -22
  464. data/vendor/plugins/acts_as_tree/init.rb +0 -1
  465. data/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +0 -96
  466. data/vendor/plugins/acts_as_tree/test/abstract_unit.rb +0 -0
  467. data/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +0 -219
  468. data/vendor/plugins/acts_as_tree/test/database.yml +0 -0
  469. data/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
  470. data/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
  471. data/vendor/plugins/acts_as_tree/test/schema.rb +0 -0
  472. data/vendor/plugins/assert_cookie/MIT-LICENSE +0 -7
  473. data/vendor/plugins/assert_cookie/README +0 -6
  474. data/vendor/plugins/assert_cookie/Rakefile +0 -21
  475. data/vendor/plugins/assert_cookie/init.rb +0 -1
  476. data/vendor/plugins/assert_cookie/lib/assert_cookie.rb +0 -73
  477. data/vendor/plugins/assert_cookie/meta.yml +0 -7
  478. data/vendor/plugins/assert_cookie/test/test_assert_cookie.rb +0 -124
  479. data/vendor/plugins/assert_cookie/test/test_helper.rb +0 -31
  480. data/vendor/plugins/auto_complete/README +0 -23
  481. data/vendor/plugins/auto_complete/Rakefile +0 -22
  482. data/vendor/plugins/auto_complete/init.rb +0 -2
  483. data/vendor/plugins/auto_complete/lib/auto_complete.rb +0 -47
  484. data/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb +0 -143
  485. data/vendor/plugins/auto_complete/test/auto_complete_test.rb +0 -67
  486. data/vendor/plugins/backlog_jira/init.rb +0 -66
  487. data/vendor/plugins/dynamic_form/MIT-LICENSE +0 -20
  488. data/vendor/plugins/dynamic_form/README +0 -13
  489. data/vendor/plugins/dynamic_form/Rakefile +0 -10
  490. data/vendor/plugins/dynamic_form/dynamic_form.gemspec +0 -12
  491. data/vendor/plugins/dynamic_form/init.rb +0 -1
  492. data/vendor/plugins/dynamic_form/lib/action_view/helpers/dynamic_form.rb +0 -300
  493. data/vendor/plugins/dynamic_form/lib/action_view/locale/en.yml +0 -8
  494. data/vendor/plugins/dynamic_form/lib/dynamic_form.rb +0 -5
  495. data/vendor/plugins/dynamic_form/test/dynamic_form_i18n_test.rb +0 -42
  496. data/vendor/plugins/dynamic_form/test/dynamic_form_test.rb +0 -370
  497. data/vendor/plugins/dynamic_form/test/test_helper.rb +0 -9
  498. data/vendor/plugins/has_history/README +0 -12
  499. data/vendor/plugins/has_history/Rakefile +0 -22
  500. data/vendor/plugins/has_history/generators/history_migration/history_migration_generator.rb +0 -30
  501. data/vendor/plugins/has_history/generators/history_migration/templates/migration.rb +0 -14
  502. data/vendor/plugins/has_history/generators/history_model/history_model_generator.rb +0 -39
  503. data/vendor/plugins/has_history/generators/history_model/templates/fixtures.yml +0 -17
  504. data/vendor/plugins/has_history/generators/history_model/templates/functional_test.rb +0 -129
  505. data/vendor/plugins/has_history/generators/history_model/templates/migration.rb +0 -14
  506. data/vendor/plugins/has_history/generators/history_model/templates/model.rb +0 -4
  507. data/vendor/plugins/has_history/generators/history_model/templates/unit_test.rb +0 -75
  508. data/vendor/plugins/has_history/init.rb +0 -5
  509. data/vendor/plugins/has_history/install.rb +0 -1
  510. data/vendor/plugins/has_history/lib/has_history.rb +0 -178
  511. data/vendor/plugins/has_history/lib/tasks/has_history_tasks.rake +0 -4
  512. data/vendor/plugins/has_history/test/has_history_test.rb +0 -31
  513. data/vendor/plugins/has_history/test/ignorant_master.rb +0 -3
  514. data/vendor/plugins/has_history/test/ignorant_master_history.rb +0 -4
  515. data/vendor/plugins/has_history/test/lone_master.rb +0 -42
  516. data/vendor/plugins/has_history/test/paired_master.rb +0 -5
  517. data/vendor/plugins/has_history/test/paired_master_history.rb +0 -5
  518. data/vendor/plugins/has_history/test/test_helper.rb +0 -154
  519. data/vendor/plugins/has_history/uninstall.rb +0 -1
  520. data/vendor/plugins/prototype_legacy_helper/lib/prototype_legacy_helper.rb +0 -432
  521. data/vendor/plugins/prototype_legacy_helper/test/test_prototype_helper.rb +0 -297
  522. data/vendor/plugins/rails_time/MIT-LICENSE +0 -20
  523. data/vendor/plugins/rails_time/README +0 -28
  524. data/vendor/plugins/rails_time/init.rb +0 -2
  525. data/vendor/plugins/rails_time/lib/activerecord_time_extension.rb +0 -28
  526. data/vendor/plugins/rails_time/lib/time_of_day.rb +0 -88
  527. data/vendor/plugins/rails_time/test/database.yml +0 -18
  528. data/vendor/plugins/rails_time/test/debug.log +0 -1
  529. data/vendor/plugins/rails_time/test/rails_time_test.rb +0 -122
  530. data/vendor/plugins/rails_time/test/schema.rb +0 -10
  531. data/vendor/plugins/rails_time/test/test_helper.rb +0 -17
  532. data/vendor/plugins/verification/MIT-LICENSE +0 -20
  533. data/vendor/plugins/verification/README +0 -34
  534. data/vendor/plugins/verification/Rakefile +0 -22
  535. data/vendor/plugins/verification/init.rb +0 -3
  536. data/vendor/plugins/verification/lib/action_controller/verification.rb +0 -132
  537. data/vendor/plugins/verification/test/test_helper.rb +0 -18
  538. data/vendor/plugins/verification/test/verification_test.rb +0 -270
  539. data/vendor/plugins/will_paginate/LICENSE +0 -18
  540. data/vendor/plugins/will_paginate/README +0 -138
  541. data/vendor/plugins/will_paginate/Rakefile +0 -27
  542. data/vendor/plugins/will_paginate/init.rb +0 -4
  543. data/vendor/plugins/will_paginate/lib/will_paginate.rb +0 -61
  544. data/vendor/plugins/will_paginate/lib/will_paginate/collection.rb +0 -132
  545. data/vendor/plugins/will_paginate/lib/will_paginate/core_ext.rb +0 -80
  546. data/vendor/plugins/will_paginate/lib/will_paginate/finder.rb +0 -181
  547. data/vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb +0 -206
  548. data/vendor/plugins/will_paginate/test/array_pagination_test.rb +0 -131
  549. data/vendor/plugins/will_paginate/test/boot.rb +0 -23
  550. data/vendor/plugins/will_paginate/test/console +0 -9
  551. data/vendor/plugins/will_paginate/test/finder_test.rb +0 -290
  552. data/vendor/plugins/will_paginate/test/fixtures/admin.rb +0 -3
  553. data/vendor/plugins/will_paginate/test/fixtures/developer.rb +0 -11
  554. data/vendor/plugins/will_paginate/test/fixtures/developers_projects.yml +0 -13
  555. data/vendor/plugins/will_paginate/test/fixtures/project.rb +0 -15
  556. data/vendor/plugins/will_paginate/test/fixtures/projects.yml +0 -7
  557. data/vendor/plugins/will_paginate/test/fixtures/replies.yml +0 -34
  558. data/vendor/plugins/will_paginate/test/fixtures/reply.rb +0 -5
  559. data/vendor/plugins/will_paginate/test/fixtures/schema.rb +0 -38
  560. data/vendor/plugins/will_paginate/test/fixtures/topic.rb +0 -4
  561. data/vendor/plugins/will_paginate/test/fixtures/topics.yml +0 -30
  562. data/vendor/plugins/will_paginate/test/fixtures/user.rb +0 -2
  563. data/vendor/plugins/will_paginate/test/fixtures/users.yml +0 -35
  564. data/vendor/plugins/will_paginate/test/helper.rb +0 -25
  565. data/vendor/plugins/will_paginate/test/lib/activerecord_test_case.rb +0 -23
  566. data/vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb +0 -67
  567. data/vendor/plugins/will_paginate/test/lib/load_fixtures.rb +0 -13
  568. data/vendor/plugins/will_paginate/test/pagination_test.rb +0 -240
@@ -1,181 +0,0 @@
1
- require 'will_paginate/core_ext'
2
-
3
- module WillPaginate
4
- # A mixin for ActiveRecord::Base. Provides +per_page+ class method
5
- # and makes +paginate+ finders possible with some method_missing magic.
6
- #
7
- # Find out more in WillPaginate::Finder::ClassMethods
8
- #
9
- module Finder
10
- def self.included(base)
11
- base.extend ClassMethods
12
- class << base
13
- alias_method_chain :method_missing, :paginate
14
- define_method(:per_page) { 30 } unless respond_to?(:per_page)
15
- end
16
- end
17
-
18
- # = Paginating finders for ActiveRecord models
19
- #
20
- # WillPaginate doesn't really add extra methods to your ActiveRecord models
21
- # (except +per_page+ unless it's already available). It simply intercepts
22
- # the calls to paginating finders such as +paginate+, +paginate_by_user_id+
23
- # (and so on) and translates them to ordinary finders: +find+,
24
- # +find_by_user_id+, etc. It does so with some +method_missing+ magic, but
25
- # you don't need to care for that. You simply use paginating finders same
26
- # way you used ordinary ones. You only need to specify what page do you want:
27
- #
28
- # @posts = Post.paginate :page => params[:page]
29
- #
30
- # In paginating finders, "all" is implicit. No sense in paginating a single
31
- # record, right? So:
32
- #
33
- # Post.paginate => Post.find :all
34
- # Post.paginate_all_by_something => Post.find_all_by_something
35
- # Post.paginate_by_something => Post.find_all_by_something
36
- #
37
- # Don't forget to pass the +page+ parameter! Without it, paginating finders
38
- # will raise an error.
39
- #
40
- # == Options for paginating finders
41
- # * <tt>:page</tt> -- REQUIRED, but defaults to 1 if false or nil
42
- # * <tt>:per_page</tt> -- defaults to <tt>CurrentModel.per_page</tt> (which is 30 if not overridden)
43
- # * <tt>:total_entries</tt> -- use only if you manually count total entries
44
- # * <tt>:count</tt> -- additional options that are passed on to +count+
45
- #
46
- module ClassMethods
47
- # This methods wraps +find_by_sql+ by simply adding LIMIT and OFFSET to your SQL string
48
- # based on the params otherwise used by paginating finds: +page+ and +per_page+.
49
- #
50
- # Example:
51
- #
52
- # @developers = Developer.paginate_by_sql ['select * from developers where salary > ?', 80000],
53
- # :page => params[:page], :per_page => 3
54
- #
55
- # A query for counting rows will automatically be generated if you don't
56
- # supply <tt>:total_entries</tt>. If you experience problems with this
57
- # generated SQL, you might want to perform the count manually in your
58
- # application.
59
- #
60
- def paginate_by_sql(sql, options)
61
- WillPaginate::Collection.create(*wp_parse_options!(options)) do |pager|
62
- query = sanitize_sql(sql)
63
- options.update :offset => pager.offset, :limit => pager.per_page
64
-
65
- original_query = query.dup
66
- add_limit! query, options
67
- # perfom the find
68
- pager.replace find_by_sql(query)
69
-
70
- unless pager.total_entries
71
- count_query = original_query.sub /\bORDER\s+BY\s+[\w`,\s]+$/mi, ''
72
- count_query = "SELECT COUNT(*) FROM (#{count_query}) AS count_table"
73
- # perform the count query
74
- pager.total_entries = count_by_sql(count_query)
75
- end
76
- end
77
- end
78
-
79
- def respond_to?(method, include_priv = false)
80
- case method.to_sym
81
- when :paginate, :paginate_by_sql
82
- true
83
- else
84
- super(method.to_s.sub(/^paginate/, 'find'), include_priv)
85
- end
86
- end
87
-
88
- protected
89
-
90
- def method_missing_with_paginate(method, *args, &block)
91
- # did somebody tried to paginate? if not, let them be
92
- unless method.to_s.index('paginate') == 0
93
- return method_missing_without_paginate(method, *args, &block)
94
- end
95
-
96
- options = args.pop
97
- page, per_page, total_entries = wp_parse_options!(options)
98
- # an array of IDs may have been given:
99
- total_entries ||= (Array === args.first and args.first.size)
100
-
101
- # paginate finders are really just find_* with limit and offset
102
- finder = method.to_s.sub /^paginate/, 'find'
103
-
104
- # :all is implicit
105
- if finder == 'find'
106
- args.unshift(:all) if args.empty?
107
- elsif finder.index('find_by_') == 0
108
- finder.sub! /^find/, 'find_all'
109
- end
110
-
111
- WillPaginate::Collection.create(page, per_page, total_entries) do |pager|
112
- args << options.except(:count).merge(:offset => pager.offset, :limit => pager.per_page)
113
- pager.replace send(finder, *args)
114
-
115
- # magic counting for user convenience:
116
- pager.total_entries = wp_count!(options, args, finder) unless pager.total_entries
117
- end
118
- end
119
-
120
- def wp_count!(options, args, finder)
121
- excludees = [:count, :order, :limit, :offset]
122
- unless options[:select] and options[:select] =~ /^\s*DISTINCT/i
123
- excludees << :select # only exclude the select param if it doesn't begin with DISTINCT
124
- end
125
- # count expects (almost) the same options as find
126
- count_options = options.except *excludees
127
-
128
- # merge the hash found in :count
129
- # this allows you to specify :select, :order, or anything else just for the count query
130
- count_options.update(options.delete(:count) || {}) if options.key? :count
131
-
132
- # we may have to scope ...
133
- counter = Proc.new { count(count_options) }
134
-
135
- # we may be in a model or an association proxy!
136
- klass = (@owner and @reflection) ? @reflection.klass : self
137
-
138
- count = if finder =~ /^find_/ and klass.respond_to?(scoper = finder.sub(/^find_/, 'with_'))
139
- # scope_out adds a 'with_finder' method which acts like with_scope, if it's present
140
- # then execute the count with the scoping provided by the with_finder
141
- send(scoper, &counter)
142
- elsif conditions = wp_extract_finder_conditions(finder, args)
143
- # extracted the conditions from calls like "paginate_by_foo_and_bar"
144
- with_scope(:find => { :conditions => conditions }, &counter)
145
- else
146
- counter.call
147
- end
148
-
149
- count.respond_to?(:length) ? count.length : count
150
- end
151
-
152
- def wp_parse_options!(options)
153
- raise ArgumentError, 'hash parameters expected' unless options.respond_to? :symbolize_keys!
154
- options.symbolize_keys!
155
- raise ArgumentError, ':page parameter required' unless options.key? :page
156
-
157
- if options[:count] and options[:total_entries]
158
- raise ArgumentError, ':count and :total_entries are mutually exclusive parameters'
159
- end
160
-
161
- page = options.delete(:page) || 1
162
- per_page = options.delete(:per_page) || self.per_page
163
- total = options.delete(:total_entries)
164
- [page, per_page, total]
165
- end
166
-
167
- private
168
-
169
- # thanks to active record for making us duplicate this code
170
- def wp_extract_finder_conditions(finder, arguments)
171
- return unless match = /^find_(all_by|by)_([_a-zA-Z]\w*)$/.match(finder.to_s)
172
-
173
- attribute_names = extract_attribute_names_from_match(match)
174
- unless all_attributes_exists?(attribute_names)
175
- raise "I can't make sense of `#{finder}`. Try doing the count manually"
176
- end
177
- construct_attributes_from_arguments(attribute_names, arguments)
178
- end
179
- end
180
- end
181
- end
@@ -1,206 +0,0 @@
1
- require 'will_paginate/core_ext'
2
-
3
- module WillPaginate
4
- # = Will Paginate view helpers
5
- #
6
- # Currently there is only one view helper: +will_paginate+. It renders the
7
- # pagination links for the given collection. The helper itself is lightweight
8
- # and serves only as a wrapper around link renderer instantiation; the
9
- # renderer then does all the hard work of generating the HTML.
10
- #
11
- # == Global options for helpers
12
- #
13
- # Options for pagination helpers are optional and get their default values from the
14
- # WillPaginate::ViewHelpers.pagination_options hash. You can write to this hash to
15
- # override default options on the global level:
16
- #
17
- # WillPaginate::ViewHelpers.pagination_options[:prev_label] = 'Previous page'
18
- #
19
- # By putting this into your environment.rb you can easily translate link texts to previous
20
- # and next pages, as well as override some other defaults to your liking.
21
- module ViewHelpers
22
- # default options that can be overridden on the global level
23
- @@pagination_options = {
24
- :class => 'pagination',
25
- :prev_label => '&laquo; Previous',
26
- :next_label => 'Next &raquo;',
27
- :inner_window => 4, # links around the current page
28
- :outer_window => 1, # links around beginning and end
29
- :separator => ' ', # single space is friendly to spiders and non-graphic browsers
30
- :param_name => :page,
31
- :params => nil,
32
- :renderer => 'WillPaginate::LinkRenderer',
33
- :page_links => true,
34
- :container => true
35
- }
36
- mattr_reader :pagination_options
37
-
38
- # Renders Digg/Flickr-style pagination for a WillPaginate::Collection
39
- # object. Nil is returned if there is only one page in total; no point in
40
- # rendering the pagination in that case...
41
- #
42
- # ==== Options
43
- # * <tt>:class</tt> -- CSS class name for the generated DIV (default: "pagination")
44
- # * <tt>:prev_label</tt> -- default: "« Previous"
45
- # * <tt>:next_label</tt> -- default: "Next »"
46
- # * <tt>:inner_window</tt> -- how many links are shown around the current page (default: 4)
47
- # * <tt>:outer_window</tt> -- how many links are around the first and the last page (default: 1)
48
- # * <tt>:separator</tt> -- string separator for page HTML elements (default: single space)
49
- # * <tt>:param_name</tt> -- parameter name for page number in URLs (default: <tt>:page</tt>)
50
- # * <tt>:params</tt> -- additional parameters when generating pagination links
51
- # (eg. <tt>:controller => "foo", :action => nil</tt>)
52
- # * <tt>:renderer</tt> -- class name of the link renderer (default: WillPaginate::LinkRenderer)
53
- # * <tt>:page_links</tt> -- when false, only previous/next links are rendered (default: true)
54
- # * <tt>:container</tt> -- toggles rendering of the DIV container for pagination links, set to
55
- # false only when you are rendering your own pagination markup (default: true)
56
- # * <tt>:id</tt> -- HTML ID for the container (default: nil). Pass +true+ to have the ID automatically
57
- # generated from the class name of objects in collection: for example, paginating
58
- # ArticleComment models would yield an ID of "article_comments_pagination".
59
- #
60
- # All options beside listed ones are passed as HTML attributes to the container
61
- # element for pagination links (the DIV). For example:
62
- #
63
- # <%= will_paginate @posts, :id => 'wp_posts' %>
64
- #
65
- # ... will result in:
66
- #
67
- # <div class="pagination" id="wp_posts"> ... </div>
68
- #
69
- # ==== Using the helper without arguments
70
- # If the helper is called without passing in the collection object, it will
71
- # try to read from the instance variable inferred by the controller name.
72
- # For example, calling +will_paginate+ while the current controller is
73
- # PostsController will result in trying to read from the <tt>@posts</tt>
74
- # variable. Example:
75
- #
76
- # <%= will_paginate :id => true %>
77
- #
78
- # ... will result in <tt>@post</tt> collection getting paginated:
79
- #
80
- # <div class="pagination" id="posts_pagination"> ... </div>
81
- #
82
- def will_paginate(collection = nil, options = {})
83
- options, collection = collection, nil if collection.is_a? Hash
84
- unless collection or !controller
85
- collection_name = "@#{controller.controller_name}"
86
- collection = instance_variable_get(collection_name)
87
- raise ArgumentError, "The #{collection_name} variable appears to be empty. Did you " +
88
- "forget to specify the collection object for will_paginate?" unless collection
89
- end
90
- # early exit if there is nothing to render
91
- return nil unless collection.page_count > 1
92
- options = options.symbolize_keys.reverse_merge WillPaginate::ViewHelpers.pagination_options
93
- # create the renderer instance
94
- renderer_class = options[:renderer].to_s.constantize
95
- renderer = renderer_class.new collection, options, self
96
- # render HTML for pagination
97
- renderer.to_html
98
- end
99
- end
100
-
101
- # This class does the heavy lifting of actually building the pagination
102
- # links. It is used by +will_paginate+ helper internally, but avoid using it
103
- # directly (for now) because its API is not set in stone yet.
104
- class LinkRenderer
105
-
106
- def initialize(collection, options, template)
107
- @collection = collection
108
- @options = options
109
- @template = template
110
- end
111
-
112
- def to_html
113
- links = @options[:page_links] ? windowed_paginator : []
114
- # previous/next buttons
115
- links.unshift page_link_or_span(@collection.previous_page, 'disabled', @options[:prev_label])
116
- links.push page_link_or_span(@collection.next_page, 'disabled', @options[:next_label])
117
-
118
- html = links.join(@options[:separator])
119
- @options[:container] ? @template.content_tag(:div, html, html_attributes) : html
120
- end
121
-
122
- def html_attributes
123
- return @html_attributes if @html_attributes
124
- @html_attributes = @options.except *(WillPaginate::ViewHelpers.pagination_options.keys - [:class])
125
- # pagination of Post models will have the ID of "posts_pagination"
126
- if @options[:container] and @options[:id] === true
127
- @html_attributes[:id] = @collection.first.class.name.underscore.pluralize + '_pagination'
128
- end
129
- @html_attributes
130
- end
131
-
132
- protected
133
-
134
- def windowed_paginator
135
- inner_window, outer_window = @options[:inner_window].to_i, @options[:outer_window].to_i
136
- window_from = current_page - inner_window
137
- window_to = current_page + inner_window
138
-
139
- # adjust lower or upper limit if other is out of bounds
140
- if window_to > total_pages
141
- window_from -= window_to - total_pages
142
- window_to = total_pages
143
- elsif window_from < 1
144
- window_to += 1 - window_from
145
- window_from = 1
146
- end
147
-
148
- visible = (1..total_pages).to_a
149
- left_gap = (2 + outer_window)...window_from
150
- right_gap = (window_to + 1)...(total_pages - outer_window)
151
- visible -= left_gap.to_a if left_gap.last - left_gap.first > 1
152
- visible -= right_gap.to_a if right_gap.last - right_gap.first > 1
153
-
154
- links, prev = [], 0
155
-
156
- visible.each do |n|
157
- unless n - prev > 1
158
- prev = n
159
- links << page_link_or_span(n)
160
- else
161
- # ellipsis represents the gap between windows
162
- prev = n - 1
163
- links << '...'
164
- redo
165
- end
166
- end
167
-
168
- links
169
- end
170
-
171
- def page_link_or_span(page, span_class = 'current', text = nil)
172
- text ||= page.to_s
173
- if page and page != current_page
174
- @template.link_to text, url_options(page)
175
- else
176
- @template.content_tag :span, text, :class => span_class
177
- end
178
- end
179
-
180
- def url_options(page)
181
- options = { param_name => page }
182
- # page links should preserve GET parameters
183
- options = params.merge(options) if @template.request.get?
184
- options.rec_merge!(@options[:params]) if @options[:params]
185
- return options
186
- end
187
-
188
- private
189
-
190
- def current_page
191
- @collection.current_page
192
- end
193
-
194
- def total_pages
195
- @collection.page_count
196
- end
197
-
198
- def param_name
199
- @param_name ||= @options[:param_name].to_sym
200
- end
201
-
202
- def params
203
- @params ||= @template.params.to_hash.symbolize_keys
204
- end
205
- end
206
- end
@@ -1,131 +0,0 @@
1
- require File.dirname(__FILE__) + '/helper'
2
- require 'will_paginate/core_ext'
3
-
4
- class ArrayPaginationTest < Test::Unit::TestCase
5
- def test_simple
6
- collection = ('a'..'e').to_a
7
-
8
- [{ :page => 1, :per_page => 3, :expected => %w( a b c ) },
9
- { :page => 2, :per_page => 3, :expected => %w( d e ) },
10
- { :page => 1, :per_page => 5, :expected => %w( a b c d e ) },
11
- { :page => 3, :per_page => 5, :expected => [] },
12
- ].
13
- each do |conditions|
14
- assert_equal conditions[:expected], collection.paginate(conditions.slice(:page, :per_page))
15
- end
16
- end
17
-
18
- def test_defaults
19
- result = (1..50).to_a.paginate
20
- assert_equal 1, result.current_page
21
- assert_equal 30, result.size
22
- end
23
-
24
- def test_deprecated_api
25
- assert_deprecated 'paginate API' do
26
- result = (1..50).to_a.paginate(2, 10)
27
- assert_equal 2, result.current_page
28
- assert_equal (11..20).to_a, result
29
- assert_equal 50, result.total_entries
30
- end
31
-
32
- assert_deprecated { [].paginate nil }
33
- end
34
-
35
- def test_total_entries_has_precedence
36
- result = %w(a b c).paginate :total_entries => 5
37
- assert_equal 5, result.total_entries
38
- end
39
-
40
- def test_argument_error_with_params_and_another_argument
41
- assert_raise ArgumentError do
42
- [].paginate({}, 5)
43
- end
44
- end
45
-
46
- def test_paginated_collection
47
- entries = %w(a b c)
48
- collection = create(2, 3, 10) do |pager|
49
- assert_equal entries, pager.replace(entries)
50
- end
51
-
52
- assert_equal entries, collection
53
- assert_respond_to_all collection, %w(page_count each offset size current_page per_page total_entries)
54
- assert_kind_of Array, collection
55
- assert_instance_of Array, collection.entries
56
- assert_equal 3, collection.offset
57
- assert_equal 4, collection.page_count
58
- assert !collection.out_of_bounds?
59
- end
60
-
61
- def test_out_of_bounds
62
- entries = create(2, 3, 2){}
63
- assert entries.out_of_bounds?
64
-
65
- entries = create(1, 3, 2){}
66
- assert !entries.out_of_bounds?
67
- end
68
-
69
- def test_guessing_total_count
70
- entries = create do |pager|
71
- # collection is shorter than limit
72
- pager.replace array
73
- end
74
- assert_equal 8, entries.total_entries
75
-
76
- entries = create(2, 5, 10) do |pager|
77
- # collection is shorter than limit, but we have an explicit count
78
- pager.replace array
79
- end
80
- assert_equal 10, entries.total_entries
81
-
82
- entries = create do |pager|
83
- # collection is the same as limit; we can't guess
84
- pager.replace array(5)
85
- end
86
- assert_equal nil, entries.total_entries
87
-
88
- entries = create do |pager|
89
- # collection is empty; we can't guess
90
- pager.replace array(0)
91
- end
92
- assert_equal nil, entries.total_entries
93
- end
94
-
95
- def test_invalid_page
96
- bad_input = [0, -1, nil, '', 'Schnitzel']
97
-
98
- bad_input.each do |bad|
99
- assert_raise(WillPaginate::InvalidPage) { create(bad) }
100
- end
101
- end
102
-
103
- def test_invalid_per_page_setting
104
- assert_raise(ArgumentError) { create(1, -1) }
105
- end
106
-
107
- private
108
- def create(page = 2, limit = 5, total = nil, &block)
109
- if block_given?
110
- WillPaginate::Collection.create(page, limit, total, &block)
111
- else
112
- WillPaginate::Collection.new(page, limit, total)
113
- end
114
- end
115
-
116
- def array(size = 3)
117
- Array.new(size)
118
- end
119
-
120
- def collect_deprecations
121
- old_behavior = WillPaginate::Deprecation.behavior
122
- deprecations = []
123
- WillPaginate::Deprecation.behavior = Proc.new do |message, callstack|
124
- deprecations << message
125
- end
126
- result = yield
127
- [result, deprecations]
128
- ensure
129
- WillPaginate::Deprecation.behavior = old_behavior
130
- end
131
- end