active_scaffold 3.7.12 → 4.0.0.rc1

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 (303) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +9 -23
  3. data/README.md +3 -2
  4. data/app/assets/config/active_scaffold_manifest.js +3 -0
  5. data/app/assets/javascripts/active_scaffold.js.erb +24 -34
  6. data/app/assets/javascripts/jquery/active_scaffold.js +41 -58
  7. data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +1 -1
  8. data/app/assets/stylesheets/active_scaffold_colors.scss +0 -7
  9. data/app/assets/stylesheets/active_scaffold_extensions.css.erb +2 -2
  10. data/app/assets/stylesheets/active_scaffold_jquery_ui.css.erb +7 -7
  11. data/app/assets/stylesheets/active_scaffold_layout.css +57 -30
  12. data/app/views/active_scaffold_overrides/_add_existing_form.html.erb +10 -10
  13. data/app/views/active_scaffold_overrides/_base_form.html.erb +21 -21
  14. data/app/views/active_scaffold_overrides/_create_form.html.erb +10 -7
  15. data/app/views/active_scaffold_overrides/_create_form_on_list.html.erb +5 -5
  16. data/app/views/active_scaffold_overrides/_field_search.html.erb +6 -6
  17. data/app/views/active_scaffold_overrides/_form.html.erb +11 -14
  18. data/app/views/active_scaffold_overrides/_form_association.html.erb +21 -12
  19. data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +19 -10
  20. data/app/views/active_scaffold_overrides/_form_association_record.html.erb +15 -21
  21. data/app/views/active_scaffold_overrides/_form_messages.html.erb +2 -2
  22. data/app/views/active_scaffold_overrides/_horizontal_subform.html.erb +7 -6
  23. data/app/views/active_scaffold_overrides/_human_conditions.html.erb +2 -2
  24. data/app/views/active_scaffold_overrides/_list.html.erb +15 -8
  25. data/app/views/active_scaffold_overrides/_list_calculations.html.erb +2 -3
  26. data/app/views/active_scaffold_overrides/_list_header.html.erb +2 -2
  27. data/app/views/active_scaffold_overrides/_list_inline_adapter.html.erb +5 -5
  28. data/app/views/active_scaffold_overrides/_list_messages.html.erb +12 -3
  29. data/app/views/active_scaffold_overrides/_list_pagination.html.erb +3 -3
  30. data/app/views/active_scaffold_overrides/_list_pagination_links.html.erb +4 -4
  31. data/app/views/active_scaffold_overrides/_list_record.html.erb +6 -6
  32. data/app/views/active_scaffold_overrides/_list_with_header.html.erb +4 -4
  33. data/app/views/active_scaffold_overrides/_messages.html.erb +1 -1
  34. data/app/views/active_scaffold_overrides/_refresh_list.js.erb +2 -2
  35. data/app/views/active_scaffold_overrides/_render_field.js.erb +4 -4
  36. data/app/views/active_scaffold_overrides/_row.html.erb +1 -1
  37. data/app/views/active_scaffold_overrides/_search.html.erb +6 -5
  38. data/app/views/active_scaffold_overrides/_show.html.erb +3 -3
  39. data/app/views/active_scaffold_overrides/_show_actions.html.erb +1 -1
  40. data/app/views/active_scaffold_overrides/_show_association.html.erb +1 -1
  41. data/app/views/active_scaffold_overrides/_show_association_horizontal.html.erb +1 -1
  42. data/app/views/active_scaffold_overrides/_show_association_vertical.html.erb +1 -1
  43. data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
  44. data/app/views/active_scaffold_overrides/_show_horizontal_record.html.erb +1 -1
  45. data/app/views/active_scaffold_overrides/_update_actions.html.erb +1 -1
  46. data/app/views/active_scaffold_overrides/_update_calculations.js.erb +2 -2
  47. data/app/views/active_scaffold_overrides/_update_column.js.erb +8 -7
  48. data/app/views/active_scaffold_overrides/_update_form.html.erb +5 -5
  49. data/app/views/active_scaffold_overrides/_update_messages.js.erb +1 -1
  50. data/app/views/active_scaffold_overrides/_vertical_subform.html.erb +4 -3
  51. data/app/views/active_scaffold_overrides/action_confirmation.html.erb +3 -3
  52. data/app/views/active_scaffold_overrides/add_existing.js.erb +6 -6
  53. data/app/views/active_scaffold_overrides/add_existing_form.html.erb +1 -1
  54. data/app/views/active_scaffold_overrides/add_tab.js.erb +15 -0
  55. data/app/views/active_scaffold_overrides/create.html.erb +1 -1
  56. data/app/views/active_scaffold_overrides/delete.html.erb +4 -4
  57. data/app/views/active_scaffold_overrides/destroy.js.erb +15 -13
  58. data/app/views/active_scaffold_overrides/edit_associated.js.erb +3 -3
  59. data/app/views/active_scaffold_overrides/field_search.html.erb +1 -1
  60. data/app/views/active_scaffold_overrides/form_messages.js.erb +1 -1
  61. data/app/views/active_scaffold_overrides/list.html.erb +1 -1
  62. data/app/views/active_scaffold_overrides/on_action_update.js.erb +13 -8
  63. data/app/views/active_scaffold_overrides/on_create.js.erb +34 -6
  64. data/app/views/active_scaffold_overrides/on_mark.js.erb +3 -3
  65. data/app/views/active_scaffold_overrides/on_update.js.erb +9 -9
  66. data/app/views/active_scaffold_overrides/render_field.js.erb +1 -1
  67. data/app/views/active_scaffold_overrides/render_field_inplace.html.erb +1 -1
  68. data/app/views/active_scaffold_overrides/row.js.erb +2 -2
  69. data/app/views/active_scaffold_overrides/search.html.erb +1 -1
  70. data/app/views/active_scaffold_overrides/show.html.erb +3 -3
  71. data/app/views/active_scaffold_overrides/update.html.erb +2 -2
  72. data/app/views/active_scaffold_overrides/update_column.js.erb +4 -4
  73. data/app/views/active_scaffold_overrides/update_row.js.erb +1 -1
  74. data/lib/active_scaffold/actions/common_search.rb +5 -3
  75. data/lib/active_scaffold/actions/core.rb +57 -32
  76. data/lib/active_scaffold/actions/create.rb +19 -17
  77. data/lib/active_scaffold/actions/delete.rb +10 -12
  78. data/lib/active_scaffold/actions/field_search.rb +28 -13
  79. data/lib/active_scaffold/actions/list.rb +34 -34
  80. data/lib/active_scaffold/actions/mark.rb +5 -5
  81. data/lib/active_scaffold/actions/nested.rb +64 -56
  82. data/lib/active_scaffold/actions/search.rb +2 -2
  83. data/lib/active_scaffold/actions/show.rb +5 -5
  84. data/lib/active_scaffold/actions/subform.rb +15 -4
  85. data/lib/active_scaffold/actions/update.rb +20 -20
  86. data/lib/active_scaffold/active_record_permissions.rb +4 -3
  87. data/lib/active_scaffold/attribute_params.rb +51 -50
  88. data/lib/active_scaffold/bridges/active_storage/active_storage_bridge.rb +4 -4
  89. data/lib/active_scaffold/bridges/active_storage/active_storage_helpers.rb +6 -2
  90. data/lib/active_scaffold/bridges/active_storage.rb +1 -1
  91. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +3 -3
  92. data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +4 -1
  93. data/lib/active_scaffold/bridges/bitfields.rb +1 -1
  94. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +9 -8
  95. data/lib/active_scaffold/bridges/cancan.rb +8 -8
  96. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +1 -1
  97. data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +4 -3
  98. data/lib/active_scaffold/bridges/carrierwave.rb +2 -2
  99. data/lib/active_scaffold/bridges/chosen.rb +1 -5
  100. data/lib/active_scaffold/bridges/country_select/country_select_bridge_helper.rb +4 -2
  101. data/lib/active_scaffold/bridges/date_picker/ext.rb +20 -12
  102. data/lib/active_scaffold/bridges/date_picker/helper.rb +37 -33
  103. data/lib/active_scaffold/bridges/date_picker.rb +1 -4
  104. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +1 -1
  105. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +3 -2
  106. data/lib/active_scaffold/bridges/dragonfly.rb +1 -1
  107. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +3 -2
  108. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +2 -1
  109. data/lib/active_scaffold/bridges/file_column/form_ui.rb +4 -9
  110. data/lib/active_scaffold/bridges/file_column/list_ui.rb +6 -3
  111. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +3 -3
  112. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +1 -4
  113. data/lib/active_scaffold/bridges/file_column.rb +1 -0
  114. data/lib/active_scaffold/bridges/paper_trail/actions.rb +4 -2
  115. data/lib/active_scaffold/bridges/paper_trail/config.rb +1 -1
  116. data/lib/active_scaffold/bridges/paper_trail/helper.rb +1 -1
  117. data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +2 -1
  118. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +3 -2
  119. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +1 -1
  120. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +10 -9
  121. data/lib/active_scaffold/bridges/paperclip.rb +2 -1
  122. data/lib/active_scaffold/bridges/record_select/helpers.rb +10 -11
  123. data/lib/active_scaffold/bridges/semantic_attributes/column.rb +3 -1
  124. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +3 -7
  125. data/lib/active_scaffold/bridges/tiny_mce.rb +2 -7
  126. data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +7 -7
  127. data/lib/active_scaffold/bridges.rb +7 -5
  128. data/lib/active_scaffold/config/base.rb +20 -24
  129. data/lib/active_scaffold/config/core.rb +27 -39
  130. data/lib/active_scaffold/config/create.rb +1 -1
  131. data/lib/active_scaffold/config/delete.rb +9 -9
  132. data/lib/active_scaffold/config/field_search.rb +4 -9
  133. data/lib/active_scaffold/config/form.rb +3 -1
  134. data/lib/active_scaffold/config/list.rb +19 -15
  135. data/lib/active_scaffold/config/nested.rb +2 -2
  136. data/lib/active_scaffold/config/search.rb +5 -5
  137. data/lib/active_scaffold/config/show.rb +1 -1
  138. data/lib/active_scaffold/config/subform.rb +1 -1
  139. data/lib/active_scaffold/config/update.rb +4 -5
  140. data/lib/active_scaffold/configurable.rb +2 -1
  141. data/lib/active_scaffold/constraints.rb +16 -11
  142. data/lib/active_scaffold/core.rb +25 -27
  143. data/lib/active_scaffold/data_structures/action_columns.rb +10 -3
  144. data/lib/active_scaffold/data_structures/action_link.rb +19 -9
  145. data/lib/active_scaffold/data_structures/action_links.rb +20 -26
  146. data/lib/active_scaffold/data_structures/actions.rb +3 -3
  147. data/lib/active_scaffold/data_structures/association/abstract.rb +8 -4
  148. data/lib/active_scaffold/data_structures/association/active_mongoid.rb +1 -0
  149. data/lib/active_scaffold/data_structures/association/active_record.rb +1 -4
  150. data/lib/active_scaffold/data_structures/column.rb +368 -327
  151. data/lib/active_scaffold/data_structures/columns.rb +3 -2
  152. data/lib/active_scaffold/data_structures/nested_info.rb +6 -5
  153. data/lib/active_scaffold/data_structures/proxy_column.rb +68 -0
  154. data/lib/active_scaffold/data_structures/set.rb +7 -4
  155. data/lib/active_scaffold/data_structures/sorting.rb +21 -12
  156. data/lib/active_scaffold/engine.rb +12 -12
  157. data/lib/active_scaffold/extensions/action_controller_rendering.rb +5 -5
  158. data/lib/active_scaffold/extensions/action_controller_rescueing.rb +1 -1
  159. data/lib/active_scaffold/extensions/action_view_rendering.rb +29 -31
  160. data/lib/active_scaffold/extensions/ice_nine.rb +2 -1
  161. data/lib/active_scaffold/extensions/localize.rb +2 -2
  162. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +1 -1
  163. data/lib/active_scaffold/extensions/routing_mapper.rb +5 -4
  164. data/lib/active_scaffold/extensions/unsaved_associated.rb +3 -2
  165. data/lib/active_scaffold/finder.rb +71 -78
  166. data/lib/active_scaffold/helpers/action_link_helpers.rb +37 -49
  167. data/lib/active_scaffold/helpers/association_helpers.rb +3 -2
  168. data/lib/active_scaffold/helpers/controller_helpers.rb +18 -16
  169. data/lib/active_scaffold/helpers/form_column_helpers.rb +69 -53
  170. data/lib/active_scaffold/helpers/human_condition_helpers.rb +17 -15
  171. data/lib/active_scaffold/helpers/id_helpers.rb +5 -5
  172. data/lib/active_scaffold/helpers/list_column_helpers.rb +35 -38
  173. data/lib/active_scaffold/helpers/pagination_helpers.rb +4 -4
  174. data/lib/active_scaffold/helpers/search_column_helpers.rb +25 -34
  175. data/lib/active_scaffold/helpers/show_column_helpers.rb +7 -4
  176. data/lib/active_scaffold/helpers/tabs_helpers.rb +88 -0
  177. data/lib/active_scaffold/helpers/view_helpers.rb +15 -13
  178. data/lib/active_scaffold/marked_model.rb +1 -2
  179. data/lib/active_scaffold/orm_checks.rb +6 -4
  180. data/lib/active_scaffold/paginator.rb +3 -2
  181. data/lib/active_scaffold/registry.rb +5 -0
  182. data/lib/active_scaffold/tableless.rb +24 -14
  183. data/lib/active_scaffold/version.rb +4 -4
  184. data/lib/active_scaffold.rb +8 -34
  185. data/lib/generators/active_scaffold/controller_generator.rb +20 -20
  186. data/lib/generators/active_scaffold/install_generator.rb +4 -8
  187. data/lib/generators/active_scaffold/resource_generator.rb +31 -31
  188. data/lib/tasks/brakeman.rake +1 -1
  189. data/shoulda_macros/macros.rb +14 -14
  190. metadata +11 -232
  191. data/app/assets/javascripts/prototype/active_scaffold.js +0 -1249
  192. data/app/assets/javascripts/prototype/active_scaffold_chosen.js +0 -0
  193. data/app/assets/javascripts/prototype/dhtml_history.js +0 -870
  194. data/app/assets/javascripts/prototype/form_enhancements.js +0 -117
  195. data/app/assets/javascripts/prototype/tiny_mce_bridge.js +0 -17
  196. data/app/views/active_scaffold_overrides/_list_messages_content.html.erb +0 -8
  197. data/app/views/active_scaffold_overrides/_new_record.js.erb +0 -15
  198. data/app/views/active_scaffold_overrides/_popup_adapter.html.erb +0 -20
  199. data/app/views/active_scaffold_overrides/_refresh_create_form.js.erb +0 -12
  200. data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +0 -58
  201. data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -17
  202. data/lib/active_scaffold/data_structures/action_link_separator.rb +0 -13
  203. data/lib/active_scaffold/extensions/cow_proxy.rb +0 -102
  204. data/test/active_scaffold_config_mock.rb +0 -33
  205. data/test/bridges/bridge_test.rb +0 -88
  206. data/test/bridges/date_picker_test.rb +0 -31
  207. data/test/bridges/paper_trail_test.rb +0 -16
  208. data/test/bridges/paperclip_test.rb +0 -85
  209. data/test/bridges/tiny_mce_test.rb +0 -61
  210. data/test/class_with_finder.rb +0 -42
  211. data/test/company.rb +0 -97
  212. data/test/config/base_test.rb +0 -17
  213. data/test/config/core_test.rb +0 -66
  214. data/test/config/create_test.rb +0 -72
  215. data/test/config/delete_test.rb +0 -35
  216. data/test/config/field_search_test.rb +0 -49
  217. data/test/config/list_test.rb +0 -134
  218. data/test/config/nested_test.rb +0 -55
  219. data/test/config/search_test.rb +0 -62
  220. data/test/config/show_test.rb +0 -45
  221. data/test/config/subform_test.rb +0 -19
  222. data/test/config/update_test.rb +0 -52
  223. data/test/const_mocker.rb +0 -32
  224. data/test/data_structures/action_columns_test.rb +0 -112
  225. data/test/data_structures/action_link_test.rb +0 -79
  226. data/test/data_structures/action_links_test.rb +0 -78
  227. data/test/data_structures/actions_test.rb +0 -25
  228. data/test/data_structures/association_column_test.rb +0 -41
  229. data/test/data_structures/column_test.rb +0 -186
  230. data/test/data_structures/columns_test.rb +0 -68
  231. data/test/data_structures/set_test.rb +0 -84
  232. data/test/data_structures/sorting_test.rb +0 -148
  233. data/test/data_structures/standard_column_test.rb +0 -23
  234. data/test/data_structures/validation_reflection_test.rb +0 -69
  235. data/test/data_structures/virtual_column_test.rb +0 -23
  236. data/test/extensions/action_view_rendering_test.rb +0 -20
  237. data/test/extensions/active_record_test.rb +0 -44
  238. data/test/extensions/routing_mapper_test.rb +0 -73
  239. data/test/helpers/form_column_helpers_test.rb +0 -34
  240. data/test/helpers/list_column_helpers_test.rb +0 -53
  241. data/test/helpers/pagination_helpers_test.rb +0 -65
  242. data/test/helpers/search_column_helpers_test.rb +0 -15
  243. data/test/misc/active_record_permissions_test.rb +0 -193
  244. data/test/misc/attribute_params_test.rb +0 -460
  245. data/test/misc/calculation_test.rb +0 -39
  246. data/test/misc/configurable_test.rb +0 -97
  247. data/test/misc/constraints_test.rb +0 -209
  248. data/test/misc/convert_numbers_format_test.rb +0 -171
  249. data/test/misc/finder_test.rb +0 -124
  250. data/test/misc/lang_test.rb +0 -10
  251. data/test/misc/parse_datetime_test.rb +0 -159
  252. data/test/misc/render_test.rb +0 -9
  253. data/test/misc/tableless_test.rb +0 -56
  254. data/test/mock_app/.gitignore +0 -2
  255. data/test/mock_app/Rakefile +0 -7
  256. data/test/mock_app/app/assets/config/manifest.js +0 -0
  257. data/test/mock_app/app/controllers/addresses_controller.rb +0 -4
  258. data/test/mock_app/app/controllers/application_controller.rb +0 -10
  259. data/test/mock_app/app/controllers/buildings_controller.rb +0 -4
  260. data/test/mock_app/app/controllers/cars_controller.rb +0 -5
  261. data/test/mock_app/app/controllers/contacts_controller.rb +0 -4
  262. data/test/mock_app/app/controllers/floors_controller.rb +0 -6
  263. data/test/mock_app/app/controllers/people_controller.rb +0 -8
  264. data/test/mock_app/app/controllers/roles_controller.rb +0 -4
  265. data/test/mock_app/app/helpers/application_helper.rb +0 -3
  266. data/test/mock_app/app/models/address.rb +0 -3
  267. data/test/mock_app/app/models/building.rb +0 -9
  268. data/test/mock_app/app/models/car.rb +0 -3
  269. data/test/mock_app/app/models/contact.rb +0 -3
  270. data/test/mock_app/app/models/file_model.rb +0 -31
  271. data/test/mock_app/app/models/floor.rb +0 -8
  272. data/test/mock_app/app/models/person.rb +0 -12
  273. data/test/mock_app/app/models/role.rb +0 -3
  274. data/test/mock_app/app/views/active_scaffold_overrides/_form.html.erb +0 -2
  275. data/test/mock_app/app/views/active_scaffold_overrides/list.html.erb +0 -2
  276. data/test/mock_app/app/views/people/_first_name_form_column.html.erb +0 -2
  277. data/test/mock_app/app/views/people/_form.html.erb +0 -2
  278. data/test/mock_app/app/views/people/list.html.erb +0 -2
  279. data/test/mock_app/config/application.rb +0 -14
  280. data/test/mock_app/config/boot.rb +0 -7
  281. data/test/mock_app/config/database.yml +0 -16
  282. data/test/mock_app/config/environment.rb +0 -6
  283. data/test/mock_app/config/environments/development.rb +0 -24
  284. data/test/mock_app/config/environments/production.rb +0 -49
  285. data/test/mock_app/config/environments/test.rb +0 -34
  286. data/test/mock_app/config/initializers/backtrace_silencers.rb +0 -7
  287. data/test/mock_app/config/initializers/inflections.rb +0 -10
  288. data/test/mock_app/config/initializers/mime_types.rb +0 -5
  289. data/test/mock_app/config/initializers/secret_token.rb +0 -11
  290. data/test/mock_app/config/initializers/session_store.rb +0 -8
  291. data/test/mock_app/config/initializers/wrap_parameters.rb +0 -14
  292. data/test/mock_app/config/locales/en.yml +0 -5
  293. data/test/mock_app/config/routes.rb +0 -17
  294. data/test/mock_app/config.ru +0 -4
  295. data/test/mock_app/db/schema.rb +0 -68
  296. data/test/mock_app/db/test.sqlite3 +0 -1
  297. data/test/model_stub.rb +0 -64
  298. data/test/performance/list_cars_performance_test.rb +0 -34
  299. data/test/performance/list_people_performance_test.rb +0 -31
  300. data/test/performance_test_help.rb +0 -3
  301. data/test/run_all.rb +0 -6
  302. data/test/test_helper.rb +0 -71
  303. data/vendor/assets/javascripts/getprototypeof.js +0 -12
