avo 2.45.0 → 3.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of avo might be problematic. Click here for more details.

Files changed (415) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +23 -22
  3. data/Gemfile.lock +181 -160
  4. data/README.md +1 -1
  5. data/{public/avo-assets → app/assets/builds}/avo.base.css +479 -698
  6. data/app/assets/builds/avo.base.js +93804 -0
  7. data/app/assets/builds/avo.base.js.map +7 -0
  8. data/app/assets/stylesheets/avo.base.css +2 -2
  9. data/app/assets/svgs/failed_to_load.svg +1 -0
  10. data/app/assets/svgs/font.svg +1 -0
  11. data/app/assets/svgs/grid-empty-state.svg +1 -0
  12. data/app/assets/svgs/table-empty-state.svg +1 -0
  13. data/app/assets/svgs/triangle-up.svg +1 -0
  14. data/app/components/avo/actions_component.html.erb +18 -4
  15. data/app/components/avo/actions_component.rb +12 -18
  16. data/app/components/avo/alert_component.html.erb +1 -1
  17. data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
  18. data/app/components/avo/asset_manager/javascript_component.rb +13 -0
  19. data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
  20. data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
  21. data/app/components/avo/base_component.rb +14 -11
  22. data/app/components/avo/button_component.rb +20 -3
  23. data/app/components/avo/empty_state_component.rb +1 -1
  24. data/app/components/avo/field_wrapper_component.html.erb +4 -4
  25. data/app/components/avo/field_wrapper_component.rb +9 -9
  26. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +96 -118
  27. data/app/components/avo/fields/belongs_to_field/edit_component.rb +5 -20
  28. data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
  29. data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
  30. data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -2
  31. data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
  32. data/app/components/avo/fields/code_field/edit_component.html.erb +0 -1
  33. data/app/components/avo/fields/common/badge_viewer_component.html.erb +24 -1
  34. data/app/components/avo/fields/common/badge_viewer_component.rb +0 -24
  35. data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
  36. data/app/components/avo/fields/common/files_list_viewer_component.html.erb +5 -0
  37. data/app/components/avo/fields/common/files_list_viewer_component.rb +8 -0
  38. data/app/components/avo/fields/common/heading_component.html.erb +1 -1
  39. data/app/components/avo/fields/common/single_file_viewer_component.html.erb +56 -0
  40. data/app/components/avo/fields/common/single_file_viewer_component.rb +55 -0
  41. data/app/components/avo/fields/country_field/edit_component.html.erb +1 -3
  42. data/app/components/avo/fields/edit_component.rb +1 -1
  43. data/app/components/avo/fields/file_field/edit_component.html.erb +2 -4
  44. data/app/components/avo/fields/file_field/edit_component.rb +0 -1
  45. data/app/components/avo/fields/file_field/index_component.rb +2 -2
  46. data/app/components/avo/fields/file_field/show_component.html.erb +1 -1
  47. data/app/components/avo/fields/files_field/edit_component.html.erb +2 -4
  48. data/app/components/avo/fields/files_field/edit_component.rb +0 -1
  49. data/app/components/avo/fields/files_field/show_component.html.erb +1 -1
  50. data/app/components/avo/fields/has_many_field/show_component.html.erb +1 -1
  51. data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
  52. data/app/components/avo/fields/has_one_field/show_component.html.erb +2 -2
  53. data/app/components/avo/fields/has_one_field/show_component.rb +3 -7
  54. data/app/components/avo/fields/index_component.rb +5 -6
  55. data/app/components/avo/fields/markdown_field/edit_component.html.erb +3 -4
  56. data/app/components/avo/fields/markdown_field/show_component.html.erb +3 -3
  57. data/app/components/avo/fields/number_field/edit_component.html.erb +1 -3
  58. data/app/components/avo/fields/password_field/edit_component.html.erb +1 -3
  59. data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
  60. data/app/components/avo/fields/preview_field/index_component.rb +4 -0
  61. data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +0 -1
  62. data/app/components/avo/fields/select_field/edit_component.html.erb +2 -3
  63. data/app/components/avo/fields/show_component.rb +4 -1
  64. data/app/components/avo/fields/status_field/edit_component.html.erb +1 -1
  65. data/app/components/avo/fields/text_field/edit_component.html.erb +2 -3
  66. data/app/components/avo/fields/textarea_field/edit_component.html.erb +0 -1
  67. data/app/components/avo/fields/trix_field/edit_component.html.erb +1 -2
  68. data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
  69. data/app/components/avo/fields/trix_field/show_component.html.erb +1 -1
  70. data/app/components/avo/filters_component.html.erb +9 -3
  71. data/app/components/avo/filters_component.rb +4 -4
  72. data/app/components/avo/index/field_wrapper_component.html.erb +1 -1
  73. data/app/components/avo/index/grid_item_component.html.erb +5 -2
  74. data/app/components/avo/index/grid_item_component.rb +7 -6
  75. data/app/components/avo/index/resource_controls_component.html.erb +3 -81
  76. data/app/components/avo/index/resource_controls_component.rb +128 -18
  77. data/app/components/avo/index/resource_grid_component.html.erb +5 -3
  78. data/app/components/avo/index/resource_grid_component.rb +5 -2
  79. data/app/components/avo/index/resource_table_component.html.erb +5 -4
  80. data/app/components/avo/index/resource_table_component.rb +14 -20
  81. data/app/components/avo/index/table_row_component.html.erb +8 -4
  82. data/app/components/avo/index/table_row_component.rb +3 -2
  83. data/app/components/avo/item_switcher_component.html.erb +5 -10
  84. data/app/components/avo/item_switcher_component.rb +2 -3
  85. data/app/components/avo/modal_component.html.erb +7 -12
  86. data/app/components/avo/modal_component.rb +0 -21
  87. data/app/components/avo/paginator_component.html.erb +40 -29
  88. data/app/components/avo/paginator_component.rb +5 -23
  89. data/app/components/avo/panel_component.html.erb +8 -11
  90. data/app/components/avo/panel_component.rb +0 -1
  91. data/app/components/avo/profile_item_component.html.erb +2 -17
  92. data/app/components/avo/profile_item_component.rb +1 -13
  93. data/app/components/avo/referrer_params_component.html.erb +1 -4
  94. data/app/components/avo/resource_component.rb +142 -30
  95. data/app/components/avo/resource_sidebar_component.html.erb +6 -2
  96. data/app/components/avo/sidebar/link_component.html.erb +0 -2
  97. data/app/components/avo/sidebar/link_component.rb +3 -5
  98. data/app/components/avo/sidebar_component.html.erb +9 -2
  99. data/app/components/avo/sidebar_component.rb +5 -3
  100. data/app/components/avo/sidebar_profile_component.html.erb +27 -20
  101. data/app/components/avo/tab_group_component.html.erb +13 -7
  102. data/app/components/avo/tab_group_component.rb +1 -6
  103. data/app/components/avo/tab_switcher_component.html.erb +17 -40
  104. data/app/components/avo/tab_switcher_component.rb +4 -39
  105. data/app/components/avo/views/resource_edit_component.html.erb +16 -52
  106. data/app/components/avo/views/resource_edit_component.rb +7 -18
  107. data/app/components/avo/views/resource_index_component.html.erb +38 -53
  108. data/app/components/avo/views/resource_index_component.rb +60 -16
  109. data/app/components/avo/views/resource_show_component.html.erb +8 -151
  110. data/app/components/avo/views/resource_show_component.rb +6 -11
  111. data/app/controllers/avo/actions_controller.rb +19 -16
  112. data/app/controllers/avo/application_controller.rb +40 -109
  113. data/app/controllers/avo/associations_controller.rb +34 -41
  114. data/app/controllers/avo/attachments_controller.rb +10 -25
  115. data/app/controllers/avo/base_controller.rb +91 -103
  116. data/app/controllers/avo/debug_controller.rb +17 -5
  117. data/app/controllers/avo/search_controller.rb +29 -54
  118. data/app/controllers/avo/team_users_controller.rb +4 -0
  119. data/app/controllers/concerns/avo/initializes_avo.rb +26 -0
  120. data/app/helpers/avo/application_helper.rb +20 -21
  121. data/app/helpers/avo/resources_helper.rb +1 -1
  122. data/app/helpers/avo/url_helpers.rb +27 -11
  123. data/app/javascript/avo.base.js +1 -0
  124. data/app/javascript/js/application.js +0 -5
  125. data/app/javascript/js/controllers/action_controller.js +5 -3
  126. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  127. data/app/javascript/js/controllers/fields/{easy_mde_controller.js → simple_mde_controller.js} +3 -4
  128. data/app/javascript/js/controllers/filter_controller.js +1 -1
  129. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  130. data/app/javascript/js/controllers/preview_controller.js +24 -0
  131. data/app/javascript/js/controllers/search_controller.js +1 -3
  132. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  133. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  134. data/app/javascript/js/controllers.js +12 -8
  135. data/app/javascript/js/custom-stream-actions.js +15 -0
  136. data/app/views/avo/{attachments/destroy.turbo_stream.erb → actions/keep_modal_open.turbo_stream.erb} +0 -2
  137. data/app/views/avo/actions/show.html.erb +11 -10
  138. data/app/views/avo/associations/new.html.erb +4 -4
  139. data/app/views/avo/base/index.html.erb +3 -2
  140. data/app/views/avo/base/new.html.erb +2 -1
  141. data/app/views/avo/base/preview.html.erb +19 -0
  142. data/app/views/avo/base/show.html.erb +1 -1
  143. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  144. data/app/views/avo/debug/report.html.erb +32 -17
  145. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -15
  146. data/app/views/avo/home/index.html.erb +1 -1
  147. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  148. data/app/views/avo/partials/_javascript.html.erb +5 -0
  149. data/app/views/avo/partials/_logo.html.erb +1 -1
  150. data/app/views/avo/partials/_navbar.html.erb +3 -5
  151. data/app/views/avo/partials/_table_header.html.erb +5 -3
  152. data/app/views/avo/partials/_view_toggle_button.html.erb +0 -9
  153. data/app/views/avo/private/design.html.erb +2 -2
  154. data/app/views/layouts/avo/application.html.erb +3 -0
  155. data/avo.gemspec +6 -7
  156. data/bin/dev +1 -1
  157. data/bin/prod +0 -0
  158. data/config/i18n-tasks.yml +1 -1
  159. data/config/initializers/pagy.rb +10 -14
  160. data/config/master.key +1 -0
  161. data/config/routes.rb +8 -12
  162. data/db/factories.rb +7 -18
  163. data/lib/avo/action_model.rb +20 -0
  164. data/lib/avo/app.rb +90 -162
  165. data/lib/avo/asset_manager.rb +30 -0
  166. data/lib/avo/base_action.rb +38 -35
  167. data/lib/avo/base_resource.rb +107 -95
  168. data/lib/avo/base_resource_tool.rb +9 -16
  169. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +3 -3
  170. data/lib/avo/concerns/filters_session_handler.rb +1 -0
  171. data/lib/avo/concerns/has_controls.rb +37 -0
  172. data/lib/avo/concerns/has_item_type.rb +38 -0
  173. data/lib/avo/concerns/{has_fields.rb → has_items.rb} +110 -97
  174. data/lib/avo/concerns/is_resource_item.rb +24 -36
  175. data/lib/avo/concerns/is_visible.rb +15 -0
  176. data/lib/avo/concerns/visible_in_different_views.rb +126 -0
  177. data/lib/avo/configuration/branding.rb +0 -12
  178. data/lib/avo/configuration.rb +8 -45
  179. data/lib/avo/current.rb +5 -0
  180. data/lib/avo/dsl/field_parser.rb +1 -1
  181. data/lib/avo/dynamic_router.rb +6 -2
  182. data/lib/avo/engine.rb +37 -30
  183. data/lib/avo/error_manager.rb +25 -0
  184. data/lib/avo/execution_context.rb +9 -15
  185. data/lib/avo/fields/badge_field.rb +1 -1
  186. data/lib/avo/fields/base_field.rb +72 -123
  187. data/lib/avo/fields/belongs_to_field.rb +14 -25
  188. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  189. data/lib/avo/fields/concerns/has_default.rb +1 -5
  190. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  191. data/lib/avo/fields/concerns/has_html_attributes.rb +110 -0
  192. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  193. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  194. data/lib/avo/fields/concerns/is_required.rb +5 -7
  195. data/lib/avo/fields/concerns/is_searchable.rb +13 -0
  196. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  197. data/lib/avo/fields/country_field.rb +4 -0
  198. data/lib/avo/fields/date_field.rb +3 -16
  199. data/lib/avo/fields/date_time_field.rb +1 -5
  200. data/lib/avo/fields/field_manager.rb +45 -0
  201. data/lib/avo/fields/file_field.rb +0 -2
  202. data/lib/avo/fields/files_field.rb +0 -6
  203. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  204. data/lib/avo/fields/has_base_field.rb +11 -14
  205. data/lib/avo/fields/has_many_field.rb +5 -2
  206. data/lib/avo/fields/has_one_field.rb +5 -10
  207. data/lib/avo/fields/heading_field.rb +4 -1
  208. data/lib/avo/fields/hidden_field.rb +1 -1
  209. data/lib/avo/fields/id_field.rb +2 -3
  210. data/lib/avo/fields/password_field.rb +1 -1
  211. data/lib/avo/fields/preview_field.rb +14 -0
  212. data/lib/avo/fields/select_field.rb +12 -8
  213. data/lib/avo/fields/status_field.rb +4 -0
  214. data/lib/avo/filters/base_filter.rb +3 -8
  215. data/lib/avo/grid_collector.rb +7 -9
  216. data/lib/avo/html/builder.rb +5 -8
  217. data/lib/avo/item_grapher.rb +78 -0
  218. data/lib/avo/licensing/h_q.rb +3 -67
  219. data/lib/avo/licensing/license.rb +2 -2
  220. data/lib/avo/licensing/license_manager.rb +1 -1
  221. data/lib/avo/licensing/{nil_license.rb → null_license.rb} +1 -1
  222. data/lib/avo/licensing/pro_license.rb +1 -7
  223. data/lib/avo/plugin.rb +6 -0
  224. data/lib/avo/plugin_manager.rb +58 -0
  225. data/lib/avo/prefixed_test_helpers.rb +20 -0
  226. data/lib/avo/reloader.rb +3 -0
  227. data/lib/avo/resources/controls/actions_list.rb +6 -12
  228. data/lib/avo/resources/controls/attach_button.rb +15 -0
  229. data/lib/avo/resources/controls/back_button.rb +1 -1
  230. data/lib/avo/resources/controls/base_control.rb +15 -49
  231. data/lib/avo/resources/controls/create_button.rb +15 -0
  232. data/lib/avo/resources/controls/delete_button.rb +5 -1
  233. data/lib/avo/resources/controls/detach_button.rb +4 -1
  234. data/lib/avo/resources/controls/edit_button.rb +4 -1
  235. data/lib/avo/resources/controls/order_controls.rb +8 -0
  236. data/lib/avo/resources/controls/save_button.rb +13 -0
  237. data/lib/avo/resources/controls/show_button.rb +15 -0
  238. data/lib/avo/resources/items/holder.rb +76 -0
  239. data/lib/avo/resources/items/item_group.rb +48 -0
  240. data/lib/avo/resources/items/main_panel.rb +2 -0
  241. data/lib/avo/resources/items/panel.rb +2 -0
  242. data/lib/avo/resources/items/sidebar.rb +47 -0
  243. data/lib/avo/resources/items/tab.rb +60 -0
  244. data/lib/avo/resources/items/tab_group.rb +68 -0
  245. data/lib/avo/resources/resource_manager.rb +181 -0
  246. data/lib/avo/services/authorization_service.rb +11 -110
  247. data/lib/avo/services/debug_service.rb +92 -0
  248. data/lib/avo/services/telemetry_service.rb +84 -0
  249. data/lib/avo/test_helpers.rb +362 -0
  250. data/lib/avo/tools/tool_manager.rb +30 -0
  251. data/lib/avo/version.rb +1 -1
  252. data/lib/avo.rb +7 -0
  253. data/lib/generators/avo/eject_generator.rb +0 -1
  254. data/lib/generators/avo/install_generator.rb +1 -11
  255. data/lib/generators/avo/resource_generator.rb +5 -23
  256. data/lib/generators/avo/scope_generator.rb +15 -0
  257. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -18
  258. data/lib/generators/avo/templates/action.tt +1 -1
  259. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  260. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  261. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  262. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  263. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  264. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  265. data/lib/generators/avo/templates/dashboards/dashboard.tt +1 -1
  266. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  267. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  268. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  269. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  270. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  271. data/lib/generators/avo/templates/initializer/avo.tt +1 -11
  272. data/lib/generators/avo/templates/locales/avo.ar.yml +5 -5
  273. data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
  274. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
  275. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
  276. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
  277. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
  278. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
  279. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
  280. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
  281. data/lib/generators/avo/templates/resource/resource.tt +1 -1
  282. data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
  283. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  284. data/lib/generators/avo/templates/scope.tt +6 -0
  285. data/lib/generators/avo/templates/standalone_action.tt +1 -1
  286. data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
  287. data/lib/generators/avo/templates/tool/view.tt +2 -2
  288. data/lib/tasks/avo_tasks.rake +22 -0
  289. metadata +81 -159
  290. data/app/assets/stylesheets/css/tags.css +0 -32
  291. data/app/assets/svgs/map-empty-state.svg +0 -35
  292. data/app/assets/svgs/map-view-type.svg +0 -3
  293. data/app/components/avo/card_component.html.erb +0 -46
  294. data/app/components/avo/card_component.rb +0 -25
  295. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  296. data/app/components/avo/dashboards/divider_component.rb +0 -19
  297. data/app/components/avo/fields/area_field/edit_component.html.erb +0 -7
  298. data/app/components/avo/fields/area_field/edit_component.rb +0 -4
  299. data/app/components/avo/fields/area_field/show_component.html.erb +0 -8
  300. data/app/components/avo/fields/area_field/show_component.rb +0 -4
  301. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  302. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  303. data/app/components/avo/fields/common/files/controls_component.html.erb +0 -29
  304. data/app/components/avo/fields/common/files/controls_component.rb +0 -19
  305. data/app/components/avo/fields/common/files/list_viewer_component.html.erb +0 -20
  306. data/app/components/avo/fields/common/files/list_viewer_component.rb +0 -41
  307. data/app/components/avo/fields/common/files/view_type/grid_item_component.html.erb +0 -27
  308. data/app/components/avo/fields/common/files/view_type/grid_item_component.rb +0 -52
  309. data/app/components/avo/fields/common/files/view_type/list_item_component.html.erb +0 -22
  310. data/app/components/avo/fields/common/files/view_type/list_item_component.rb +0 -15
  311. data/app/components/avo/fields/location_field/edit_component.html.erb +0 -22
  312. data/app/components/avo/fields/location_field/edit_component.rb +0 -4
  313. data/app/components/avo/fields/location_field/show_component.html.erb +0 -7
  314. data/app/components/avo/fields/location_field/show_component.rb +0 -4
  315. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  316. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  317. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  318. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  319. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  320. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  321. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  322. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  323. data/app/components/avo/index/ordering/base_component.rb +0 -9
  324. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  325. data/app/components/avo/index/ordering/button_component.rb +0 -23
  326. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  327. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  328. data/app/components/avo/index/resource_map_component.html.erb +0 -16
  329. data/app/components/avo/index/resource_map_component.rb +0 -109
  330. data/app/components/avo/row_component.html.erb +0 -3
  331. data/app/components/avo/row_component.rb +0 -12
  332. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  333. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  334. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  335. data/app/controllers/avo/dashboards_controller.rb +0 -22
  336. data/app/controllers/avo/reorder_controller.rb +0 -25
  337. data/app/javascript/js/controllers/base_controller.js +0 -22
  338. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +0 -51
  339. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  340. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  341. data/app/views/avo/base/_new_via_belongs_to.html.erb +0 -12
  342. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  343. data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
  344. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  345. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  346. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  347. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  348. data/app/views/avo/dashboards/show.html.erb +0 -38
  349. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
  350. data/app/views/avo/partials/_global_search.html.erb +0 -19
  351. data/app/views/avo/partials/_profile_menu_extra.html.erb +0 -2
  352. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  353. data/lib/avo/base_card.rb +0 -161
  354. data/lib/avo/concerns/fetches_things.rb +0 -150
  355. data/lib/avo/concerns/handles_field_args.rb +0 -47
  356. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  357. data/lib/avo/concerns/has_html_attributes.rb +0 -108
  358. data/lib/avo/concerns/pagination.rb +0 -53
  359. data/lib/avo/concerns/policy_helpers.rb +0 -31
  360. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  361. data/lib/avo/concerns/visible_items.rb +0 -51
  362. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  363. data/lib/avo/dashboards/base_divider.rb +0 -35
  364. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  365. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  366. data/lib/avo/dashboards/metric_card.rb +0 -9
  367. data/lib/avo/dashboards/partial_card.rb +0 -7
  368. data/lib/avo/fields/area_field.rb +0 -39
  369. data/lib/avo/fields/concerns/file_authorization.rb +0 -31
  370. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  371. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  372. data/lib/avo/fields/location_field.rb +0 -86
  373. data/lib/avo/fields/tags_field.rb +0 -102
  374. data/lib/avo/hosts/association_scope_host.rb +0 -8
  375. data/lib/avo/hosts/base_host.rb +0 -25
  376. data/lib/avo/hosts/card_visibility.rb +0 -20
  377. data/lib/avo/hosts/dashboard_card.rb +0 -22
  378. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  379. data/lib/avo/hosts/ordering.rb +0 -22
  380. data/lib/avo/hosts/record_host.rb +0 -7
  381. data/lib/avo/hosts/resource_record_host.rb +0 -7
  382. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  383. data/lib/avo/hosts/search_scope_host.rb +0 -7
  384. data/lib/avo/hosts/view_record_host.rb +0 -7
  385. data/lib/avo/hosts/visibility_host.rb +0 -12
  386. data/lib/avo/items_holder.rb +0 -96
  387. data/lib/avo/main_panel.rb +0 -3
  388. data/lib/avo/menu/base_item.rb +0 -25
  389. data/lib/avo/menu/builder.rb +0 -82
  390. data/lib/avo/menu/dashboard.rb +0 -22
  391. data/lib/avo/menu/group.rb +0 -2
  392. data/lib/avo/menu/link.rb +0 -6
  393. data/lib/avo/menu/menu.rb +0 -2
  394. data/lib/avo/menu/resource.rb +0 -22
  395. data/lib/avo/menu/section.rb +0 -2
  396. data/lib/avo/panel.rb +0 -24
  397. data/lib/avo/panel_builder.rb +0 -25
  398. data/lib/avo/resources/controls/action.rb +0 -38
  399. data/lib/avo/resources/controls/execution_context.rb +0 -58
  400. data/lib/avo/resources/controls/items_holder.rb +0 -19
  401. data/lib/avo/resources/controls/link_to.rb +0 -27
  402. data/lib/avo/row.rb +0 -26
  403. data/lib/avo/row_builder.rb +0 -24
  404. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  405. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  406. data/lib/avo/sidebar.rb +0 -30
  407. data/lib/avo/sidebar_builder.rb +0 -24
  408. data/lib/avo/tab.rb +0 -72
  409. data/lib/avo/tab_builder.rb +0 -25
  410. data/lib/avo/tab_group.rb +0 -42
  411. data/lib/avo/tab_group_builder.rb +0 -43
  412. data/lib/avo/tools_manager.rb +0 -11
  413. data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
  414. data/public/avo-assets/avo.base.js +0 -1037
  415. data/public/avo-assets/avo.base.js.map +0 -7
