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
@@ -7,6 +7,7 @@ module ActiveScaffold
7
7
  module ClassMethods
8
8
  def self.extended(klass)
9
9
  return unless klass.active_scaffold_config
10
+
10
11
  if klass.active_scaffold_config.active_record?
11
12
  klass.extend ActiveRecord
12
13
  elsif klass.active_scaffold_config.mongoid?
@@ -103,14 +104,15 @@ module ActiveScaffold
103
104
  if respond_to?(column_method)
104
105
  args = [column, value, like_pattern]
105
106
  args << session if method(column_method).arity == 4
106
- return send("condition_for_#{column.name}_column", *args)
107
+ return send(:"condition_for_#{column.name}_column", *args)
107
108
  end
108
- return unless column&.search_sql && value.present?
109
+ return unless column.search_sql && value.present?
110
+
109
111
  search_ui = column.search_ui || column.column_type
110
112
  begin
111
113
  sql, *values =
112
- if search_ui && respond_to?("condition_for_#{search_ui}_type")
113
- send("condition_for_#{search_ui}_type", column, value, like_pattern)
114
+ if search_ui && respond_to?(:"condition_for_#{search_ui}_type")
115
+ send(:"condition_for_#{search_ui}_type", column, value, like_pattern)
114
116
  elsif column.search_sql.instance_of? Proc
115
117
  column.search_sql.call(value)
116
118
  else
@@ -126,7 +128,7 @@ module ActiveScaffold
126
128
  sql_conditions << subquery_sql
127
129
  where_values.concat subquery_values
128
130
  else
129
- sql_conditions << sql % {:search_sql => search_sql}
131
+ sql_conditions << (sql % {search_sql: search_sql})
130
132
  where_values.concat values
131
133
  end
132
134
  end
@@ -139,14 +141,14 @@ module ActiveScaffold
139
141
 
140
142
  def subquery_condition(column, sql, options, values)
141
143
  relation, *columns = options[:subquery]
142
- conditions = [columns.map { |search_sql| sql % {:search_sql => search_sql} }.join(' OR ')]
144
+ conditions = [columns.map { |search_sql| sql % {search_sql: search_sql} }.join(' OR ')]
143
145
  conditions += values * columns.size if values.present?
144
146
  subquery = relation.where(conditions)
145
147
  subquery = subquery.select(relation.primary_key) if subquery.select_values.blank?
146
148
 
147
149
  conditions = [["#{options[:field] || column.field} IN (?)", options[:conditions]&.first].compact.join(' AND ')]
148
150
  conditions << subquery
149
- conditions.concat options[:conditions][1..-1] if options[:conditions]
151
+ conditions.concat options[:conditions][1..] if options[:conditions]
150
152
  if column.association&.polymorphic?
151
153
  conditions[0] << " AND #{column.quoted_foreign_type} = ?"
152
154
  conditions << relation.base_class.sti_name
@@ -176,7 +178,7 @@ module ActiveScaffold
176
178
  if value.is_a?(Hash)
177
179
  condition_for_range(column, value, like_pattern)
178
180
  else
179
- values = Array(value).select(&:present?)
181
+ values = Array(value).compact_blank
180
182
  ['%<search_sql>s in (?)', values] if values.present?
181
183
  end
182
184
  else
@@ -189,7 +191,7 @@ module ActiveScaffold
189
191
  ['%<search_sql>s = ?', condition_value_for_numeric(column, value)]
190
192
  elsif ActiveScaffold::Finder::NULL_COMPARATORS.include?(value[:opt])
191
193
  condition_for_null_type(column, value[:opt])
192
- elsif value[:from].blank? || !ActiveScaffold::Finder::NUMERIC_COMPARATORS.include?(value[:opt])
194
+ elsif value[:from].blank? || ActiveScaffold::Finder::NUMERIC_COMPARATORS.exclude?(value[:opt])
193
195
  nil
194
196
  elsif value[:opt] == 'BETWEEN'
195
197
  ['(%<search_sql>s BETWEEN ? AND ?)', condition_value_for_numeric(column, value[:from]), condition_value_for_numeric(column, value[:to])]
@@ -200,7 +202,7 @@ module ActiveScaffold
200
202
 
201
203
  def condition_for_single_value(column, value, like_pattern = nil)
202
204
  if column.text?
