brisk-bills 0.6.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 (524) hide show
  1. data/CHANGELOG +8 -0
  2. data/COPYING +674 -0
  3. data/COPYING.LESSER +165 -0
  4. data/INSTALL +5 -0
  5. data/README +22 -0
  6. data/Rakefile +11 -0
  7. data/TODO.txt +112 -0
  8. data/app/controllers/admin/activities_controller.rb +151 -0
  9. data/app/controllers/admin/activities_controller/adjustment.rb +16 -0
  10. data/app/controllers/admin/activities_controller/labor.rb +119 -0
  11. data/app/controllers/admin/activities_controller/labor/slimtimer.rb +28 -0
  12. data/app/controllers/admin/activities_controller/material.rb +20 -0
  13. data/app/controllers/admin/activities_controller/proposal.rb +15 -0
  14. data/app/controllers/admin/activities_with_prices_controller.rb +68 -0
  15. data/app/controllers/admin/adjustments_controller.rb +22 -0
  16. data/app/controllers/admin/client_accounting_controller.rb +49 -0
  17. data/app/controllers/admin/client_financial_transactions_controller.rb +24 -0
  18. data/app/controllers/admin/client_representatives_controller.rb +31 -0
  19. data/app/controllers/admin/clients_controller.rb +31 -0
  20. data/app/controllers/admin/employee_client_labor_rate_controller.rb +30 -0
  21. data/app/controllers/admin/employees_controller.rb +32 -0
  22. data/app/controllers/admin/employees_controller/slimtimer.rb +29 -0
  23. data/app/controllers/admin/invoices_controller.rb +165 -0
  24. data/app/controllers/admin/labors_controller.rb +103 -0
  25. data/app/controllers/admin/labors_controller/slimtimer.rb +31 -0
  26. data/app/controllers/admin/materials_controller.rb +24 -0
  27. data/app/controllers/admin/payments_controller.rb +75 -0
  28. data/app/controllers/admin/proposals_controller.rb +22 -0
  29. data/app/controllers/admin/settings_controller.rb +23 -0
  30. data/app/controllers/application_controller.rb +22 -0
  31. data/app/controllers/authentication_controller.rb +131 -0
  32. data/app/helpers/activity_type_model_helper.rb +194 -0
  33. data/app/helpers/admin/activities_helper.rb +110 -0
  34. data/app/helpers/admin/activities_helper/labor_helper.rb +28 -0
  35. data/app/helpers/admin/activities_helper/proposal_helper.rb +11 -0
  36. data/app/helpers/admin/activities_helper/slimtimer_helper.rb +13 -0
  37. data/app/helpers/admin/activities_with_prices_helper.rb +17 -0
  38. data/app/helpers/admin/activity_tax_controller_helper.rb +48 -0
  39. data/app/helpers/admin/activity_tax_field_helper.rb +33 -0
  40. data/app/helpers/admin/activity_type_controller_helper.rb +83 -0
  41. data/app/helpers/admin/activity_type_field_helper.rb +45 -0
  42. data/app/helpers/admin/adjustments_helper.rb +5 -0
  43. data/app/helpers/admin/client_accounting_helper.rb +13 -0
  44. data/app/helpers/admin/client_financial_transactions_helper.rb +9 -0
  45. data/app/helpers/admin/client_representatives_helper.rb +26 -0
  46. data/app/helpers/admin/clients_helper.rb +6 -0
  47. data/app/helpers/admin/employee_client_labor_rate_helper.rb +77 -0
  48. data/app/helpers/admin/employees_helper.rb +9 -0
  49. data/app/helpers/admin/employees_helper/slimtimer_helper.rb +2 -0
  50. data/app/helpers/admin/has_credential_column_helper.rb +60 -0
  51. data/app/helpers/admin/invoices_helper.rb +59 -0
  52. data/app/helpers/admin/is_active_column_helper.rb +46 -0
  53. data/app/helpers/admin/labors_helper.rb +20 -0
  54. data/app/helpers/admin/labors_helper/slimtimer_helper.rb +13 -0
  55. data/app/helpers/admin/materials_helper.rb +5 -0
  56. data/app/helpers/admin/payments_helper.rb +41 -0
  57. data/app/helpers/admin/proposals_helper.rb +3 -0
  58. data/app/helpers/admin/settings_helper.rb +8 -0
  59. data/app/helpers/admin_layout_helper.rb +91 -0
  60. data/app/helpers/application_helper.rb +27 -0
  61. data/app/helpers/authentication_helper.rb +61 -0
  62. data/app/helpers/extensible_object_helper.rb +28 -0
  63. data/app/helpers/has_credential_model_helper.rb +39 -0
  64. data/app/helpers/invoice_pdf_helper.rb +71 -0
  65. data/app/helpers/is_active_model_helper.rb +40 -0
  66. data/app/helpers/money_model_helper.rb +21 -0
  67. data/app/model_views/client_accounting.rb +5 -0
  68. data/app/model_views/client_financial_transaction.rb +15 -0
  69. data/app/model_views/invoices_with_total.rb +36 -0
  70. data/app/models/activity.rb +104 -0
  71. data/app/models/activity/adjustment.rb +34 -0
  72. data/app/models/activity/labor.rb +91 -0
  73. data/app/models/activity/labor/slimtimer.rb +28 -0
  74. data/app/models/activity/material.rb +16 -0
  75. data/app/models/activity/proposal.rb +17 -0
  76. data/app/models/activity_type.rb +2 -0
  77. data/app/models/client.rb +93 -0
  78. data/app/models/client_eventlog.rb +5 -0
  79. data/app/models/client_representative.rb +22 -0
  80. data/app/models/credential.rb +195 -0
  81. data/app/models/employee.rb +49 -0
  82. data/app/models/employee/labor.rb +13 -0
  83. data/app/models/employee/slimtimer.rb +43 -0
  84. data/app/models/employee_client_labor_rate.rb +20 -0
  85. data/app/models/invoice.rb +280 -0
  86. data/app/models/invoice_payment.rb +8 -0
  87. data/app/models/notifier.rb +85 -0
  88. data/app/models/payment.rb +108 -0
  89. data/app/models/payment_method.rb +7 -0
  90. data/app/models/setting.rb +39 -0
  91. data/app/models/slimtimer_task.rb +6 -0
  92. data/app/models/slimtimer_time_entry.rb +69 -0
  93. data/app/views/admin/activities/_adjustment_column.rhtml +23 -0
  94. data/app/views/admin/activities/_form.rhtml +20 -0
  95. data/app/views/admin/activities/_form_attribute.rhtml +12 -0
  96. data/app/views/admin/activities/_labor_column.rhtml +17 -0
  97. data/app/views/admin/activities/_material_column.rhtml +10 -0
  98. data/app/views/admin/activities/_proposal_column.rhtml +11 -0
  99. data/app/views/admin/activities_with_prices/move_to_invoice.rhtml +44 -0
  100. data/app/views/admin/activities_with_prices/move_to_invoice.rjs +9 -0
  101. data/app/views/admin/invoices/download.rpdf +224 -0
  102. data/app/views/authentication/email.rjs +9 -0
  103. data/app/views/authentication/login.rhtml +75 -0
  104. data/app/views/authentication/login.rjs +14 -0
  105. data/app/views/authentication/reset_password_via_token.rhtml +16 -0
  106. data/app/views/authentication/reset_password_via_token.rjs +6 -0
  107. data/app/views/authentication/sign_in_error.rjs +2 -0
  108. data/app/views/layouts/_navigation_tree.rhtml +15 -0
  109. data/app/views/layouts/admin.rhtml +26 -0
  110. data/app/views/layouts/public.rhtml +18 -0
  111. data/app/views/notifier/_email_footer.html.rhtml +12 -0
  112. data/app/views/notifier/_email_footer.plain.rhtml +3 -0
  113. data/app/views/notifier/_email_header.html.rhtml +53 -0
  114. data/app/views/notifier/invoice_available.html.rhtml +5 -0
  115. data/app/views/notifier/invoice_available.plain.rhtml +4 -0
  116. data/app/views/notifier/reset_password_requested.html.rhtml +15 -0
  117. data/app/views/notifier/reset_password_requested.plain.rhtml +9 -0
  118. data/bin/brisk-bills +51 -0
  119. data/config/boot.rb +164 -0
  120. data/config/environment.rb +39 -0
  121. data/config/environments/development.rb +17 -0
  122. data/config/environments/production.rb +18 -0
  123. data/config/environments/test.rb +19 -0
  124. data/config/locale/en.rb +26 -0
  125. data/config/routes.rb +20 -0
  126. data/config/secrets.yml +2 -0
  127. data/db/migrate/001_create_employees.rb +14 -0
  128. data/db/migrate/002_create_employee_slimtimers.rb +14 -0
  129. data/db/migrate/003_create_slimtimer_tasks.rb +21 -0
  130. data/db/migrate/004_create_slimtimer_time_entries.rb +25 -0
  131. data/db/migrate/005_create_clients.rb +12 -0
  132. data/db/migrate/006_create_client_representatives.rb +16 -0
  133. data/db/migrate/007_create_client_eventlogs.rb +13 -0
  134. data/db/migrate/008_create_activities.rb +17 -0
  135. data/db/migrate/009_create_activity_labors.rb +16 -0
  136. data/db/migrate/010_create_employee_client_labor_rates.rb +19 -0
  137. data/db/migrate/011_create_activity_adjustments.rb +16 -0
  138. data/db/migrate/012_create_activity_materials.rb +16 -0
  139. data/db/migrate/013_create_activity_proposals.rb +18 -0
  140. data/db/migrate/014_create_invoices.rb +16 -0
  141. data/db/migrate/015_create_payments.rb +18 -0
  142. data/db/migrate/016_create_payment_methods.rb +18 -0
  143. data/db/migrate/017_create_invoice_payments.rb +14 -0
  144. data/db/migrate/018_create_activity_types.rb +37 -0
  145. data/db/migrate/019_create_settings.rb +45 -0
  146. data/db/migrate/020_is_active_employees_clients.rb +11 -0
  147. data/db/migrate/021_create_views_and_indexes.rb +78 -0
  148. data/db/migrate/022_create_client_financial_transactions.rb +32 -0
  149. data/db/migrate/023_create_credentials_migrate_representatives.rb +133 -0
  150. data/db/migrate/024_updates_for_sales_tax.rb +91 -0
  151. data/db/migrate/025_alter_credentials_for_reset.rb +11 -0
  152. data/db/migrate/026_create_st_settings.rb +17 -0
  153. data/db/migrate/027_create_sessions.rb +16 -0
  154. data/db/migrate/028_money_to_cents.rb +136 -0
  155. data/db/schema.rb +301 -0
  156. data/lib/brisk-bills.rb +17 -0
  157. data/lib/brisk-bills/initializer.rb +100 -0
  158. data/lib/dti-navigation-menu/lib/dti-navigation-menu.rb +27 -0
  159. data/lib/generators/generator_base_extension.rb +16 -0
  160. data/lib/generators/instance/instance_generator.rb +117 -0
  161. data/lib/generators/instance/templates/databases/mysql.yml +47 -0
  162. data/lib/generators/instance/templates/instance_boot.rb +166 -0
  163. data/lib/generators/instance/templates/instance_environment.rb +65 -0
  164. data/lib/generators/instance/templates/instance_generate +18 -0
  165. data/lib/generators/instance/templates/instance_rakefile +3 -0
  166. data/lib/generators/instance/templates/instance_routes.rb +1 -0
  167. data/lib/tasks/create_last_months_invoices.rake +37 -0
  168. data/lib/tasks/credential_tasks.rake +47 -0
  169. data/lib/tasks/first_time_setup.rake +96 -0
  170. data/lib/tasks/instance.rake +27 -0
  171. data/lib/tasks/invoice_as_csv.rake +32 -0
  172. data/lib/tasks/package.rake +120 -0
  173. data/lib/tasks/slimtimer_import.rake +198 -0
  174. data/lib/utilities.rb +18 -0
  175. data/log/.keep +0 -0
  176. data/public/.htaccess +40 -0
  177. data/public/404.html +30 -0
  178. data/public/500.html +30 -0
  179. data/public/blank.html +33 -0
  180. data/public/blank_iframe.html +2 -0
  181. data/public/dispatch.cgi +10 -0
  182. data/public/dispatch.fcgi +24 -0
  183. data/public/dispatch.rb +10 -0
  184. data/public/favicon.ico +0 -0
  185. data/public/images/active_scaffold/DO_NOT_EDIT +2 -0
  186. data/public/images/active_scaffold/default/add.gif +0 -0
  187. data/public/images/active_scaffold/default/arrow_down.gif +0 -0
  188. data/public/images/active_scaffold/default/arrow_up.gif +0 -0
  189. data/public/images/active_scaffold/default/close.gif +0 -0
  190. data/public/images/active_scaffold/default/cross.png +0 -0
  191. data/public/images/active_scaffold/default/indicator-small.gif +0 -0
  192. data/public/images/active_scaffold/default/indicator.gif +0 -0
  193. data/public/images/active_scaffold/default/magnifier.png +0 -0
  194. data/public/images/background.gif +0 -0
  195. data/public/images/brisk-bills-logo.gif +0 -0
  196. data/public/images/calendar_date_select/calendar.gif +0 -0
  197. data/public/images/dti-logo.gif +0 -0
  198. data/public/images/dti-logo.jpg +0 -0
  199. data/public/images/favicon.ico +0 -0
  200. data/public/images/invoice-background.jpg +0 -0
  201. data/public/images/login-form-spinner.gif +0 -0
  202. data/public/images/nav-arrow.gif +0 -0
  203. data/public/images/notice-error.gif +0 -0
  204. data/public/images/notice-info.gif +0 -0
  205. data/public/images/rails.png +0 -0
  206. data/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
  207. data/public/javascripts/active_scaffold/default/active_scaffold.js +430 -0
  208. data/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
  209. data/public/javascripts/active_scaffold/default/form_enhancements.js +114 -0
  210. data/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
  211. data/public/javascripts/application.js +2 -0
  212. data/public/javascripts/briskbills-quick-helpers.js +9 -0
  213. data/public/javascripts/builder.js +136 -0
  214. data/public/javascripts/controls.js +963 -0
  215. data/public/javascripts/dragdrop.js +973 -0
  216. data/public/javascripts/effects.js +1128 -0
  217. data/public/javascripts/modalbox.js +573 -0
  218. data/public/javascripts/prototype.js +4320 -0
  219. data/public/javascripts/scriptaculous.js +58 -0
  220. data/public/javascripts/shadedborder.js +249 -0
  221. data/public/javascripts/slider.js +275 -0
  222. data/public/javascripts/sound.js +55 -0
  223. data/public/javascripts/unittest.js +568 -0
  224. data/public/robots.txt +1 -0
  225. data/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
  226. data/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
  227. data/public/stylesheets/active_scaffold/default/stylesheet.css +809 -0
  228. data/public/stylesheets/admin/global.css +152 -0
  229. data/public/stylesheets/admin/pages.css +137 -0
  230. data/public/stylesheets/admin/screen.css +3 -0
  231. data/public/stylesheets/admin/structure.css +88 -0
  232. data/public/stylesheets/modalbox.css +95 -0
  233. data/public/stylesheets/public/global.css +36 -0
  234. data/public/stylesheets/public/pages.css +105 -0
  235. data/public/stylesheets/public/screen.css +3 -0
  236. data/public/stylesheets/public/structure.css +0 -0
  237. data/public/stylesheets/spinner.gif +0 -0
  238. data/script/about +3 -0
  239. data/script/breakpointer +3 -0
  240. data/script/console +3 -0
  241. data/script/dbconsole +3 -0
  242. data/script/destroy +3 -0
  243. data/script/generate +3 -0
  244. data/script/performance/benchmarker +3 -0
  245. data/script/performance/profiler +3 -0
  246. data/script/performance/request +3 -0
  247. data/script/plugin +3 -0
  248. data/script/process/inspector +3 -0
  249. data/script/process/reaper +3 -0
  250. data/script/process/spawner +3 -0
  251. data/script/runner +3 -0
  252. data/script/server +3 -0
  253. data/test/fixtures/activities.yml +28 -0
  254. data/test/fixtures/activity_adjustments.yml +7 -0
  255. data/test/fixtures/activity_labors.yml +25 -0
  256. data/test/fixtures/activity_materials.yml +7 -0
  257. data/test/fixtures/activity_proposals.yml +7 -0
  258. data/test/fixtures/activity_types.yml +23 -0
  259. data/test/fixtures/client_eventlogs.yml +5 -0
  260. data/test/fixtures/client_financial_transactions.yml +7 -0
  261. data/test/fixtures/client_representatives.yml +56 -0
  262. data/test/fixtures/clients.yml +172 -0
  263. data/test/fixtures/credentials.yml +34 -0
  264. data/test/fixtures/employee_client_labor_rates.yml +365 -0
  265. data/test/fixtures/employee_slimtimers.yml +19 -0
  266. data/test/fixtures/employees.yml +22 -0
  267. data/test/fixtures/invoice_payments.yml +7 -0
  268. data/test/fixtures/invoices.yml +7 -0
  269. data/test/fixtures/payment_methods.yml +7 -0
  270. data/test/fixtures/payments.yml +7 -0
  271. data/test/fixtures/settings.yml +7 -0
  272. data/test/fixtures/slimtimer_tasks.yml +5 -0
  273. data/test/fixtures/slimtimer_time_entries.yml +5 -0
  274. data/test/functional/admin/activities_controller_test.rb +8 -0
  275. data/test/functional/admin/adjustments_controller_test.rb +8 -0
  276. data/test/functional/admin/client_accounting_controller_test.rb +8 -0
  277. data/test/functional/admin/client_financial_transactions_controller_test.rb +8 -0
  278. data/test/functional/admin/client_representatives_controller_test.rb +8 -0
  279. data/test/functional/admin/clients_controller_test.rb +8 -0
  280. data/test/functional/admin/employee_client_labor_rate_controller_test.rb +8 -0
  281. data/test/functional/admin/employees/slimtimer_controller_test.rb +8 -0
  282. data/test/functional/admin/employees_controller_test.rb +8 -0
  283. data/test/functional/admin/invoices_controller_test.rb +8 -0
  284. data/test/functional/admin/labors_controller_test.rb +8 -0
  285. data/test/functional/admin/materials_controller_test.rb +8 -0
  286. data/test/functional/admin/payments_controller_test.rb +8 -0
  287. data/test/functional/admin/proposals_controller_test.rb +8 -0
  288. data/test/functional/admin/settings_controller_test.rb +8 -0
  289. data/test/functional/authentication_controller_test.rb +8 -0
  290. data/test/test_helper.rb +30 -0
  291. data/test/test_unit_factory_helper.rb +154 -0
  292. data/test/unit/activity/adjustment_test.rb +8 -0
  293. data/test/unit/activity/labor_test.rb +279 -0
  294. data/test/unit/activity/material_test.rb +8 -0
  295. data/test/unit/activity/proposal_test.rb +8 -0
  296. data/test/unit/activity_test.rb +83 -0
  297. data/test/unit/activity_type_test.rb +8 -0
  298. data/test/unit/client_eventlog_test.rb +10 -0
  299. data/test/unit/client_financial_transaction_test.rb +8 -0
  300. data/test/unit/client_representative_test.rb +10 -0
  301. data/test/unit/client_test.rb +24 -0
  302. data/test/unit/credential_test.rb +217 -0
  303. data/test/unit/employee/slimtimer_test.rb +10 -0
  304. data/test/unit/employee_client_labor_rate_test.rb +8 -0
  305. data/test/unit/employee_test.rb +25 -0
  306. data/test/unit/invoice_payment_test.rb +8 -0
  307. data/test/unit/invoice_test.rb +459 -0
  308. data/test/unit/notifier_test.rb +9 -0
  309. data/test/unit/payment_method_test.rb +8 -0
  310. data/test/unit/payment_test.rb +155 -0
  311. data/test/unit/setting_test.rb +8 -0
  312. data/test/unit/slimtimer_task_test.rb +10 -0
  313. data/test/unit/slimtimer_time_entry_test.rb +132 -0
  314. data/vendor/plugins/InlineAttachment-0.3.0-modified/README +79 -0
  315. data/vendor/plugins/InlineAttachment-0.3.0-modified/init.rb +2 -0
  316. data/vendor/plugins/InlineAttachment-0.3.0-modified/lib/inline_attachment.rb +136 -0
  317. data/vendor/plugins/InlineAttachment-0.3.0-modified/lib/tmail_content_id.rb +40 -0
  318. data/vendor/plugins/active_scaffold/CHANGELOG +152 -0
  319. data/vendor/plugins/active_scaffold/MIT-LICENSE +20 -0
  320. data/vendor/plugins/active_scaffold/README +28 -0
  321. data/vendor/plugins/active_scaffold/Rakefile +24 -0
  322. data/vendor/plugins/active_scaffold/environment.rb +17 -0
  323. data/vendor/plugins/active_scaffold/frontends/default/images/add.gif +0 -0
  324. data/vendor/plugins/active_scaffold/frontends/default/images/arrow_down.gif +0 -0
  325. data/vendor/plugins/active_scaffold/frontends/default/images/arrow_up.gif +0 -0
  326. data/vendor/plugins/active_scaffold/frontends/default/images/close.gif +0 -0
  327. data/vendor/plugins/active_scaffold/frontends/default/images/cross.png +0 -0
  328. data/vendor/plugins/active_scaffold/frontends/default/images/indicator-small.gif +0 -0
  329. data/vendor/plugins/active_scaffold/frontends/default/images/indicator.gif +0 -0
  330. data/vendor/plugins/active_scaffold/frontends/default/images/magnifier.png +0 -0
  331. data/vendor/plugins/active_scaffold/frontends/default/javascripts/active_scaffold.js +430 -0
  332. data/vendor/plugins/active_scaffold/frontends/default/javascripts/dhtml_history.js +867 -0
  333. data/vendor/plugins/active_scaffold/frontends/default/javascripts/form_enhancements.js +114 -0
  334. data/vendor/plugins/active_scaffold/frontends/default/javascripts/rico_corner.js +370 -0
  335. data/vendor/plugins/active_scaffold/frontends/default/stylesheets/stylesheet-ie.css +35 -0
  336. data/vendor/plugins/active_scaffold/frontends/default/stylesheets/stylesheet.css +809 -0
  337. data/vendor/plugins/active_scaffold/frontends/default/views/_add_existing_form.html.erb +40 -0
  338. data/vendor/plugins/active_scaffold/frontends/default/views/_create_form.html.erb +49 -0
  339. data/vendor/plugins/active_scaffold/frontends/default/views/_create_form_on_list.html.erb +38 -0
  340. data/vendor/plugins/active_scaffold/frontends/default/views/_field_search.html.erb +45 -0
  341. data/vendor/plugins/active_scaffold/frontends/default/views/_form.html.erb +18 -0
  342. data/vendor/plugins/active_scaffold/frontends/default/views/_form_association.html.erb +20 -0
  343. data/vendor/plugins/active_scaffold/frontends/default/views/_form_association_footer.html.erb +42 -0
  344. data/vendor/plugins/active_scaffold/frontends/default/views/_form_association_header.html.erb +10 -0
  345. data/vendor/plugins/active_scaffold/frontends/default/views/_form_association_record.html.erb +27 -0
  346. data/vendor/plugins/active_scaffold/frontends/default/views/_form_attribute.html.erb +12 -0
  347. data/vendor/plugins/active_scaffold/frontends/default/views/_form_hidden_attribute.html.erb +1 -0
  348. data/vendor/plugins/active_scaffold/frontends/default/views/_form_messages.html.erb +5 -0
  349. data/vendor/plugins/active_scaffold/frontends/default/views/_horizontal_subform.html.erb +21 -0
  350. data/vendor/plugins/active_scaffold/frontends/default/views/_list.html.erb +37 -0
  351. data/vendor/plugins/active_scaffold/frontends/default/views/_list_actions.html.erb +13 -0
  352. data/vendor/plugins/active_scaffold/frontends/default/views/_list_calculations.html.erb +22 -0
  353. data/vendor/plugins/active_scaffold/frontends/default/views/_list_column_headings.html.erb +32 -0
  354. data/vendor/plugins/active_scaffold/frontends/default/views/_list_header.html.erb +14 -0
  355. data/vendor/plugins/active_scaffold/frontends/default/views/_list_inline_adapter.html.erb +9 -0
  356. data/vendor/plugins/active_scaffold/frontends/default/views/_list_pagination_links.html.erb +30 -0
  357. data/vendor/plugins/active_scaffold/frontends/default/views/_list_record.html.erb +35 -0
  358. data/vendor/plugins/active_scaffold/frontends/default/views/_live_search.html.erb +25 -0
  359. data/vendor/plugins/active_scaffold/frontends/default/views/_messages.html.erb +10 -0
  360. data/vendor/plugins/active_scaffold/frontends/default/views/_nested.html.erb +44 -0
  361. data/vendor/plugins/active_scaffold/frontends/default/views/_search.html.erb +21 -0
  362. data/vendor/plugins/active_scaffold/frontends/default/views/_show.html.erb +8 -0
  363. data/vendor/plugins/active_scaffold/frontends/default/views/_show_columns.html.erb +11 -0
  364. data/vendor/plugins/active_scaffold/frontends/default/views/_update_actions.html.erb +9 -0
  365. data/vendor/plugins/active_scaffold/frontends/default/views/_update_form.html.erb +53 -0
  366. data/vendor/plugins/active_scaffold/frontends/default/views/add_existing.js.rjs +16 -0
  367. data/vendor/plugins/active_scaffold/frontends/default/views/add_existing_form.html.erb +5 -0
  368. data/vendor/plugins/active_scaffold/frontends/default/views/create.html.erb +5 -0
  369. data/vendor/plugins/active_scaffold/frontends/default/views/delete.html.erb +13 -0
  370. data/vendor/plugins/active_scaffold/frontends/default/views/destroy.js.rjs +10 -0
  371. data/vendor/plugins/active_scaffold/frontends/default/views/edit_associated.js.rjs +15 -0
  372. data/vendor/plugins/active_scaffold/frontends/default/views/field_search.html.erb +5 -0
  373. data/vendor/plugins/active_scaffold/frontends/default/views/form_messages.js.rjs +1 -0
  374. data/vendor/plugins/active_scaffold/frontends/default/views/form_messages_on_create.js.rjs +2 -0
  375. data/vendor/plugins/active_scaffold/frontends/default/views/form_messages_on_update.js.rjs +2 -0
  376. data/vendor/plugins/active_scaffold/frontends/default/views/list.html.erb +44 -0
  377. data/vendor/plugins/active_scaffold/frontends/default/views/on_create.js.rjs +25 -0
  378. data/vendor/plugins/active_scaffold/frontends/default/views/on_update.js.rjs +11 -0
  379. data/vendor/plugins/active_scaffold/frontends/default/views/search.html.erb +5 -0
  380. data/vendor/plugins/active_scaffold/frontends/default/views/show.html.erb +5 -0
  381. data/vendor/plugins/active_scaffold/frontends/default/views/update.html.erb +8 -0
  382. data/vendor/plugins/active_scaffold/frontends/default/views/update_column.js.rjs +12 -0
  383. data/vendor/plugins/active_scaffold/init.rb +18 -0
  384. data/vendor/plugins/active_scaffold/install.rb +40 -0
  385. data/vendor/plugins/active_scaffold/install_assets.rb +36 -0
  386. data/vendor/plugins/active_scaffold/lib/active_record_permissions.rb +123 -0
  387. data/vendor/plugins/active_scaffold/lib/active_scaffold.rb +144 -0
  388. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/core.rb +102 -0
  389. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/create.rb +120 -0
  390. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/delete.rb +46 -0
  391. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/field_search.rb +46 -0
  392. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/list.rb +77 -0
  393. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/live_search.rb +46 -0
  394. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/nested.rb +215 -0
  395. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/search.rb +40 -0
  396. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/show.rb +34 -0
  397. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/subform.rb +17 -0
  398. data/vendor/plugins/active_scaffold/lib/active_scaffold/actions/update.rb +114 -0
  399. data/vendor/plugins/active_scaffold/lib/active_scaffold/attribute_params.rb +185 -0
  400. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/base.rb +37 -0
  401. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/core.rb +189 -0
  402. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/create.rb +43 -0
  403. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/delete.rb +25 -0
  404. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/field_search.rb +53 -0
  405. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/form.rb +49 -0
  406. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/list.rb +134 -0
  407. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/live_search.rb +52 -0
  408. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/nested.rb +31 -0
  409. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/search.rb +52 -0
  410. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/show.rb +39 -0
  411. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/subform.rb +33 -0
  412. data/vendor/plugins/active_scaffold/lib/active_scaffold/config/update.rb +32 -0
  413. data/vendor/plugins/active_scaffold/lib/active_scaffold/configurable.rb +29 -0
  414. data/vendor/plugins/active_scaffold/lib/active_scaffold/constraints.rb +178 -0
  415. data/vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/action_columns.rb +97 -0
  416. data/vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/action_link.rb +136 -0
  417. data/vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/action_links.rb +47 -0
  418. data/vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/actions.rb +45 -0
  419. data/vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/column.rb +297 -0
  420. data/vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/columns.rb +75 -0
  421. data/vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/error_message.rb +24 -0
  422. data/vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/set.rb +62 -0
  423. data/vendor/plugins/active_scaffold/lib/active_scaffold/data_structures/sorting.rb +89 -0
  424. data/vendor/plugins/active_scaffold/lib/active_scaffold/finder.rb +234 -0
  425. data/vendor/plugins/active_scaffold/lib/active_scaffold/helpers/association_helpers.rb +40 -0
  426. data/vendor/plugins/active_scaffold/lib/active_scaffold/helpers/controller_helpers.rb +25 -0
  427. data/vendor/plugins/active_scaffold/lib/active_scaffold/helpers/country_helpers.rb +348 -0
  428. data/vendor/plugins/active_scaffold/lib/active_scaffold/helpers/form_column_helpers.rb +267 -0
  429. data/vendor/plugins/active_scaffold/lib/active_scaffold/helpers/id_helpers.rb +125 -0
  430. data/vendor/plugins/active_scaffold/lib/active_scaffold/helpers/list_column_helpers.rb +178 -0
  431. data/vendor/plugins/active_scaffold/lib/active_scaffold/helpers/pagination_helpers.rb +37 -0
  432. data/vendor/plugins/active_scaffold/lib/active_scaffold/helpers/search_column_helpers.rb +172 -0
  433. data/vendor/plugins/active_scaffold/lib/active_scaffold/helpers/show_column_helpers.rb +46 -0
  434. data/vendor/plugins/active_scaffold/lib/active_scaffold/helpers/view_helpers.rb +196 -0
  435. data/vendor/plugins/active_scaffold/lib/active_scaffold/locale/en.rb +66 -0
  436. data/vendor/plugins/active_scaffold/lib/active_scaffold/locale/es.yml +64 -0
  437. data/vendor/plugins/active_scaffold/lib/active_scaffold/locale/hu.yml +62 -0
  438. data/vendor/plugins/active_scaffold/lib/bridges/bridge.rb +52 -0
  439. data/vendor/plugins/active_scaffold/lib/bridges/calendar_date_select/bridge.rb +11 -0
  440. data/vendor/plugins/active_scaffold/lib/bridges/calendar_date_select/lib/as_cds_bridge.rb +53 -0
  441. data/vendor/plugins/active_scaffold/lib/bridges/file_column/bridge.rb +12 -0
  442. data/vendor/plugins/active_scaffold/lib/bridges/file_column/lib/as_file_column_bridge.rb +49 -0
  443. data/vendor/plugins/active_scaffold/lib/bridges/file_column/lib/file_column_helpers.rb +51 -0
  444. data/vendor/plugins/active_scaffold/lib/bridges/file_column/lib/form_ui.rb +32 -0
  445. data/vendor/plugins/active_scaffold/lib/bridges/file_column/lib/list_ui.rb +26 -0
  446. data/vendor/plugins/active_scaffold/lib/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
  447. data/vendor/plugins/active_scaffold/lib/bridges/file_column/test/mock_model.rb +9 -0
  448. data/vendor/plugins/active_scaffold/lib/bridges/file_column/test/test_helper.rb +15 -0
  449. data/vendor/plugins/active_scaffold/lib/dhtml_confirm.rb +54 -0
  450. data/vendor/plugins/active_scaffold/lib/extensions/action_controller_rendering.rb +20 -0
  451. data/vendor/plugins/active_scaffold/lib/extensions/action_view_rendering.rb +87 -0
  452. data/vendor/plugins/active_scaffold/lib/extensions/array.rb +7 -0
  453. data/vendor/plugins/active_scaffold/lib/extensions/component_response_with_namespacing.rb +17 -0
  454. data/vendor/plugins/active_scaffold/lib/extensions/generic_view_paths.rb +33 -0
  455. data/vendor/plugins/active_scaffold/lib/extensions/localize.rb +10 -0
  456. data/vendor/plugins/active_scaffold/lib/extensions/name_option_for_datetime.rb +12 -0
  457. data/vendor/plugins/active_scaffold/lib/extensions/nil_id_in_url_params.rb +7 -0
  458. data/vendor/plugins/active_scaffold/lib/extensions/resources.rb +26 -0
  459. data/vendor/plugins/active_scaffold/lib/extensions/reverse_associations.rb +56 -0
  460. data/vendor/plugins/active_scaffold/lib/extensions/to_label.rb +8 -0
  461. data/vendor/plugins/active_scaffold/lib/extensions/unsaved_associated.rb +61 -0
  462. data/vendor/plugins/active_scaffold/lib/extensions/unsaved_record.rb +20 -0
  463. data/vendor/plugins/active_scaffold/lib/extensions/usa_state.rb +46 -0
  464. data/vendor/plugins/active_scaffold/lib/paginator.rb +136 -0
  465. data/vendor/plugins/active_scaffold/lib/responds_to_parent.rb +68 -0
  466. data/vendor/plugins/active_scaffold/public/blank.html +33 -0
  467. data/vendor/plugins/active_scaffold/test/bridges/bridge_test.rb +47 -0
  468. data/vendor/plugins/active_scaffold/test/config/create_test.rb +55 -0
  469. data/vendor/plugins/active_scaffold/test/config/list_test.rb +74 -0
  470. data/vendor/plugins/active_scaffold/test/config/update_test.rb +17 -0
  471. data/vendor/plugins/active_scaffold/test/const_mocker.rb +36 -0
  472. data/vendor/plugins/active_scaffold/test/data_structures/action_columns_test.rb +119 -0
  473. data/vendor/plugins/active_scaffold/test/data_structures/action_link_test.rb +78 -0
  474. data/vendor/plugins/active_scaffold/test/data_structures/action_links_test.rb +78 -0
  475. data/vendor/plugins/active_scaffold/test/data_structures/actions_test.rb +25 -0
  476. data/vendor/plugins/active_scaffold/test/data_structures/association_column_test.rb +41 -0
  477. data/vendor/plugins/active_scaffold/test/data_structures/column_test.rb +161 -0
  478. data/vendor/plugins/active_scaffold/test/data_structures/columns_test.rb +69 -0
  479. data/vendor/plugins/active_scaffold/test/data_structures/error_message_test.rb +28 -0
  480. data/vendor/plugins/active_scaffold/test/data_structures/set_test.rb +86 -0
  481. data/vendor/plugins/active_scaffold/test/data_structures/sorting_test.rb +96 -0
  482. data/vendor/plugins/active_scaffold/test/data_structures/standard_column_test.rb +34 -0
  483. data/vendor/plugins/active_scaffold/test/data_structures/virtual_column_test.rb +34 -0
  484. data/vendor/plugins/active_scaffold/test/extensions/active_record_test.rb +45 -0
  485. data/vendor/plugins/active_scaffold/test/extensions/array.rb +12 -0
  486. data/vendor/plugins/active_scaffold/test/misc/active_record_permissions.rb +154 -0
  487. data/vendor/plugins/active_scaffold/test/misc/configurable_test.rb +96 -0
  488. data/vendor/plugins/active_scaffold/test/misc/constraints_test.rb +175 -0
  489. data/vendor/plugins/active_scaffold/test/misc/finder_test.rb +70 -0
  490. data/vendor/plugins/active_scaffold/test/misc/lang_test.rb +12 -0
  491. data/vendor/plugins/active_scaffold/test/model_stub.rb +39 -0
  492. data/vendor/plugins/active_scaffold/test/run_all.rb +8 -0
  493. data/vendor/plugins/active_scaffold/test/test_helper.rb +13 -0
  494. data/vendor/plugins/active_scaffold/uninstall.rb +12 -0
  495. data/vendor/plugins/active_scaffold_as_gem/init.rb +21 -0
  496. data/vendor/plugins/active_scaffold_form_observation/init.rb +4 -0
  497. data/vendor/plugins/active_scaffold_form_observation/lib/active_scaffold_form_observation.rb +99 -0
  498. data/vendor/plugins/active_scaffold_full_refresh/init.rb +7 -0
  499. data/vendor/plugins/active_scaffold_full_refresh/lib/active_scaffold_full_refresh.rb +46 -0
  500. data/vendor/plugins/active_scaffold_move_column_under/init.rb +17 -0
  501. data/vendor/plugins/acts_as_money/README +24 -0
  502. data/vendor/plugins/acts_as_money/Rakefile +22 -0
  503. data/vendor/plugins/acts_as_money/init.rb +3 -0
  504. data/vendor/plugins/acts_as_money/install.rb +1 -0
  505. data/vendor/plugins/acts_as_money/lib/acts_as_money.rb +27 -0
  506. data/vendor/plugins/acts_as_money/tasks/money_tasks.rake +4 -0
  507. data/vendor/plugins/acts_as_money/test/money_test.rb +8 -0
  508. data/vendor/plugins/association_hacks/init.rb +1 -0
  509. data/vendor/plugins/association_hacks/lib/association_hacks.rb +27 -0
  510. data/vendor/plugins/railspdf/CHANGELOG +5 -0
  511. data/vendor/plugins/railspdf/README +88 -0
  512. data/vendor/plugins/railspdf/Rakefile +22 -0
  513. data/vendor/plugins/railspdf/TODO +1 -0
  514. data/vendor/plugins/railspdf/init.rb +3 -0
  515. data/vendor/plugins/railspdf/lib/railspdf.rb +65 -0
  516. data/vendor/plugins/railspdf/test/railspdf_test.rb +14 -0
  517. data/vendor/plugins/railspdf/test/test_helper.rb +9 -0
  518. data/vendor/plugins/render_component/README +37 -0
  519. data/vendor/plugins/render_component/Rakefile +22 -0
  520. data/vendor/plugins/render_component/init.rb +2 -0
  521. data/vendor/plugins/render_component/lib/components.rb +142 -0
  522. data/vendor/plugins/render_component/test/abstract_unit.rb +8 -0
  523. data/vendor/plugins/render_component/test/components_test.rb +140 -0
  524. metadata +657 -0
