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
@@ -3,13 +3,14 @@ module ActiveScaffold
3
3
  module ControllerHelpers
4
4
  def self.included(controller)
5
5
  return unless controller.respond_to? :helper_method
6
+
6
7
  controller.class_eval do
7
8
  helper_method :params_for, :conditions_from_params, :render_parent?,
8
9
  :main_path_to_return, :render_parent_options,
9
10
  :render_parent_action, :nested_singular_association?,
10
11
  :main_form_controller, :build_associated,
11
12
  :generate_temporary_id, :generated_id,
12
- :active_scaffold_config_for
13
+ :active_scaffold_config_for, :tabbed_by_association
13
14
  end
14
15
  end
15
16
 
@@ -17,11 +18,7 @@ module ActiveScaffold
17
18
 
18
19
  def active_scaffold_config_for(klass)
19
20
  config = self.class.active_scaffold_config_for(klass)
20
- if ActiveScaffold.threadsafe
21
- config.user || config.new_user_settings({}, {})
22
- else
23
- config
24
- end
21
+ config.user || config.new_user_settings({}, {})
25
22
  end
26
23
 
27
24
  def generate_temporary_id(record = nil, generated_id = nil)
@@ -67,7 +64,7 @@ module ActiveScaffold
67
64
  params.except(*BLACKLIST_PARAMS).each do |key, value|
68
65
  @params_for[key.to_sym] = copy_param(value)
69
66
  end
70
- @params_for[:controller] = '/' + @params_for[:controller].to_s unless @params_for[:controller].to_s.first(1) == '/' # for namespaced controllers
67
+ @params_for[:controller] = "/#{@params_for[:controller]}" unless @params_for[:controller]&.first(1) == '/' # for namespaced controllers
71
68
  @params_for.delete(:id) if @params_for[:id].nil?
72
69
  end
73
70
 
@@ -86,7 +83,7 @@ module ActiveScaffold
86
83
 
87
84
  def controller_requested(controller)
88
85
  if controller.to_s.first(1) == '/'
89
- controller[1..-1]
86
+ controller[1..]
90
87
  else
91
88
  path = controller_path.split('/')[0..-2]
92
89
  path << controller
@@ -111,7 +108,7 @@ module ActiveScaffold
111
108
  parameters = {}
112
109
  if params[:parent_scaffold] && nested_singular_association?
113
110
  parameters[:controller] = params[:parent_scaffold]
114
- exclude_parameters.concat [nested.param_name, :association, :parent_scaffold]
111
+ exclude_parameters.push nested.param_name, :association, :parent_scaffold
115
112
  # parameters[:eid] = params[:parent_scaffold] # not neeeded anymore?
116
113
  end
117
114
  parameters.merge! nested.to_params if nested?
@@ -139,10 +136,10 @@ module ActiveScaffold
139
136
 
140
137
  def render_parent_options
141
138
  if nested_singular_association?
142
- {:controller => nested.parent_scaffold.controller_path, :action => :index, :id => nested.parent_id}
139
+ {controller: nested.parent_scaffold.controller_path, action: :index, id: nested.parent_id}
143
140
  elsif parent_sti_controller
144
- options = params_for(:controller => parent_sti_controller.controller_path, :action => render_parent_action, :parent_sti => nil)
145
- options.merge!(:action => :index, :id => @record.to_param) if render_parent_action == :row
141
+ options = params_for(controller: parent_sti_controller.controller_path, action: render_parent_action, parent_sti: nil)
142
+ options.merge!(action: :index, id: @record.to_param) if render_parent_action == :row
146
143
  options
147
144
  end
148
145
  end
@@ -160,6 +157,10 @@ module ActiveScaffold
160
157
  @parent_action
161
158
  end
162
159
 
160
+ def tabbed_by_association(assoc_column, tabbed_by)
161
+ assoc_column.association.klass.reflect_on_association(tabbed_by)
162
+ end
163
+
163
164
  # build an associated record for association
164
165
  def build_associated(association, parent_record)
165
166
  if association.through? && association.through_reflection.collection?
@@ -178,23 +179,24 @@ module ActiveScaffold
178
179
  elsif association.belongs_to? || parent_record.new_record? || parent_record.send(association.name).nil?
179
180
  # avoid use build_association in has_one when record is saved and had associated record
180
181
  # because associated record would be changed in DB