@@ -1,4 +1,4 @@
1
- <% @column_span_id ||= element_cell_id(:id => @record.id.to_s, :action => 'update_column', :name => @column.name) -%>
1
+ <% @column_span_id ||= element_cell_id(id: @record.id.to_s, action: 'update_column', name: @column.name) -%>
2
2
  <% unless successful? -%>
3
3
  <%= render 'update_messages' %>
4
4
  <% @record.reload -%>
@@ -7,7 +7,7 @@
7
7
  ipe_update = @column.inplace_edit_update if successful? -%>
8
8
  <% case ipe_update
9
9
  when :row -%>
10
- ActiveScaffold.update_row('<%= element_row_id(:action => :list) %>', '<%= escape_javascript render('row', :record => @record) %>');
10
+ ActiveScaffold.update_row('<%= element_row_id(action: :list) %>', '<%= escape_javascript render('row', record: @record) %>');
11
11
  <% when :table -%>
12
12
  ActiveScaffold.replace_html('<%= active_scaffold_content_id %>', '<%= escape_javascript(render('list')) %>');
13
13
  <% else
@@ -15,12 +15,12 @@
15
15
  ActiveScaffold.update_inplace_edit('<%= @column_span_id %>','<%= escape_javascript(formatted_value) %>', <%= column_empty?(formatted_value).to_json %>);