@@ -0,0 +1,76 @@
1
+ class Avo::Resources::Items::Holder
2
+ attr_reader :tools
3
+ attr_accessor :items
4
+ attr_accessor :invalid_fields
5
+
6
+ def initialize
7
+ @items = []
8
+ @items_index = 0
9
+ @invalid_fields = []
10
+ end
11
+
12
+ # Adds a field to the items_holder
13
+ def field(field_name, **args, &block)
14
+ field_parser = Avo::Dsl::FieldParser.new(id: field_name, order_index: @items_index, **args, &block).parse
15
+
16
+ if field_parser.invalid?
17
+ as = args.fetch(:as, nil)
18
+
19
+ # End execution ehre and add the field to the invalid_fileds payload so we know to wanr the developer about that.
20
+ # @todo: Make sure this warning is still active
21
+ return add_invalid_field({
22
+ name: field_name,
23
+ as: as,
24
+ # resource: resource_class.name,
25
+ message: "There's an invalid field configuration for this resource. <br/> <code class='px-1 py-px rounded bg-red-600'>field :#{field_name}, as: #{as}</code>"
26
+ })
27
+ end
28
+
29
+ add_item field_parser.instance
30
+ end
31
+
32
+ def tabs(instance)
33
+ add_item instance
34
+ end
35
+
36
+ def tab(name, **args, &block)
37
+ add_item Avo::Resources::Items::Tab::Builder.parse_block(name: name, **args, &block)
38
+ end
39
+
40
+ def tool(klass, **args)
41
+ instance = klass.new(**args)
42
+ add_item instance
43
+ end
44
+
45
+ def panel(panel_name = nil, **args, &block)
46
+ panel = Avo::Resources::Items::ItemGroup::Builder.parse_block(name: panel_name, **args, &block)
47
+
48
+ add_item panel
49
+ end
50
+
51
+ def heading(body = nil, **args, &block)
52
+ field = Avo::Fields::HeadingField.new(body, **args)
53
+
54
+ add_item field
55
+ end
56
+
57
+ def sidebar(instance)
58
+ add_item instance
59
+ end
60
+
61
+ def add_item(instance)
62
+ @items << instance
63
+
64
+ increment_order_index
65
+ end
66
+
67
+ private
68
+
69
+ def add_invalid_field(payload)
70
+ @invalid_fields << payload
71
+ end
72
+
73
+ def increment_order_index
74
+ @items_index += 1
75
+ end
76
+ end
@@ -0,0 +1,48 @@
1
+ class Avo::Resources::Items::ItemGroup
2
+ prepend Avo::Concerns::IsResourceItem
3
+
4
+ include Avo::Concerns::HasItems
5
+ include Avo::Concerns::HasItemType
6
+ include Avo::Concerns::IsVisible
7
+ include Avo::Concerns::VisibleInDifferentViews
8
+
9
+ attr_reader :name
10
+ attr_reader :description
11
+
12
+ delegate :items, :add_item, to: :items_holder
13
+
14
+ def initialize(name: nil, description: nil, view: nil, **args)
15
+ @name = name
16
+ @view = view
17
+ @description = description
18
+ @items_holder = Avo::Resources::Items::Holder.new
19
+ @args = args
20
+
21
+ post_initialize if respond_to?(:post_initialize)
22
+ end
23
+
24
+ class Builder
25
+ class << self
26
+ def parse_block(**args, &block)
27
+ Docile.dsl_eval(new(**args), &block).build
28
+ end
29
+ end
30
+
31
+ delegate :heading, to: :items_holder
32
+ delegate :field, to: :items_holder
33
+ delegate :items, to: :items_holder
34
+
35
+ attr_reader :items_holder
36
+
37
+ def initialize(name: nil, **args)
38
+ @panel = Avo::Resources::Items::Panel.new(name: name, **args)
39
+ @items_holder = Avo::Resources::Items::Holder.new
40
+ end
41
+
42
+ # Fetch the tab
43
+ def build
44
+ @panel.items_holder = @items_holder
45
+ @panel
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,2 @@
1
+ class Avo::Resources::Items::MainPanel < Avo::Resources::Items::Panel
2
+ end
@@ -0,0 +1,2 @@
1
+ class Avo::Resources::Items::Panel < Avo::Resources::Items::ItemGroup
2
+ end
@@ -0,0 +1,47 @@
1
+ class Avo::Resources::Items::Sidebar
2
+ prepend Avo::Concerns::IsResourceItem
3
+
4
+ include Avo::Concerns::HasItems
5
+ include Avo::Concerns::HasItemType
6
+ include Avo::Concerns::IsVisible
7
+ include Avo::Concerns::VisibleInDifferentViews
8
+
9
+ delegate :items, :add_item, to: :items_holder
10
+
11
+ attr_reader :name
12
+
13
+ def initialize(name: nil, view: nil, **args)
14
+ @name = name
15
+ @items_holder = Avo::Resources::Items::Holder.new
16
+ @view = view
17
+ @args = args
18
+
19
+ post_initialize if respond_to?(:post_initialize)
20
+ end
21
+
22
+ class Builder
23
+ class << self
24
+ def parse_block(**args, &block)
25
+ Docile.dsl_eval(new(**args), &block).build
26
+ end
27
+ end
28
+
29
+ attr_reader :items_holder
30
+
31
+ delegate :field, to: :items_holder
32
+ delegate :items, to: :items_holder
33
+ delegate :heading, to: :items_holder
34
+
35
+ def initialize(name: nil, **args)
36
+ @sidebar = Avo::Resources::Items::Sidebar.new(**args)
37
+ @items_holder = Avo::Resources::Items::Holder.new
38
+ end
39
+
40
+ # Fetch the sidebar
41
+ def build
42
+ @sidebar.items_holder = @items_holder
43
+ @sidebar
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,60 @@
1
+ class Avo::Resources::Items::Tab
2
+ prepend Avo::Concerns::IsResourceItem
3
+
4
+ include Avo::Concerns::HasItems
5
+ include Avo::Concerns::HasItemType
6
+ include Avo::Concerns::IsVisible
7
+ include Avo::Concerns::VisibleInDifferentViews
8
+
9
+ delegate :items, :add_item, to: :items_holder
10
+
11
+ attr_accessor :description
12
+
13
+ def initialize(name: nil, description: nil, view: nil, **args)
14
+ @name = name
15
+ @description = description
16
+ @items_holder = Avo::Resources::Items::Holder.new
17
+ @view = view
18
+ @args = args
19
+
20
+ post_initialize if respond_to?(:post_initialize)
21
+ end
22
+
23
+ def name
24
+ Avo::ExecutionContext.new(target: @name).handle
25
+ end
26
+
27
+ def turbo_frame_id(parent: nil)
28
+ id = "#{Avo::Resources::Items::Tab.to_s.parameterize} #{name}".parameterize
29
+
30
+ return id if parent.nil?
31
+
32
+ "#{parent.turbo_frame_id} #{id}".parameterize
33
+ end
34
+
35
+ class Builder
36
+ class << self
37
+ def parse_block(**args, &block)
38
+ Docile.dsl_eval(new(**args), &block).build
39
+ end
40
+ end
41
+
42
+ attr_reader :items_holder
43
+
44
+ delegate :field, to: :items_holder
45
+ delegate :tool, to: :items_holder
46
+ delegate :panel, to: :items_holder
47
+ delegate :items, to: :items_holder
48
+
49
+ def initialize(name: nil, **args)
50
+ @tab = Avo::Resources::Items::Tab.new(name: name, **args)
51
+ @items_holder = Avo::Resources::Items::Holder.new
52
+ end
53
+
54
+ # Fetch the tab
55
+ def build
56
+ @tab.items_holder = @items_holder
57
+ @tab
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,68 @@
1
+ class Avo::Resources::Items::TabGroup
2
+ prepend Avo::Concerns::IsResourceItem
3
+
4
+ include Avo::Concerns::HasItems
5
+ include Avo::Concerns::HasItemType
6
+ include Avo::Concerns::IsVisible
7
+ include Avo::Concerns::VisibleInDifferentViews
8
+
9
+ attr_accessor :index
10
+ attr_accessor :style
11
+
12
+ def initialize(index: 0, view: nil, style: nil, **args)
13
+ @index = index
14
+ @items_holder = Avo::Resources::Items::Holder.new
15
+ @view = view
16
+ @style = style
17
+ @args = args
18
+
19
+ post_initialize if respond_to?(:post_initialize)
20
+ end
21
+
22
+ def turbo_frame_id
23
+ "#{Avo::Resources::Items::TabGroup.to_s.parameterize} #{index}".parameterize
24
+ end
25
+
26
+ class Builder
27
+ class << self
28
+ def parse_block(**args, &block)
29
+ Docile.dsl_eval(new(**args), &block).build
30
+ end
31
+ end
32
+
33
+ attr_reader :items_holder
34
+
35
+ delegate :tab, to: :items_holder
36
+
37
+ def initialize(style: nil)
38
+ @group = Avo::Resources::Items::TabGroup.new(style: style)
39
+ @items_holder = Avo::Resources::Items::Holder.new
40
+ end
41
+
42
+ def field(field_name, **args, &block)
43
+ parsed = Avo::Dsl::FieldParser.new(id: field_name, order_index: @items_index, **args, &block).parse
44
+ field_instance = parsed.instance
45
+
46
+ name = field_instance.name
47
+ tab = Avo::Resources::Items::Tab.new name: name
48
+
49
+ if field_instance.has_own_panel?
50
+ tab.items_holder.add_item parsed.instance
51
+ else
52
+ # If the field is not in a panel, create one and add it
53
+ panel = Avo::Resources::Items::Panel.new name: name
54
+ panel.items_holder.add_item parsed.instance
55
+ # Add that panel to the items_holder
56
+ tab.items_holder.add_item panel
57
+ end
58
+
59
+ @items_holder.tabs tab
60
+ end
61
+
62
+ # Fetch the tab
63
+ def build
64
+ @group.items_holder = @items_holder
65
+ @group
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,181 @@
1
+ module Avo
2
+ module Resources
3
+ class ResourceManager
4
+ attr_accessor :resources
5
+
6
+ alias_method :all, :resources
7
+
8
+ class << self
9
+ def build
10
+ instance = new
11
+ instance.init_resources
12
+ instance.check_bad_resources
13
+ instance
14
+ end
15
+
16
+ # Fetches the resources available to the application.
17
+ # We have two ways of doing that.
18
+ #
19
+ # 1. Through eager loading.
20
+ # We automatically eager load the resources directory and fetch the descendants from the scanned files.
21
+ # This is the simple way to get started.
22
+ #
23
+ # 2. Manually, declared by the user.
24
+ # We have this option to load the resources because when they are loaded automatically through eager loading,
25
+ # those Resource classes and their methods may trigger loading other classes. And that may disrupt Rails booting process.
26
+ # Ex: AdminResource may use self.model_class = User. That will trigger Ruby to load the User class and itself load
27
+ # other classes in a chain reaction.
28
+ # The scenario that comes up most often is when Rails boots, the routes are being computed which eager loads the resource files.
29
+ # At that boot time some migration might have not been run yet, but Rails tries to access them through model associations,
30
+ # and they are not available.
31
+ #
32
+ # To enable this feature add a `resources` array config in your Avo initializer.
33
+ # config.resources = [
34
+ # "UserResource",
35
+ # "FishResource",
36
+ # ]
37
+ def fetch_resources
38
+ resources = if Avo.configuration.resources.nil?
39
+ BaseResource.descendants
40
+ else
41
+ Avo.configuration.resources
42
+ end
43
+
44
+ resources.map do |resource|
45
+ if resource.is_a?(Class)
46
+ resource
47
+ else
48
+ resource.to_s.safe_constantize
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ def initialize
55
+ @resources = []
56
+ end
57
+
58
+ def init_resources
59
+ self.resources = self.class.fetch_resources
60
+ .reject do |resource|
61
+ # Remove the BaseResource. We only need the descendants
62
+ resource == Avo::BaseResource
63
+ end
64
+ .uniq do |klass|
65
+ # On invalid resource configuration the resource classes get duplicated in `ObjectSpace`
66
+ # We need to de-duplicate them
67
+ klass.name
68
+ end
69
+ .map do |resource|
70
+ resource.new if resource.is_a? Class
71
+ end
72
+ end
73
+
74
+ def check_bad_resources
75
+ resources.each do |resource|
76
+ has_model = resource.model_class.present?
77
+
78
+ unless has_model
79
+ possible_model = resource.class.to_s.gsub "Avo::Resources::", ""
80
+ possible_model = possible_model.gsub "Resource", ""
81
+
82
+ Avo::App.errors.add({
83
+ url: "https://docs.avohq.io/2.0/resources.html#custom-model-class",
84
+ target: "_blank",
85
+ message: "#{resource.class} does not have a valid model assigned. It failed to find the #{possible_model} model. \n\r Please create that model or assign one using self.model_class = YOUR_MODEL"
86
+ })
87
+ end
88
+ end
89
+ end
90
+
91
+ # Filters out the resources that are missing the model_class
92
+ def valid_resources
93
+ resources
94
+ .select do |resource|
95
+ resource.model_class.present?
96
+ end
97
+ .sort_by(&:to_s)
98
+ end
99
+
100
+ # Returns the Avo resource by camelized name
101
+ #
102
+ # get_resource_by_name('User') => Avo::Resources::User
103
+ def get_resource(resource)
104
+ resource = "Avo::Resources::#{resource}" unless resource.to_s.starts_with?("Avo::Resources::")
105
+
106
+ resources.find do |available_resource|
107
+ resource.to_s == available_resource.class.to_s
108
+ end
109
+ end
110
+
111
+ # Returns the Avo resource by singular snake_cased name
112
+ #
113
+ # get_resource_by_name('user') => Avo::Resources::User
114
+ def get_resource_by_name(name)
115
+ get_resource name.singularize.camelize
116
+ end
117
+
118
+ # Returns the Avo resource by singular snake_cased name
119
+ # From all the resources that use the same model_class, it will fetch the first one in alphabetical order
120
+ #
121
+ # get_resource_by_name('User') => Avo::Resources::User
122
+ # get_resource_by_name(User) => Avo::Resources::User
123
+
124
+ def get_resource_by_model_class(klass)
125
+ # Fetch the mappings imposed by the user.
126
+ # If they are present, use those ones.
127
+ mapping = get_mapping_for_model klass
128
+ return get_resource(mapping) if mapping.present?
129
+
130
+ valid_resources
131
+ .find do |resource|
132
+ resource.model_class.model_name.name == klass.to_s
133
+ end
134
+ end
135
+
136
+ # Returns the Avo resource by singular snake_cased name
137
+ #
138
+ # get_resource_by_controller_name('delayed_backend_active_record_jobs') => DelayedJobResource
139
+ # get_resource_by_controller_name('users') => Avo::Resources::User
140
+ def get_resource_by_controller_name(name)
141
+ valid_resources
142
+ .find do |resource|
143
+ resource.model_class.to_s.pluralize.underscore.tr("/", "_") == name.to_s
144
+ end
145
+ end
146
+
147
+ # Returns the Avo resource by some name
148
+ def guess_resource(name)
149
+ get_resource_by_name(name.to_s) || get_resource_by_model_class(name)
150
+ end
151
+
152
+ # Returns the Rails model class by singular snake_cased name
153
+ #
154
+ # get_model_class_by_name('user') => User
155
+ def get_model_class_by_name(name)
156
+ name.to_s.camelize.singularize
157
+ end
158
+
159
+ def get_available_resources(user = nil)
160
+ valid_resources
161
+ .select do |resource|
162
+ Services::AuthorizationService.authorize user, resource.model_class, Avo.configuration.authorization_methods.stringify_keys["index"], raise_exception: false
163
+ end
164
+ .sort_by { |r| r.name }
165
+ end
166
+
167
+ def resources_for_navigation(user = nil)
168
+ get_available_resources(user)
169
+ .select do |resource|
170
+ resource.visible_on_sidebar
171
+ end
172
+ end
173
+
174
+ private
175
+
176
+ def get_mapping_for_model(klass)
177
+ (Avo.configuration.model_resource_mapping || {}).stringify_keys.transform_values(&:to_s)[klass.to_s]
178
+ end
179
+ end
180
+ end
181
+ end
@@ -6,109 +6,19 @@ module Avo
6
6
  attr_accessor :policy_class