203
- value = column.active_record? ? column.active_record_class.sanitize_sql_like(value) : value
205
+ value = column.active_record_class.sanitize_sql_like(value) if column.active_record?
204
206
  ["%<search_sql>s #{ActiveScaffold::Finder.like_operator} ?", like_pattern.sub('?', value)]
205
207
  else
206
208
  ['%<search_sql>s = ?', ActiveScaffold::Core.column_type_cast(value, column.column)]
@@ -211,11 +213,11 @@ module ActiveScaffold
211
213
  if ActiveScaffold::Finder::NULL_COMPARATORS.include?(value[:opt])
212
214
  condition_for_null_type(column, value[:opt], like_pattern)
213
215
  elsif value[:from].is_a?(Array) # opt can be only =
214
- from = Array(value[:from]).select(&:present?)
216
+ from = Array(value[:from]).compact_blank
215
217
  ['%<search_sql>s in (?)', from] if from.present?
216
218
  elsif value[:from].blank?
217
219
  nil
218
- elsif ActiveScaffold::Finder::STRING_COMPARATORS.values.include?(value[:opt])
220
+ elsif ActiveScaffold::Finder::STRING_COMPARATORS.value?(value[:opt])
219
221
  text = column.active_record? ? column.active_record_class.sanitize_sql_like(value[:from]) : value[:from]