16
16
  <% if ipe_update == :columns && @column.update_columns && !@column.update_columns.empty?
17
17
  @rendered = Set.new([@column.name]) -%>
18
- <%= render :partial => 'update_column', :collection => @column.update_columns & active_scaffold_config.list.columns.visible_columns_names, :locals => {:row_id => element_row_id(:action => :list, :id => @record.id)} %>
18
+ <%= render partial: 'update_column', collection: @column.update_columns & active_scaffold_config.list.columns.visible_columns_names, locals: {row_id: element_row_id(action: :list, id: @record.id)} %>
19
19
  <% end %>
20
20
  <% end -%>
21
21
  <% else -%>
22
22
  ActiveScaffold.replace_html('<%= @column_span_id %>','<%= escape_javascript(get_column_value(@record, @column)) %>');
23
23
  <% end -%>
24
24
  <% if @column.calculation? -%>
25
- ActiveScaffold.replace_html('<%= active_scaffold_calculations_id(:column => @column) %>', '<%= escape_javascript(render_column_calculation(@column, id_condition: false)) %>');
25
+ ActiveScaffold.replace_html('<%= active_scaffold_calculations_id(column: @column) %>', '<%= escape_javascript(render_column_calculation(@column, id_condition: false)) %>');
26
26
  <% end -%>