181
- parent_record.send("build_#{association.name}")
182
+ parent_record.send(:"build_#{association.name}")
182
183
  else
183
184
  association.klass.new.tap do |record|
184
185
  assign_default_attributes record
185
186
  save_record_to_association(record, association.reverse_association, parent_record) # set inverse
186
187
  end
187
- end
188
+ end.tap { |record| yield record if block_given? }
188
189
  end
189
190
 
190
191
  def save_record_to_association(record, association, value, reverse = nil)
191
192
  return unless association
193
+
192
194
  if association.collection?
193
195
  record.association(association.name).target << value
194
196
  elsif reverse&.belongs_to?
195
- value.send("#{reverse.name}=", record)
197
+ value.send(:"#{reverse.name}=", record)
196
198
  else
197
- record.send("#{association.name}=", value)
199
+ record.send(:"#{association.name}=", value)
198
200
  end
199
201
  end
200
202
  end
@@ -60,20 +60,20 @@ module ActiveScaffold
60
60
  col_class << 'checkbox' if column.form_ui == :checkbox
61
61
  col_class = col_class.join(' ')
62
62
  end
63
- if readonly && !record.new_record? || !record.authorized_for?(:crud_type => crud_type, :column => column.name)
63
+ if (readonly && !record.new_record?) || !record.authorized_for?(crud_type: crud_type, column: column.name)
64
64
  form_attribute(column, record, scope, true, col_class)
65
65
  else
66
66
  renders_as = column_renders_as(column)
67
- html = render_column(column, record, renders_as, scope, false, col_class)
67
+ html = render_column(column, record, renders_as, scope, only_value: false, col_class: col_class)
68
68
  html = content_tag(:div, html, active_scaffold_subform_attributes(column)) if renders_as == :subform
69
69
  html
70
70
  end
71
71
  end
72
72
 
73
- def active_scaffold_subform_attributes(column, column_css_class = nil, klass = nil)
73
+ def active_scaffold_subform_attributes(column, column_css_class = nil, klass = nil, tab_id: nil)
74
74
  {
75
- :class => "sub-form #{active_scaffold_config_for(klass || column.association.klass).subform.layout}-sub-form #{column_css_class} #{column.name}-sub-form",
76
- :id => sub_form_id(:association => column.name)
75
+ class: "sub-form #{active_scaffold_config_for(klass || column.association.klass).subform.layout}-sub-form #{column_css_class} #{column.name}-sub-form",
76
+ id: sub_form_id(association: column.name, tab_id: tab_id)
77
77
  }
78
78
  end
79
79
 
@@ -106,9 +106,7 @@ module ActiveScaffold
106
106
  classes = "#{column.name}-input"
107
107
  classes += ' numeric-input' if column.number?
108
108
 
109
- if (column.form_ui_options || column.options)[:collapsible]
110
- collapsible_id = "container_#{id_control}"
111
- end
109
+ collapsible_id = "container_#{id_control}" if (column.form_ui_options || column.options)[:collapsible]
112
110
 
113
111
  {name: name, class: classes, id: id_control, collapsible_id: collapsible_id}.merge(options)
114
112
  end
@@ -119,6 +117,7 @@ module ActiveScaffold
119
117
  elsif %i[new create edit update render_field].include? action_name.to_sym
120
118
  # disable update_columns for inplace_edit (GET render_field)
121
119
  return if action_name == 'render_field' && request.get?
120
+
122
121
  active_scaffold_config.send(record.new_record? ? :create : :update).columns.visible_columns_names
123
122
  end
124
123
  end
@@ -155,29 +154,48 @@ module ActiveScaffold
155
154
  {}
156
155
  end
157
156
 
158
- def render_column(column, record, renders_as, scope = nil, only_value = false, col_class = nil) # rubocop:disable Metrics/ParameterLists
157
+ def render_subsection(column, record, scope, form_action)
158
+ subsection_id = sub_section_id(sub_section: column.label)
159
+ locals = {columns: column, form_action: form_action, scope: scope}
160
+ header = content_tag(:h5) do
161
+ h(column.label) <<
162
+ link_to_visibility_toggle(subsection_id, default_visible: !column.collapsed)
163
+ end
164
+ if column.tabbed_by
165
+ locals[:tabbed_by] = column.tabbed_by
166
+ header << content_tag(:div, id: subsection_id) do
167
+ active_scaffold_tabbed_by(column, record, scope, subsection_id) do |tab_value, tab_id|
168
+ render 'form', locals.merge(subsection_id: "#{subsection_id}-#{tab_id}", tab_id: tab_id, tab_value: tab_value)
169
+ end
170
+ end
171
+ else
172
+ header << render('form', locals.merge(subsection_id: subsection_id))
173
+ end
174
+ end
175
+
176
+ def render_column(column, record, renders_as, scope = nil, only_value: false, col_class: nil, **subform_locals)
159
177
  if form_column_is_hidden?(column, record, scope)