220
222
  [
221
223
  "%<search_sql>s #{'NOT ' if value[:opt].start_with?('not_')}#{ActiveScaffold::Finder.like_operator} ?",
@@ -229,18 +231,16 @@ module ActiveScaffold
229
231
  end
230
232
 
231
233
  def tables_for_translating_days_and_months(format)
232
- # rubocop:disable Style/FormatStringToken
233
234
  keys = {
234
235
  '%A' => 'date.day_names',
235
236
  '%a' => 'date.abbr_day_names',
236
237
  '%B' => 'date.month_names',
237
238
  '%b' => 'date.abbr_month_names'
238
239
  }
239
- # rubocop:enable Style/FormatStringToken
240
- key_index = keys.keys.map { |key| [key, format.index(key)] }.to_h
240
+ key_index = keys.keys.index_with { |key| format.index(key) }
241
241
  keys.select! { |k, _| key_index[k] }
242
242
  keys.sort_by { |k, _| key_index[k] }.map do |_, k|
243
- I18n.t(k).compact.zip(I18n.t(k, :locale => :en).compact).to_h
243
+ I18n.t(k).compact.zip(I18n.t(k, locale: :en).compact).to_h
244
244
  end
245
245
  end
246
246
 
@@ -250,6 +250,7 @@ module ActiveScaffold
250
250
  regexp = Regexp.union(table.keys)
251
251
  index = value.index(regexp)
252
252
  next unless index
253
+
253
254
  translated << value.slice!(0...index)
254
255
  value.sub!(regexp) do |str|
255
256
  translated << table[str]
@@ -259,23 +260,12 @@ module ActiveScaffold
259
260
  translated << value
260
261
  end
261
262
 
262
- def format_for_datetime(column, value)
263
+ def format_for_datetime(column, value, ui_name, ui_options)
263
264
  parts = Date._parse(value)
264
- if ActiveScaffold.js_framework == :jquery
265
- format = I18n.translate "time.formats.#{column.options[:format] || :picker}", :default => ''
266
- end
267
-
268
- if format.blank?
269
- time_parts = [[:hour, '%H'], [:min, '%M'], [:sec, '%S']].map do |part, format_part|
270
- format_part if parts[part].present?
271
- end.compact
272
- format = "#{I18n.t('date.formats.default')} #{time_parts.join(':')} #{'%z' if parts[:offset].present?}"
273
- else
274
- [[:hour, '%H'], [:min, ':%M'], [:sec, ':%S']].each do |part, f|
275
- format.gsub!(f, '') if parts[part].blank?
276
- end
277
- format += ' %z' if parts[:offset].present? && format !~ /%z/i
265
+ time_parts = [[:hour, '%H'], [:min, '%M'], [:sec, '%S']].filter_map do |part, format_part|
266
+ format_part if parts[part].present?
278
267
  end
268
+ format = "%Y-%m-%d #{time_parts.join(':')} #{'%z' if parts[:offset].present?}"
279
269
 
280
270
  format.gsub!(/.*(?=%H)/, '') if !parts[:year] && !parts[:month] && !parts[:mday]
281
271
  [format, parts[:offset]]
@@ -290,9 +280,9 @@ module ActiveScaffold
290
280
  nil
291
281
  end
292
282
 
293
- def format_for_date(column, value, format_name = column.options[:format])
294
- if format_name
295
- format = I18n.t("date.formats.#{format_name}")
283
+ def format_for_date(column, value, ui_name, ui_options)
284
+ if ui_options[:format]
285
+ format = I18n.t("date.formats.#{ui_options[:format]}")
296
286
  format.gsub!(/%-d|%-m|%_m/) { |s| s.gsub(/[-_]/, '') } # strptime fails with %-d, %-m, %_m
297
287
  en_value = I18n.locale == :en ? value : translate_days_and_months(value, format)
298
288
  end
@@ -321,8 +311,10 @@ module ActiveScaffold
321
311
  nil
322
312
  end
323
313
 
324
- def condition_value_for_datetime(column, value, conversion = :to_time)
314
+ def condition_value_for_datetime(column, value, conversion = :to_time, ui_method: :search_ui, ui_options: nil)
325
315
  return if value.nil? || value.blank?
316
+
317
+ ui_options ||= column.send(:"#{ui_method}_options") || column.options
326
318
  if value.is_a? Hash
327
319
  local_time_from_hash(value, conversion)
328
320
  elsif value.respond_to?(:strftime)
@@ -334,20 +326,21 @@ module ActiveScaffold
334
326
  value.send(conversion)
335
327
  end
336
328
  elsif conversion == :to_date
337
- parse_date_with_format(*format_for_date(column, value))
329
+ parse_date_with_format(*format_for_date(column, value, column.send(ui_method), ui_options))
338
330
  elsif value.include?('T')
339
331
  Time.zone.parse(value)
340
332
  else # datetime
341
- time = parse_time_with_format(value, *format_for_datetime(column, value))
333
+ time = parse_time_with_format(value, *format_for_datetime(column, value, column.send(ui_method), ui_options))
342
334
  conversion == :to_time ? time : time.send(conversion)
343
335
  end
344
336
  end
345
337
 
346
338
  def condition_value_for_numeric(column, value)
347
339
  return value if value.nil?
340
+
348
341
  value = column.number_to_native(value) if column.options[:format] && column.search_ui != :number
349
- case (column.search_ui || column.column_type)
350
- when :integer then
342
+ case column.search_ui || column.column_type
343
+ when :integer
351
344
  if value.is_a?(TrueClass) || value.is_a?(FalseClass)
352
345
  value ? 1 : 0
353
346
  else
@@ -443,15 +436,16 @@ module ActiveScaffold
443
436
  else
444
437
  range_type, range = value['range'].downcase.split('_')
445
438
  raise ArgumentError unless %w[week month year].include?(range)
439
+
446
440
  case range_type
447
441
  when 'this'
448
- return datetime_now.send("beginning_of_#{range}".to_sym), datetime_now.send("end_of_#{range}")
442
+ [datetime_now.send(:"beginning_of_#{range}"), datetime_now.send(:"end_of_#{range}")]
449
443
  when 'prev'
450
- return datetime_now.ago(1.send(range.to_sym)).send("beginning_of_#{range}".to_sym), datetime_now.ago(1.send(range.to_sym)).send("end_of_#{range}".to_sym)
444
+ [datetime_now.ago(1.send(range.to_sym)).send(:"beginning_of_#{range}"), datetime_now.ago(1.send(range.to_sym)).send(:"end_of_#{range}")]
451
445
  when 'next'
452
- return datetime_now.in(1.send(range.to_sym)).send("beginning_of_#{range}".to_sym), datetime_now.in(1.send(range.to_sym)).send("end_of_#{range}".to_sym)
446
+ [datetime_now.in(1.send(range.to_sym)).send(:"beginning_of_#{range}"), datetime_now.in(1.send(range.to_sym)).send(:"end_of_#{range}")]
453
447
  else
454
- return nil, nil
448
+ [nil, nil]
455
449
  end
456
450
  end
457
451
  end
@@ -462,7 +456,7 @@ module ActiveScaffold
462
456
 
463
457
  def condition_for_record_select_type(column, value, like_pattern = nil)
464
458
  if value.is_a?(Array)
465
- value = value.select(&:present?)
459
+ value = value.compact_blank
466
460
  ['%<search_sql>s IN (?)', value] if value.present?
467
461
  else
468
462
  ['%<search_sql>s = ?', value]
@@ -489,12 +483,12 @@ module ActiveScaffold
489
483
  'BETWEEN'
490
484
  ].freeze