@@ -1 +1 @@
1
- ActiveScaffold.update_row('<%=element_row_id(:action => 'list', :id => @record.id)%>','<%=escape_javascript(render(:partial => list_record_view, :locals => {:record => @record}))%>');
1
+ ActiveScaffold.update_row('<%=element_row_id(action: 'list', id: @record.id)%>','<%=escape_javascript(render('list_record', record: @record))%>');
@@ -2,9 +2,10 @@ module ActiveScaffold::Actions
2
2
  module CommonSearch
3
3
  def self.included(base)
4
4
  return if base < InstanceMethods
5
+
5
6
  base.send :include, InstanceMethods
6
7
  base.before_action :search_authorized_filter, only: :show_search
7
- base.before_action :store_search_params_into_session, :only => %i[index show_search]
8
+ base.before_action :store_search_params_into_session, only: %i[index show_search]
8
9
  base.before_action :do_search, only: [:index]
9
10
  base.helper_method :search_params
10
11
  end
@@ -36,6 +37,7 @@ module ActiveScaffold::Actions
36
37
  outer_joins = []
37
38
  columns.each do |column|
38
39
  next if column.search_joins.blank?
40
+
39
41
  if column.includes.present? && list_columns.include?(column)
40
42
  references << (column.search_joins & column.includes)
41
43
  outer_joins << (column.search_joins - column.includes)
@@ -67,13 +69,13 @@ module ActiveScaffold::Actions
67
69
  # The default security delegates to ActiveRecordPermissions.