160
178
  # creates an element that can be replaced by the update_columns routine,
161
179
  # but will not affect the value of the submitted form in this state:
162
180
  # <dl><input type="hidden" class="<%= column.name %>-input"></dl>
163
181
  content_tag :dl, style: 'display: none' do
164
- hidden_field_tag(nil, nil, :class => "#{column.name}-input")
182
+ hidden_field_tag(nil, nil, class: "#{column.name}-input")
165
183
  end
166
184
  elsif (partial = override_form_field_partial(column))
167
- render :partial => partial, :locals => {:column => column, :only_value => only_value, :scope => scope, :col_class => col_class, :record => record}
185
+ render partial, column: column, only_value: only_value, scope: scope, col_class: col_class, record: record
168
186
  elsif renders_as == :field || override_form_field?(column)
169
187
  form_attribute(column, record, scope, only_value, col_class)
170
188
  elsif renders_as == :subform
171
- render :partial => 'form_association', :locals => {:column => column, :scope => scope, :parent_record => record}
189
+ render 'form_association', subform_locals.slice(:tabbed_by, :tab_value, :tab_id).merge(column: column, scope: scope, parent_record: record)
172
190
  else
173
191
  form_hidden_attribute(column, record, scope)
174
192
  end
175
193
  end
176
194
 
177
195
  def form_column_is_hidden?(column, record, scope = nil)
178
- if column.hide_form_column_if&.respond_to?(:call)
196
+ if column.hide_form_column_if.respond_to?(:call)
179
197
  column.hide_form_column_if.call(record, column, scope)
180
- elsif column.hide_form_column_if&.is_a?(Symbol)
198
+ elsif column.hide_form_column_if.is_a?(Symbol)
181
199
  record.send(column.hide_form_column_if)
182
200
  else
183
201
  column.hide_form_column_if
@@ -185,7 +203,7 @@ module ActiveScaffold
185
203
  end
186
204
 
187
205
  def form_attribute(column, record, scope = nil, only_value = false, col_class = nil)
188
- column_options = active_scaffold_input_options(column, scope, :object => record)
206
+ column_options = active_scaffold_input_options(column, scope, object: record)
189
207
  collapsible_id = column_options.delete :collapsible_id
190
208
  attributes = field_attributes(column, record)
191
209
  attributes[:class] = "#{attributes[:class]} #{col_class}" if col_class.present?
@@ -201,9 +219,9 @@ module ActiveScaffold
201
219
  field = active_scaffold_input_for column, scope, column_options
202
220
  end
203
221
  if field
204
- field << loading_indicator_tag(:action => :render_field, :id => params[:id]) if column.update_columns
222
+ field << loading_indicator_tag(action: :render_field, id: params[:id]) if column.update_columns
205
223
  desc = column.description(record, scope)
206
- field << content_tag(:span, desc, :class => 'description') if desc.present?
224
+ field << content_tag(:span, desc, class: 'description') if desc.present?
207
225
  end
208
226
 
209
227
  label = label_tag(label_for(column, column_options), form_column_label(column, record, scope))
@@ -281,7 +299,7 @@ module ActiveScaffold
281
299
  assoc = column.association
282
300
  value = assoc.singular?
283
301
  value ||= assoc.collection? && !assoc.readonly? && (!assoc.through? || !assoc.through_reflection.collection?)
284
- value &&= false unless assoc.klass.authorized_for?(:crud_type => :create)
302
+ value &&= false unless assoc.klass.authorized_for?(crud_type: :create)
285
303
  value
286
304
  end
287
305
 
@@ -306,6 +324,7 @@ module ActiveScaffold
306
324
 
307
325
  def active_scaffold_select_name_with_multiple(options)
308
326
  return if !options[:multiple] || options[:name].to_s.ends_with?('[]')