491
485
  STRING_COMPARATORS = {
492
- :contains => '%?%',
493
- :begins_with => '?%',
494
- :ends_with => '%?',
495
- :doesnt_contain => 'not_%?%',
496
- :doesnt_begin_with => 'not_?%',
497
- :doesnt_end_with => 'not_%?'
486
+ contains: '%?%',
487
+ begins_with: '?%',
488
+ ends_with: '%?',
489
+ doesnt_contain: 'not_%?%',
490
+ doesnt_begin_with: 'not_?%',
491
+ doesnt_end_with: 'not_%?'
498
492
  }.freeze
499
493
  NULL_COMPARATORS = %w[null not_null].freeze
500
494
  DATE_COMPARATORS = %w[PAST FUTURE RANGE].freeze
@@ -508,27 +502,24 @@ module ActiveScaffold
508
502
 
509
503
  protected
510
504
 
511
- attr_writer :active_scaffold_conditions
505
+ attr_writer :active_scaffold_conditions, :active_scaffold_preload, :active_scaffold_habtm_joins, :active_scaffold_outer_joins, :active_scaffold_references
506
+
512
507
  def active_scaffold_conditions
513
508
  @active_scaffold_conditions ||= []
514
509
  end
515
510
 
516
- attr_writer :active_scaffold_preload
517
511
  def active_scaffold_preload
518
512
  @active_scaffold_preload ||= []
519
513
  end
520
514
 
521
- attr_writer :active_scaffold_habtm_joins
522
515
  def active_scaffold_habtm_joins
523
516
  @active_scaffold_habtm_joins ||= []
524
517
  end
525
518
 
526
- attr_writer :active_scaffold_outer_joins
527
519
  def active_scaffold_outer_joins
528
520
  @active_scaffold_outer_joins ||= []
529
521
  end
530
522
 
531
- attr_writer :active_scaffold_references
532
523
  def active_scaffold_references
533
524
  @active_scaffold_references ||= []
534
525
  end
@@ -550,15 +541,15 @@ module ActiveScaffold
550
541
  params_hash active_scaffold_embedded_params[:conditions]
551
542
  end
552
543
 
553
- def all_conditions(include_id_condition = true)
544
+ def all_conditions(id_condition: true)
554
545
  [
555
- (id_condition if include_id_condition), # for list with id (e.g. /users/:id/index)
546
+ (self.id_condition if id_condition), # for list with id (e.g. /users/:id/index)
556
547
  active_scaffold_conditions, # from the search modules
557
548
  conditions_for_collection, # from the dev
558
549
  conditions_from_params, # from the parameters (e.g. /users/list?first_name=Fred)
559
550
  conditions_from_constraints, # from any constraints (embedded scaffolds)
560
551
  active_scaffold_embedded_conditions # embedding conditions (weaker constraints)
561
- ].reject(&:blank?)
552
+ ].compact_blank
562
553
  end
563
554
 
564
555
  def id_condition
@@ -570,14 +561,15 @@ module ActiveScaffold
570
561
  # accomplishes this by checking model.#{action}_authorized?
571
562
  def find_if_allowed(id, security_options, klass = beginning_of_chain)
572
563
  record = klass.find(id)
573
- security_options = {:crud_type => security_options.to_sym} unless security_options.is_a? Hash
564
+ security_options = {crud_type: security_options.to_sym} unless security_options.is_a? Hash
574
565
  raise ActiveScaffold::RecordNotAllowed, "#{klass} with id = #{id}" unless record.authorized_for? security_options
566
+
575
567
  record
576
568
  end
577
569
 
578
570
  # valid options may include:
579
571
  # * :sorting - a Sorting DataStructure (basically an array of hashes of field => direction,
580
- # e.g. [{:field1 => 'asc'}, {:field2 => 'desc'}]).
572
+ # e.g. [{field1: 'asc'}, {field2: 'desc'}]).
581
573
  # please note that multi-column sorting has some limitations: if any column in a multi-field
582
574
  # sort uses method-based sorting, it will be ignored. method sorting only works for single-column sorting.
583
575
  # * :per_page
@@ -586,22 +578,22 @@ module ActiveScaffold
586
578
  search_conditions = all_conditions
587
579
 
588
580
  sorting = options[:sorting]&.clause