68
70
  # You may override the method to customize.
69
71
  def search_authorized?
70
- authorized_for?(:crud_type => :read)
72
+ authorized_for?(crud_type: :read)
71
73
  end
72
74
 
73
75
  def search_authorized_filter
74
76
  action = active_scaffold_config.send(search_partial)
75
77
  link = action.link || action.class.link
76
- raise ActiveScaffold::ActionNotAllowed unless send(link.security_method)
78
+ raise ActiveScaffold::ActionNotAllowed unless action_link_authorized?(link)
77
79
  end
78
80
  end
79
81
  end
@@ -4,11 +4,11 @@ module ActiveScaffold::Actions
4
4
  base.class_eval do
5
5
  before_action :set_vary_accept_header
6
6
  before_action :check_input_device
7
- before_action :register_constraints_with_action_columns, :unless => :nested?
7
+ before_action :register_constraints_with_action_columns, unless: :nested?
8
8
  after_action :clear_flashes
9
9
  after_action :dl_cookie
10
10
  around_action :clear_storage
11
- rescue_from ActiveScaffold::RecordNotAllowed, ActiveScaffold::ActionNotAllowed, :with => :deny_access
11
+ rescue_from ActiveScaffold::RecordNotAllowed, ActiveScaffold::ActionNotAllowed, with: :deny_access
12
12
  end
13
13
  base.helper_method :active_scaffold_config
14
14
  base.helper_method :successful?
@@ -27,7 +27,12 @@ module ActiveScaffold::Actions
27
27
  if request.get? || request.head?
28
28
  render_field_for_inplace_editing
29
29
  respond_to do |format|
30
- format.js { render :action => 'render_field_inplace', :layout => false }
30
+ format.js { render action: 'render_field_inplace', layout: false }
31
+ end
32
+ elsif params[:tabbed_by]
33
+ add_tab
34
+ respond_to do |format|
35
+ format.js { render action: 'add_tab', layout: false }
31
36
  end
32
37
  else
33
38
  render_field_for_update_columns
@@ -55,13 +60,17 @@ module ActiveScaffold::Actions
55
60
 
56
61
  def render_field_for_inplace_editing
57
62
  @column = active_scaffold_config.columns[params[:update_column]]
58
- @record = find_if_allowed(params[:id], :crud_type => :update, :column => params[:update_column])
63
+ @record = find_if_allowed(params[:id], crud_type: :update, column: params[:update_column])
59
64
  end
60
65
 
61
- def render_field_for_update_columns
62
- return if (@column = active_scaffold_config.columns[params.delete(:column)]).nil?
66
+ def add_tab
67
+ process_render_field_params
68
+ @column = @main_columns.find_by_name(params[:column])
69
+ @record = updated_record_with_form(@main_columns, {}, @scope)
70
+ end
71
+
72
+ def process_render_field_params
63
73
  @source_id = params.delete(:source_id)
64
- @columns = @column.update_columns || []
65
74
  @scope = params.delete(:scope)
66
75
  if @scope
67
76
  @form_action = :subform
@@ -70,7 +79,14 @@ module ActiveScaffold::Actions
70
79
  end
71
80
  @form_action ||= params[:id] ? :update : :create
72
81
  @main_columns = active_scaffold_config.send(@form_action).columns
82
+ end
83
+
84
+ def render_field_for_update_columns
85
+ return if (@column = active_scaffold_config.columns[params.delete(:column)]).nil?
86
+
87
+ @columns = @column.update_columns || []
73
88
  @columns << @column.name if @column.options[:refresh_link] && @columns.exclude?(@column.name)
89
+ process_render_field_params
74
90
 
75
91
  @record =
76
92
  if @column.send_form_on_update_column
@@ -98,14 +114,14 @@ module ActiveScaffold::Actions
98
114
  record = new_model
99
115
  copy_attributes(saved_record, record) if saved_record
100
116
  apply_constraints_to_record(record) unless scope
101
- create_association_with_parent record, true if nested?
102
- update_record_from_params(record, columns, attributes || {}, true, search_attributes: @form_action == :field_search)
117
+ create_association_with_parent record, check_match: true if nested?
118
+ update_record_from_params(record, columns, attributes || {}, true)
103
119
  end
104
120
 
105
121
  def updated_record_with_column(column, value, scope)
106
122
  record = params[:id] ? copy_attributes(find_if_allowed(params[:id], :read)) : new_model
107
123
  apply_constraints_to_record(record) unless scope || params[:id]
108
- create_association_with_parent record, true if nested?
124
+ create_association_with_parent record, check_match: true if nested?
109
125
  if @form_action == :field_search && value.is_a?(Array) && column.association&.singular?
110
126
  # don't assign value if it's an array and column is singular association,
111
127
  # e.g. value came from multi-select on search form
@@ -119,7 +135,7 @@ module ActiveScaffold::Actions
119
135
  end
120
136
 
121
137
  def subform_child_association
