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
@@ -2,7 +2,7 @@ module ActiveScaffold::Bridges
2
2
  class CountrySelect
3
3
  module FormColumnHelpers
4
4
  def active_scaffold_input_country(column, options, ui_options: column.options)
5
- select_options = {:prompt => as_(:_select_), :priority_countries => ui_options[:priority] || [:us]}
5
+ select_options = {prompt: as_(:_select_), priority_countries: ui_options[:priority] || [:us]}
6
6
  select_options[:format] = ui_options[:format] if ui_options[:format]
7
7
  select_options.merge!(options)
8
8
  options.reverse_merge!(ui_options).except!(:prompt, :priority, :format)
@@ -15,15 +15,17 @@ module ActiveScaffold::Bridges
15
15
  def active_scaffold_column_country(record, column, ui_options: column.options)
16
16
  country_code = record.send(column.name)
17
17
  return if country_code.blank?
18
+
18
19
  country = ISO3166::Country[country_code]
19
20
  return country_code unless country
21
+
20
22
  country.translations[I18n.locale.to_s] || country.name
21
23
  end
22
24
  end
23
25
 
24
26
  module SearchColumnHelpers
25
27
  def active_scaffold_search_country(column, options, ui_options: column.options)
26
- active_scaffold_input_country(column, options.merge!(:selected => options.delete(:value)), ui_options: ui_options)
28
+ active_scaffold_input_country(column, options.merge!(selected: options.delete(:value)), ui_options: ui_options)
27
29
  end
28
30
  end
29
31
  end
@@ -1,18 +1,11 @@
1
- class File #:nodoc:
2
- unless File.respond_to?(:binread)
3
- def self.binread(file)
4
- File.open(file, 'rb', &:read)
5
- end
6
- end
7
- end
8
-
9
1
  class ActiveScaffold::Bridges::DatePicker
10
2
  module DatePickerBridge
11
3
  def initialize(model_id)
12
4
  super
13
5
  return unless ActiveScaffold::Bridges::DatePicker.default_ui
14
6
 
15
- date_picker_fields = _columns.collect { |c| {:name => c.name.to_sym, :type => c.type} if %i[date datetime].include?(c.type) }.compact
7
+ types = %i[date datetime]
8
+ date_picker_fields = _columns.filter_map { |c| {name: c.name.to_sym, type: c.type} if types.include?(c.type) }
16
9
  # check to see if file column was used on the model
17
10
  return if date_picker_fields.empty?
18
11
 
@@ -41,8 +34,23 @@ class ActiveScaffold::Bridges::DatePicker
41
34
  end
42
35
  end
43
36
 
44
- def format_for_date(column, value, format_name = column.options[:format])
45
- super column, value, format_name || (:default if column.search_ui == :date_picker)
37
+ def format_for_date(column, value, ui_name, ui_options)
38
+ ui_options = ui_options.reverse_merge(format: :default) if ui_name == :date_picker
39
+ super
40
+ end
41
+
42
+ def format_for_datetime(column, value, ui_name, ui_options)
43
+ format = I18n.t "time.formats.#{ui_options[:format] || :picker}", default: '' if ui_name == :datetime_picker
44
+ return super if format.blank?
45
+
46
+ parts = Date._parse(value)
47
+ [[:hour, '%H'], [:min, ':%M'], [:sec, ':%S']].each do |part, f|
48
+ format.gsub!(f, '') if parts[part].blank?
49
+ end
50
+ format += ' %z' if parts[:offset].present? && format !~ /%z/i
51
+
52
+ format.gsub!(/.*(?=%H)/, '') if !parts[:year] && !parts[:month] && !parts[:mday]
53
+ [format, parts[:offset]]
46
54
  end
47
55
  end
48
56
 
@@ -57,7 +65,7 @@ class ActiveScaffold::Bridges::DatePicker
57
65
  end
58
66
  end
59
67
 
60
- ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::DatePicker::DatePickerBridge
68
+ ActiveScaffold::Config::Core.prepend ActiveScaffold::Bridges::DatePicker::DatePickerBridge
61
69
  ActionView::Base.class_eval do
62
70
  alias_method :active_scaffold_search_date_picker, :active_scaffold_search_datetime