589
- sorting = sorting.map(&Arel.method(:sql)) if sorting && active_scaffold_config.active_record?
581
+ sorting = sorting.map { |part| Arel.sql(part) } if sorting && active_scaffold_config.active_record?
590
582
  # create a general-use options array that's compatible with Rails finders
591
583
  finder_options = {
592
- :reorder => sorting,
593
- :conditions => search_conditions
584
+ reorder: sorting,
585
+ conditions: search_conditions
594
586
  }
595
587
  if active_scaffold_config.mongoid?
596
588
  finder_options[:includes] = [active_scaffold_references, active_scaffold_preload].compact.flatten.uniq.presence
597
589
  else
598
590
  finder_options.merge!(
599
- :joins => joins_for_finder,
600
- :left_joins => active_scaffold_outer_joins,
601
- :preload => active_scaffold_preload,
602
- :includes => active_scaffold_references.presence,
603
- :references => active_scaffold_references.presence,
604
- :select => options[:select]
591
+ joins: joins_for_finder,
592
+ left_joins: active_scaffold_outer_joins,
593
+ preload: active_scaffold_preload,
594
+ includes: active_scaffold_references.presence,
595
+ references: active_scaffold_references.presence,
596
+ select: options[:select]
605
597
  )
606
598
  end
607
599
 
@@ -611,7 +603,7 @@ module ActiveScaffold
611
603
 
612
604
  def count_items(query, find_options = {}, count_includes = nil)
613
605
  count_includes ||= find_options[:includes] if find_options[:conditions].present?
614
- options = find_options.reject { |k, _| %i[select reorder order].include? k }
606
+ options = find_options.except(:select, :reorder, :order)
615
607
  # NOTE: we must use includes in the count query, because some conditions may reference other tables
616
608
  options[:includes] = count_includes
617
609
 
@@ -650,7 +642,7 @@ module ActiveScaffold
650
642
  end
651
643
  else
652
644
  ::Paginator.new(count, options[:per_page]) do |offset, per_page|
653
- query = append_to_query(query, :offset => offset, :limit => per_page) if options[:pagination]
645
+ query = append_to_query(query, offset: offset, limit: per_page) if options[:pagination]
654
646
  calculate_last_modified(query)
655
647
  query
656
648
  end
@@ -660,29 +652,30 @@ module ActiveScaffold
660
652
 
661
653
  def calculate_last_modified(query)
662
654
  return unless conditional_get_support? && ActiveScaffold::OrmChecks.columns_hash(query.klass)['updated_at']
655
+
663
656
  @last_modified = query.maximum(:updated_at)
664
657
  end
665
658
 
666
- def calculate_subquery(id_condition = true)
667
- conditions = all_conditions(id_condition)
659
+ def calculate_subquery(id_condition: true)
660
+ conditions = all_conditions(id_condition: id_condition)
668
661
  includes = active_scaffold_config.list.count_includes
669
662
  includes ||= active_scaffold_references if conditions.present?
670
663
  left_joins = active_scaffold_outer_joins
671
664
  left_joins += includes if includes
672
665
  primary_key = active_scaffold_config.primary_key
673
- subquery = append_to_query(beginning_of_chain, :conditions => conditions, :joins => joins_for_finder, :left_joins => left_joins, :select => active_scaffold_config.columns[primary_key].field)
666
+ subquery = append_to_query(beginning_of_chain, conditions: conditions, joins: joins_for_finder, left_joins: left_joins, select: active_scaffold_config.columns[primary_key].field)
674
667
  subquery.unscope(:order)
675
668
  end
676
669
 
677
- def calculate_query(id_condition = true)
678
- active_scaffold_config.model.where(active_scaffold_config.primary_key => calculate_subquery(id_condition))
670
+ def calculate_query(id_condition: true)
671
+ active_scaffold_config.model.where(active_scaffold_config.primary_key => calculate_subquery(id_condition: id_condition))
679
672
  end
680
673
 
681
674
  def append_to_query(relation, options)
682
675
  options.assert_valid_keys :where, :select, :having, :group, :reorder, :order, :limit, :offset,
683
676
  :joins, :left_joins, :left_outer_joins, :includes, :lock, :readonly,
684
677
  :from, :conditions, :preload, :references
685
- relation = options.reject { |_, v| v.blank? }.inject(relation) do |rel, (k, v)|
678
+ relation = options.compact_blank.inject(relation) do |rel, (k, v)|
686
679
  k == :conditions ? apply_conditions(rel, *v) : rel.send(k, v)
687
680
  end