122
- params[:child_association].presence || @scope&.split(']')&.first&.sub(/^\[/, '').presence
138
+ params[:child_association].presence || (@scope.split(']').first.sub(/^\[/, '').presence if @scope)
123
139
  end
124
140
 
125
141
  def parent_controller_name
@@ -140,7 +156,7 @@ module ActiveScaffold::Actions
140
156
  if association.collection?
141
157
  record.send(association.name) << parent
142
158
  else
143
- record.send("#{association.name}=", parent)
159
+ record.send(:"#{association.name}=", parent)
144
160
  end
145
161
 
146
162
  if params[:nested] # form in nested scaffold, set nested parent_record to parent
@@ -160,6 +176,7 @@ module ActiveScaffold::Actions
160
176
 
161
177
  def parent_sti_controller
162
178
  return unless params[:parent_sti]
179
+
163
180
  unless defined? @parent_sti_controller
164
181
  controller = look_for_parent_sti_controller
165
182
  @parent_sti_controller = controller.controller_path == params[:parent_sti] ? controller : false
@@ -225,10 +242,10 @@ module ActiveScaffold::Actions
225
242
  render(
226
243
  options.reverse_merge(
227
244
  format => response_object,
228
- :only => columns_names + [active_scaffold_config.model.primary_key],
229
- :include => association_columns(columns_names),
230
- :methods => virtual_columns(columns_names),
231
- :status => response_status
245
+ only: columns_names + [active_scaffold_config.model.primary_key],
246
+ include: association_columns(columns_names),
247
+ methods: virtual_columns(columns_names),
248
+ status: response_status
232
249
  )
233
250
  )
234
251
  end
@@ -264,16 +281,18 @@ module ActiveScaffold::Actions
264
281
  def conditions_from_params
265
282
  @conditions_from_params ||= begin
266
283
  conditions = [{}]
284
+ supporting_range = %i[date datetime integer decimal float bigint]
267
285
  params.except(:controller, :action, :page, :sort, :sort_direction, :format, :id).each do |key, value|
268
286
  distinct = true if key.match?(/!$/)
269
287
  column = active_scaffold_config._columns_hash[key.to_s[0..(distinct ? -2 : -1)]]
270
288
  next unless column
289
+
271
290
  key = column.name.to_sym
272
291
  not_string = %i[string text].exclude?(column.type)
273
292
  next if active_scaffold_constraints[key]
274
293
  next if nested? && nested.param_name == key
275
294
 
276
- range = %i[date datetime integer decimal float bigint].include?(column.type) && value.is_a?(String) && value.scan('..').size == 1
295
+ range = supporting_range.include?(column.type) && value.is_a?(String) && value.scan('..').size == 1
277
296
  value = value.split('..') if range
278
297
  value =
279
298
  if value.is_a?(Array)
@@ -317,6 +336,7 @@ module ActiveScaffold::Actions
317
336
  def sti_nested_build_options(klass)
318
337
  config = active_scaffold_config_for(klass)
319
338
  return unless config
339
+
320
340
  column = klass.inheritance_column
321
341
  return unless column && config._columns_hash[column]
322
342
 
@@ -351,6 +371,7 @@ module ActiveScaffold::Actions
351
371
  def check_input_device
352
372
  return unless session[:input_device_type].nil?
353
373
  return if request.env['HTTP_USER_AGENT'].nil?
374
+
354
375
  if request.env['HTTP_USER_AGENT'].match?(/(iPhone|iPod|iPad)/i)
355
376
  session[:input_device_type] = 'TOUCH'
356
377
  session[:hover_supported] = false
@@ -387,7 +408,7 @@ module ActiveScaffold::Actions
387
408
  # call this method in your action_link action to simplify processing of actions
388
409
  # eg for member action_link :fire
389
410
  # process_action_link_action do |record|
390
- # record.update_attributes(:fired => true)
411
+ # record.update(fired: true)
391
412
  # self.successful = true
392
413
  # flash[:info] = 'Player fired'
393
414
  # end
@@ -399,27 +420,30 @@ module ActiveScaffold::Actions
399
420
  else
400
421
  @action_link = active_scaffold_config.action_links[action_name]
401
422
  if params[:id]
402
- crud_type_or_security_options ||= {:crud_type => request.delete? ? :delete : :update, :action => action_name}
423
+ crud_type_or_security_options ||= {crud_type: request.delete? ? :delete : :update, action: action_name}
403
424
  get_row(crud_type_or_security_options)
404
425
  if @record.nil?
405
426
  self.successful = false
406
- flash[:error] = as_(:no_authorization_for_action, :action => @action_link&.label(nil) || action_name)
427
+ flash[:error] = as_(:no_authorization_for_action, action: @action_link&.label(nil) || action_name)
407
428
  else
408
429
  yield @record
409
430
  end
410
431
  else
411
- if @action_link && respond_to?(@action_link.security_method, true) && !send(@action_link.security_method)
412
- raise ActiveScaffold::ActionNotAllowed
413
- end
432
+ raise ActiveScaffold::ActionNotAllowed unless action_link_authorized? @action_link
433
+
414
434
  yield
415
435
  end
416
436
  respond_to_action(render_action)
417
437
  end
418
438
  end
419
439
 
440
+ def action_link_authorized?(link)
441
+ link&.security_method.nil? || !respond_to?(link.security_method, true) || Array(send(link.security_method))[0]
442
+ end
443
+
420
444
  def action_confirmation_respond_to_html(confirm_action = action_name.to_sym)
421
445
  link = active_scaffold_config.action_links[confirm_action]
422
- render :action => 'action_confirmation', :locals => {:record => @record, :link => link}
446
+ render action: 'action_confirmation', locals: {record: @record, link: link}
423
447
  end
424
448
 
425
449
  def action_update_respond_on_iframe
@@ -427,11 +451,11 @@ module ActiveScaffold::Actions
427
451
  end
428
452
 
429
453
  def action_update_respond_to_html
430
- redirect_to :action => 'index'
454
+ redirect_to action: 'index'
431
455
  end
432
456
 
433
457
  def action_update_respond_to_js
434
- render :action => 'on_action_update', :formats => [:js], :layout => false
458
+ render action: 'on_action_update', formats: [:js], layout: false
435
459
  end
436
460
 
437
461
  def action_update_respond_to_xml
@@ -450,10 +474,10 @@ module ActiveScaffold::Actions
450
474
  def view_stale?
451
475
  objects = objects_for_etag
452
476
  if objects.is_a?(Array)
453
- args = {:etag => objects.to_a}
477
+ args = {etag: objects.to_a}
454
478
  args[:last_modified] = @last_modified if @last_modified
455
479
  elsif objects.is_a?(Hash)
456
- args = {:last_modified => @last_modified}.merge(objects)
480
+ args = {last_modified: @last_modified}.merge(objects)
457
481
  else
458
482
  args = objects
459
483
  end
@@ -478,6 +502,7 @@ module ActiveScaffold::Actions
478
502
 
479
503
  def respond_to_action(action)
480
504
  return unless !conditional_get_support? || view_stale?
505
+
481
506
  respond_to do |type|
482
507
  action_formats.each do |format|
483
508
  type.send(format) do
@@ -499,8 +524,8 @@ module ActiveScaffold::Actions
499
524
 
500
525
  def action_formats
501
526
  @action_formats ||=
502
- if respond_to? "#{action_name}_formats", true
503
- send("#{action_name}_formats")
527
+ if respond_to? :"#{action_name}_formats", true
528
+ send(:"#{action_name}_formats")
504
529
  else
505
530
  (default_formats + active_scaffold_config.formats).uniq
506
531
  end
@@ -515,8 +540,8 @@ module ActiveScaffold::Actions
515
540
  next unless cfg&.add_sti_create_links?
516
541
  return controller if cfg.sti_children.map(&:to_s).include? self.class.active_scaffold_config.model.name.underscore
517
542
  end
518
- rescue ActiveScaffold::ControllerNotFound => ex
519
- logger.warn "#{ex.message} looking for parent_sti of #{self.class.active_scaffold_config.model.name}"
543
+ rescue ActiveScaffold::ControllerNotFound => e
544
+ logger.warn "#{e.message} looking for parent_sti of #{self.class.active_scaffold_config.model.name}"
520
545
  nil
521
546
  end
522
547
  end
@@ -1,7 +1,7 @@
1
1
  module ActiveScaffold::Actions
2
2
  module Create
3
3
  def self.included(base)
4
- base.before_action :create_authorized_filter, :only => %i[new create]
4
+ base.before_action :create_authorized_filter, only: %i[new create]
5
5
  end
6
6
 
7
7
  def new
@@ -17,42 +17,42 @@ module ActiveScaffold::Actions
17
17
  protected
18
18
 
19
19
  def response_location
20
- url_for(params_for(:action => 'show', :id => @record.to_param)) if successful?
20
+ url_for(params_for(action: 'show', id: @record.to_param)) if successful?
21
21
  end
22
22
 
23
23
  def new_respond_to_html
24
24
  if successful?
25
- render(:action => 'create')
25
+ render(action: 'create')
26
26
  else
27
27
  return_to_main
28
28
  end
29
29
  end
30
30
 
31
31
  def new_respond_to_js
32
- render(:partial => 'create_form')
32
+ render(partial: 'create_form')
33
33
  end
34
34
 
35
35
  def create_respond_on_iframe
36
36
  do_refresh_list if successful? && active_scaffold_config.create.refresh_list && !render_parent?
37
37
  responds_to_parent do
38
- render :action => 'on_create', :formats => [:js], :layout => false
38
+ render action: 'on_create', formats: [:js], layout: false
39
39
  end
40
40
  end
41
41
 
42
42
  def create_respond_to_html
43
43
  if successful?
44
- flash[:info] = as_(:created_model, :model => ERB::Util.h(@record.to_label))
44
+ flash[:info] = as_(:created_model, model: ERB::Util.h(@record.to_label))
45
45
  if (action = active_scaffold_config.create.action_after_create)
46
- redirect_to params_for(:action => action, :id => @record.to_param)
46
+ redirect_to params_for(action: action, id: @record.to_param)
47
47
  elsif params[:dont_close]
48
- redirect_to params_for(:action => 'new')
48
+ redirect_to params_for(action: 'new')
49
49
  else
50
50
  return_to_main
51
51
  end
52
52
  elsif active_scaffold_config.actions.include?(:list) && active_scaffold_config.list.always_show_create
53
53
  list
54
54
  else
55
- render(:action => 'create')
55
+ render(action: 'create')
56
56
  end
57
57
  end
58
58
 
@@ -64,7 +64,7 @@ module ActiveScaffold::Actions
64
64
  do_new
65
65
  end
66
66
  end
67
- render :action => 'on_create'
67
+ render action: 'on_create'
68
68
  end
69
69
 
70
70
  def create_respond_to_xml
@@ -95,7 +95,7 @@ module ActiveScaffold::Actions
95
95
  active_scaffold_config.model.transaction do
96
96
  @record = new_model
97
97
  # before assign params, to set foreign_type of constraints in polymorphic association with multiple id
98
- apply_constraints_to_record(@record, :allow_autosave => true)
98
+ apply_constraints_to_record(@record, allow_autosave: true)
99
99
  @record = update_record_from_params(@record, active_scaffold_config.create.columns, attributes)
100
100
  create_association_with_parent(@record) if nested?
101
101
  before_create_save(@record)
@@ -103,14 +103,15 @@ module ActiveScaffold::Actions
103
103
  self.successful = [@record.keeping_errors { @record.valid? }, @record.associated_valid?].all? # this syntax avoids a short-circuit
104
104
  create_save(@record) unless options[:skip_save]
105
105
  end
106
- rescue ActiveRecord::ActiveRecordError => ex
107
- flash[:error] = ex.message
106
+ rescue ActiveRecord::ActiveRecordError => e
107
+ flash[:error] = e.message
108
108
  self.successful = false
109
109
  @record ||= new_model # ensure @record exists or display form will fail
110
110
  end
111
111
 
112
112
  def create_save(record)
113
113
  return unless successful?
114
+
114
115
  record.save! && record.save_associated!
115
116
  after_create_save(record)
116
117
  end
@@ -129,17 +130,18 @@ module ActiveScaffold::Actions
129
130
  end
130
131
 
131
132
  def create_authorized?
132
- if nested?
133
- return false if nested.readonly? || nested.readonly_through_association?(active_scaffold_config.create.columns)
133
+ if nested? && (nested.readonly? || nested.readonly_through_association?(active_scaffold_config.create.columns))
134
+ return false
134
135
  end
135
- authorized_for?(:crud_type => :create)
136
+
137
+ authorized_for?(crud_type: :create)
136
138
  end
137
139
 
138
140
  private
139
141
 
140
142
  def create_authorized_filter
141
143
  link = active_scaffold_config.create.link || self.class.active_scaffold_config.create.class.link
142
- raise ActiveScaffold::ActionNotAllowed unless send(link.security_method)
144
+ raise ActiveScaffold::ActionNotAllowed unless action_link_authorized?(link)
143
145
  end
144
146
 
145
147
  def new_formats
@@ -1,7 +1,7 @@
1
1
  module ActiveScaffold::Actions
2
2
  module Delete
3
3
  def self.included(base)
4
- base.before_action :delete_authorized_filter, :only => [:destroy]
4
+ base.before_action :delete_authorized_filter, only: [:destroy]
5
5
  end
6
6
 
7
7
  def destroy
@@ -14,21 +14,21 @@ module ActiveScaffold::Actions
14
14
  protected
15
15
 
16
16
  def destroy_respond_to_html
17
- flash[:info] = as_(:deleted_model, :model => ERB::Util.h(@record.to_label)) if successful?
17
+ flash[:info] = as_(:deleted_model, model: ERB::Util.h(@record.to_label)) if successful?
18
18
  return_to_main
19
19
  end
20
20
 
21
21
  def destroy_respond_to_js
22
22
  do_refresh_list if successful? && active_scaffold_config.delete.refresh_list && !render_parent?
23
- render(:action => 'destroy')
23
+ render(action: 'destroy')
24
24
  end
25
25
 
26
26
  def destroy_respond_to_xml
27
- render :xml => successful? ? '' : response_object, :only => active_scaffold_config.list.columns.visible_columns_names, :status => response_status
27
+ render xml: successful? ? '' : response_object, only: active_scaffold_config.list.columns.visible_columns_names, status: response_status
28
28
  end
29
29
 
30
30
  def destroy_respond_to_json
31
- render :json => successful? ? '' : response_object, :only => active_scaffold_config.list.columns.visible_columns_names, :status => response_status
31
+ render json: successful? ? '' : response_object, only: active_scaffold_config.list.columns.visible_columns_names, status: response_status
32
32
  end
33
33
 
34
34
  def destroy_find_record
@@ -41,13 +41,11 @@ module ActiveScaffold::Actions
41
41
  record ||= destroy_find_record
42
42
  begin
43
43
  self.successful = record.destroy
44
- rescue StandardError => exception
45
- flash[:warning] = as_(:cant_destroy_record, :record => ERB::Util.h(record.to_label))
44
+ rescue StandardError => e
45
+ flash[:warning] = as_(:cant_destroy_record, record: ERB::Util.h(record.to_label))
46
46
  self.successful = false
47
47
  logger.warn do
48
- "\n\n#{exception.class} (#{exception.message}):\n " +
49
- Rails.backtrace_cleaner.clean(exception.backtrace).join("\n ") +
50
- "\n\n"
48
+ "\n\n#{e.class} (#{e.message}):\n #{Rails.backtrace_cleaner.clean(e.backtrace).join("\n ")}\n\n"
51
49
  end
52
50
  end
53
51
  end
@@ -59,14 +57,14 @@ module ActiveScaffold::Actions
59
57
  end
60
58
 
61
59
  def delete_ignore?(record = nil)
62
- (nested? && nested.readonly?) || !authorized_for?(:crud_type => :delete)
60
+ (nested? && nested.readonly?) || !authorized_for?(crud_type: :delete)
63
61
  end
64
62
 
65
63
  private
66
64
 
67
65
  def delete_authorized_filter
68
66
  link = active_scaffold_config.delete.link || self.class.active_scaffold_config.delete.class.link
69
- raise ActiveScaffold::ActionNotAllowed unless Array(send(link.security_method))[0]
67
+ raise ActiveScaffold::ActionNotAllowed unless action_link_authorized?(link)
70
68
  end
71
69
 
72
70
  def destroy_formats
@@ -29,6 +29,7 @@ module ActiveScaffold::Actions
29
29
 
30
30
  def init_field_search_params(default_params)
31
31
  return unless (params[:search].is_a?(String) || search_params.nil?) && params[:search].blank?
32
+
32
33
  params[:search] = default_params.is_a?(Proc) ? instance_eval(&default_params) : default_params
33
34
  end
34
35
 
@@ -63,10 +64,18 @@ module ActiveScaffold::Actions
63
64
  end
64
65
 
65
66
  def grouped_search_finder_options
66
- group_sql = calculation_for_group_by(search_group_column&.field || search_group_name, search_group_function) if search_group_function
67
- group_by = group_sql&.to_sql || quoted_select_columns(search_group_column&.select_columns || [search_group_name])
68
- select_query = grouped_search_select + (group_sql ? [group_sql.as(search_group_column.name.to_s)] : group_by)
69
- {group: group_by, select: select_query, reorder: grouped_sorting(group_by)}
67
+ select_query = grouped_search_select
68
+ if search_group_function
69
+ group_sql = calculation_for_group_by(search_group_column&.field || search_group_name, search_group_function)
70
+ group_by = group_sql.to_sql
71
+ select_query += [group_sql.as(search_group_column.name.to_s)]
72
+ order = grouped_sorting(group_by)
73
+ else
74
+ group_by = quoted_select_columns(search_group_column&.select_columns || [search_group_name])
75
+ select_query += group_by
76
+ order = grouped_sorting
77
+ end
78
+ {group: group_by, select: select_query, reorder: order}
70
79
  end
71
80
 
72
81
  def grouped_search_select
@@ -75,16 +84,20 @@ module ActiveScaffold::Actions
75
84
  end
76
85
  end
77
86
 
78
- def grouped_sorting(group_sql)
87
+ def grouped_sorting(group_sql = nil)
79
88
  return unless search_group_column && active_scaffold_config.list.user.sorting
80
- group_sort = search_group_function ? group_sql : search_group_column.sort[:sql] if search_group_column.sortable?
81
- grouped_columns = grouped_columns_calculations.merge(search_group_column.name => group_sort)
82
- sorting = active_scaffold_config.list.user.sorting.clause(grouped_columns)
89
+
90
+ sorting = active_scaffold_config.list.user.sorting.clause(grouped_columns_sorting(group_sql))
83
91
  active_scaffold_config.active_record? ? sorting&.map(&Arel.method(:sql)) : sorting
84
92
  end
85
93
 
94
+ def grouped_columns_sorting(group_sql)
95
+ group_sql ||= search_group_column.sort[:sql] if search_group_column.sortable?
96
+ grouped_columns_calculations.merge(search_group_column.name => group_sql)
97
+ end
98
+
86
99
  def grouped_columns_calculations
87
- @grouped_columns_calculations ||= list_columns[1..-1].each_with_object({}) do |c, h|
100
+ @grouped_columns_calculations ||= list_columns[1..].each_with_object({}) do |c, h|
88
101
  h[c.name] = calculation_for_group_search(c)
89
102
  end
90
103
  end
@@ -136,9 +149,10 @@ module ActiveScaffold::Actions
136
149
 
137
150
  def grouped_columns
138
151
  return if active_scaffold_config.field_search.grouped_columns.blank?
139
- active_scaffold_config.field_search.grouped_columns.map do |col|
152
+
153
+ active_scaffold_config.field_search.grouped_columns.filter_map do |col|
140
154
  active_scaffold_config.columns[col]
141
- end.compact
155
+ end
142
156
  end
143
157
 
144
158
  def field_search_params
@@ -146,11 +160,11 @@ module ActiveScaffold::Actions
146
160
  end
147
161
 
148
162
  def field_search_respond_to_html
149
- render(:action => 'field_search')
163
+ render(action: 'field_search')
150
164
  end
151
165
 
152
166
  def field_search_respond_to_js
153
- render(:partial => 'field_search')
167
+ render(partial: 'field_search')
154
168
  end
155
169
 
156
170
  def do_search
@@ -167,6 +181,7 @@ module ActiveScaffold::Actions
167
181
  columns = active_scaffold_config.field_search.columns
168
182
  search_params.each do |key, value|
169
183
  next unless columns.include? key
184
+
170
185
  column = active_scaffold_config.columns[key]
171
186
  search_condition = self.class.condition_for_column(column, value, text_search, session)
172
187
  next if search_condition.blank?