63
71
  alias_method :active_scaffold_search_datetime_picker, :active_scaffold_search_datetime
@@ -24,32 +24,32 @@ module ActiveScaffold::Bridges
24
24
  }.freeze
25
25
 
26
26
  def self.date_options_for_locales
27
- I18n.available_locales.collect do |locale|
27
+ I18n.available_locales.filter_map do |locale|
28
28
  locale_date_options = date_options(locale)
29
29
  "$.datepicker.regional['#{locale}'] = #{locale_date_options.to_json};" if locale_date_options
30
- end.compact.join('')
30
+ end.join
31
31
  end
32
32
 
33
33
  def self.date_options(locale)
34
34
  date_picker_options = {
35
- :closeText => as_(:close),
36
- :prevText => as_(:previous),
37
- :nextText => as_(:next),
38
- :currentText => as_(:today),
39
- :monthNames => I18n.translate!('date.month_names', :locale => locale)[1..-1],
40
- :monthNamesShort => I18n.translate!('date.abbr_month_names', :locale => locale)[1..-1],
41
- :dayNames => I18n.translate!('date.day_names', :locale => locale),
42
- :dayNamesShort => I18n.translate!('date.abbr_day_names', :locale => locale),
43
- :dayNamesMin => I18n.translate!('date.abbr_day_names', :locale => locale),
44
- :changeYear => true,
45
- :changeMonth => true
35
+ closeText: as_(:close),
36
+ prevText: as_(:previous),
37
+ nextText: as_(:next),
38
+ currentText: as_(:today),
39
+ monthNames: I18n.translate!('date.month_names', locale: locale)[1..],
40
+ monthNamesShort: I18n.translate!('date.abbr_month_names', locale: locale)[1..],
41
+ dayNames: I18n.translate!('date.day_names', locale: locale),
42
+ dayNamesShort: I18n.translate!('date.abbr_day_names', locale: locale),
43
+ dayNamesMin: I18n.translate!('date.abbr_day_names', locale: locale),
44
+ changeYear: true,
45
+ changeMonth: true
46
46
  }
47
47
 
48
- as_date_picker_options = I18n.translate! :date_picker_options, :scope => :active_scaffold, :locale => locale, :default => ''
48
+ as_date_picker_options = I18n.translate! :date_picker_options, scope: :active_scaffold, locale: locale, default: ''
49
49
  date_picker_options.merge!(as_date_picker_options) if as_date_picker_options.is_a? Hash
50
50
  Rails.logger.warn "ActiveScaffold: Missing date picker localization for your locale: #{locale}" if as_date_picker_options.blank?
51
51
 
52
- js_format = to_datepicker_format(I18n.translate!('date.formats.default', :locale => locale, :default => ''))
52
+ js_format = to_datepicker_format(I18n.translate!('date.formats.default', locale: locale, default: ''))
53
53
  date_picker_options[:dateFormat] = js_format if js_format.present?
54
54
  date_picker_options
55
55
  rescue StandardError
@@ -57,22 +57,22 @@ module ActiveScaffold::Bridges
57
57
  end
58
58
 
59
59
  def self.datetime_options_for_locales
60
- I18n.available_locales.collect do |locale|
60
+ I18n.available_locales.filter_map do |locale|
61
61
  locale_datetime_options = datetime_options(locale)
62
62
  "$.timepicker.regional['#{locale}'] = #{locale_datetime_options.to_json};" if locale_datetime_options
63
- end.compact.join('')
63
+ end.join
64
64
  end
65
65
 
66
66
  def self.datetime_options(locale)
67
- rails_time_format = I18n.translate! 'time.formats.picker', :locale => locale, :default => '%a, %d %b %Y %H:%M:%S'
67
+ rails_time_format = I18n.translate! 'time.formats.picker', locale: locale, default: '%a, %d %b %Y %H:%M:%S'
68
68
  datetime_picker_options = {
69
- :ampm => false,
70
- :hourText => I18n.translate!('datetime.prompts.hour', :locale => locale),
71
- :minuteText => I18n.translate!('datetime.prompts.minute', :locale => locale),
72
- :secondText => I18n.translate!('datetime.prompts.second', :locale => locale)
69
+ ampm: false,
70
+ hourText: I18n.translate!('datetime.prompts.hour', locale: locale),
71
+ minuteText: I18n.translate!('datetime.prompts.minute', locale: locale),
72
+ secondText: I18n.translate!('datetime.prompts.second', locale: locale)
73
73
  }