327
+
309
328
  options[:name] = "#{options[:name]}[]"
310
329
  end
311
330
 
@@ -317,7 +336,7 @@ module ActiveScaffold
317
336
  select_options.unshift(associated) unless associated.nil? || select_options.include?(associated)
318
337
 
319
338
  method = column.name
320
- options.merge! :selected => associated&.id, :include_blank => as_(:_select_), :object => record
339
+ options.merge! selected: associated&.id, include_blank: as_(:_select_), object: record
321
340
 
322
341
  html_options.merge!(ui_options[:html_options] || {})
323
342
  options.merge!(ui_options)
@@ -344,6 +363,7 @@ module ActiveScaffold
344
363
  column.association.klass
345
364
  end
346
365
  return content_tag(:div, '') unless klass
366
+
347
367
  subform_attrs = active_scaffold_subform_attributes(column, nil, klass)
348
368
  if record.send(column.name)&.new_record?
349
369
  new_record = record.send(column.name)
@@ -361,6 +381,7 @@ module ActiveScaffold
361
381
  end
362
382
  html = content_tag(:div, subform, subform_attrs)
363
383
  return html if skip_link
384
+
364
385
  html << active_scaffold_show_new_subform_link(column, record, html_options[:id], subform_attrs[:id])
365
386
  end
366
387
 
@@ -370,7 +391,7 @@ module ActiveScaffold
370
391
  link_to(label, '#', data: data, class: 'show-new-subform')
371
392
  end
372
393
 
373
- def active_scaffold_file_with_remove_link(column, options, content, remove_file_prefix, controls_class, ui_options: column.options, &block) # rubocop:disable Metrics/ParameterLists
394
+ def active_scaffold_file_with_remove_link(column, options, content, remove_file_prefix, controls_class, ui_options: column.options, &block)
374
395
  options = active_scaffold_input_text_options(options.merge(ui_options))
375
396
  if content
376
397
  active_scaffold_file_with_content(column, content, options, remove_file_prefix, controls_class, &block)
@@ -381,31 +402,25 @@ module ActiveScaffold
381
402
 
382
403
  def active_scaffold_file_with_content(column, content, options, remove_file_prefix, controls_class)
383
404
  required = options.delete(:required)
384
- case ActiveScaffold.js_framework
385
- when :jquery
386
- js_remove_file_code = "jQuery(this).prev().val('true'); jQuery(this).parent().hide().next().show()#{".find('input').attr('required', 'required')" if required}; return false;"
387
- js_dont_remove_file_code = "jQuery(this).parents('div.#{controls_class}').find('input.remove_file').val('false'); return false;"
388
- when :prototype
389
- js_remove_file_code = "$(this).previous().value='true'; $(this).up().hide().next().show()#{".down().writeAttribute('required', 'required')" if required}; return false;"
390
- js_dont_remove_file_code = "jQuery(this).parents('div.#{controls_class}').find('input.remove_file').val('false'); return false;"
391
- end
405
+ js_remove_file_code = "jQuery(this).prev().val('true'); jQuery(this).parent().hide().next().show()#{".find('input').attr('required', 'required')" if required}; return false;"
406
+ js_dont_remove_file_code = "jQuery(this).parents('div.#{controls_class}').find('input.remove_file').val('false'); return false;"
392
407
 
