active_scaffold-sequel 0.3.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 (318) hide show
  1. data/CHANGELOG +179 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +36 -0
  4. data/app/assets/images/active_scaffold/add.gif +0 -0
  5. data/app/assets/images/active_scaffold/arrow_down.gif +0 -0
  6. data/app/assets/images/active_scaffold/arrow_up.gif +0 -0
  7. data/app/assets/images/active_scaffold/close.gif +0 -0
  8. data/app/assets/images/active_scaffold/close_touch.png +0 -0
  9. data/app/assets/images/active_scaffold/config.png +0 -0
  10. data/app/assets/images/active_scaffold/cross.png +0 -0
  11. data/app/assets/images/active_scaffold/gears.png +0 -0
  12. data/app/assets/images/active_scaffold/indicator-small.gif +0 -0
  13. data/app/assets/images/active_scaffold/indicator.gif +0 -0
  14. data/app/assets/images/active_scaffold/magnifier.png +0 -0
  15. data/app/assets/javascripts/active_scaffold.js.erb +19 -0
  16. data/app/assets/javascripts/jquery/active_scaffold.js +1057 -0
  17. data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +24 -0
  18. data/app/assets/javascripts/jquery/draggable_lists.js +27 -0
  19. data/app/assets/javascripts/jquery/jquery.editinplace.js +743 -0
  20. data/app/assets/javascripts/jquery/tiny_mce_bridge.js +7 -0
  21. data/app/assets/javascripts/prototype/active_scaffold.js +1052 -0
  22. data/app/assets/javascripts/prototype/dhtml_history.js +870 -0
  23. data/app/assets/javascripts/prototype/form_enhancements.js +117 -0
  24. data/app/assets/javascripts/prototype/rico_corner.js +370 -0
  25. data/app/assets/javascripts/prototype/tiny_mce_bridge.js +7 -0
  26. data/app/assets/stylesheets/active_scaffold-ie.css +35 -0
  27. data/app/assets/stylesheets/active_scaffold.css.scss +14 -0
  28. data/app/assets/stylesheets/active_scaffold_colors.css.scss +395 -0
  29. data/app/assets/stylesheets/active_scaffold_extensions.css.erb +2 -0
  30. data/app/assets/stylesheets/active_scaffold_images.css.scss +43 -0
  31. data/app/assets/stylesheets/active_scaffold_layout.css +912 -0
  32. data/app/assets/stylesheets/blue-theme.css +74 -0
  33. data/config/locales/de.yml +114 -0
  34. data/config/locales/en.yml +118 -0
  35. data/config/locales/es.yml +120 -0
  36. data/config/locales/fr.yml +121 -0
  37. data/config/locales/hu.yml +74 -0
  38. data/config/locales/ja.yml +73 -0
  39. data/config/locales/ru.yml +123 -0
  40. data/frontends/default/views/_action_group.html.erb +24 -0
  41. data/frontends/default/views/_add_existing_form.html.erb +30 -0
  42. data/frontends/default/views/_base_form.html.erb +51 -0
  43. data/frontends/default/views/_create_form.html.erb +8 -0
  44. data/frontends/default/views/_create_form_on_list.html.erb +6 -0
  45. data/frontends/default/views/_field_search.html.erb +32 -0
  46. data/frontends/default/views/_form.html.erb +24 -0
  47. data/frontends/default/views/_form_association.html.erb +15 -0
  48. data/frontends/default/views/_form_association_footer.html.erb +47 -0
  49. data/frontends/default/views/_form_attribute.html.erb +20 -0
  50. data/frontends/default/views/_form_hidden_attribute.html.erb +2 -0
  51. data/frontends/default/views/_form_messages.html.erb +5 -0
  52. data/frontends/default/views/_horizontal_subform.html.erb +28 -0
  53. data/frontends/default/views/_horizontal_subform_footer.html.erb +0 -0
  54. data/frontends/default/views/_horizontal_subform_header.html.erb +11 -0
  55. data/frontends/default/views/_horizontal_subform_record.html.erb +38 -0
  56. data/frontends/default/views/_human_conditions.html.erb +1 -0
  57. data/frontends/default/views/_list.html.erb +18 -0
  58. data/frontends/default/views/_list_actions.html.erb +15 -0
  59. data/frontends/default/views/_list_calculations.html.erb +16 -0
  60. data/frontends/default/views/_list_column_headings.html.erb +12 -0
  61. data/frontends/default/views/_list_header.html.erb +10 -0
  62. data/frontends/default/views/_list_inline_adapter.html.erb +10 -0
  63. data/frontends/default/views/_list_messages.html.erb +30 -0
  64. data/frontends/default/views/_list_pagination.html.erb +11 -0
  65. data/frontends/default/views/_list_pagination_links.html.erb +9 -0
  66. data/frontends/default/views/_list_record.html.erb +14 -0
  67. data/frontends/default/views/_list_record_columns.html.erb +8 -0
  68. data/frontends/default/views/_list_with_header.html.erb +36 -0
  69. data/frontends/default/views/_messages.html.erb +10 -0
  70. data/frontends/default/views/_render_field.js.erb +20 -0
  71. data/frontends/default/views/_row.html.erb +6 -0
  72. data/frontends/default/views/_search.html.erb +34 -0
  73. data/frontends/default/views/_search_attribute.html.erb +10 -0
  74. data/frontends/default/views/_show.html.erb +8 -0
  75. data/frontends/default/views/_show_columns.html.erb +15 -0
  76. data/frontends/default/views/_update_actions.html.erb +9 -0
  77. data/frontends/default/views/_update_form.html.erb +6 -0
  78. data/frontends/default/views/_vertical_subform.html.erb +12 -0
  79. data/frontends/default/views/_vertical_subform_record.html.erb +38 -0
  80. data/frontends/default/views/action_confirmation.html.erb +13 -0
  81. data/frontends/default/views/add_existing.js.erb +18 -0
  82. data/frontends/default/views/add_existing_form.html.erb +5 -0
  83. data/frontends/default/views/create.html.erb +5 -0
  84. data/frontends/default/views/delete.html.erb +13 -0
  85. data/frontends/default/views/destroy.js.erb +24 -0
  86. data/frontends/default/views/edit_associated.js.erb +12 -0
  87. data/frontends/default/views/field_search.html.erb +5 -0
  88. data/frontends/default/views/form_messages.js.erb +1 -0
  89. data/frontends/default/views/list.html.erb +1 -0
  90. data/frontends/default/views/on_action_update.js.erb +13 -0
  91. data/frontends/default/views/on_create.js.erb +47 -0
  92. data/frontends/default/views/on_mark_all.js.erb +12 -0
  93. data/frontends/default/views/on_update.js.erb +31 -0
  94. data/frontends/default/views/refresh_list.js.erb +1 -0
  95. data/frontends/default/views/render_field.js.erb +1 -0
  96. data/frontends/default/views/search.html.erb +5 -0
  97. data/frontends/default/views/show.html.erb +5 -0
  98. data/frontends/default/views/update.html.erb +8 -0
  99. data/frontends/default/views/update_column.js.erb +16 -0
  100. data/frontends/default/views/update_row.js.erb +1 -0
  101. data/lib/active_scaffold/actions/common_search.rb +25 -0
  102. data/lib/active_scaffold/actions/core.rb +197 -0
  103. data/lib/active_scaffold/actions/create.rb +148 -0
  104. data/lib/active_scaffold/actions/delete.rb +76 -0
  105. data/lib/active_scaffold/actions/field_search.rb +82 -0
  106. data/lib/active_scaffold/actions/list.rb +196 -0
  107. data/lib/active_scaffold/actions/mark.rb +75 -0
  108. data/lib/active_scaffold/actions/nested.rb +245 -0
  109. data/lib/active_scaffold/actions/search.rb +48 -0
  110. data/lib/active_scaffold/actions/show.rb +61 -0
  111. data/lib/active_scaffold/actions/subform.rb +23 -0
  112. data/lib/active_scaffold/actions/update.rb +150 -0
  113. data/lib/active_scaffold/active_record_permissions.rb +136 -0
  114. data/lib/active_scaffold/attribute_params.rb +208 -0
  115. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +39 -0
  116. data/lib/active_scaffold/bridges/ancestry.rb +5 -0
  117. data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +67 -0
  118. data/lib/active_scaffold/bridges/calendar_date_select.rb +24 -0
  119. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +107 -0
  120. data/lib/active_scaffold/bridges/cancan.rb +15 -0
  121. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +31 -0
  122. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge_helpers.rb +10 -0
  123. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +45 -0
  124. data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +17 -0
  125. data/lib/active_scaffold/bridges/carrierwave.rb +12 -0
  126. data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +358 -0
  127. data/lib/active_scaffold/bridges/country_helper.rb +9 -0
  128. data/lib/active_scaffold/bridges/date_picker/ext.rb +45 -0
  129. data/lib/active_scaffold/bridges/date_picker/helper.rb +180 -0
  130. data/lib/active_scaffold/bridges/date_picker.rb +23 -0
  131. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +34 -0
  132. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge_helpers.rb +10 -0
  133. data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +27 -0
  134. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +16 -0
  135. data/lib/active_scaffold/bridges/dragonfly.rb +9 -0
  136. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +48 -0
  137. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +57 -0
  138. data/lib/active_scaffold/bridges/file_column/form_ui.rb +34 -0
  139. data/lib/active_scaffold/bridges/file_column/list_ui.rb +26 -0
  140. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
  141. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +9 -0
  142. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +15 -0
  143. data/lib/active_scaffold/bridges/file_column.rb +11 -0
  144. data/lib/active_scaffold/bridges/paperclip/form_ui.rb +27 -0
  145. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +16 -0
  146. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +36 -0
  147. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +24 -0
  148. data/lib/active_scaffold/bridges/paperclip.rb +12 -0
  149. data/lib/active_scaffold/bridges/record_select/helpers.rb +86 -0
  150. data/lib/active_scaffold/bridges/record_select.rb +11 -0
  151. data/lib/active_scaffold/bridges/semantic_attributes/column.rb +20 -0
  152. data/lib/active_scaffold/bridges/semantic_attributes.rb +5 -0
  153. data/lib/active_scaffold/bridges/shared/date_bridge.rb +209 -0
  154. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +46 -0
  155. data/lib/active_scaffold/bridges/tiny_mce.rb +17 -0
  156. data/lib/active_scaffold/bridges.rb +61 -0
  157. data/lib/active_scaffold/config/base.rb +71 -0
  158. data/lib/active_scaffold/config/core.rb +219 -0
  159. data/lib/active_scaffold/config/create.rb +44 -0
  160. data/lib/active_scaffold/config/delete.rb +33 -0
  161. data/lib/active_scaffold/config/field_search.rb +76 -0
  162. data/lib/active_scaffold/config/form.rb +48 -0
  163. data/lib/active_scaffold/config/list.rb +196 -0
  164. data/lib/active_scaffold/config/mark.rb +35 -0
  165. data/lib/active_scaffold/config/nested.rb +42 -0
  166. data/lib/active_scaffold/config/search.rb +73 -0
  167. data/lib/active_scaffold/config/show.rb +32 -0
  168. data/lib/active_scaffold/config/subform.rb +35 -0
  169. data/lib/active_scaffold/config/update.rb +41 -0
  170. data/lib/active_scaffold/configurable.rb +29 -0
  171. data/lib/active_scaffold/constraints.rb +170 -0
  172. data/lib/active_scaffold/data_structures/action_columns.rb +140 -0
  173. data/lib/active_scaffold/data_structures/action_link.rb +179 -0
  174. data/lib/active_scaffold/data_structures/action_links.rb +185 -0
  175. data/lib/active_scaffold/data_structures/actions.rb +45 -0
  176. data/lib/active_scaffold/data_structures/bridge.rb +22 -0
  177. data/lib/active_scaffold/data_structures/column.rb +389 -0
  178. data/lib/active_scaffold/data_structures/columns.rb +75 -0
  179. data/lib/active_scaffold/data_structures/error_message.rb +24 -0
  180. data/lib/active_scaffold/data_structures/nested_info.rb +130 -0
  181. data/lib/active_scaffold/data_structures/set.rb +57 -0
  182. data/lib/active_scaffold/data_structures/sorting.rb +172 -0
  183. data/lib/active_scaffold/engine.rb +4 -0
  184. data/lib/active_scaffold/extensions/action_controller_rendering.rb +22 -0
  185. data/lib/active_scaffold/extensions/action_view_rendering.rb +115 -0
  186. data/lib/active_scaffold/extensions/active_record_offset.rb +12 -0
  187. data/lib/active_scaffold/extensions/array.rb +7 -0
  188. data/lib/active_scaffold/extensions/cache_association.rb +16 -0
  189. data/lib/active_scaffold/extensions/localize.rb +10 -0
  190. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +12 -0
  191. data/lib/active_scaffold/extensions/nil_id_in_url_params.rb +7 -0
  192. data/lib/active_scaffold/extensions/paginator_extensions.rb +26 -0
  193. data/lib/active_scaffold/extensions/routing_mapper.rb +48 -0
  194. data/lib/active_scaffold/extensions/to_label.rb +8 -0
  195. data/lib/active_scaffold/extensions/unsaved_associated.rb +60 -0
  196. data/lib/active_scaffold/extensions/unsaved_record.rb +20 -0
  197. data/lib/active_scaffold/extensions/usa_state.rb +46 -0
  198. data/lib/active_scaffold/finder.rb +372 -0
  199. data/lib/active_scaffold/helpers/association_helpers.rb +48 -0
  200. data/lib/active_scaffold/helpers/controller_helpers.rb +88 -0
  201. data/lib/active_scaffold/helpers/form_column_helpers.rb +321 -0
  202. data/lib/active_scaffold/helpers/human_condition_helpers.rb +62 -0
  203. data/lib/active_scaffold/helpers/id_helpers.rb +127 -0
  204. data/lib/active_scaffold/helpers/list_column_helpers.rb +340 -0
  205. data/lib/active_scaffold/helpers/pagination_helpers.rb +55 -0
  206. data/lib/active_scaffold/helpers/search_column_helpers.rb +267 -0
  207. data/lib/active_scaffold/helpers/show_column_helpers.rb +50 -0
  208. data/lib/active_scaffold/helpers/view_helpers.rb +342 -0
  209. data/lib/active_scaffold/marked_model.rb +38 -0
  210. data/lib/active_scaffold/paginator.rb +136 -0
  211. data/lib/active_scaffold/responds_to_parent.rb +70 -0
  212. data/lib/active_scaffold/version.rb +9 -0
  213. data/lib/active_scaffold.rb +368 -0
  214. data/lib/active_scaffold_env.rb +11 -0
  215. data/lib/generators/active_scaffold/USAGE +29 -0
  216. data/lib/generators/active_scaffold/active_scaffold_generator.rb +20 -0
  217. data/lib/generators/active_scaffold_controller/USAGE +19 -0
  218. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +29 -0
  219. data/lib/generators/active_scaffold_controller/templates/controller.rb +4 -0
  220. data/lib/generators/active_scaffold_controller/templates/helper.rb +2 -0
  221. data/public/blank.html +33 -0
  222. data/shoulda_macros/macros.rb +136 -0
  223. data/test/bridges/active_scaffold_dependent_protect_test.rb +34 -0
  224. data/test/bridges/bridge_test.rb +90 -0
  225. data/test/bridges/company.rb +81 -0
  226. data/test/bridges/paperclip_test.rb +68 -0
  227. data/test/bridges/tiny_mce_test.rb +27 -0
  228. data/test/bridges/unobtrusive_date_picker_test.rb +49 -0
  229. data/test/bridges/validation_reflection_test.rb +57 -0
  230. data/test/config/base_test.rb +15 -0
  231. data/test/config/core_test.rb +58 -0
  232. data/test/config/create_test.rb +58 -0
  233. data/test/config/delete_test.rb +33 -0
  234. data/test/config/field_search_test.rb +47 -0
  235. data/test/config/list_test.rb +129 -0
  236. data/test/config/nested_test.rb +62 -0
  237. data/test/config/search_test.rb +60 -0
  238. data/test/config/show_test.rb +43 -0
  239. data/test/config/subform_test.rb +17 -0
  240. data/test/config/update_test.rb +40 -0
  241. data/test/const_mocker.rb +36 -0
  242. data/test/data_structures/action_columns_test.rb +113 -0
  243. data/test/data_structures/action_link_test.rb +78 -0
  244. data/test/data_structures/action_links_test.rb +78 -0
  245. data/test/data_structures/actions_test.rb +25 -0
  246. data/test/data_structures/association_column_test.rb +42 -0
  247. data/test/data_structures/column_test.rb +185 -0
  248. data/test/data_structures/columns_test.rb +69 -0
  249. data/test/data_structures/error_message_test.rb +28 -0
  250. data/test/data_structures/set_test.rb +86 -0
  251. data/test/data_structures/sorting_test.rb +126 -0
  252. data/test/data_structures/standard_column_test.rb +24 -0
  253. data/test/data_structures/virtual_column_test.rb +23 -0
  254. data/test/extensions/active_record_test.rb +45 -0
  255. data/test/extensions/array_test.rb +12 -0
  256. data/test/helpers/form_column_helpers_test.rb +31 -0
  257. data/test/helpers/list_column_helpers_test.rb +42 -0
  258. data/test/helpers/pagination_helpers_test.rb +59 -0
  259. data/test/misc/active_record_permissions_test.rb +154 -0
  260. data/test/misc/attribute_params_test.rb +146 -0
  261. data/test/misc/configurable_test.rb +96 -0
  262. data/test/misc/constraints_test.rb +193 -0
  263. data/test/misc/finder_test.rb +92 -0
  264. data/test/misc/lang_test.rb +11 -0
  265. data/test/mock_app/app/controllers/application_controller.rb +10 -0
  266. data/test/mock_app/app/helpers/application_helper.rb +3 -0
  267. data/test/mock_app/config/boot.rb +110 -0
  268. data/test/mock_app/config/database.yml +16 -0
  269. data/test/mock_app/config/environment.rb +43 -0
  270. data/test/mock_app/config/environments/development.rb +17 -0
  271. data/test/mock_app/config/environments/production.rb +28 -0
  272. data/test/mock_app/config/environments/test.rb +28 -0
  273. data/test/mock_app/config/initializers/backtrace_silencers.rb +7 -0
  274. data/test/mock_app/config/initializers/inflections.rb +10 -0
  275. data/test/mock_app/config/initializers/mime_types.rb +5 -0
  276. data/test/mock_app/config/initializers/new_rails_defaults.rb +19 -0
  277. data/test/mock_app/config/initializers/session_store.rb +15 -0
  278. data/test/mock_app/config/locales/en.yml +5 -0
  279. data/test/mock_app/config/routes.rb +43 -0
  280. data/test/mock_app/db/test.sqlite3 +1 -0
  281. data/test/mock_app/public/blank.html +33 -0
  282. data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +2 -0
  283. data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
  284. data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
  285. data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
  286. data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
  287. data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
  288. data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
  289. data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
  290. data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
  291. data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
  292. data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +532 -0
  293. data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
  294. data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +117 -0
  295. data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
  296. data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
  297. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
  298. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +848 -0
  299. data/test/model_stub.rb +55 -0
  300. data/test/run_all.rb +8 -0
  301. data/test/test_helper.rb +39 -0
  302. data/vendor/assets/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  303. data/vendor/assets/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  304. data/vendor/assets/images/ui-bg_flat_10_000000_40x100.png +0 -0
  305. data/vendor/assets/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  306. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  307. data/vendor/assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  308. data/vendor/assets/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  309. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  310. data/vendor/assets/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  311. data/vendor/assets/images/ui-icons_222222_256x240.png +0 -0
  312. data/vendor/assets/images/ui-icons_228ef1_256x240.png +0 -0
  313. data/vendor/assets/images/ui-icons_ef8c08_256x240.png +0 -0
  314. data/vendor/assets/images/ui-icons_ffd27a_256x240.png +0 -0
  315. data/vendor/assets/images/ui-icons_ffffff_256x240.png +0 -0
  316. data/vendor/assets/javascripts/jquery-ui-timepicker-addon.js +1276 -0
  317. data/vendor/assets/stylesheets/jquery-ui.css +568 -0
  318. metadata +502 -0