74
74
 
75
- as_datetime_picker_options = I18n.translate! :datetime_picker_options, :scope => :active_scaffold, :locale => locale, :default => ''
75
+ as_datetime_picker_options = I18n.translate! :datetime_picker_options, scope: :active_scaffold, locale: locale, default: ''
76
76
  datetime_picker_options.merge!(as_datetime_picker_options) if as_datetime_picker_options.is_a? Hash
77
77
  Rails.logger.warn "ActiveScaffold: Missing datetime picker localization for your locale: #{locale}" if as_datetime_picker_options.blank?
78
78
 
@@ -84,11 +84,12 @@ module ActiveScaffold::Bridges
84
84
 
85
85
  def self.to_datepicker_format(rails_format)
86
86
  return nil if rails_format.nil?
87
+
87
88
  if rails_format.match?(UNSUPPORTED_FORMAT_OPTIONS)
88
89
  options = UNSUPPORTED_FORMAT_OPTIONS.to_s.scan(/\[(.*)\]/).dig(0, 0)&.each_char&.map { |c| "%#{c}" }
89
90
  Rails.logger.warn(
90
- "AS DatePicker::Helper: rails date format #{rails_format} includes options "\
91
- "which can't be converted to jquery datepicker format. "\
91
+ "AS DatePicker::Helper: rails date format #{rails_format} includes options " \
92
+ "which can't be converted to jquery datepicker format. " \
92
93
  "Options #{options.join(', ')} are not supported by datepicker and will be removed"
93
94
  )
94
95
  end
@@ -133,6 +134,7 @@ module ActiveScaffold::Bridges
133
134
 
134
135
  def datepicker_format_options(column, format)
135
136
  return {} if format == :default
137
+
136
138
  if column.form_ui == :date_picker
137
139
  js_format = to_datepicker_format(I18n.translate!("date.formats.#{format}"))
138
140
  js_format.nil? ? {} : {dateFormat: js_format}
@@ -142,8 +144,8 @@ module ActiveScaffold::Bridges
142
144
  end
143
145
  end
144
146
 
145
- def datepicker_format(options, ui)
146
- options.delete(:format) || (ui == :date_picker ? :default : :picker)
147
+ def datepicker_format(options, ui_name)
148
+ options.delete(:format) || (ui_name == :date_picker ? :default : :picker)
147
149
  end
148
150
  end
149
151
 
@@ -151,7 +153,8 @@ module ActiveScaffold::Bridges
151
153
  def active_scaffold_search_date_picker_field(column, options, current_search, name, ui_options: column.options)
152
154
  value =
153
155
  if current_search.is_a? Hash
154
- controller.class.condition_value_for_datetime(column, current_search[name], column.search_ui == :date_picker ? :to_date : :to_time)
156
+ conversion = column.search_ui == :date_picker ? :to_date : :to_time
157
+ controller.class.condition_value_for_datetime(column, current_search[name], conversion, ui_method: :search_ui, ui_options: ui_options)
155
158
  else
156
159
  current_search
157
160
  end
@@ -161,8 +164,8 @@ module ActiveScaffold::Bridges
161
164
  options[:class] << " #{column.search_ui}"
162
165
  options[:style] = 'display: none' if options[:show] == false # hide only if asked to hide
163
166
  options[:data] = datepicker_format_options(column, format).reverse_merge!(options[:data] || {})
164
- value = l(value, :format => format) if value
165
- options = options.merge(:id => "#{options[:id]}_#{name}", :name => "#{options[:name]}[#{name}]", :object => nil)
167
+ value = l(value, format: format) if value
168
+ options = options.merge(id: "#{options[:id]}_#{name}", name: "#{options[:name]}[#{name}]", object: nil)
166
169
  text_field_tag("#{options[:name]}[#{name}]", value, options)
167
170
  end
168
171
  end
@@ -173,10 +176,11 @@ module ActiveScaffold::Bridges
173
176
  options = active_scaffold_input_text_options(options.merge(ui_options))
174
177
  options[:class] << " #{column.form_ui}"