688
681
  relation.distinct_value = true if options[:left_outer_joins].present? || options[:left_joins].present?
@@ -701,7 +694,7 @@ module ActiveScaffold
701
694
  end
702
695
 
703
696
  def apply_conditions(relation, *conditions)
704
- conditions.reject(&:blank?).inject(relation) do |rel, condition|
697
+ conditions.compact_blank.inject(relation) do |rel, condition|
705
698
  if condition.is_a?(Array) && !condition.first.is_a?(String) # multiple conditions
706
699
  apply_conditions(rel, *condition)
707
700
  else
@@ -15,7 +15,7 @@ module ActiveScaffold
15
15
  if link.security_method_set? || controller.respond_to?(link.security_method, true)
16
16
  controller.send(link.security_method, *args)
17
17
  else
18
- args.empty? ? true : args.first.authorized_for?(:crud_type => link.crud_type, :action => link.action, :reason => true)
18
+ args.empty? ? true : args.first.authorized_for?(crud_type: link.crud_type, action: link.action, reason: true)
19
19
  end
20
20
  [auth, reason]
21
21
  end
@@ -35,63 +35,47 @@ module ActiveScaffold
35
35
  options[:level] ||= 0
36
36
  options[:first_action] = true
37
37
  output = ActiveSupport::SafeBuffer.new
38
- prev_link = separator = nil
39
38
 
40
39
  action_links.each(reverse: options.delete(:reverse), groups: true) do |link|
41
- if link == :separator
42
- separator = true if prev_link
43
- next
44
- end
45
- content = nil
46
40
  if link.is_a? ActiveScaffold::DataStructures::ActionLinks
47
- content = display_action_link_group(link, record, options, &block) unless link.empty?
41
+ unless link.empty?
42
+ options[:level] += 1
43
+ content = display_action_links(link, record, options, &block)
44
+ options[:level] -= 1
45
+ if content.present?
46
+ output << display_action_link(link, content, record, options)
47
+ options[:first_action] = false
48
+ end
49
+ end
48
50
  elsif !skip_action_link?(link, *Array(options[:for]))
49
51
  authorized, reason = action_link_authorized?(link, *Array(options[:for]))
50
52
  next if !authorized && options[:skip_unauthorized]
51
53
 
52
- content = display_action_link(link, nil, record, options.merge(authorized: authorized, not_authorized_reason: reason))
54
+ output << display_action_link(link, nil, record, options.merge(authorized: authorized, not_authorized_reason: reason))
53
55
  options[:first_action] = false
54
56
  end
55
- next if content.blank?
56
-
57
- prev_link = true
58
- output << display_action_link_separator(options) if separator
59
- output << content
60
- separator = false
61
57
  end
62
58
  output
63
59
  end
64
60
 
65
- def display_action_link_group(link, record, options, &block)
66
- options[:level] += 1
67
- content = display_action_links(link, record, options, &block)
68
- options[:level] -= 1
69
- display_action_link(link, content, record, options).tap { options[:first_action] = false } if content.present?
70
- end
71
-
72
- def display_action_link_separator(options)
73
- tag = options[:level_0_tag] || :a if options[:level].zero?
74
- content_tag(tag || :li, '&nbsp;'.html_safe, class: 'separator') # rubocop:disable Rails/OutputSafety
75
- end
76
-
77
61
  def display_action_link(link, content, record, options)
78
62
  if content
79
63
  html_classes = hover_via_click? ? 'hover_click ' : ''
80
- if options[:level].zero?
64
+ if (options[:level]).zero?
81
65
  html_classes << 'action_group'
82
66
  group_tag = :div
83
67
  else
84
68
  html_classes << 'top' if options[:first_action]
85
69
  group_tag = :li
86
70
  end
87
- content = content_tag(group_tag, :class => html_classes.presence, :onclick => ('' if hover_via_click?)) do
88
- content_tag(:div, as_(link.label(record)), :class => link.css_class) << content_tag(:ul, content)
71
+ content = content_tag(group_tag, class: html_classes.presence, onclick: ('' if hover_via_click?)) do
72
+ content_tag(:div, as_(link.label(record)), class: link.css_class) << content_tag(:ul, content)
89
73
  end
90
74
  else
91
75
  content = render_action_link(link, record, options)
92
- content = content_tag(:li, content, class: ('top' if options[:first_action])) unless options[:level].zero?
76
+ content = content_tag(:li, content, class: ('top' if options[:first_action])) unless (options[:level]).zero?
93
77
  end