393
408
  object_name, method = options[:name].split(/\[(#{column.name})\]/)
394
409
  method.sub!(/#{column.name}/, "#{remove_file_prefix}\\0")
395
410
  fields = block_given? ? yield : ''
396
411
  link_key = options[:multiple] ? :remove_files : :remove_file
397
- input = file_field(:record, column.name, options.merge(:onchange => js_dont_remove_file_code))
412
+ input = file_field(:record, column.name, options.merge(onchange: js_dont_remove_file_code))
398
413
  content_tag(:div, class: controls_class) do
399
414
  content_tag(:div) do
400
415
  safe_join [content, ' | ', fields,
401
- hidden_field(object_name, method, :value => 'false', class: 'remove_file'),
402
- content_tag(:a, as_(link_key), :href => '#', :onclick => js_remove_file_code)]
403
- end << content_tag(:div, input, :style => 'display: none')
416
+ hidden_field(object_name, method, value: 'false', class: 'remove_file'),
417
+ content_tag(:a, as_(link_key), href: '#', onclick: js_remove_file_code)]
418
+ end << content_tag(:div, input, style: 'display: none')
404
419
  end
405
420
  end
406
421
 
407
422
  def active_scaffold_refresh_link(column, html_options, record, ui_options = {})
408
- link_options = {:object => record}
423
+ link_options = {object: record}
409
424
  if html_options['data-update_url']
410
425
  link_options['data-update_send_form'] = html_options['data-update_send_form']
411
426
  link_options['data-update_send_form_selector'] = html_options['data-update_send_form_selector']
@@ -437,8 +452,8 @@ module ActiveScaffold
437
452
  active_scaffold_select_name_with_multiple html_options
438
453
  collection_select(:record, column.name, select_options, :id, ui_options[:label_method] || :to_label, ui_options.merge(object: record), html_options)
439
454
  elsif select_options.empty?
440
- content_tag(:span, as_(:no_options), :class => "#{options[:class]} no-options", :id => options[:id]) <<
441
- hidden_field_tag("#{options[:name]}[]", '', :id => nil)
455
+ content_tag(:span, as_(:no_options), class: "#{options[:class]} no-options", id: options[:id]) <<
456
+ hidden_field_tag("#{options[:name]}[]", '', id: nil)
442
457
  else
443
458
  active_scaffold_checkbox_list(column, select_options, associated_options.collect(&:id), options, ui_options: ui_options)
444
459
  end
@@ -455,7 +470,7 @@ module ActiveScaffold
455
470
  option_id = option.is_a?(Array) ? option[1] : option.id
456
471
  label = option.is_a?(Array) ? option[0] : option.send(label_method)
457
472
  check_box_tag(checkbox_options[:name], option_id, associated_ids.include?(option_id), checkbox_options) <<
458
- content_tag(:label, label, :for => checkbox_options[:id])
473
+ content_tag(:label, label, for: checkbox_options[:id])
459
474
  end
460
475
  end
461
476
 
@@ -469,12 +484,12 @@ module ActiveScaffold
469
484
  def active_scaffold_checkbox_list(column, select_options, associated_ids, options, ui_options: column.options)
470
485
  label_method = ui_options[:label_method] || :to_label
471
486
  html = active_scaffold_check_all_buttons(column, options, ui_options: ui_options)
472
- html << hidden_field_tag("#{options[:name]}[]", '', :id => nil)
487
+ html << hidden_field_tag("#{options[:name]}[]", '', id: nil)
473
488
  draggable = options.delete(:draggable_lists) || ui_options[:draggable_lists]
474
- html << content_tag(:ul, options.merge(:class => "#{options[:class]} checkbox-list#{' draggable-lists' if draggable}")) do
489
+ html << content_tag(:ul, options.merge(class: "#{options[:class]} checkbox-list#{' draggable-lists' if draggable}")) do
475
490
  content = []
476
491
  select_options.each_with_index do |option, i|
477
- content << active_scaffold_checkbox_option(option, label_method, associated_ids, :name => "#{options[:name]}[]", :id => "#{options[:id]}_#{i}_id")
492
+ content << active_scaffold_checkbox_option(option, label_method, associated_ids, name: "#{options[:name]}[]", id: "#{options[:id]}_#{i}_id")
478
493
  end
479
494
  safe_join content
480
495
  end
@@ -526,13 +541,13 @@ module ActiveScaffold
526
541
  label_method = ui_options[:label_method] || :to_label
527
542
  text = option.send(label_method)
528
543
  value = option.id
529
- checked = {:checked => selected == value}
544
+ checked = {checked: selected == value}
530
545
  else
531
546
  text, value = active_scaffold_translated_option(column, *option)
532
547
  end
533
548
 
534
- id_key = radio_options[:"data-id"] ? :"data-id" : :id
535
- radio_options = radio_options.merge(id_key => radio_options[id_key] + '-' + value.to_s.parameterize)
549
+ id_key = radio_options[:'data-id'] ? :'data-id' : :id
550
+ radio_options = radio_options.merge(id_key => "#{radio_options[id_key]}-#{value.to_s.parameterize}")
536
551
  radio_options.merge!(checked) if checked
537
552
  content_tag(:label, radio_button(:record, column.name, value, radio_options) + text)
538
553
  end
@@ -554,7 +569,7 @@ module ActiveScaffold
554
569
  if ui_options[:add_new]
555
570
  html_options[:data] ||= {}
556
571
  html_options[:data][:subform_id] = active_scaffold_subform_attributes(column)[:id]
557
- radio_html_options = html_options.merge(class: html_options[:class] + ' hide-new-subform')
572
+ radio_html_options = html_options.merge(class: "#{html_options[:class]} hide-new-subform")
558
573
  else
559
574
  radio_html_options = html_options
560
575
  end
@@ -567,14 +582,14 @@ module ActiveScaffold
567
582
  radios.prepend content_tag(:label, radio_button(:record, column.name, '', html_options.merge(id: nil)) + label)
568
583
  end
569
584
  if ui_options[:add_new]
570
- create_new_button = radio_button_tag(html_options[:name], '', selected&.new_record?, html_options.merge(id: nil, class: html_options[:class] + ' show-new-subform').except(:object))
585
+ create_new_button = radio_button_tag(html_options[:name], '', selected&.new_record?, html_options.merge(id: nil, class: "#{html_options[:class]} show-new-subform").except(:object))
571
586
  radios << content_tag(:label, create_new_button << as_(:create_new)) <<
572
587
  active_scaffold_new_record_subform(column, record, html_options, ui_options: ui_options, skip_link: true)
573
588
  end
574
589
  safe_join radios
575
590
  else
576
- html = content_tag(:span, as_(:no_options), :class => "#{html_options[:class]} no-options", :id => html_options[:id])
577
- html << hidden_field_tag(html_options[:name], '', :id => nil)
591
+ html = content_tag(:span, as_(:no_options), class: "#{html_options[:class]} no-options", id: html_options[:id])
592
+ html << hidden_field_tag(html_options[:name], '', id: nil)
578
593
  html << active_scaffold_new_record_subform(column, record, html_options, ui_options: ui_options) if ui_options[:add_new]
579
594
  html
580
595
  end
@@ -698,6 +713,7 @@ module ActiveScaffold
698
713
  while controller.uses_active_scaffold?
699
714
  path = File.join(controller.controller_path, partial)
700
715
  return path if template_exists?(path, true)
716
+
701
717
  controller = controller.superclass
702
718
  end
703
719
  nil
@@ -739,7 +755,7 @@ module ActiveScaffold
739
755
  :subsection
740
756
  elsif column.active_record_class.locking_column.to_s == column.name.to_s || column.form_ui == :hidden
741
757
  :hidden
742
- elsif column.association.nil? || column.form_ui || !active_scaffold_config_for(column.association.klass).actions.include?(:subform) || override_form_field?(column)
758
+ elsif column.association.nil? || column.form_ui || active_scaffold_config_for(column.association.klass).actions.exclude?(:subform) || override_form_field?(column)
743
759
  :field
744
760
  else
745
761
  :subform
@@ -756,7 +772,7 @@ module ActiveScaffold
756
772
 
757
773
  def active_scaffold_add_existing_input(options)
758
774
  record = options.delete(:object)
759
- if !ActiveScaffold.js_framework.nil? && controller.respond_to?(:record_select_config, true)
775
+ if controller.respond_to?(:record_select_config, true)
760
776
  remote_controller = active_scaffold_controller_for(record_select_config.model).controller_path
761
777
  options[:controller] = remote_controller
762
778
  options.merge!(active_scaffold_input_text_options)
@@ -802,15 +818,15 @@ module ActiveScaffold
802
818
 
803
819
  # Minimum
804
820
  unless options[:min]
805
- min = validators.map { |v| v.options[:greater_than_or_equal_to] }.compact.max
806
- greater_than = validators.map { |v| v.options[:greater_than] }.compact.max
821
+ min = validators.filter_map { |v| v.options[:greater_than_or_equal_to] }.max
822
+ greater_than = validators.filter_map { |v| v.options[:greater_than] }.max
807
823
  numerical_constraints[:min] = [min, (greater_than + margin if greater_than)].compact.max
808
824
  end
809
825
 
810
826
  # Maximum
811
827
  unless options[:max]
812
- max = validators.map { |v| v.options[:less_than_or_equal_to] }.compact.min
813
- less_than = validators.map { |v| v.options[:less_than] }.compact.min
828
+ max = validators.filter_map { |v| v.options[:less_than_or_equal_to] }.min
829
+ less_than = validators.filter_map { |v| v.options[:less_than] }.min
814
830
  numerical_constraints[:max] = [max, (less_than - margin if less_than)].compact.min
815
831
  end
816
832
 
@@ -820,7 +836,7 @@ module ActiveScaffold
820
836
  only_even_valid = validators.any? { |v| v.options[:even] } unless only_odd_valid
821
837
  if !only_integer
822
838
  numerical_constraints[:step] ||= "0.#{'0' * (column.column.scale - 1)}1" if column.column&.scale.to_i.positive?
823
- elsif options[:min] && options[:min].respond_to?(:even?) && (only_odd_valid || only_even_valid)
839
+ elsif options[:min].respond_to?(:even?) && (only_odd_valid || only_even_valid)
824
840
  numerical_constraints[:step] = 2
825
841
  numerical_constraints[:min] += 1 if only_odd_valid && options[:min].even?
826
842
  numerical_constraints[:min] += 1 if only_even_valid && options[:min].odd?
@@ -4,6 +4,7 @@ module ActiveScaffold
4
4
  module HumanConditionHelpers
5
5
  def active_scaffold_human_condition_for(column)
6
6
  return if (value = field_search_params[column.name.to_s]).nil?
7
+
7
8
  search_ui = column.search_ui
8
9
  search_ui ||= column.column_type if column.column
9
10
  if override_human_condition_column?(column)
@@ -23,7 +24,7 @@ module ActiveScaffold
23
24
  end
24
25
 
25
26
  def format_human_condition(column, opt, from = nil, to = nil)
26
- attribute = column.label
27
+ attribute = column.active_record_class.human_attribute_name(column.name)
27
28
  opt ||= :between if from && to
28
29
  opt ||= from ? '>=' : '<='
29
30
  from = to = nil if opt&.in? %w[null not_null]
@@ -51,15 +52,15 @@ module ActiveScaffold
51
52
  range_type, range = value['range'].downcase.split('_')
52
53
  format = active_scaffold_human_condition_datetime_range_format(range_type, range)
53
54
  from, = controller.class.datetime_from_to(column, value)
54
- "#{column.label} = #{as_(value['range'].downcase).downcase} (#{I18n.l(from, :format => format)})"
55
- when 'PAST', 'FUTURE', 'BETWEEN'
55
+ "#{column.active_record_class.human_attribute_name(column.name)} = #{as_(value['range'].downcase).downcase} (#{I18n.l(from, format: format)})"
56
+ when 'PAST', 'FUTURE'
56
57
  from, to = controller.class.datetime_from_to(column, value)
57
- "#{column.label} #{as_('between').downcase} #{I18n.l(from)} - #{I18n.l(to)}"
58
+ "#{column.active_record_class.human_attribute_name(column.name)} #{as_('BETWEEN'.downcase).downcase} #{I18n.l(from)} - #{I18n.l(to)}"
58
59
  when 'null', 'not_null'
59
- "#{column.label} #{as_(value['opt'].downcase).downcase}"
60
+ "#{column.active_record_class.human_attribute_name(column.name)} #{as_(value['opt'].downcase).downcase}"
60
61
  else
61
- from, = controller.class.datetime_from_to(column, value)
62
- "#{column.label} #{as_(value['opt'].downcase).downcase} #{I18n.l(from)}"
62
+ from, to = controller.class.datetime_from_to(column, value)
63
+ "#{column.active_record_class.human_attribute_name(column.name)} #{as_(value['opt'].downcase).downcase} #{I18n.l(from)} #{"- #{I18n.l(to)}" if value['opt'] == 'BETWEEN'}"
63
64
  end
64
65
  end
65
66
  alias active_scaffold_human_condition_time active_scaffold_human_condition_datetime
@@ -69,7 +70,7 @@ module ActiveScaffold
69
70
  def active_scaffold_human_condition_datetime_range_format(range_type, range)
70
71
  case range
71
72
  when 'week'
72
- first_day_of_week = I18n.translate 'active_scaffold.date_picker_options.firstDay'
73
+ first_day_of_week = I18n.t 'active_scaffold.date_picker_options.firstDay'
73
74
  if first_day_of_week == 1
74
75
  '%W %Y'
75
76
  else
@@ -80,7 +81,7 @@ module ActiveScaffold
80
81
  when 'year'
81
82
  '%Y'
82
83
  else
83
- I18n.translate 'date.formats.default'
84
+ I18n.t 'date.formats.default'
84
85
  end
85
86
  end
86
87
  # def active_scaffold_human_condition_date(column, value)
@@ -93,8 +94,8 @@ module ActiveScaffold
93
94
  # end
94
95
 
95
96
  def active_scaffold_human_condition_boolean(column, value)
96
- attribute = column.label
97
- as_(:boolean, :scope => :human_conditions, :column => attribute, :value => as_(value))
97
+ attribute = column.active_record_class.human_attribute_name(column.name)
98
+ as_(:boolean, scope: :human_conditions, column: attribute, value: as_(value))
98
99
  end
99
100
  alias active_scaffold_human_condition_checkbox active_scaffold_human_condition_boolean
100
101
 
@@ -103,16 +104,17 @@ module ActiveScaffold
103
104
  end
104
105
 
105
106
  def active_scaffold_human_condition_select(column, associated)
106
- attribute = column.label
107
+ attribute = column.active_record_class.human_attribute_name(column.name)
107
108
  if associated.is_a?(Hash)
108
109
  return active_scaffold_human_condition_range(column, associated) unless associated['opt'] == '='
110
+
109
111
  associated = associated['from']
110
112
  end
111
113
  associated = [associated] unless associated.is_a? Array
112
- associated = associated.select(&:present?)
114
+ associated = associated.compact_blank
113
115
  if column.association
114
116
  method = column.options[:label_method] || :to_label
115
- associated = column.association.klass.where(:id => associated.map(&:to_i)).map(&method)
117
+ associated = column.association.klass.where(id: associated.map(&:to_i)).map(&method)
116
118
  elsif column.options[:options]
117
119
  associated = associated.collect do |value|
118
120
  text, val = column.options[:options].find { |t, v| (v.nil? ? t : v).to_s == value.to_s }
@@ -120,7 +122,7 @@ module ActiveScaffold
120
122
  value
121
123
  end
122
124
  end
123
- as_(:association, :scope => :human_conditions, :column => attribute, :value => associated.join(', '))
125
+ as_(:association, scope: :human_conditions, column: attribute, value: associated.join(', '))
124
126
  end
125
127
  alias active_scaffold_human_condition_multi_select active_scaffold_human_condition_select
126
128
  alias active_scaffold_human_condition_select_multiple active_scaffold_human_condition_select
@@ -6,8 +6,8 @@ module ActiveScaffold
6
6
  ERB::Util.h controller.to_s.gsub('/', '__')
7
7
  end
8
8
 
9
- def controller_id(controller = (params[:eid] || nested_id || params[:parent_controller] || params[:controller]))
10
- 'as_' + id_from_controller(controller)
9
+ def controller_id(controller = params[:eid] || nested_id || params[:parent_controller] || params[:controller])
10
+ "as_#{id_from_controller(controller)}"
11
11
  end
12
12
 
13
13
  def nested?
@@ -39,7 +39,7 @@ module ActiveScaffold
39
39
  end
40
40
 
41
41
  def active_scaffold_calculations_id(options = {})
42
- "#{options[:controller_id] || controller_id}-calculations#{'-' + options[:column].name.to_s if options[:column]}"
42
+ "#{options[:controller_id] || controller_id}-calculations#{"-#{options[:column].name}" if options[:column]}"
43
43
  end
44
44
 
45
45
  def empty_message_id
@@ -106,13 +106,13 @@ module ActiveScaffold
106
106
  def sub_form_id(options = {})
107
107
  options[:id] ||= params[:id]
108
108
  options[:id] ||= nested_parent_id if nested?
109
- clean_id "#{controller_id}-#{options[:id]}-#{options[:association]}-subform"
109
+ clean_id "#{controller_id}-#{options[:id]}-#{options[:association]}#{'-' if options[:tab_id]}#{options[:tab_id]}-subform"
110
110
  end
111
111
 
112
112
  def sub_form_list_id(options = {})
113
113
  options[:id] ||= params[:id]
114
114
  options[:id] ||= nested_parent_id if nested?
115
- clean_id "#{controller_id}-#{options[:id]}-#{options[:association]}-subform-list"
115
+ clean_id "#{controller_id}-#{options[:id]}-#{options[:association]}#{'-' if options[:tab_id]}#{options[:tab_id]}-subform-list"
116
116
  end
117
117
 
118
118
  def element_messages_id(options = {})