175
178
 
176
- format = datepicker_format(options, column.form_ui)
177
- value = controller.class.condition_value_for_datetime(column, record.send(column.name), column.form_ui == :date_picker ? :to_date : :to_time)
179
+ format = datepicker_format(ui_options, column.form_ui)
180
+ conversion = column.form_ui == :date_picker ? :to_date : :to_time
181
+ value = controller.class.condition_value_for_datetime(column, record.send(column.name), conversion, ui_method: :form_ui, ui_options: ui_options)
178
182
  options[:data] = datepicker_format_options(column, format).reverse_merge!(options[:data] || {})
179
- options[:value] = (value ? l(value, :format => format) : nil)
183
+ options[:value] = (value ? l(value, format: format) : nil)
180
184
  text_field(:record, column.name, options)
181
185
  end
182
186
  end
@@ -6,12 +6,9 @@ module ActiveScaffold::Bridges
6
6
  end
7
7
 
8
8
  def self.install?
9
- ActiveScaffold.js_framework == :jquery && jquery_ui_included?
10
- end
11
-
12
- def self.jquery_ui_included?
13
9
  ActiveScaffold.jquery_ui_included?
14
10
  end
11
+
15
12
  mattr_accessor :default_ui
16
13
  @@default_ui = true
17
14
 
@@ -22,7 +22,7 @@ module ActiveScaffold
22
22
  columns[field].params.add "remove_#{field}"
23
23
 
24
24
  %i[name uid].each do |f|
25
- columns.exclude("#{field}_#{f}".to_sym)
25
+ columns.exclude(:"#{field}_#{f}")
26
26
  end
27
27
  end
28
28
  end
@@ -4,13 +4,14 @@ module ActiveScaffold
4
4
  def active_scaffold_column_dragonfly(record, column, ui_options: column.options)
5
5
  attachment = record.send(column.name.to_s)
6
6
  return nil if attachment.blank?
7
+
7
8
  content =
8
9
  if attachment.image?
9
- image_tag(attachment.thumb(ui_options[:thumb] || ActiveScaffold::Bridges::Dragonfly::DragonflyBridgeHelpers.thumbnail_style).url, :border => 0)
10
+ image_tag(attachment.thumb(ui_options[:thumb] || ActiveScaffold::Bridges::Dragonfly::DragonflyBridgeHelpers.thumbnail_style).url, border: 0)
10
11
  else
11
12
  attachment.name
12
13
  end
13
- link_to(content, dragonfly_url_for_attachment(attachment, record, column, ui_options: ui_options), :target => '_blank', rel: 'noopener noreferrer')
14
+ link_to(content, dragonfly_url_for_attachment(attachment, record, column, ui_options: ui_options), target: '_blank', rel: 'noopener noreferrer')
14
15
  end
15
16
 
16
17
  def dragonfly_url_for_attachment(attachment, record, column, ui_options: column.options)
@@ -4,6 +4,6 @@ class ActiveScaffold::Bridges::Dragonfly < ActiveScaffold::DataStructures::Bridg
4
4
  require File.join(File.dirname(__FILE__), 'dragonfly/list_ui')
5
5
  require File.join(File.dirname(__FILE__), 'dragonfly/dragonfly_bridge_helpers')
6
6
  require File.join(File.dirname(__FILE__), 'dragonfly/dragonfly_bridge')
7
- ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::Dragonfly::DragonflyBridge
7
+ ActiveScaffold::Config::Core.prepend ActiveScaffold::Bridges::Dragonfly::DragonflyBridge
8
8
  end
9
9
  end
@@ -5,6 +5,7 @@ end
5
5
  class ActiveScaffold::Bridges::FileColumn
6
6
  module FileColumnBridge
7
7
  attr_accessor :file_column_fields
8
+
8
9
  def initialize(model_id)
9
10
  super
10
11
 
@@ -32,10 +33,10 @@ class ActiveScaffold::Bridges::FileColumn
32
33
 
33
34
  # set null to false so active_scaffold wont set it to null
34
35
  # delete_file_column will take care of deleting a file or not.
35
- _columns_hash[field.to_s].instance_variable_set('@null', false)
36
+ _columns_hash[field.to_s].instance_variable_set(:@null, false)
36
37
  rescue StandardError