94
- content = content_tag(options[:level_0_tag], content, options[:options_level_0_tag]) if options[:level].zero? && options[:level_0_tag]
78
+ content = content_tag(options[:level_0_tag], content, options[:options_level_0_tag]) if (options[:level]).zero? && options[:level_0_tag]
95
79
  content
96
80
  end
97
81
 
@@ -103,7 +87,7 @@ module ActiveScaffold
103
87
  end
104
88
  if link.action.nil? || (link.type == :member && options.key?(:authorized) && !options[:authorized])
105
89
  html_class = "disabled #{link.action}#{" #{link.html_options[:class]}" if link.html_options[:class].present?}"
106
- html_options = {:link => action_link_text(link, record, options), :class => html_class, :title => options[:not_authorized_reason]}
90
+ html_options = {link: action_link_text(link, record, options), class: html_class, title: options[:not_authorized_reason]}
107
91
  action_link_html(link, nil, html_options, record)
108
92
  else
109
93
  url = action_link_url(link, record)
@@ -161,9 +145,9 @@ module ActiveScaffold
161
145
  else
162
146
  associated
163
147
  end
164
- authorized, reason = associated_for_authorized.authorized_for?(:crud_type => link.crud_type, :reason => true)
148
+ authorized, reason = associated_for_authorized.authorized_for?(crud_type: link.crud_type, reason: true)
165
149
  if link.crud_type == :create && authorized
166
- authorized, reason = record.authorized_for?(:crud_type => :update, :column => column.name, :reason => true)
150
+ authorized, reason = record.authorized_for?(crud_type: :update, column: column.name, reason: true)
167
151
  end
168
152
  [authorized, reason]
169
153
  else
@@ -172,7 +156,8 @@ module ActiveScaffold
172
156
  end
173
157
 
174
158
  def sti_record?(record)
175
- return unless active_scaffold_config.active_record?
159
+ return false unless active_scaffold_config.active_record?
160
+
176
161
  model = active_scaffold_config.model
177
162
  record && model.columns_hash.include?(model.inheritance_column) &&
178
163
  record[model.inheritance_column].present? && !record.instance_of?(model)
@@ -213,7 +198,7 @@ module ActiveScaffold
213
198
 
214
199
  def add_query_string_to_cached_url(link, url)
215
200
  query_string, non_nested_query_string = query_string_for_action_links(link)
216
- nested_params = (!link.nested_link? && non_nested_query_string)
201
+ nested_params = !link.nested_link? && non_nested_query_string
217
202
  if query_string || nested_params
218
203
  url << (url.include?('?') ? '&' : '?')
219
204
  url << query_string if query_string
@@ -230,7 +215,7 @@ module ActiveScaffold
230
215
 
231
216
  def column_in_params_conditions?(key)
232
217
  if key.match?(/!$/)
233
- conditions_from_params[1..-1].any? { |node| node.left.name.to_s == key[0..-2] }
218
+ conditions_from_params[1..].any? { |node| node.left.name.to_s == key[0..-2] }
234
219
  else
235
220
  conditions_from_params[0].include?(key)
236
221
  end
@@ -244,6 +229,7 @@ module ActiveScaffold
244
229
  if defined?(@query_string) && link.parameters.none? { |k, _| @query_string_params.include? k }
245
230
  return [@query_string, @non_nested_query_string]
246
231
  end
232
+
247
233
  keep = true
248
234
  @query_string_params ||= Set.new
249
235
  query_string_options = {}
@@ -286,15 +272,13 @@ module ActiveScaffold
286
272
  @action_links_url_options ||= {}
287
273
  @action_links_url_options[link.name_to_cache.to_s] || begin
288
274
  options = action_link_url_options(link, record)
289
- if cache_action_link_url_options?(link, record)
290
- @action_links_url_options[link.name_to_cache.to_s] = options
291
- end
275
+ @action_links_url_options[link.name_to_cache.to_s] = options if cache_action_link_url_options?(link, record)
292
276
  options
293
277
  end
294
278
  end
295
279
 
296
280
  def action_link_url_options(link, record)
297
- url_options = {:action => link.action}
281
+ url_options = {action: link.action}
298
282
  url_options[:id] = '--ID--' unless record.nil?
299
283
  url_options[:controller] = link.controller.to_s if link.controller
300
284
  url_options.merge! link.parameters if link.parameters
@@ -316,7 +300,10 @@ module ActiveScaffold
316
300
  end