@@ -0,0 +1,25 @@
1
+ module ActiveScaffold
2
+ module Helpers
3
+ module ControllerHelpers
4
+ def self.included(controller)
5
+ controller.class_eval { helper_method :params_for }
6
+ end
7
+
8
+ include ActiveScaffold::Helpers::IdHelpers
9
+
10
+ def params_for(options = {})
11
+ # :adapter and :position are one-use rendering arguments. they should not propagate.
12
+ # :sort, :sort_direction, and :page are arguments that stored in the session. they need not propagate.
13
+ # and wow. no we don't want to propagate :record.
14
+ # :commit is a special rails variable for form buttons
15
+ blacklist = [:adapter, :position, :sort, :sort_direction, :page, :record, :commit, :_method]
16
+ unless @params_for
17
+ @params_for = params.clone.delete_if { |key, value| blacklist.include? key.to_sym if key }
18
+ @params_for[:controller] = '/' + @params_for[:controller] unless @params_for[:controller].first(1) == '/' # for namespaced controllers
19
+ @params_for.delete(:id) if @params_for[:id].nil?
20
+ end
21
+ @params_for.merge(options)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,348 @@
1
+ I18n.load_path << File.dirname(__FILE__) + '/../../../lib/active_scaffold/locale/en-countries.yml'
2
+
3
+ module ActiveScaffold
4
+ module Helpers
5
+ module CountryHelpers
6
+ # Return select and option tags for the given object and method, using country_options_for_select to generate the list of option tags.
7
+ def country_select(object, method, priority_countries = nil, options = {}, html_options = {})
8
+ ActionView::Helpers::InstanceTag.new(object, method, self, options.delete(:object)).to_country_select_tag(priority_countries, options, html_options)
9
+ end
10
+
11
+ def usa_state_select(object, method, priority_states = nil, options = {}, html_options = {})
12
+ ActionView::Helpers::InstanceTag.new(object, method, self, options.delete(:object)).to_usa_state_select_tag(priority_states, options, html_options)
13
+ end
14
+
15
+ # Returns a string of option tags for pretty much any country in the world. Supply a country name as +selected+ to
16
+ # have it marked as the selected option tag. You can also supply an array of countries as +priority_countries+, so
17
+ # that they will be listed above the rest of the (long) list.
18
+ #
19
+ # NOTE: Only the option tags are returned, you have to wrap this call in a regular HTML select tag.
20
+ def country_options_for_select(selected = nil, priority_countries = nil)
21
+ country_options = ""
22
+
23
+ if priority_countries
24
+ country_options += options_for_select(priority_countries, selected)
25
+ country_options += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
26
+ end
27
+
28
+ return country_options + options_for_select(COUNTRIES.collect {|country| [I18n.t("countries.#{country}"), country]}, selected)
29
+ end
30
+
31
+ # Returns a string of option tags for the states in the United States. Supply a state name as +selected to
32
+ # have it marked as the selected option tag. Included also is the option to set a couple of +priority_states+
33
+ # in case you want to highligh a local area
34
+ # NOTE: Only the option tags are returned from this method, wrap it in a <select>
35
+ def usa_state_options_for_select(selected = nil, priority_states = nil)
36
+ state_options = ""
37
+ if priority_states
38
+ state_options += options_for_select(priority_states, selected)
39
+ state_options += "<option>-------------</option>\n"
40
+ end
41
+
42
+ if priority_states && priority_states.include?(selected)
43
+ state_options += options_for_select(USASTATES - priority_states, selected)
44
+ else
45
+ state_options += options_for_select(USASTATES, selected)
46
+ end
47
+
48
+ return state_options
49
+ end
50
+ # All the countries included in the country_options output.
51
+ COUNTRIES = [
52
+ :afghanistan,
53
+ :aland_islands,
54
+ :albania,
55
+ :algeria,
56
+ :american_samoa,
57
+ :andorra,
58
+ :angola,
59
+ :anguilla,
60
+ :antarctica,
61
+ :antigua_and_barbuda,
62
+ :argentina,
63
+ :armenia,
64
+ :aruba,
65
+ :australia,
66
+ :austria,
67
+ :azerbaijan,
68
+ :bahamas,
69
+ :bahrain,
70
+ :bangladesh,
71
+ :barbados,
72
+ :belarus,
73
+ :belgium,
74
+ :belize,
75
+ :benin,
76
+ :bermuda,
77
+ :bhutan,
78
+ :bolivia,
79
+ :bosnia_and_herzegowina,
80
+ :botswana,
81
+ :bouvet_island,
82
+ :brazil,
83
+ :british_indian_ocean_territory,
84
+ :brunei_darussalam,
85
+ :bulgaria,
86
+ :burkina_faso,
87
+ :burundi,
88
+ :cambodia,
89
+ :cameroon,
90
+ :canada,
91
+ :cape_verde,
92
+ :cayman_islands,
93
+ :central_african_republic,
94
+ :chad,
95
+ :chile,
96
+ :china,
97
+ :christmas_island,
98
+ :cocos_keeling_islands,
99
+ :colombia,
100
+ :comoros,
101
+ :congo,
102
+ :congo_the_democratic_republic_of_the,
103
+ :cook_islands,
104
+ :costa_rica,
105
+ :cote_divoire,
106
+ :croatia,
107
+ :cuba,
108
+ :cyprus,
109
+ :czech_republic,
110
+ :denmark,
111
+ :djibouti,
112
+ :dominica,
113
+ :dominican_republic,
114
+ :ecuador,
115
+ :egypt,
116
+ :el_salvador,
117
+ :equatorial_guinea,
118
+ :eritrea,
119
+ :estonia,
120
+ :ethiopia,
121
+ :falkland_islands_malvinas,
122
+ :faroe_islands,
123
+ :fiji,
124
+ :finland,
125
+ :france,
126
+ :french_guiana,
127
+ :french_polynesia,
128
+ :french_southern_territories,
129
+ :gabon,
130
+ :gambia,
131
+ :georgia,
132
+ :germany,
133
+ :ghana,
134
+ :gibraltar,
135
+ :greece,
136
+ :greenland,
137
+ :grenada,
138
+ :guadeloupe,
139
+ :guam,
140
+ :guatemala,
141
+ :guernsey,
142
+ :guinea,
143
+ :guinea_bissau,
144
+ :guyana,
145
+ :haiti,
146
+ :heard_and_mcdonald_islands,
147
+ :holy_see_vatican_city_state,
148
+ :honduras,
149
+ :hong_kong,
150
+ :hungary,
151
+ :iceland,
152
+ :india,
153
+ :indonesia,
154
+ :iran_islamic_republic_of,
155
+ :iraq,
156
+ :ireland,
157
+ :isle_of_man,
158
+ :israel,
159
+ :italy,
160
+ :jamaica,
161
+ :japan,
162
+ :jersey,
163
+ :jordan,
164
+ :kazakhstan,
165
+ :kenya,
166
+ :kiribati,
167
+ :korea_democratic_peoples_republic_of,
168
+ :korea_republic_of,
169
+ :kuwait,
170
+ :kyrgyzstan,
171
+ :lao_peoples_democratic_republic,
172
+ :latvia,
173
+ :lebanon,
174
+ :lesotho,
175
+ :liberia,
176
+ :libyan_arab_jamahiriya,
177
+ :liechtenstein,
178
+ :lithuania,
179
+ :luxembourg,
180
+ :macao,
181
+ :macedonia_the_former_yugoslav_republic_of,
182
+ :madagascar,
183
+ :malawi,
184
+ :malaysia,
185
+ :maldives,
186
+ :mali,
187
+ :malta,
188
+ :marshall_islands,
189
+ :martinique,
190
+ :mauritania,
191
+ :mauritius,
192
+ :mayotte,
193
+ :mexico,
194
+ :micronesia_federated_states_of,
195
+ :moldova_republic_of,
196
+ :monaco,
197
+ :mongolia,
198
+ :montenegro,
199
+ :montserrat,
200
+ :morocco,
201
+ :mozambique,
202
+ :myanmar,
203
+ :namibia,
204
+ :nauru,
205
+ :nepal,
206
+ :netherlands,
207
+ :netherlands_antilles,
208
+ :new_caledonia,
209
+ :new_zealand,
210
+ :nicaragua,
211
+ :niger,
212
+ :nigeria,
213
+ :niue,
214
+ :norfolk_island,
215
+ :northern_mariana_islands,
216
+ :norway,
217
+ :oman,
218
+ :pakistan,
219
+ :palau,
220
+ :palestinian_territory_occupied,
221
+ :panama,
222
+ :papua_new_guinea,
223
+ :paraguay,
224
+ :peru,
225
+ :philippines,
226
+ :pitcairn,
227
+ :poland,
228
+ :portugal,
229
+ :puerto_rico,
230
+ :qatar,
231
+ :reunion,
232
+ :romania,
233
+ :russian_federation,
234
+ :rwanda,
235
+ :saint_barthelemy,
236
+ :saint_helena,
237
+ :saint_kitts_and_nevis,
238
+ :saint_lucia,
239
+ :saint_pierre_and_miquelon,
240
+ :saint_vincent_and_the_grenadines,
241
+ :samoa,
242
+ :san_marino,
243
+ :sao_tome_and_principe,
244
+ :saudi_arabia,
245
+ :senegal,
246
+ :serbia,
247
+ :seychelles,
248
+ :sierra_leone,
249
+ :singapore,
250
+ :slovakia,
251
+ :slovenia,
252
+ :solomon_islands,
253
+ :somalia,
254
+ :south_africa,
255
+ :south_georgia_and_the_south_sandwich_islands,
256
+ :spain,
257
+ :sri_lanka,
258
+ :sudan,
259
+ :suriname,
260
+ :svalbard_and_jan_mayen,
261
+ :swaziland,
262
+ :sweden,
263
+ :switzerland,
264
+ :syrian_arab_republic,
265
+ :taiwan_province_of_china,
266
+ :tajikistan,
267
+ :tanzania_united_republic_of,
268
+ :thailand,
269
+ :timor_leste,
270
+ :togo,
271
+ :tokelau,
272
+ :tonga,
273
+ :trinidad_and_tobago,
274
+ :tunisia,
275
+ :turkey,
276
+ :turkmenistan,
277
+ :turks_and_caicos_islands,
278
+ :tuvalu,
279
+ :uganda,
280
+ :ukraine,
281
+ :united_arab_emirates,
282
+ :united_kingdom,
283
+ :united_states,
284
+ :united_states_minor_outlying_islands,
285
+ :uruguay,
286
+ :uzbekistan,
287
+ :vanuatu,
288
+ :venezuela,
289
+ :viet_nam,
290
+ :virgin_islands_british,
291
+ :virgin_islands_us,
292
+ :wallis_and_futuna,
293
+ :western_sahara,
294
+ :yemen,
295
+ :zambia,
296
+ :zimbabwe] unless const_defined?("COUNTRIES")
297
+
298
+
299
+ USASTATES = [["Alabama", "AL"], ["Alaska", "AK"], ["Arizona", "AZ"], ["Arkansas", "AR"], ["California", "CA"], ["Colorado", "CO"], ["Connecticut", "CT"], ["Delaware", "DE"], ["District of Columbia", "DC"], ["Florida", "FL"], ["Georgia", "GA"], ["Hawaii", "HI"], ["Idaho", "ID"], ["Illinois", "IL"], ["Indiana", "IN"], ["Iowa", "IA"], ["Kansas", "KS"], ["Kentucky", "KY"], ["Louisiana", "LA"], ["Maine", "ME"], ["Maryland", "MD"], ["Massachusetts", "MA"], ["Michigan", "MI"], ["Minnesota", "MN"], ["Mississippi", "MS"], ["Missouri", "MO"], ["Montana", "MT"], ["Nebraska", "NE"], ["Nevada", "NV"], ["New Hampshire", "NH"], ["New Jersey", "NJ"], ["New Mexico", "NM"], ["New York", "NY"], ["North Carolina", "NC"], ["North Dakota", "ND"], ["Ohio", "OH"], ["Oklahoma", "OK"], ["Oregon", "OR"], ["Pennsylvania", "PA"], ["Rhode Island", "RI"], ["South Carolina", "SC"], ["South Dakota", "SD"], ["Tennessee", "TN"], ["Texas", "TX"], ["Utah", "UT"], ["Vermont", "VT"], ["Virginia", "VA"], ["Washington", "WA"], ["Wisconsin", "WI"], ["West Virginia", "WV"], ["Wyoming", "WY"]] unless const_defined?("USASTATES")
300
+
301
+ class ActionView::Helpers::InstanceTag #:nodoc:
302
+ include CountryHelpers
303
+
304
+ def to_country_select_tag(priority_countries, options, html_options)
305
+ html_options = html_options.stringify_keys
306
+ add_default_name_and_id(html_options)
307
+ value = value(object)
308
+ content_tag("select",
309
+ add_options(
310
+ country_options_for_select(value, priority_countries),
311
+ options, value
312
+ ), html_options
313
+ )
314
+ end
315
+
316
+ def to_usa_state_select_tag(priority_states, options, html_options)
317
+ html_options = html_options.stringify_keys
318
+ add_default_name_and_id(html_options)
319
+ value = value(object) if method(:value).arity > 0
320
+ if html_options[:name.to_s].include?('search')
321
+ html_options[:name.to_s] << '[]'
322
+ html_options[:multiple] = true
323
+ options[:include_blank] = true
324
+ end
325
+ content_tag("select", add_options(usa_state_options_for_select(value, priority_states), options, value), html_options)
326
+ end
327
+ end
328
+ end
329
+
330
+ module FormColumnHelpers
331
+ def active_scaffold_input_country(column, options)
332
+ priority = ["United States"]
333
+ select_options = {:prompt => as_(:_select_)}
334
+ select_options.merge!(options)
335
+ country_select(:record, column.name, column.options[:priority] || priority, select_options, column.options)
336
+ end
337
+
338
+ def active_scaffold_input_usa_state(column, options)
339
+ select_options = {:prompt => as_(:_select_)}
340
+ select_options.merge!(options)
341
+ select_options.delete(:size)
342
+ options.delete(:prompt)
343
+ options.delete(:priority)
344
+ usa_state_select(:record, column.name, column.options[:priority], select_options, column.options.merge!(options))
345
+ end
346
+ end
347
+ end
348
+ end
@@ -0,0 +1,267 @@
1
+ module ActiveScaffold
2
+ module Helpers
3
+ # Helpers that assist with the rendering of a Form Column
4
+ module FormColumnHelpers
5
+ # This method decides which input to use for the given column.
6
+ # It does not do any rendering. It only decides which method is responsible for rendering.
7
+ def active_scaffold_input_for(column, scope = nil)
8
+ options = active_scaffold_input_options(column, scope)
9
+
10
+ # first, check if the dev has created an override for this specific field
11
+ if override_form_field?(column)
12
+ send(override_form_field(column), @record, options[:name])
13
+
14
+ # second, check if the dev has specified a valid form_ui for this column
15
+ elsif column.form_ui and override_input?(column.form_ui)
16
+ send(override_input(column.form_ui), column, options)
17
+
18
+ # fallback: we get to make the decision
19
+ else
20
+ if column.association
21
+ # if we get here, it's because the column has a form_ui but not one ActiveScaffold knows about.
22
+ raise "Unknown form_ui `#{column.form_ui}' for column `#{column.name}'"
23
+ elsif column.virtual?
24
+ active_scaffold_input_virtual(column, options)
25
+
26
+ else # regular model attribute column
27
+ # if we (or someone else) have created a custom render option for the column type, use that
28
+ if override_input?(column.column.type)
29
+ send(override_input(column.column.type), column, options)
30
+ # final ultimate fallback: use rails' generic input method
31
+ else
32
+ # for textual fields we pass different options
33
+ text_types = [:text, :string, :integer, :float, :decimal]
34
+ options = active_scaffold_input_text_options(options) if text_types.include?(column.column.type)
35
+ input(:record, column.name, options.merge(column.options))
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ alias form_column active_scaffold_input_for
42
+
43
+ # the standard active scaffold options used for textual inputs
44
+ def active_scaffold_input_text_options(options = {})
45
+ options[:autocomplete] = 'off'
46
+ options[:class] = "#{options[:class]} text-input".strip
47
+ options
48
+ end
49
+
50
+ # the standard active scaffold options used for class, name and scope
51
+ def active_scaffold_input_options(column, scope = nil)
52
+ name = scope ? "record#{scope}[#{column.name}]" : "record[#{column.name}]"
53
+
54
+ # Fix for keeping unique IDs in subform
55
+ id_control = "record_#{column.name}_#{[params[:eid], params[:id]].compact.join '_'}"
56
+ id_control += scope.gsub(/(\[|\])/, '_').gsub('__', '_').gsub(/_$/, '') if scope
57
+
58
+ { :name => name, :class => "#{column.name}-input", :id => id_control}
59
+ end
60
+
61
+ ##
62
+ ## Form input methods
63
+ ##
64
+
65
+ def active_scaffold_input_singular_association(column, options)
66
+ associated = @record.send(column.association.name)
67
+
68
+ select_options = options_for_association(column.association)
69
+ select_options.unshift([ associated.to_label, associated.id ]) unless associated.nil? or select_options.find {|label, id| id == associated.id}
70
+
71
+ selected = associated.nil? ? nil : associated.id
72
+ method = column.association.macro == :belongs_to ? column.association.primary_key_name : column.name
73
+ options[:name] += '[id]'
74
+ select(:record, method, select_options.uniq, {:selected => selected, :include_blank => as_(:_select_)}, options)
75
+ end
76
+
77
+ def active_scaffold_input_plural_association(column, options)
78
+ associated_options = @record.send(column.association.name).collect {|r| [r.to_label, r.id]}
79
+ select_options = associated_options | options_for_association(column.association)
80
+ return as_(:no_options) if select_options.empty?
81
+
82
+ html = "<ul class=\"checkbox-list\" id=\"#{options[:id]}\">"
83
+
84
+ associated_ids = associated_options.collect {|a| a[1]}
85
+ select_options.each_with_index do |option, i|
86
+ label, id = option
87
+ this_name = "#{options[:name]}[#{i}][id]"
88
+ this_id = "#{options[:id]}_#{i}_id"
89
+ html << "<li>"
90
+ html << check_box_tag(this_name, id, associated_ids.include?(id), :id => this_id)
91
+ html << "<label for='#{this_id}'>"
92
+ html << label
93
+ html << "</label>"
94
+ html << "</li>"
95
+ end
96
+
97
+ html << '</ul>'
98
+ html << javascript_tag("new DraggableLists('#{options[:id]}')") if column.options[:draggable_lists]
99
+ html
100
+ end
101
+
102
+ def active_scaffold_input_select(column, options)
103
+ if column.singular_association?
104
+ active_scaffold_input_singular_association(column, options)
105
+ elsif column.plural_association?
106
+ active_scaffold_input_plural_association(column, options)
107
+ else
108
+ select(:record, column.name, column.options, { :selected => @record.send(column.name) }, options)
109
+ end
110
+ end
111
+
112
+ # only works for singular associations
113
+ # requires RecordSelect plugin to be installed and configured.
114
+ # ... maybe this should be provided in a bridge?
115
+ def active_scaffold_input_record_select(column, options)
116
+ unless column.association
117
+ raise ArgumentError, "record_select can only work against associations (and #{column.name} is not). A common mistake is to specify the foreign key field (like :user_id), instead of the association (:user)."
118
+ end
119
+ remote_controller = active_scaffold_controller_for(column.association.klass).controller_path
120
+
121
+ # if the opposite association is a :belongs_to (in that case association in this class must be has_one or has_many)
122
+ # then only show records that have not been associated yet
123
+ if [:has_one, :has_many].include?(column.association.macro)
124
+ params.merge!({column.association.primary_key_name => ''})
125
+ end
126
+
127
+ record_select_options = {:controller => remote_controller, :id => options[:id]}
128
+ record_select_options.merge!(active_scaffold_input_text_options)
129
+ record_select_options.merge!(column.options)
130
+
131
+ if column.singular_association?
132
+ record_select_field(options[:name], (@record.send(column.name) || column.association.klass.new), record_select_options)
133
+ elsif column.plural_association?
134
+ record_multi_select_field(options[:name], @record.send(column.name), record_select_options)
135
+ end
136
+ end
137
+
138
+ def active_scaffold_input_checkbox(column, options)
139
+ check_box(:record, column.name, options)
140
+ end
141
+
142
+ def active_scaffold_input_password(column, options)
143
+ options = active_scaffold_input_text_options(options)
144
+ password_field :record, column.name, options.merge(column.options)
145
+ end
146
+
147
+ def active_scaffold_input_textarea(column, options)
148
+ text_area(:record, column.name, options.merge(:cols => column.options[:cols], :rows => column.options[:rows]))
149
+ end
150
+
151
+ def active_scaffold_input_virtual(column, options)
152
+ options = active_scaffold_input_text_options(options)
153
+ text_field :record, column.name, options.merge(column.options)
154
+ end
155
+
156
+ #
157
+ # Column.type-based inputs
158
+ #
159
+
160
+ def active_scaffold_input_boolean(column, options)
161
+ select_options = []
162
+ select_options << [as_(:_select_), nil] if column.column.null
163
+ select_options << [as_(:true), true]
164
+ select_options << [as_(:false), false]
165
+
166
+ select_tag(options[:name], options_for_select(select_options, @record.send(column.name)))
167
+ end
168
+
169
+ def onsubmit
170
+ end
171
+
172
+ ##
173
+ ## Form column override signatures
174
+ ##
175
+
176
+ # add functionality for overriding subform partials from association class path
177
+ def override_subform_partial?(column)
178
+ path, partial_name = partial_pieces(override_subform_partial(column))
179
+ template_exists?(File.join(path, "_#{partial_name}"))
180
+ end
181
+
182
+ def override_subform_partial(column)
183
+ File.join(active_scaffold_controller_for(column.association.klass).controller_path, "subform") if column_renders_as(column) == :subform
184
+ end
185
+
186
+ def override_form_field_partial?(column)
187
+ path, partial_name = partial_pieces(override_form_field_partial(column))
188
+ template_exists?(File.join(path, "_#{partial_name}"))
189
+ end
190
+
191
+ # the naming convention for overriding form fields with partials
192
+ def override_form_field_partial(column)
193
+ "#{column.name}_form_column"
194
+ end
195
+
196
+ def override_form_field?(column)
197
+ respond_to?(override_form_field(column))
198
+ end
199
+
200
+ # the naming convention for overriding form fields with helpers
201
+ def override_form_field(column)
202
+ "#{column.name}_form_column"
203
+ end
204
+
205
+ def override_input?(form_ui)
206
+ respond_to?(override_input(form_ui))
207
+ end
208
+
209
+ # the naming convention for overriding form input types with helpers
210
+ def override_input(form_ui)
211
+ "active_scaffold_input_#{form_ui}"
212
+ end
213
+
214
+ def form_partial_for_column(column)
215
+ if override_form_field_partial?(column)
216
+ override_form_field_partial(column)
217
+ elsif column_renders_as(column) == :field or override_form_field?(column)
218
+ "form_attribute"
219
+ elsif column_renders_as(column) == :subform
220
+ "form_association"
221
+ elsif column_renders_as(column) == :hidden
222
+ "form_hidden_attribute"
223
+ end
224
+ end
225
+
226
+ def subform_partial_for_column(column)
227
+ if override_subform_partial?(column)
228
+ override_subform_partial(column)
229
+ else
230
+ "horizontal_subform"
231
+ end
232
+ end
233
+
234
+ ##
235
+ ## Macro-level rendering decisions for columns
236
+ ##
237
+
238
+ def column_renders_as(column)
239
+ if column.is_a? ActiveScaffold::DataStructures::ActionColumns
240
+ return :subsection
241
+ elsif column.active_record_class.locking_column.to_s == column.name.to_s
242
+ return :hidden
243
+ elsif column.association.nil? or column.form_ui or !active_scaffold_config_for(column.association.klass).actions.include?(:subform)
244
+ return :field
245
+ else
246
+ return :subform
247
+ end
248
+ end
249
+
250
+ def is_subsection?(column)
251
+ column_renders_as(column) == :subsection
252
+ end
253
+
254
+ def is_subform?(column)
255
+ column_renders_as(column) == :subform
256
+ end
257
+
258
+ def column_scope(column)
259
+ if column.plural_association?
260
+ "[#{column.name}][#{@record.id || generate_temporary_id}]"
261
+ else
262
+ "[#{column.name}]"
263
+ end
264
+ end
265
+ end
266
+ end
267
+ end