37
38
  false
38
39
  end
39
40
  end
40
41
  end
41
- ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::FileColumn::FileColumnBridge
42
+ ActiveScaffold::Config::Core.prepend ActiveScaffold::Bridges::FileColumn::FileColumnBridge
@@ -33,13 +33,14 @@ module ActiveScaffold
33
33
  end
34
34
 
35
35
  def options_for_file_column_field(field)
36
- allocate.send("#{field}_options")
36
+ allocate.send(:"#{field}_options")
37
37
  end
38
38
 
39
39
  def field_has_image_version?(field, version = 'thumb')
40
40
  options = options_for_file_column_field(field)
41
41
  versions = options[:magick][:versions]
42
42
  raise unless versions.stringify_keys[version]
43
+
43
44
  true
44
45
  rescue StandardError
45
46
  false
@@ -6,21 +6,16 @@ module ActiveScaffold
6
6
  record = options[:object]
7
7
  if record.send(column.name)
8
8
  # we already have a value? display the form for deletion.
9
- case ActiveScaffold.js_framework
10
- when :jquery
11
- remove_file_js = "jQuery(this).prev().val('true'); jQuery(this).parent().hide().next().show(); return false;"
12
- when :prototype
13
- remove_file_js = "$(this).previous().value='true'; p=$(this).up(); p.hide(); p.next().show(); return false;"
14
- end
9
+ remove_file_js = "jQuery(this).prev().val('true'); jQuery(this).parent().hide().next().show(); return false;"
15
10
 
16
- hidden_options = options.merge(:id => options[:id] + '_delete', :name => options[:name].sub("[#{column.name}]", "[delete_#{column.name}]"), :value => 'false')
11
+ hidden_options = options.merge(id: "#{options[:id]}_delete", name: options[:name].sub("[#{column.name}]", "[delete_#{column.name}]"), value: 'false')
17
12
  custom_hidden_field_tag = hidden_field(:record, column.name, hidden_options)
18
13
 
19
14
  content_tag(:div) do
20
15
  content_tag(:div) do
21
16
  safe_join [get_column_value(record, column), custom_hidden_field_tag, '|',
22
- content_tag(:a, as_(:remove_file), :href => '#', :onclick => remove_file_js),
23
- content_tag(:div, 'test', :style => 'display: none')], ' '
17
+ content_tag(:a, as_(:remove_file), href: '#', onclick: remove_file_js),
18
+ content_tag(:div, 'test', style: 'display: none')], ' '
24
19
  end
25
20
  end
26
21
  else
@@ -4,21 +4,24 @@ module ActiveScaffold
4
4
  module ListColumnHelpers
5
5
  def active_scaffold_column_download_link_with_filename(record, column, ui_options: column.options)
6
6
  return nil if record.send(column.name).nil?
7
+
7
8
  active_scaffold_column_download_link(record, column, File.basename(record.send(column.name)))
8
9
  end
9
10
 
10
11
  def active_scaffold_column_download_link(record, column, label = nil, ui_options: column.options)
11
12
  return nil if record.send(column.name).nil?
13
+
12
14
  label ||= as_(:download)
13
- link_to(label, url_for_file_column(record, column.name.to_s), :popup => true)
15
+ link_to(label, url_for_file_column(record, column.name.to_s), popup: true)
14
16
  end
15
17
 
16
18
  def active_scaffold_column_thumbnail(record, column, ui_options: column.options)
17
19
  return nil if record.send(column.name).nil?
20
+
18
21
  link_to(
19
- image_tag(url_for_file_column(record, column.name.to_s, 'thumb'), :border => 0),
22
+ image_tag(url_for_file_column(record, column.name.to_s, 'thumb'), border: 0),
20
23
  url_for_file_column(record, column.name.to_s),
21
- :popup => true
24
+ popup: true
22
25
  )
23
26
  end
24
27
  end
@@ -26,17 +26,17 @@ class DeleteFileColumnTest < Minitest::Test
26
26
 
27
27
  def test__delete_band_image__boolean_false__shouldnt_delete
28
28
  @model.delete_band_image = false
29
- refute_nil @model.band_image
29
+ assert_not_nil @model.band_image
30
30
  end
31
31
 