317
301
 
318
302
  def action_link_text(link, record, options)
319
- text = image_tag(link.image[:name], :size => link.image[:size], :alt => options[:link] || link.label(record), :title => options[:link] || link.label(record)) if link.image
303
+ if link.image
304
+ title = options[:link] || link.label(record)
305
+ text = image_tag(link.image[:name], size: link.image[:size], alt: title, title: title)
306
+ end
320
307
  text || options[:link]
321
308
  end
322
309
 
@@ -345,7 +332,7 @@ module ActiveScaffold
345
332
 
346
333
  def action_link_html_options(link, record, options)
347
334
  link_id = get_action_link_id(link, record)
348
- html_options = link.html_options.merge(:class => [link.html_options[:class], link.action.to_s].compact.join(' '))
335
+ html_options = link.html_options.merge(class: [link.html_options[:class], link.action.to_s].compact.join(' '))
349
336
  html_options[:link] = action_link_text(link, record, options)
350
337
 
351
338
  # Needs to be in html_options to as the adding _method to the url is no longer supported by Rails
@@ -397,8 +384,10 @@ module ActiveScaffold
397
384
  end
398
385
  id ||= record&.id&.to_s || (nested? ? nested_parent_id.to_s : '')
399
386
  action_link_id = ActiveScaffold::Registry.cache :action_link_id, link.name_to_cache.to_s do
400
- action_id = "#{id_from_controller("#{link.controller}-") if params[:parent_controller] || (link.controller && link.controller != controller.controller_path)}#{link.action}"
401
- action_link_id(action_id, '--ID--')
387
+ if params[:parent_controller] || (link.controller && link.controller != controller.controller_path)
388
+ controller_id = id_from_controller("#{link.controller}-")
389
+ end
390
+ action_link_id("#{controller_id}#{link.action}", '--ID--')
402
391
  end
403
392
  action_link_id.sub('--ID--', id)
404
393
  end
@@ -417,9 +406,7 @@ module ActiveScaffold
417
406
  if column&.association
418
407
  url_options[:parent_scaffold] = controller_path
419
408
  url_options[column.model.name.foreign_key.to_sym] = url_options.delete(:id)
420
- url_options[:id] = if column.association.singular? && url_options[:action].to_sym != :index
421
- '--CHILD_ID--'
422
- end
409
+ url_options[:id] = ('--CHILD_ID--' if column.association.singular? && url_options[:action].to_sym != :index)
423
410
  elsif link.parameters&.dig(:named_scope)
424
411
  url_options[:parent_scaffold] = controller_path
425
412
  url_options[active_scaffold_config.model.name.foreign_key.to_sym] = url_options.delete(:id)
@@ -434,6 +421,7 @@ module ActiveScaffold
434
421
  # however that will not work if a sti parent is a singular association inline autolink
435
422
  return unless link.column.nil?
436
423
  return if (sti_controller_path = controller_path_for_activerecord(record.class)).nil?
424
+
437
425
  url_options[:controller] = sti_controller_path
438
426
  url_options[:parent_sti] = controller_path
439
427
  end
@@ -1,4 +1,3 @@
1
-
2
1
  module ActiveScaffold
3
2
  module Helpers
4
3
  module AssociationHelpers
@@ -23,6 +22,7 @@ module ActiveScaffold
23
22
  if klass.nil? && association.polymorphic?
24
23
  class_name = record.send(association.foreign_type) if association.belongs_to?
25
24
  return [] if class_name.blank?
25
+
26
26
  klass = class_name.constantize
27
27
  cache = !block_given?
28
28
  else
@@ -96,12 +96,13 @@ module ActiveScaffold
96
96
  def options_for_association_conditions(association, record = nil)
97
97
  return nil if association.through?
98
98
  return nil unless association.has_one? || association.has_many?
99
+
99
100
  # Find only orphaned objects
100
101
  {association.foreign_key => nil}
101
102
  end
102
103
 
103
104
  def record_select_params_for_add_existing(association, edit_associated_url_options, record)
104
- {:onselect => "ActiveScaffold.record_select_onselect(#{url_for(edit_associated_url_options).to_json}, #{active_scaffold_id.to_json}, id);"}
105
+ {onselect: "ActiveScaffold.record_select_onselect(#{url_for(edit_associated_url_options).to_json}, #{active_scaffold_id.to_json}, id);"}
105
106
  end
106
107
  end
107
108
  end