7
7
 
8
8
  class << self
9
- def client
10
- client = Avo.configuration.authorization_client
11
-
12
- client = nil if Avo::App.license.lacks(:authorization)
13
-
14
- klass = case client
15
- when nil
16
- nil_client
17
- when :pundit
18
- pundit_client
19
- else
20
- if client.is_a?(String)
21
- client.safe_constantize
22
- else
23
- client
24
- end
25
- end
26
-
27
- klass.new
28
- end
29
-
30
- def authorize(user, record, action, policy_class: nil, **args)
31
- return true if skip_authorization
32
-
33
- client.authorize user, record, action, policy_class: policy_class
34
-
9
+ def authorize(*args, **kwargs)
35
10
  true
36
- rescue NoPolicyError => error
37
- # By default, Avo allows anything if you don't have a policy present.
38
- return true unless Avo.configuration.raise_error_on_missing_policy
39
-
40
- raise error
41
- rescue => error
42
- if args[:raise_exception] == false
43
- false
44
- else
45
- raise error
46
- end
47
11
  end
48
12
 
49
- def authorize_action(user, record, action, policy_class: nil, **args)
50
- action = Avo.configuration.authorization_methods.stringify_keys[action.to_s] || action
51
-
52
- # If no action passed we should raise error if the user wants that.
53
- # If not, just allow it.
54
- if action.nil?
55
- raise NoPolicyError.new "Policy method is missing" if Avo.configuration.raise_error_on_missing_policy
56
-
57
- return true
58
- end
59
-
60
- # Add the question mark if it's missing
61
- action = "#{action}?" unless action.end_with? "?"
62
- authorize(user, record, action, policy_class: policy_class, **args)
63
- end
64
-
65
- def apply_policy(user, model, policy_class: nil)
66
- return model if skip_authorization
67
-
68
- client.apply_policy(user, model, policy_class: policy_class)
69
- rescue NoPolicyError => error
70
- return model unless Avo.configuration.raise_error_on_missing_policy
71
-
72
- raise error
73
- end
74
-
75
- def skip_authorization
76
- Avo::App.license.lacks_with_trial :authorization
77
- end
78
-
79
- def defined_methods(user, record, policy_class: nil, **args)
80
- return client.policy!(user, record).methods if policy_class.nil?
81
-
82
- # I'm aware this will not raise a Pundit error.
83
- # Should the policy not exist, it will however raise an uninitialized constant error, which is probably what we want when specifying a custom policy
84
- policy_class.new(user, record).methods
85
- rescue NoPolicyError => error
86
- return [] unless Avo.configuration.raise_error_on_missing_policy
87
-
88
- raise error
89
- rescue => error
90
- if args[:raise_exception] == false
91
- []
92
- else
93
- raise error
94
- end
95
- end
96
-
97
- def pundit_client
98
- raise Avo::MissingGemError.new("Please add `gem 'pundit'` to your Gemfile.") unless defined?(Pundit)
99
-
100
- Avo::Services::AuthorizationClients::PunditClient
101
- end
102
-
103
- def nil_client
104
- Avo::Services::AuthorizationClients::NilClient
13
+ def apply_policy(user, query)
14
+ query
105
15
  end