32
32
  def test__delete_band_image__string_false__shouldnt_delete
33
33
  @model.delete_band_image = 'false'
34
- refute_nil @model.band_image
34
+ assert_not_nil @model.band_image
35
35
  end
36
36
 
37
37
  def test__just_uploaded__shouldnt_delete
38
38
  @model.band_image_just_uploaded = true
39
39
  @model.delete_band_image = 'true'
40
- refute_nil(@model.band_image)
40
+ assert_not_nil(@model.band_image)
41
41
  end
42
42
  end
@@ -1,9 +1,6 @@
1
1
  class MockModel
2
- attr_accessor :name
3
- attr_accessor :bio
2
+ attr_accessor :name, :bio, :band_image, :band_image_just_uploaded
4
3
 
5
- attr_accessor :band_image
6
- attr_accessor :band_image_just_uploaded
7
4
  def band_image_just_uploaded?
8
5
  band_image_just_uploaded
9
6
  end
@@ -3,6 +3,7 @@ class ActiveScaffold::Bridges::FileColumn < ActiveScaffold::DataStructures::Brid
3
3
  if ActiveScaffold::Config::Core.method_defined?(:initialize_with_file_column)
4
4
  raise "We've detected that you have active_scaffold_file_column_bridge installed. This plugin has been moved to core. Please remove active_scaffold_file_column_bridge to prevent any conflicts"
5
5
  end
6
+
6
7
  require File.join(File.dirname(__FILE__), 'file_column/as_file_column_bridge')
7
8
  require File.join(File.dirname(__FILE__), 'file_column/form_ui')
8
9
  require File.join(File.dirname(__FILE__), 'file_column/list_ui')
@@ -4,13 +4,15 @@ module ActiveScaffold::Actions
4
4
  base.class_eval do
5
5
  config = active_scaffold_config
6
6
  if config.actions.include?(:nested) && config.deleted_records.nested_link_group
7
- config.configure { nested.add_link :versions, :label => config.deleted_records.nested_link_label, :action_group => config.deleted_records.nested_link_group }
7
+ config.configure do
8
+ nested.add_link :versions, label: config.deleted_records.nested_link_label, action_group: config.deleted_records.nested_link_group
9
+ end
8
10
  end
9
11
  end
10
12
  end
11
13
 
12
14
  def deleted
13
- query = PaperTrail::Version.destroys.where(:item_type => active_scaffold_config.model.name)
15
+ query = PaperTrail::Version.destroys.where(item_type: active_scaffold_config.model.name)
14
16
  if nested? && nested.child_association&.belongs_to? && PaperTrail::Version.respond_to?(:where_object)
15
17
  foreign_key = nested.child_association.foreign_key
16
18
  parent_id = nested.parent_id
@@ -10,7 +10,7 @@ module ActiveScaffold::Config
10
10
 
11
11
  # the ActionLink for this action
12
12
  cattr_accessor :link
13
- @@link = ActiveScaffold::DataStructures::ActionLink.new(:deleted, :label => :deleted_records, :type => :collection)
13
+ @@link = ActiveScaffold::DataStructures::ActionLink.new(:deleted, label: :deleted_records, type: :collection)
14
14
 
15
15
  # label for versions nested link
16
16
  cattr_accessor :nested_link_label
@@ -8,7 +8,7 @@ module ActiveScaffold::Bridges
8
8
  action_links = filter_action_links_for_deleted(action_links, record, options)
9
9
  return unless action_links
10
10
  end
11
- super(action_links, record, options, &block)
11
+ super
12
12
  end
13
13
  end
14
14
  end
@@ -5,10 +5,11 @@ module ActiveScaffold
5
5
  def initialize(model_id)
6
6
  super
7
7
  return unless model < ::PaperTrail::Model::InstanceMethods
8
+
8
9
  actions << :deleted_records
9
10
  end
10
11
  end
11
12
  end
12
13
  end
13
14
  end
14
- ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::PaperTrail::PaperTrailBridge
15
+ ActiveScaffold::Config::Core.prepend ActiveScaffold::Bridges::PaperTrail::PaperTrailBridge
@@ -4,13 +4,14 @@ module ActiveScaffold
4
4
  def active_scaffold_column_paperclip(record, column, ui_options: column.options)