@@ -0,0 +1,219 @@
1
+ module ActiveScaffold::Config
2
+ # to fix the ckeditor bridge problem
3
+ class Core < ActiveScaffold::Config::Base
4
+ # code commented out (see above)
5
+ #class Core < Base
6
+ # global level configuration
7
+ # --------------------------
8
+
9
+ # provides read/write access to the global Actions DataStructure
10
+ cattr_reader :actions
11
+ def self.actions=(val)
12
+ @@actions = ActiveScaffold::DataStructures::Actions.new(*val)
13
+ end
14
+ self.actions = [:create, :list, :search, :update, :delete, :show, :nested, :subform]
15
+
16
+ # configures where the ActiveScaffold plugin itself is located. there is no instance version of this.
17
+ cattr_accessor :plugin_directory
18
+ @@plugin_directory = File.expand_path(__FILE__).match(%{(^.*)/lib/active_scaffold/config/core.rb})[1]
19
+
20
+ # lets you specify a global ActiveScaffold frontend.
21
+ cattr_accessor :frontend
22
+ @@frontend = :default
23
+
24
+ # lets you specify a global ActiveScaffold theme for your frontend.
25
+ cattr_accessor :theme
26
+ @@theme = :default
27
+
28
+ # lets you disable the DHTML history
29
+ def self.dhtml_history=(val)
30
+ @@dhtml_history = val
31
+ end
32
+ def self.dhtml_history?
33
+ @@dhtml_history ? true : false
34
+ end
35
+ @@dhtml_history = true
36
+
37
+ # action links are used by actions to tie together. you can use them, too! this is a collection of ActiveScaffold::DataStructures::ActionLink objects.
38
+ cattr_reader :action_links
39
+ @@action_links = ActiveScaffold::DataStructures::ActionLinks.new
40
+
41
+ # access to the permissions configuration.
42
+ # configuration options include:
43
+ # * current_user_method - what method on the controller returns the current user. default: :current_user
44
+ # * default_permission - what the default permission is. default: true
45
+ def self.security
46
+ ModelPermissions
47
+ end
48
+
49
+ # columns that should be ignored for every model. these should be metadata columns like change dates, versions, etc.
50
+ # values in this array may be symbols or strings.
51
+ def self.ignore_columns
52
+ @@ignore_columns
53
+ end
54
+ def self.ignore_columns=(val)
55
+ @@ignore_columns = ActiveScaffold::DataStructures::Set.new(*val)
56
+ end
57
+ @@ignore_columns = ActiveScaffold::DataStructures::Set.new
58
+
59
+ # lets you specify whether add a create link for each sti child
60
+ cattr_accessor :sti_create_links
61
+ @@sti_create_links = true
62
+
63
+ # instance-level configuration
64
+ # ----------------------------
65
+
66
+ # provides read/write access to the local Actions DataStructure
67
+ attr_reader :actions
68
+ def actions=(args)
69
+ @actions = ActiveScaffold::DataStructures::Actions.new(*args)
70
+ end
71
+
72
+ # provides read/write access to the local Columns DataStructure
73
+ attr_reader :columns
74
+ def columns=(val)
75
+ @columns._inheritable = val.collect {|c| c.to_sym}
76
+ # Add virtual columns
77
+ @columns << val.collect {|c| c.to_sym unless @columns[c.to_sym]}.compact
78
+ end
79
+
80
+ # lets you override the global ActiveScaffold frontend for a specific controller
81
+ attr_accessor :frontend
82
+
83
+ # lets you override the global ActiveScaffold theme for a specific controller
84
+ attr_accessor :theme
85
+
86
+ # lets you specify whether add a create link for each sti child for a specific controller
87
+ attr_accessor :sti_create_links
88
+ def add_sti_create_links?
89
+ self.sti_create_links and not self.sti_children.nil?
90
+ end
91
+
92
+ # action links are used by actions to tie together. they appear as links for each record, or general links for the ActiveScaffold.
93
+ attr_reader :action_links
94
+
95
+ # a generally-applicable name for this ActiveScaffold ... will be used for generating page/section headers
96
+ attr_writer :label
97
+ def label(options={})
98
+ as_(@label, options) || model.model_name.human(options.merge(options[:count].to_i == 1 ? {} : {:default => model.name.pluralize}))
99
+ end
100
+
101
+ # STI children models, use an array of model names
102
+ attr_accessor :sti_children
103
+
104
+ ##
105
+ ## internal usage only below this point
106
+ ## ------------------------------------
107
+
108
+ def initialize(model_id)
109
+ # model_id is the only absolutely required configuration value. it is also not publicly accessible.
110
+ @model_id = model_id
111
+
112
+ # inherit the actions list directly from the global level
113
+ @actions = self.class.actions.clone
114
+
115
+ # create a new default columns datastructure, since it doesn't make sense before now
116
+ attribute_names = self.model.columns.sort_by {|c| c.to_s}
117
+ association_column_names = self.model.associations.sort_by {|c| c.to_s}
118
+ @columns = ActiveScaffold::DataStructures::Columns.new(self.model, attribute_names + association_column_names)
119
+
120
+ # and then, let's remove some columns from the inheritable set.
121
+ @columns.exclude(*self.class.ignore_columns)
122
+ @columns.exclude(*@columns.find_all {|c| c.column and (c.column[:primary_key] or c.name.to_s =~ /(_id|_count)$/) }.collect {|c| c.name})
123
+
124
+ # inherit the global frontend
125
+ @frontend = self.class.frontend
126
+ @theme = self.class.theme
127
+ @sti_create_links = self.class.sti_create_links
128
+
129
+ # inherit from the global set of action links
130
+ @action_links = self.class.action_links.clone
131
+ end
132
+
133
+ # To be called after your finished configuration
134
+ def _load_action_columns
135
+ ActiveScaffold::DataStructures::ActionColumns.class_eval {include ActiveScaffold::DataStructures::ActionColumns::AfterConfiguration}
136
+
137
+ # then, register the column objects
138
+ self.actions.each do |action_name|
139
+ action = self.send(action_name)
140
+ next unless action.respond_to? :columns
141
+ action.columns.set_columns(self.columns)
142
+ end
143
+ end
144
+
145
+ # To be called after your finished configuration
146
+ def _configure_sti
147
+ column = self.model.respond_to?(:sti_key) ? self.model.sti_key : :type
148
+ if sti_create_links
149
+ self.columns[column].form_ui ||= :hidden
150
+ else
151
+ self.columns[column].form_ui ||= :select
152
+ self.columns[column].options ||= {}
153
+ self.columns[column].options[:options] = self.sti_children.collect do |model_name|
154
+ [model_name.to_s.camelize.constantize.model_name.human, model_name.to_s.camelize]
155
+ end
156
+ end
157
+ end
158
+
159
+ # configuration routing.
160
+ # we want to route calls named like an activated action to that action's global or local Config class.
161
+ # ---------------------------
162
+ def method_missing(name, *args)
163
+ @action_configs ||= {}
164
+ titled_name = name.to_s.camelcase
165
+ underscored_name = name.to_s.underscore.to_sym
166
+ klass = "ActiveScaffold::Config::#{titled_name}".constantize rescue nil
167
+ if klass
168
+ if @actions.include? underscored_name
169
+ return @action_configs[underscored_name] ||= klass.new(self)
170
+ else
171
+ raise "#{titled_name} is not enabled. Please enable it or remove any references in your configuration (e.g. config.#{underscored_name}.columns = [...])."
172
+ end
173
+ end
174
+ super
175
+ end
176
+
177
+ def self.method_missing(name, *args)
178
+ klass = "ActiveScaffold::Config::#{name.to_s.titleize}".constantize rescue nil
179
+ if @@actions.include? name.to_s.underscore and klass
180
+ return eval("ActiveScaffold::Config::#{name.to_s.titleize}")
181
+ end
182
+ super
183
+ end
184
+ # some utility methods
185
+ # --------------------
186
+
187
+ def model_id
188
+ @model_id
189
+ end
190
+
191
+ def model
192
+ @model ||= @model_id.to_s.camelize.constantize
193
+ end
194
+
195
+ # warning - this won't work as a per-request dynamic attribute in rails 2.0. You'll need to interact with Controller#generic_view_paths
196
+ def inherited_view_paths
197
+ @inherited_view_paths||=[]
198
+ end
199
+
200
+ # must be a class method so the layout doesn't depend on a controller that uses active_scaffold
201
+ # note that this is unaffected by per-controller frontend configuration.
202
+ def self.asset_path(filename, frontend = self.frontend)
203
+ "active_scaffold/#{frontend}/#{filename}"
204
+ end
205
+
206
+ # must be a class method so the layout doesn't depend on a controller that uses active_scaffold
207
+ # note that this is unaffected by per-controller frontend configuration.
208
+ def self.javascripts(frontend = self.frontend)
209
+ javascript_dir = File.join(Rails.public_path, "javascripts", asset_path('', frontend))
210
+ Dir.entries(javascript_dir).reject { |e| !e.match(/\.js$/) or (!self.dhtml_history? and e.match('dhtml_history')) }
211
+ end
212
+
213
+ def self.available_frontends
214
+ frontends_dir = File.join(Rails.root, "vendor", "plugins", ActiveScaffold::Config::Core.plugin_directory, "frontends")
215
+ Dir.entries(frontends_dir).reject { |e| e.match(/^\./) } # Get rid of files that start with .
216
+ end
217
+ end
218
+ end
219
+
@@ -0,0 +1,44 @@
1
+ module ActiveScaffold::Config
2
+ class Create < ActiveScaffold::Config::Form
3
+ self.crud_type = :create
4
+ def initialize(core_config)
5
+ super
6
+ @label = :create_model
7
+ self.persistent = self.class.persistent
8
+ self.action_after_create = self.class.action_after_create
9
+ self.refresh_list = self.class.refresh_list
10
+ end
11
+
12
+ # global level configuration
13
+ # --------------------------
14
+ # the ActionLink for this action
15
+ def self.link
16
+ @@link
17
+ end
18
+ def self.link=(val)
19
+ @@link = val
20
+ end
21
+ @@link = ActiveScaffold::DataStructures::ActionLink.new('new', :label => :create_new, :type => :collection, :security_method => :create_authorized?, :ignore_method => :create_ignore?)
22
+
23
+ # whether the form stays open after a create or not
24
+ cattr_accessor :persistent
25
+ @@persistent = false
26
+
27
+ # whether update form is opened after a create or not
28
+ cattr_accessor :action_after_create
29
+ @@action_after_create = nil
30
+
31
+ # whether we should refresh list after create or not
32
+ cattr_accessor :refresh_list
33
+ @@refresh_list = false
34
+
35
+ # whether the form stays open after a create or not
36
+ attr_accessor :persistent
37
+
38
+ # whether the form stays open after a create or not
39
+ attr_accessor :action_after_create
40
+
41
+ # whether we should refresh list after create or not
42
+ attr_accessor :refresh_list
43
+ end
44
+ end
@@ -0,0 +1,33 @@
1
+ module ActiveScaffold::Config
2
+ class Delete < Base
3
+ self.crud_type = :delete
4
+
5
+ def initialize(core_config)
6
+ super
7
+ # start with the ActionLink defined globally
8
+ @link = self.class.link.clone
9
+ @action_group = self.class.action_group.clone if self.class.action_group
10
+ self.refresh_list = self.class.refresh_list
11
+ end
12
+
13
+ # global level configuration
14
+ # --------------------------
15
+
16
+ # the ActionLink for this action
17
+ cattr_accessor :link
18
+ @@link = ActiveScaffold::DataStructures::ActionLink.new('destroy', :label => :delete, :type => :member, :confirm => :are_you_sure_to_delete, :method => :delete, :crud_type => :delete, :position => false, :parameters => {:destroy_action => true}, :security_method => :delete_authorized?, :ignore_method => :delete_ignore?)
19
+
20
+ # whether we should refresh list after destroy or not
21
+ cattr_accessor :refresh_list
22
+ @@refresh_list = false
23
+
24
+ # instance-level configuration
25
+ # ----------------------------
26
+
27
+ # the ActionLink for this action
28
+ attr_accessor :link
29
+
30
+ # whether we should refresh list after destroy or not
31
+ attr_accessor :refresh_list
32
+ end
33
+ end
@@ -0,0 +1,76 @@
1
+ module ActiveScaffold::Config
2
+ class FieldSearch < Base
3
+ self.crud_type = :read
4
+
5
+ def initialize(core_config)
6
+ super
7
+ @text_search = self.class.text_search
8
+
9
+ # start with the ActionLink defined globally
10
+ @link = self.class.link.clone
11
+ @action_group = self.class.action_group.clone if self.class.action_group
12
+ end
13
+
14
+
15
+ # global level configuration
16
+ # --------------------------
17
+ # the ActionLink for this action
18
+ cattr_reader :link
19
+ @@link = ActiveScaffold::DataStructures::ActionLink.new('show_search', :label => :search, :type => :collection, :security_method => :search_authorized?, :ignore_method => :search_ignore?)
20
+
21
+ # A flag for how the search should do full-text searching in the database:
22
+ # * :full: LIKE %?%
23
+ # * :start: LIKE ?%
24
+ # * :end: LIKE %?
25
+ # * false: LIKE ?
26
+ # Default is :full
27
+ cattr_accessor :text_search
28
+ @@text_search = :full
29
+
30
+ # instance-level configuration
31
+ # ----------------------------
32
+
33
+ # provides access to the list of columns specifically meant for the Search to use
34
+ def columns
35
+ # we want to delay initializing to the @core.columns set for as long as possible. Too soon and .search_sql will not be available to .searchable?
36
+ unless @columns
37
+ self.columns = @core.columns._inheritable
38
+ if @core.columns.active_record_class.respond_to?(:lock_column)
39
+ self.columns.exclude @core.columns.active_record_class.lock_column
40
+ end
41
+ end
42
+ @columns
43
+ end
44
+
45
+ public :columns=
46
+
47
+ # A flag for how the search should do full-text searching in the database:
48
+ # * :full: LIKE %?%
49
+ # * :start: LIKE ?%
50
+ # * :end: LIKE %?
51
+ # * false: LIKE ?
52
+ # Default is :full
53
+ attr_accessor :text_search
54
+
55
+ # the ActionLink for this action
56
+ attr_accessor :link
57
+
58
+ # rarely searched columns may be placed in a hidden subgroup
59
+ def optional_columns=(optionals)
60
+ @optional_columns= Array(optionals)
61
+ end
62
+
63
+ def optional_columns
64
+ @optional_columns ||= []
65
+ end
66
+
67
+ # default search params
68
+ # default_params = {:title => {"from"=>"test", "to"=>"", "opt"=>"%?%"}}
69
+ attr_accessor :default_params
70
+
71
+ # human conditions
72
+ # instead of just filtered you may show the user a humanized search condition statment
73
+ attr_accessor :human_conditions
74
+
75
+ end
76
+ end
@@ -0,0 +1,48 @@
1
+ module ActiveScaffold::Config
2
+ class Form < Base
3
+ def initialize(core_config)
4
+ super
5
+ # start with the ActionLink defined globally
6
+ @link = self.class.link.clone unless self.class.link.nil?
7
+ @action_group = self.class.action_group.clone if self.class.action_group
8
+ @show_unauthorized_columns = self.class.show_unauthorized_columns
9
+
10
+ # no global setting here because multipart should only be set for specific forms
11
+ @multipart = false
12
+ end
13
+
14
+ # global level configuration
15
+ # --------------------------
16
+ # show value of unauthorized columns instead of skip them
17
+ class_attribute :show_unauthorized_columns
18
+
19
+ # instance-level configuration
20
+ # ----------------------------
21
+
22
+ # show value of unauthorized columns instead of skip them
23
+ attr_accessor :show_unauthorized_columns
24
+
25
+ # the ActionLink for this action
26
+ attr_accessor :link
27
+
28
+ # the label for this Form action. used for the header.
29
+ attr_writer :label
30
+
31
+ # provides access to the list of columns specifically meant for the Form to use
32
+ def columns
33
+ unless @columns # lazy evaluation
34
+ self.columns = @core.columns._inheritable
35
+ self.columns.exclude :created_on, :created_at, :updated_on, :updated_at, :marked
36
+ end
37
+ @columns
38
+ end
39
+
40
+ public :columns=
41
+
42
+ # whether the form should be multipart
43
+ attr_writer :multipart
44
+ def multipart?
45
+ @multipart ? true : false
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,196 @@
1
+ module ActiveScaffold::Config
2
+ class List < Base
3
+ self.crud_type = :read
4
+
5
+ def initialize(core_config)
6
+ super
7
+ # inherit from global scope
8
+ # full configuration path is: defaults => global table => local table
9
+ @per_page = self.class.per_page
10
+ @page_links_window = self.class.page_links_window
11
+
12
+ # originates here
13
+ @sorting = ActiveScaffold::DataStructures::Sorting.new(@core.columns)
14
+ @sorting.set_default_sorting(@core.model)
15
+
16
+ # inherit from global scope
17
+ @empty_field_text = self.class.empty_field_text
18
+ @association_join_text = self.class.association_join_text
19
+ @pagination = self.class.pagination
20
+ @show_search_reset = true
21
+ @mark_records = self.class.mark_records
22
+ end
23
+
24
+ # global level configuration
25
+ # --------------------------
26
+ # how many records to show per page
27
+ cattr_accessor :per_page
28
+ @@per_page = 15
29
+
30
+ # how many page links around current page to show
31
+ cattr_accessor :page_links_window
32
+ @@page_links_window = 2
33
+
34
+ # what string to use when a field is empty
35
+ cattr_accessor :empty_field_text
36
+ @@empty_field_text = '-'
37
+
38
+ # what string to use to join records from plural associations
39
+ cattr_accessor :association_join_text
40
+ @@association_join_text = ', '
41
+
42
+ # What kind of pagination to use:
43
+ # * true: The usual pagination
44
+ # * :infinite: Treat the source as having an infinite number of pages (i.e. don't count the records; useful for large tables where counting is slow and we don't really care anyway)
45
+ # * false: Disable pagination
46
+ cattr_accessor :pagination
47
+ @@pagination = true
48
+
49
+ # Add a checkbox in front of each record to mark them and use them with a batch action later
50
+ cattr_accessor :mark_records
51
+
52
+ # instance-level configuration
53
+ # ----------------------------
54
+
55
+ # provides access to the list of columns specifically meant for the Table to use
56
+ def columns
57
+ self.columns = @core.columns._inheritable unless @columns # lazy evaluation
58
+ @columns
59
+ end
60
+
61
+ public :columns=
62
+
63
+ # how many rows to show at once
64
+ attr_accessor :per_page
65
+
66
+ # how many page links around current page to show
67
+ attr_accessor :page_links_window
68
+
69
+ # What kind of pagination to use:
70
+ # * true: The usual pagination
71
+ # * :infinite: Treat the source as having an infinite number of pages (i.e. don't count the records; useful for large tables where counting is slow and we don't really care anyway)
72
+ # * false: Disable pagination
73
+ attr_accessor :pagination
74
+
75
+ # what string to use when a field is empty
76
+ attr_accessor :empty_field_text
77
+
78
+ # what string to use to join records from plural associations
79
+ attr_accessor :association_join_text
80
+
81
+ # show a link to reset the search next to filtered message
82
+ attr_accessor :show_search_reset
83
+
84
+ # Add a checkbox in front of each record to mark them and use them with a batch action later
85
+ attr_accessor :mark_records
86
+
87
+ # the default sorting. should be an array of hashes of {column_name => direction}, e.g. [{:a => 'desc'}, {:b => 'asc'}]. to just sort on one column, you can simply provide a hash, though, e.g. {:a => 'desc'}.
88
+ def sorting=(val)
89
+ sorting.set(*val)
90
+ end
91
+ def sorting
92
+ @sorting ||= ActiveScaffold::DataStructures::Sorting.new(@core.columns)
93
+ end
94
+
95
+ # overwrite the includes used for the count sql query
96
+ attr_accessor :count_includes
97
+
98
+ # the label for this List action. used for the header.
99
+ attr_writer :label
100
+ def label
101
+ @label ? as_(@label, :count => 2) : @core.label(:count => 2)
102
+ end
103
+
104
+ attr_writer :no_entries_message
105
+ def no_entries_message
106
+ @no_entries_message ? @no_entries_message : :no_entries
107
+ end
108
+
109
+ attr_writer :filtered_message
110
+ def filtered_message
111
+ @filtered_message ? @filtered_message : :filtered
112
+ end
113
+
114
+ attr_writer :always_show_search
115
+ def always_show_search
116
+ @always_show_search && !search_partial.blank?
117
+ end
118
+
119
+ def search_partial
120
+ return "search" if @core.actions.include?(:search)
121
+ return "field_search" if @core.actions.include?(:field_search)
122
+ end
123
+
124
+ # always show create
125
+ attr_writer :always_show_create
126
+ def always_show_create
127
+ @always_show_create && @core.actions.include?(:create)
128
+ end
129
+
130
+ # if list view is nested hide nested_column
131
+ attr_writer :hide_nested_column
132
+ def hide_nested_column
133
+ @hide_nested_column.nil? ? true : @hide_nested_column
134
+ end
135
+
136
+ # might be set to open nested_link automatically in view
137
+ # conf.nested.add_link(:players)
138
+ # conf.list.nested_auto_open = {:players => 2}
139
+ # will open nested players view if there are 2 or less records in parent
140
+ attr_accessor :nested_auto_open
141
+
142
+ class UserSettings < UserSettings
143
+ # This label has alread been localized.
144
+ def label
145
+ @session[:label] ? @session[:label] : @conf.label
146
+ end
147
+
148
+ def per_page
149
+ @session['per_page'] = @params['limit'].to_i if @params.has_key? 'limit'
150
+ @session['per_page'] || @conf.per_page
151
+ end
152
+
153
+ def page
154
+ @session['page'] = @params['page'] if @params.has_key? 'page'
155
+ @session['page'] || 1
156
+ end
157
+
158
+ def page=(value = nil)
159
+ @session['page'] = value
160
+ end
161
+
162
+ attr_reader :nested_default_sorting
163
+
164
+ def nested_default_sorting=(options)
165
+ @nested_default_sorting ||= @conf.sorting.clone
166
+ @nested_default_sorting.set_nested_sorting(options[:table_name], options[:default_sorting])
167
+ end
168
+
169
+ def default_sorting
170
+ nested_default_sorting.nil? ? @conf.sorting : nested_default_sorting
171
+ end
172
+
173
+ def sorting
174
+ @sorting ||= get_sorting
175
+ end
176
+
177
+ def get_sorting
178
+ # we want to store as little as possible in the session, but we want to return a Sorting data structure. so we recreate it each page load based on session data.
179
+ @session['sort'] = [@params['sort'].to_sym, @params['sort_direction'] == 'DESC'] if @params['sort'] and @params['sort_direction']
180
+ @session['sort'] = nil if @params['sort_direction'] == 'reset'
181
+
182
+ if @session['sort']
183
+ sorting = @conf.sorting.clone
184
+ sorting.set(@session['sort'][1] ? @session['sort'][0].desc : @session['sort'][0])
185
+ return sorting
186
+ else
187
+ return default_sorting
188
+ end
189
+ end
190
+
191
+ def count_includes
192
+ @conf.count_includes
193
+ end
194
+ end
195
+ end
196
+ end
@@ -0,0 +1,35 @@
1
+ module ActiveScaffold::Config
2
+ class Mark < Base
3
+ self.crud_type = :read
4
+
5
+ # What kind of mark all mode to use:
6
+ # * :search: de-/mark all records using current search conditions
7
+ # * :page: de-/mark all records on current page
8
+ cattr_accessor :mark_all_mode
9
+ @@mark_all_mode = :search
10
+
11
+ attr_accessor :mark_all_mode
12
+
13
+ def initialize(core_config)
14
+ @core = core_config
15
+ @mark_all_mode = self.class.mark_all_mode
16
+ if core_config.actions.include?(:update)
17
+ @core.model.send(:include, ActiveScaffold::MarkedModel) unless @core.model.ancestors.include?(ActiveScaffold::MarkedModel)
18
+ add_mark_column
19
+ else
20
+ raise "Mark action requires update action in controller for model: #{core_config.model.to_s}"
21
+ end
22
+ end
23
+
24
+ protected
25
+
26
+ def add_mark_column
27
+ @core.columns.add :marked
28
+ @core.columns[:marked].label = 'M'
29
+ @core.columns[:marked].form_ui = :checkbox
30
+ @core.columns[:marked].inplace_edit = true
31
+ @core.columns[:marked].sort = false
32
+ @core.list.columns = [:marked] + @core.list.columns.names_without_auth_check unless @core.list.columns.include? :marked
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,42 @@
1
+ module ActiveScaffold::Config
2
+ class Nested < Base
3
+ self.crud_type = :read
4
+
5
+ def initialize(core_config)
6
+ super
7
+ @label = :add_existing_model
8
+ self.shallow_delete = self.class.shallow_delete
9
+ @action_group = self.class.action_group.clone if self.class.action_group
10
+ end
11
+
12
+ # global level configuration
13
+ # --------------------------
14
+ cattr_accessor :shallow_delete
15
+ @@shallow_delete = true
16
+
17
+ # instance-level configuration
18
+ # ----------------------------
19
+ attr_accessor :shallow_delete
20
+
21
+ # Add a nested ActionLink
22
+ def add_link(attribute, options = {})
23
+ column = @core.columns[attribute.to_sym]
24
+ unless column.nil? || column.association.nil?
25
+ options.reverse_merge! :security_method => :nested_authorized?, :label => column.association.associated_class.model_name.human({:count => 2, :default => column.association.associated_class.name.pluralize})
26
+ action_link = @core.link_for_association(column, options)
27
+ action_link.action ||= :index
28
+ @core.action_links.add_to_group(action_link, action_group) unless action_link.nil?
29
+ else
30
+
31
+ end
32
+ end
33
+
34
+ def add_scoped_link(named_scope, options = {})
35
+ action_link = @core.link_for_association_as_scope(named_scope.to_sym, options)
36
+ @core.action_links.add_to_group(action_link, action_group) unless action_link.nil?
37
+ end
38
+
39
+ # the label for this Nested action. used for the header.
40
+ attr_writer :label
41
+ end
42
+ end