106
16
  end
107
17
 
108
18
  def initialize(user = nil, record = nil, policy_class: nil)
109
19
  @user = user
110
20
  @record = record
111
- @policy_class = policy_class || self.class.client.policy(user, record)&.class
21
+ @policy_class = NilPolicy
112
22
  end
113
23
 
114
24
  def set_record(record)
@@ -117,28 +27,19 @@ module Avo
117
27
  self
118
28
  end
119
29
 
120
- def authorize_action(action, **args)
121
- self.class.authorize_action(user, args[:record] || record, action, policy_class: policy_class, **args)
30
+ def apply_policy(query)
31
+ query
122
32
  end
123
33
 
124
- def apply_policy(model)
125
- self.class.apply_policy(user, model, policy_class: policy_class)
34
+ def authorize_action(*args)
35
+ true
126
36
  end
127
37
 
128
- def defined_methods(model, **args)
129
- self.class.defined_methods(user, model, policy_class: policy_class, **args)
38
+ def has_method?(*args, **kwargs)
39
+ false
130
40
  end
131
41
 
132
- def has_method?(method, **args)
133
- method = "#{method}?" unless method.to_s.end_with? "?"
134
- defined_methods(args[:record] || record, **args).include? method.to_sym
135
- end
136
-
137
- # Check the received method to see if the user overrode it in their config and then checks if it's present on the policy.
138
- def has_action_method?(method, **args)
139
- method = Avo.configuration.authorization_methods.stringify_keys[method.to_s] || method
140
-
141
- has_method? method, **args
42
+ class NilPolicy
142
43
  end
143
44
  end
144
45
  end