5
5
  paperclip = record.send(column.name.to_s)
6
6
  return nil unless paperclip.file?
7
+
7
8
  content =
8
9
  if paperclip.styles.include?(ActiveScaffold::Bridges::Paperclip::PaperclipBridgeHelpers.thumbnail_style)
9
- image_tag(paperclip.url(ActiveScaffold::Bridges::Paperclip::PaperclipBridgeHelpers.thumbnail_style), :border => 0, :alt => nil)
10
+ image_tag(paperclip.url(ActiveScaffold::Bridges::Paperclip::PaperclipBridgeHelpers.thumbnail_style), border: 0, alt: nil)
10
11
  else
11
12
  paperclip.original_filename
12
13
  end
13
- link_to(content, paperclip.url, :target => '_blank')
14
+ link_to(content, paperclip.url, target: '_blank', rel: 'noopener')
14
15
  end
15
16
  end
16
17
  end
@@ -24,7 +24,7 @@ module ActiveScaffold
24
24
  columns[field].params.add "delete_#{field}"
25
25
 
26
26
  %i[file_name content_type file_size updated_at].each do |f|
27
- columns.exclude("#{field}_#{f}".to_sym)
27
+ columns.exclude(:"#{field}_#{f}")
28
28
  end
29
29
  end
30
30
  end
@@ -7,15 +7,16 @@ module ActiveScaffold
7
7
 
8
8
  def self.generate_delete_helper(klass, field)
9
9
  klass.class_eval <<-CODE, __FILE__, __LINE__ + 1 unless klass.method_defined?(:"delete_#{field}=")
10
- attr_reader :delete_#{field}
11
-
12
- def delete_#{field}=(value)
13
- value = (value == "true") if String === value
14
- return unless value
15
-
16
- # passing nil to the file column causes the file to be deleted. Don't delete if we just uploaded a file!
17
- self.#{field} = nil unless self.#{field}.dirty?
18
- end
10
+ attr_reader :delete_#{field} # attr_reader :delete_file
11
+ #
12
+ def delete_#{field}=(value) # def delete_file=(value)
13
+ value = (value == "true") if String === value # value = (value == "true") if String === value
14
+ return unless value # return unless value
15
+ #
16
+ # passing nil to the file column causes the file # # passing nil to the file column causes the file
17
+ # to be deleted. Don't delete if we just uploaded a file! # # to be deleted. Don't delete if we just uploaded a file!
18
+ self.#{field} = nil unless self.#{field}.dirty? # self.file = nil unless self.file.dirty?
19
+ end # end
19
20
  CODE
20
21
  end
21
22
  end
@@ -3,10 +3,11 @@ class ActiveScaffold::Bridges::Paperclip < ActiveScaffold::DataStructures::Bridg
3
3
  if ActiveScaffold::Config::Core.method_defined?(:initialize_with_paperclip)
4
4
  raise "We've detected that you have active_scaffold_paperclip_bridge installed. This plugin has been moved to core. Please remove active_scaffold_paperclip_bridge to prevent any conflicts"
5
5
  end
6
+
6
7
  require File.join(File.dirname(__FILE__), 'paperclip/form_ui')
7
8
  require File.join(File.dirname(__FILE__), 'paperclip/list_ui')
8
9
  require File.join(File.dirname(__FILE__), 'paperclip/paperclip_bridge_helpers')
9
10
  require File.join(File.dirname(__FILE__), 'paperclip/paperclip_bridge')
10
- ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::Paperclip::PaperclipBridge
11
+ ActiveScaffold::Config::Core.prepend ActiveScaffold::Bridges::Paperclip::PaperclipBridge
11
12
  end
12
13
  end
@@ -26,22 +26,20 @@ class ActiveScaffold::Bridges::RecordSelect
26
26
 
27
27
  def active_scaffold_record_select(record, column, options, value, multiple, ui_options: column.options)
28
28
  unless column.association
29
- raise ArgumentError, "record_select can only work against associations (and #{column.name} is not). "\
30
- 'A common mistake is to specify the foreign key field (like :user_id), instead of the association (:user).'
29
+ raise ArgumentError, "record_select can only work against associations (and #{column.name} is not). " \
30
+ 'A common mistake is to specify the foreign key field (like :user_id), instead of the association (:user).'
31
31
  end
32
32
  klass = column.association.klass(record)
33
- return content_tag :span, '', :class => options[:class] unless klass
33
+ return content_tag :span, '', class: options[:class] unless klass
34
34
 
35
35
  remote_controller = active_scaffold_controller_for(klass).controller_path
36
36
 
37
- # if the opposite association is a :belongs_to (in that case association in this class must be has_one or has_many)
38
- # then only show records that have not been associated yet
39
- if column.association.has_one? || column.association.has_many?
40
- params[column.association.foreign_key] = ''
41
- end
37
+ # if the opposite association is a :belongs_to (in that case association in this class must be has_one or
38
+ # has_many) then only show records that have not been associated yet
39
+ params[column.association.foreign_key] = '' if column.association.has_one? || column.association.has_many?
42
40
 
43
41
  record_select_options = active_scaffold_input_text_options(options).merge(
44
- :controller => remote_controller
42
+ controller: remote_controller
45
43
  )
46
44
  record_select_options.merge!(ui_options)
47
45
 
@@ -57,7 +55,7 @@ class ActiveScaffold::Bridges::RecordSelect
57
55
 
58
56
  def active_scaffold_record_select_autocomplete(record, column, options, ui_options: column.options)
59
57
  record_select_options = active_scaffold_input_text_options(options).reverse_merge(
60
- :controller => active_scaffold_controller_for(record.class).controller_path
58
+ controller: active_scaffold_controller_for(record.class).controller_path
61
59
  ).merge(ui_options)
62
60
  html = record_select_autocomplete(options[:name], record, record_select_options)
63
61
  html = instance_exec(html, self, &self.class.field_error_proc) if record.errors[column.name].any?
@@ -73,8 +71,9 @@ class ActiveScaffold::Bridges::RecordSelect
73
71
 
74
72
  def field_search_record_select_value(column, value, ui_options: column.options)
75
73
  return if value.blank?
74
+
76
75
  if ui_options[:multiple]
77
- column.association.klass.find value.select(&:present?).collect!(&:to_i)
76
+ column.association.klass.find value.compact_blank.collect!(&:to_i)
78
77
  else
79
78
  column.association.klass.find(value.to_i)
80
79
  end
@@ -3,9 +3,11 @@ class ActiveScaffold::Bridges::SemanticAttributes
3
3
  def initialize(name, active_record_class)
4
4
  super
5
5
  self.required = !active_record_class.semantic_attributes[self.name].predicates.find { |p| p.allow_empty? == false }.nil?
6
+ ignored_types = %i[required association]
6
7
  active_record_class.semantic_attributes[self.name].predicates.find do |p|
7
8
  sem_type = p.class.to_s.split('::')[1].underscore.to_sym
8
- next if %i[required association].include?(sem_type)
9
+ next if ignored_types.include?(sem_type)
10
+
9
11
  @form_ui = sem_type
10
12
  end
11
13
  end
@@ -17,16 +17,12 @@ class ActiveScaffold::Bridges::TinyMce
17
17
  def active_scaffold_input_text_editor(column, options, ui_options: column.options)
18
18
  options[:class] = "#{options[:class]} mceEditor #{ui_options[:class]}".strip
19
19
 
20
- settings = tinymce_configuration(ui_options[:tinymce_config] || :default).options
21
- .reject { |k, _v| k == 'selector' }
22
- .merge(ui_options[:tinymce] || {})
23
- options['data-tinymce'] = settings.to_json if ActiveScaffold.js_framework != :prototype
20
+ settings = tinymce_configuration(ui_options[:tinymce_config] || :default)
21
+ .options.except('selector').merge(ui_options[:tinymce] || {})
22
+ options['data-tinymce'] = settings.to_json
24
23
 
25
24
  html = []
26
25
  html << send(override_input(:textarea), column, options, ui_options: ui_options)
27
- if ActiveScaffold.js_framework == :prototype && (request.xhr? || params[:iframe])
28
- html << javascript_tag("tinyMCE.settings = #{settings.to_json}; tinyMCE.execCommand('mceAddEditor', false, '#{options[:id]}');")
29
- end
30
26
  safe_join html
31
27
  end
32
28