avo 0.5.0.beta3 → 0.5.0.beta8

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 (293) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +8 -6
  3. data/Gemfile.lock +28 -22
  4. data/app/components/avo/common/badge_viewer_component.html.erb +1 -1
  5. data/app/components/avo/common/gravatar_viewer_component.html.erb +2 -2
  6. data/app/components/avo/common/gravatar_viewer_component.rb +2 -1
  7. data/app/components/avo/edit/fields/trix_field_component.html.erb +1 -1
  8. data/app/components/avo/index/field_wrapper_component.html.erb +1 -1
  9. data/app/components/avo/index/fields/belongs_to_field_component.html.erb +1 -5
  10. data/app/components/avo/index/fields/boolean_group_field_component.html.erb +1 -1
  11. data/app/components/avo/index/fields/gravatar_field_component.html.erb +2 -1
  12. data/app/components/avo/index/fields/has_one_field_component.html.erb +1 -5
  13. data/app/components/avo/index/fields/id_field_component.html.erb +1 -1
  14. data/app/components/avo/index/grid_item_component.html.erb +8 -8
  15. data/app/components/avo/index/grid_item_component.rb +6 -12
  16. data/app/components/avo/index/resource_controls_component.html.erb +12 -4
  17. data/app/components/avo/index/resource_grid_component.html.erb +1 -1
  18. data/app/components/avo/index/resource_table_component.html.erb +2 -2
  19. data/app/components/avo/index/table_row_component.html.erb +1 -1
  20. data/app/components/avo/show/field_wrapper_component.html.erb +1 -1
  21. data/app/components/avo/show/fields/boolean_group_field_component.html.erb +1 -1
  22. data/app/components/avo/show/fields/external_image_field_component.html.erb +1 -1
  23. data/app/components/avo/views/resource_show_component.html.erb +14 -2
  24. data/app/controllers/avo/actions_controller.rb +6 -8
  25. data/app/controllers/avo/application_controller.rb +30 -6
  26. data/app/controllers/avo/base_controller.rb +5 -16
  27. data/app/controllers/avo/relations_controller.rb +2 -2
  28. data/app/controllers/avo/search_controller.rb +1 -1
  29. data/app/helpers/avo/application_helper.rb +1 -1
  30. data/app/{frontend/css → packs/entrypoints}/application.css +12 -11
  31. data/app/{frontend/packs → packs/entrypoints}/application.js +4 -3
  32. data/app/{frontend → packs}/fonts/nunito-v16-latin-700.eot +0 -0
  33. data/app/{frontend → packs}/fonts/nunito-v16-latin-700.svg +0 -0
  34. data/app/{frontend → packs}/fonts/nunito-v16-latin-700.ttf +0 -0
  35. data/app/{frontend → packs}/fonts/nunito-v16-latin-700.woff +0 -0
  36. data/app/{frontend → packs}/fonts/nunito-v16-latin-700.woff2 +0 -0
  37. data/app/{frontend → packs}/fonts/nunito-v16-latin-regular.eot +0 -0
  38. data/app/{frontend → packs}/fonts/nunito-v16-latin-regular.svg +0 -0
  39. data/app/{frontend → packs}/fonts/nunito-v16-latin-regular.ttf +0 -0
  40. data/app/{frontend → packs}/fonts/nunito-v16-latin-regular.woff +0 -0
  41. data/app/{frontend → packs}/fonts/nunito-v16-latin-regular.woff2 +0 -0
  42. data/app/{frontend → packs}/images/logo.png +0 -0
  43. data/app/{frontend → packs}/importmap.json.erb +0 -0
  44. data/app/{frontend → packs}/js/controllers/action_controller.js +0 -0
  45. data/app/{frontend → packs}/js/controllers/actions_picker_controller.js +0 -0
  46. data/app/{frontend → packs}/js/controllers/alerts_controller.js +0 -0
  47. data/app/{frontend → packs}/js/controllers/attachments_controller.js +0 -0
  48. data/app/{frontend → packs}/js/controllers/boolean_filter_controller.js +0 -0
  49. data/app/{frontend → packs}/js/controllers/fields/code_field_controller.js +0 -0
  50. data/app/{frontend → packs}/js/controllers/fields/date_field_controller.js +0 -0
  51. data/app/{frontend → packs}/js/controllers/fields/simple_mde_controller.js +0 -0
  52. data/app/{frontend → packs}/js/controllers/filter_controller.js +19 -3
  53. data/app/{frontend → packs}/js/controllers/hidden_input_controller.js +0 -0
  54. data/app/{frontend → packs}/js/controllers/item_selector_controller.js +0 -0
  55. data/app/{frontend → packs}/js/controllers/modal_controller.js +0 -0
  56. data/app/{frontend → packs}/js/controllers/per_page_controller.js +5 -1
  57. data/app/{frontend → packs}/js/controllers/select_filter_controller.js +0 -0
  58. data/app/{frontend → packs}/js/controllers/tippy_controller.js +0 -0
  59. data/app/{frontend → packs}/js/controllers/toggle_panel_controller.js +0 -0
  60. data/app/{frontend → packs}/js/helpers/cast_boolean.js +0 -0
  61. data/app/{frontend → packs}/js/toastr.js +0 -0
  62. data/app/{frontend/css → packs/stylesheets}/alerts.css +0 -0
  63. data/app/{frontend/css → packs/stylesheets}/components/code.css +0 -0
  64. data/app/{frontend/css → packs/stylesheets}/components/status.css +0 -0
  65. data/app/{frontend/css → packs/stylesheets}/fonts.css +0 -0
  66. data/app/{frontend/css → packs/stylesheets}/loader.css +0 -0
  67. data/app/{frontend/css → packs/stylesheets}/pagination.css +0 -0
  68. data/app/{frontend/css → packs/stylesheets}/tailwindcss/base.css +0 -0
  69. data/app/{frontend/css → packs/stylesheets}/tailwindcss/components.css +0 -0
  70. data/app/{frontend/css → packs/stylesheets}/tailwindcss/utilities.css +0 -0
  71. data/app/{frontend/css → packs/stylesheets}/tooltips.css +0 -0
  72. data/app/{frontend/css → packs/stylesheets}/typography.css +0 -0
  73. data/app/{frontend → packs}/svgs/arrow-circle-right.svg +0 -0
  74. data/app/{frontend → packs}/svgs/arrow-left.svg +0 -0
  75. data/app/{frontend → packs}/svgs/avocado.svg +0 -0
  76. data/app/{frontend → packs}/svgs/badge-check-sm.svg +0 -0
  77. data/app/{frontend → packs}/svgs/check-circle.svg +0 -0
  78. data/app/{frontend → packs}/svgs/chevron-down.svg +0 -0
  79. data/app/{frontend → packs}/svgs/chevron-up.svg +0 -0
  80. data/app/{frontend → packs}/svgs/code.svg +0 -0
  81. data/app/{frontend → packs}/svgs/color-swatch.svg +0 -0
  82. data/app/{frontend → packs}/svgs/document-text.svg +0 -0
  83. data/app/{frontend → packs}/svgs/download.svg +0 -0
  84. data/app/{frontend → packs}/svgs/edit.svg +0 -0
  85. data/app/{frontend → packs}/svgs/exclamation-circle-sm.svg +0 -0
  86. data/app/{frontend → packs}/svgs/exclamation-sm.svg +0 -0
  87. data/app/{frontend → packs}/svgs/exclamation.svg +0 -0
  88. data/app/{frontend → packs}/svgs/eye.svg +0 -0
  89. data/app/{frontend → packs}/svgs/filter.svg +0 -0
  90. data/app/{frontend → packs}/svgs/fire.svg +0 -0
  91. data/app/{frontend → packs}/svgs/game-board.svg +0 -0
  92. data/app/{frontend → packs}/svgs/globe.svg +0 -0
  93. data/app/{frontend → packs}/svgs/information-circle-sm.svg +0 -0
  94. data/app/{frontend → packs}/svgs/information-circle.svg +0 -0
  95. data/app/{frontend → packs}/svgs/library.svg +0 -0
  96. data/app/{frontend → packs}/svgs/photograph.svg +0 -0
  97. data/app/{frontend → packs}/svgs/play.svg +0 -0
  98. data/app/{frontend → packs}/svgs/plus-circle.svg +0 -0
  99. data/app/{frontend → packs}/svgs/plus.svg +0 -0
  100. data/app/{frontend → packs}/svgs/question-mark-circle.svg +0 -0
  101. data/app/{frontend → packs}/svgs/save.svg +0 -0
  102. data/app/{frontend → packs}/svgs/selector.svg +0 -0
  103. data/app/{frontend → packs}/svgs/sort-ascending.svg +0 -0
  104. data/app/{frontend → packs}/svgs/sort-descending.svg +0 -0
  105. data/app/{frontend → packs}/svgs/switch-horizontal.svg +0 -0
  106. data/app/{frontend → packs}/svgs/thumbs-down.svg +0 -0
  107. data/app/{frontend → packs}/svgs/thumbs-up.svg +0 -0
  108. data/app/{frontend → packs}/svgs/times.svg +0 -0
  109. data/app/{frontend → packs}/svgs/trash-sm.svg +0 -0
  110. data/app/{frontend → packs}/svgs/trash.svg +0 -0
  111. data/app/{frontend → packs}/svgs/view-grid-add.svg +0 -0
  112. data/app/{frontend → packs}/svgs/view-grid.svg +0 -0
  113. data/app/{frontend → packs}/svgs/view-list.svg +0 -0
  114. data/app/{frontend → packs}/svgs/x-circle.svg +0 -0
  115. data/app/views/avo/actions/show.html.erb +3 -39
  116. data/app/views/avo/attachments/show.html.erb +8 -1
  117. data/app/views/avo/base/_actions.html.erb +0 -6
  118. data/app/views/avo/base/_boolean_filter.html.erb +2 -1
  119. data/app/views/avo/base/_filters.html.erb +4 -11
  120. data/app/views/avo/base/_select_filter.html.erb +2 -1
  121. data/app/views/avo/home/_resources.html.erb +0 -1
  122. data/app/views/avo/partials/_paginator.html.erb +24 -5
  123. data/app/views/avo/relations/new.html.erb +5 -1
  124. data/app/views/layouts/avo/_filter_wrapper.html.erb +1 -1
  125. data/avo.gemspec +1 -1
  126. data/bin/helpers.rb +0 -0
  127. data/bin/rspec +1 -0
  128. data/bin/webpack +2 -1
  129. data/config/webpack/aliases.js +1 -1
  130. data/config/webpack/base.js +14 -0
  131. data/config/webpack/development.js +2 -2
  132. data/config/webpack/production.js +2 -2
  133. data/config/webpack/test.js +2 -2
  134. data/config/webpacker.yml +10 -62
  135. data/db/factories.rb +1 -0
  136. data/lib/avo.rb +5 -16
  137. data/lib/avo/action_model.rb +20 -0
  138. data/lib/avo/app.rb +162 -0
  139. data/lib/avo/base_action.rb +126 -0
  140. data/lib/avo/base_resource.rb +301 -0
  141. data/lib/avo/configuration.rb +6 -4
  142. data/lib/avo/engine.rb +17 -20
  143. data/lib/avo/{app/fields → fields}/badge_field.rb +1 -1
  144. data/lib/avo/{app/fields/field.rb → fields/base_field.rb} +22 -16
  145. data/lib/avo/{app/fields/belongs_to.rb → fields/belongs_to_field.rb} +3 -3
  146. data/lib/avo/{app/fields → fields}/boolean_field.rb +1 -1
  147. data/lib/avo/{app/fields → fields}/boolean_group_field.rb +1 -1
  148. data/lib/avo/{app/fields → fields}/code_field.rb +1 -1
  149. data/lib/avo/{app/fields → fields}/country_field.rb +1 -1
  150. data/lib/avo/{app/fields → fields}/currency_field.rb +1 -1
  151. data/lib/avo/{app/fields → fields}/date_field.rb +0 -2
  152. data/lib/avo/{app/fields → fields}/date_time_field.rb +0 -2
  153. data/lib/avo/{app/fields → fields}/external_image_field.rb +1 -1
  154. data/lib/avo/{app/fields → fields}/field_extensions/has_field_name.rb +2 -9
  155. data/lib/avo/{app/fields → fields}/field_extensions/visible_in_different_views.rb +1 -1
  156. data/lib/avo/{app/fields → fields}/file_field.rb +1 -2
  157. data/lib/avo/{app/fields → fields}/files_field.rb +1 -2
  158. data/lib/avo/{app/fields → fields}/gravatar_field.rb +2 -2
  159. data/lib/avo/{app/fields/has_and_belongs_to_many.rb → fields/has_and_belongs_to_many_field.rb} +1 -1
  160. data/lib/avo/{app/fields/has_many.rb → fields/has_many_field.rb} +1 -1
  161. data/lib/avo/{app/fields/has_one.rb → fields/has_one_field.rb} +1 -1
  162. data/lib/avo/{app/fields → fields}/heading_field.rb +1 -1
  163. data/lib/avo/{app/fields → fields}/hidden_field.rb +0 -2
  164. data/lib/avo/{app/fields → fields}/id_field.rb +1 -1
  165. data/lib/avo/{app/fields → fields}/key_value_field.rb +1 -1
  166. data/lib/avo/{app/fields → fields}/markdown_field.rb +1 -3
  167. data/lib/avo/{app/fields → fields}/number_field.rb +0 -2
  168. data/lib/avo/{app/fields → fields}/password_field.rb +0 -2
  169. data/lib/avo/{app/fields → fields}/select_field.rb +1 -1
  170. data/lib/avo/{app/fields → fields}/status_field.rb +1 -1
  171. data/lib/avo/{app/fields → fields}/text_field.rb +1 -1
  172. data/lib/avo/{app/fields → fields}/textarea_field.rb +0 -2
  173. data/lib/avo/{app/fields → fields}/trix_field.rb +1 -3
  174. data/lib/avo/fields_collector.rb +31 -0
  175. data/lib/avo/filters/base_filter.rb +20 -0
  176. data/lib/avo/filters/boolean_filter.rb +7 -0
  177. data/lib/avo/filters/select_filter.rb +7 -0
  178. data/lib/avo/grid_collector.rb +39 -0
  179. data/lib/avo/{app/grid_fields → grid_fields}/body_field.rb +0 -2
  180. data/lib/avo/{app/grid_fields → grid_fields}/grid_field.rb +0 -0
  181. data/lib/avo/{app/grid_fields → grid_fields}/preview_field.rb +0 -2
  182. data/lib/avo/{app/grid_fields → grid_fields}/title_field.rb +0 -2
  183. data/lib/avo/has_context.rb +7 -0
  184. data/lib/avo/licensing/community_license.rb +6 -0
  185. data/lib/avo/licensing/h_q.rb +88 -0
  186. data/lib/avo/licensing/license.rb +50 -0
  187. data/lib/avo/licensing/license_manager.rb +22 -0
  188. data/lib/avo/licensing/null_license.rb +14 -0
  189. data/lib/avo/licensing/pro_license.rb +11 -0
  190. data/lib/avo/loaders/actions_loader.rb +6 -0
  191. data/lib/avo/loaders/fields_loader.rb +27 -0
  192. data/lib/avo/loaders/filters_loader.rb +6 -0
  193. data/lib/avo/loaders/loader.rb +15 -0
  194. data/lib/avo/services/authorization_service.rb +93 -0
  195. data/lib/avo/services/panel_service.rb +27 -0
  196. data/lib/avo/{app/tools_manager.rb → tools_manager.rb} +0 -0
  197. data/lib/avo/version.rb +1 -1
  198. data/lib/generators/avo/action_generator.rb +11 -5
  199. data/lib/generators/avo/controller_generator.rb +14 -8
  200. data/lib/generators/avo/filter_generator.rb +14 -8
  201. data/lib/generators/avo/install_generator.rb +14 -10
  202. data/lib/generators/avo/locales_generator.rb +11 -7
  203. data/lib/generators/avo/partials_generator.rb +11 -5
  204. data/lib/generators/avo/resource_generator.rb +33 -15
  205. data/lib/generators/avo/templates/{action.rb → action.tt} +4 -6
  206. data/lib/generators/avo/templates/filters/boolean_filter.tt +11 -0
  207. data/lib/generators/avo/templates/filters/select_filter.tt +11 -0
  208. data/lib/generators/avo/templates/initializer/{avo.rb → avo.tt} +6 -0
  209. data/lib/generators/avo/templates/resource/controller.tt +2 -0
  210. data/lib/generators/avo/templates/resource/resource.tt +17 -0
  211. data/public/avo-packs/css/application-5bb09ba4.css +6024 -0
  212. data/public/avo-packs/css/application-5bb09ba4.css.br +0 -0
  213. data/public/avo-packs/css/application-5bb09ba4.css.gz +0 -0
  214. data/public/avo-packs/css/application-5bb09ba4.css.map +1 -0
  215. data/public/avo-packs/css/application-5bb09ba4.css.map.br +0 -0
  216. data/public/avo-packs/css/application-5bb09ba4.css.map.gz +0 -0
  217. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js +2 -0
  218. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js.br +0 -0
  219. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js.gz +0 -0
  220. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js.map +1 -0
  221. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js.map.br +0 -0
  222. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js.map.gz +0 -0
  223. data/public/avo-packs/js/application-86a3ea5a835b0c758203.js +26 -0
  224. data/public/avo-packs/js/{application-6ba2bd1bca05d69b96e0.js.LICENSE.txt → application-86a3ea5a835b0c758203.js.LICENSE.txt} +17 -17
  225. data/public/avo-packs/js/application-86a3ea5a835b0c758203.js.br +0 -0
  226. data/public/avo-packs/js/application-86a3ea5a835b0c758203.js.gz +0 -0
  227. data/public/avo-packs/js/application-86a3ea5a835b0c758203.js.map +1 -0
  228. data/public/avo-packs/js/application-86a3ea5a835b0c758203.js.map.br +0 -0
  229. data/public/avo-packs/js/application-86a3ea5a835b0c758203.js.map.gz +0 -0
  230. data/public/avo-packs/manifest.json +46 -23
  231. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-00fbd8a72a3708b8314cce5f0515640e.svg → images/13ae283c0d7cc04efe7e.svg} +0 -0
  232. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-00fbd8a72a3708b8314cce5f0515640e.svg.br → images/13ae283c0d7cc04efe7e.svg.br} +0 -0
  233. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-00fbd8a72a3708b8314cce5f0515640e.svg.gz → images/13ae283c0d7cc04efe7e.svg.gz} +0 -0
  234. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-35bd1c96bc2e402cf22ea812ae067995.svg → images/195026a50008c53526ef.svg} +0 -0
  235. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-35bd1c96bc2e402cf22ea812ae067995.svg.br → images/195026a50008c53526ef.svg.br} +0 -0
  236. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-35bd1c96bc2e402cf22ea812ae067995.svg.gz → images/195026a50008c53526ef.svg.gz} +0 -0
  237. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-cb632c9fe211ba2c2bf1564c9a9295cc.woff → images/1f30e08faa7c60d1f7ac.woff} +0 -0
  238. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-2cc22f9c0cf217cbfc371f3b74992305.ttf → images/1fd17dabf6b7d2b15348.ttf} +0 -0
  239. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-2cc22f9c0cf217cbfc371f3b74992305.ttf.br → images/1fd17dabf6b7d2b15348.ttf.br} +0 -0
  240. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-2cc22f9c0cf217cbfc371f3b74992305.ttf.gz → images/1fd17dabf6b7d2b15348.ttf.gz} +0 -0
  241. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-bcf84d6cb8a0ac214c8c14ba9af834f3.woff2 → images/39a18f443d434999b89b.woff2} +0 -0
  242. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-412073df419ad5f6f8f2ea76eb4aced9.woff2 → images/4ad349571e28bb59c5a5.woff2} +0 -0
  243. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-2fae1e2418251b68fe5d0505ab93dd5c.eot → images/57a5470848663767abbf.eot} +0 -0
  244. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-df8c4bee41b6ca0ed2b7b71456ed7fbb.ttf → images/b2e4cf0fab6c8ca66b7f.ttf} +0 -0
  245. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-df8c4bee41b6ca0ed2b7b71456ed7fbb.ttf.br → images/b2e4cf0fab6c8ca66b7f.ttf.br} +0 -0
  246. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-df8c4bee41b6ca0ed2b7b71456ed7fbb.ttf.gz → images/b2e4cf0fab6c8ca66b7f.ttf.gz} +0 -0
  247. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-df7e79af617f98cd3b95d320e8b2a1af.eot → images/b78d61ab7e046de8c156.eot} +0 -0
  248. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-7c472b19cb573f537bad8ef62ca917ac.woff → images/c9ab29becb76ddab01d0.woff} +0 -0
  249. data/public/avo-packs/media/images/{logo-edf8d8d0d263e0c1f73bb32a222d9991.png → f1b4befac91a3336db9a.png} +0 -0
  250. metadata +195 -193
  251. data/app/views/layouts/avo/application_vue.html.erb +0 -61
  252. data/config/webpack/environment.js +0 -18
  253. data/config/webpacker_packed.yml +0 -86
  254. data/db/migrate/20210305082639_add_url_to_teams.rb +0 -5
  255. data/lib/avo/app/action.rb +0 -145
  256. data/lib/avo/app/actions_loader.rb +0 -11
  257. data/lib/avo/app/app.rb +0 -183
  258. data/lib/avo/app/fields_loader.rb +0 -29
  259. data/lib/avo/app/filter.rb +0 -23
  260. data/lib/avo/app/filters/boolean_filter.rb +0 -13
  261. data/lib/avo/app/filters/select_filter.rb +0 -13
  262. data/lib/avo/app/licensing/community_license.rb +0 -4
  263. data/lib/avo/app/licensing/hq.rb +0 -86
  264. data/lib/avo/app/licensing/license.rb +0 -48
  265. data/lib/avo/app/licensing/license_manager.rb +0 -25
  266. data/lib/avo/app/licensing/null_license.rb +0 -12
  267. data/lib/avo/app/licensing/pro_license.rb +0 -9
  268. data/lib/avo/app/resource.rb +0 -291
  269. data/lib/avo/app/resource_grid_fields.rb +0 -30
  270. data/lib/avo/app/services/authorization_service.rb +0 -110
  271. data/lib/avo/app/services/panel_service.rb +0 -25
  272. data/lib/avo/app/tool.rb +0 -5
  273. data/lib/generators/avo/templates/filters/boolean_filter.rb +0 -17
  274. data/lib/generators/avo/templates/filters/select_filter.rb +0 -17
  275. data/lib/generators/avo/templates/resource/%plural_name%_controller.tt +0 -2
  276. data/lib/generators/avo/templates/resource/%singular_name%.tt +0 -20
  277. data/public/avo-packs/css/application-3598cfbb.css +0 -6
  278. data/public/avo-packs/css/application-3598cfbb.css.br +0 -0
  279. data/public/avo-packs/css/application-3598cfbb.css.gz +0 -0
  280. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js +0 -2
  281. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.br +0 -0
  282. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.gz +0 -0
  283. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.map +0 -1
  284. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.map.br +0 -0
  285. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.map.gz +0 -0
  286. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js +0 -26
  287. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.br +0 -0
  288. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.gz +0 -0
  289. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.map +0 -1
  290. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.map.br +0 -0
  291. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.map.gz +0 -0
  292. data/public/avo-packs/manifest.json.br +0 -0
  293. data/public/avo-packs/manifest.json.gz +0 -0
@@ -1,5 +1,5 @@
1
1
  process.env.NODE_ENV = process.env.NODE_ENV || 'development'
2
2
 
3
- const environment = require('./environment')
3
+ const webpackConfig = require('./base')
4
4
 
5
- module.exports = environment.toWebpackConfig()
5
+ module.exports = webpackConfig
data/config/webpacker.yml CHANGED
@@ -1,82 +1,33 @@
1
1
  # Note: You must restart bin/webpack-dev-server for changes to take effect
2
2
 
3
3
  default: &default
4
- source_path: app/frontend
5
- source_entry_path: packs
4
+ source_path: app/packs
5
+ source_entry_path: entrypoints
6
6
  public_root_path: public
7
7
  cache_path: tmp/cache/webpacker
8
8
  check_yarn_integrity: false
9
9
  # use a different sub-folder name
10
10
  public_output_path: avo-packs
11
11
  webpack_compile_output: true
12
+ extract_css: true
12
13
 
13
14
  # Additional paths webpack should lookup modules
14
15
  # ['app/assets', 'engine/foo/app/assets']
15
- resolved_paths: []
16
+ additional_paths_paths: []
16
17
 
17
18
  # Reload manifest.json on all requests so we reload latest compiled packs
18
19
  cache_manifest: false
19
20
 
20
- # Extract and emit a css file
21
- extract_css: true
22
-
23
- static_assets_extensions:
24
- - .jpg
25
- - .jpeg
26
- - .png
27
- - .gif
28
- - .tiff
29
- - .ico
30
- - .svg
31
- - .eot
32
- - .otf
33
- - .ttf
34
- - .woff
35
- - .woff2
36
-
37
- extensions:
38
- - .ts
39
- - .vue
40
- - .mjs
41
- - .js
42
- - .sass
43
- - .scss
44
- - .css
45
- - .module.sass
46
- - .module.scss
47
- - .module.css
48
- - .png
49
- - .svg
50
- - .gif
51
- - .jpeg
52
- - .jpg
53
-
21
+ # We override the development env. when packed.
22
+ # Avo needs to be packed and compiled for when the dev uses it in his development env.
54
23
  development:
55
24
  <<: *default
56
- compile: true
57
25
 
58
- # Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
59
- check_yarn_integrity: true
26
+ # Production depends on precompilation of packs prior to booting for performance.
27
+ compile: true
60
28
 
61
- # Reference: https://webpack.js.org/configuration/dev-server/
62
- dev_server:
63
- https: false
64
- host: localhost
65
- port: 3039
66
- public: localhost:3039
67
- hmr: true
68
- # Inline should be set to true if using HMR
69
- inline: true
70
- overlay: true
71
- compress: true
72
- disable_host_check: true
73
- use_local_ip: false
74
- quiet: false
75
- headers:
76
- 'Access-Control-Allow-Origin': '*'
77
- watch_options:
78
- ignored: '**/node_modules/**'
79
- env_prefix: "AVO_WEBPACKER_DEV_SERVER"
29
+ # Cache manifest.json for performance
30
+ cache_manifest: true
80
31
 
81
32
  test:
82
33
  <<: *default
@@ -92,8 +43,5 @@ production:
92
43
  # Production depends on precompilation of packs prior to booting for performance.
93
44
  compile: false
94
45
 
95
- # Extract and emit a css file
96
- extract_css: true
97
-
98
46
  # Cache manifest.json for performance
99
47
  cache_manifest: true
data/db/factories.rb CHANGED
@@ -12,6 +12,7 @@ FactoryBot.define do
12
12
  factory :team do
13
13
  name { Faker::Company.name }
14
14
  description { Faker::Lorem.paragraph(sentence_count: 4) }
15
+ url { Faker::Internet.url }
15
16
  end
16
17
 
17
18
  factory :post do
data/lib/avo.rb CHANGED
@@ -1,20 +1,9 @@
1
- require_relative 'avo/configuration'
1
+ require 'zeitwerk'
2
2
  require_relative 'avo/version'
3
+ require_relative 'avo/engine' if defined?(Rails)
3
4
 
4
- require_relative 'avo/app/fields/field'
5
-
6
- require_relative 'avo/app/action'
7
-
8
- require_relative 'avo/app/filter'
9
- require_relative 'avo/app/filters/boolean_filter'
10
- require_relative 'avo/app/filters/select_filter'
11
-
12
- require_relative 'avo/app/fields_loader'
13
- require_relative 'avo/app/actions_loader'
14
- # require_relative 'avo/app/fields_loader_helper'
15
- require_relative 'avo/app/resource'
16
-
17
- require_relative 'avo/app/licensing/license_manager'
5
+ loader = Zeitwerk::Loader.for_gem
6
+ loader.setup
18
7
 
19
8
  module Avo
20
9
  ROOT_PATH = Pathname.new(File.join(__dir__, '..'))
@@ -31,4 +20,4 @@ module Avo
31
20
  end
32
21
  end
33
22
 
34
- require_relative 'avo/engine' if defined?(Rails)
23
+ loader.eager_load
@@ -0,0 +1,20 @@
1
+ module Avo
2
+ class ActionModel
3
+ include ActiveModel::Model
4
+
5
+ # This class augments a model the action form declaration.
6
+ def initialize(attributes = {})
7
+ set_attr_accessors attributes
8
+
9
+ super(attributes)
10
+ end
11
+
12
+ private
13
+
14
+ def set_attr_accessors(attributes)
15
+ attributes.each do |k, v|
16
+ self.class.class_eval { attr_accessor k }
17
+ end
18
+ end
19
+ end
20
+ end
data/lib/avo/app.rb ADDED
@@ -0,0 +1,162 @@
1
+ module Avo
2
+ class App
3
+ class_attribute :app, default: {
4
+ resources: [],
5
+ cache_store: nil
6
+ }
7
+ class_attribute :fields, default: []
8
+ class_attribute :request, default: nil
9
+ class_attribute :context, default: nil
10
+ class_attribute :license, default: nil
11
+
12
+ class << self
13
+ def boot
14
+ init_fields
15
+
16
+ I18n.locale = Avo.configuration.language_code
17
+
18
+ if Rails.cache.class == ActiveSupport::Cache::NullStore
19
+ self.app[:cache_store] ||= ActiveSupport::Cache::MemoryStore.new
20
+ else
21
+ self.app[:cache_store] = Rails.cache
22
+ end
23
+ end
24
+
25
+ def init(request:, context:)
26
+ self.request = request
27
+ self.context = context
28
+
29
+ # Set the current host for ActiveStorage
30
+ ActiveStorage::Current.host = request.base_url
31
+
32
+ init_resources
33
+
34
+ self.license = Licensing::LicenseManager.new(Licensing::HQ.new(request).response).license
35
+ end
36
+
37
+ def cache_store
38
+ self.app[:cache_store]
39
+ end
40
+
41
+ # This method will find all fields available in the Avo::Fields namespace and add them to the fields class_variable array
42
+ # so later we can instantiate them on our resources.
43
+ #
44
+ # If the field has their `def_method` set up it will follow that convention, if not it will snake_case the name:
45
+ #
46
+ # Avo::Fields::TextField -> text
47
+ # Avo::Fields::DateTimeField -> date_time
48
+ def init_fields
49
+ Avo::Fields::BaseField.descendants.each do |class_name|
50
+ next if class_name.to_s == 'BaseField'
51
+
52
+ if class_name.to_s.end_with? 'Field'
53
+ load_field class_name.get_field_name, class_name
54
+ end
55
+ end
56
+ end
57
+
58
+ def load_field(method_name, klass)
59
+ self.fields.push(
60
+ name: method_name,
61
+ class: klass,
62
+ )
63
+ end
64
+
65
+ def init_resources
66
+ self.app[:resources] = BaseResource.descendants
67
+ .select do |resource|
68
+ resource != BaseResource
69
+ end
70
+ .map do |resource|
71
+ if resource.is_a? Class
72
+ resource.new
73
+ end
74
+ end
75
+ end
76
+
77
+ def get_resources
78
+ self.app[:resources]
79
+ end
80
+
81
+ # Returns the Avo resource by camelized name
82
+ #
83
+ # get_resource_by_name('User') => UserResource
84
+ def get_resource(resource)
85
+ self.app[:resources].find do |available_resource|
86
+ "#{resource}Resource".safe_constantize == available_resource.class
87
+ end
88
+ end
89
+
90
+ # Returns the Avo resource by singular snake_cased name
91
+ #
92
+ # get_resource_by_name('user') => UserResource
93
+ def get_resource_by_name(name)
94
+ self.get_resource name.singularize.camelize
95
+ end
96
+
97
+ # Returns the Avo resource by singular snake_cased name
98
+ #
99
+ # get_resource_by_name('User') => UserResource
100
+ # get_resource_by_name(User) => UserResource
101
+ def get_resource_by_model_name(name)
102
+ get_resources.find do |resource|
103
+ resource.model_class.model_name.name == name.to_s
104
+ end
105
+ end
106
+
107
+ # Returns the Avo resource by singular snake_cased name
108
+ #
109
+ # get_resource_by_controller_name('delayed_backend_active_record_jobs') => DelayedJobResource
110
+ # get_resource_by_controller_name('users') => UserResource
111
+ def get_resource_by_controller_name(name)
112
+ get_resources.find do |resource|
113
+ resource.model_class.to_s.pluralize.underscore.gsub('/', '_') == name.to_s
114
+ end
115
+ end
116
+
117
+ # Returns the Rails model class by singular snake_cased name
118
+ #
119
+ # get_model_class_by_name('user') => User
120
+ def get_model_class_by_name(name)
121
+ name.to_s.camelize.singularize
122
+ end
123
+
124
+ def get_available_resources(user = nil)
125
+ App.get_resources
126
+ .select do |resource|
127
+ Services::AuthorizationService.authorize user, resource.model, Avo.configuration.authorization_methods.stringify_keys['index'], raise_exception: false
128
+ end
129
+ .sort_by { |r| r.name }
130
+ end
131
+
132
+ def get_navigation_items(user = nil)
133
+ get_available_resources(user).select do |resource|
134
+ resource.model_class.present?
135
+ end
136
+ end
137
+
138
+ def draw_routes
139
+ # We should eager load all the classes so we find all descendants
140
+ Rails.application.eager_load!
141
+
142
+ Proc.new do
143
+ BaseResource.descendants
144
+ .select do |resource|
145
+ resource != :BaseResource
146
+ end
147
+ .map do |resource|
148
+ if resource.is_a? Class
149
+ if resource.model_class.present?
150
+ route_key = resource.model_class.model_name.route_key
151
+ else
152
+ route_key = resource.to_s.underscore.gsub('_resource', '').downcase.pluralize.to_sym
153
+ end
154
+
155
+ resources route_key
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,126 @@
1
+ module Avo
2
+ class BaseAction
3
+ extend FieldsCollector
4
+ extend HasContext
5
+
6
+ class_attribute :name, default: self.class.to_s.demodulize.underscore.humanize(keep_id_suffix: true)
7
+ class_attribute :message
8
+ class_attribute :confirm_button_label
9
+ class_attribute :cancel_button_label
10
+ class_attribute :no_confirmation, default: false
11
+ class_attribute :model
12
+ class_attribute :view
13
+ class_attribute :user
14
+ class_attribute :resource
15
+ class_attribute :fields
16
+
17
+ attr_accessor :response
18
+ attr_accessor :model
19
+ attr_accessor :resource
20
+ attr_accessor :user
21
+ attr_accessor :fields_loader
22
+
23
+ def initialize(model: nil, resource: nil, user: nil)
24
+ self.class.model = model if model.present?
25
+ self.class.resource = resource if resource.present?
26
+ self.class.user = user if user.present?
27
+
28
+ self.class.message ||= I18n.t('avo.are_you_sure_you_want_to_run_this_option')
29
+ self.class.confirm_button_label ||= I18n.t('avo.run')
30
+ self.class.cancel_button_label ||= I18n.t('avo.cancel')
31
+
32
+ @response ||= {}
33
+ @response[:message_type] ||= :notice
34
+ @response[:message] ||= I18n.t('avo.action_ran_successfully')
35
+ end
36
+
37
+ def context
38
+ self.class.context
39
+ end
40
+
41
+ def get_field_definitions
42
+ return [] if self.class.fields.blank?
43
+
44
+ self.class.fields.map do |field|
45
+ field.hydrate(action: self)
46
+ end
47
+ end
48
+
49
+ def get_fields
50
+ get_field_definitions.map do |field|
51
+ field.hydrate(action: self, model: @model)
52
+ end
53
+ .select do |field|
54
+ field.visible?
55
+ end
56
+ end
57
+
58
+ def get_attributes_for_action
59
+ get_fields.map do |field|
60
+ [field.id, field.value]
61
+ end
62
+ .to_h
63
+ end
64
+
65
+ def handle_action(models:, fields:)
66
+ avo_fields = get_fields.map { |field| [field.id, field] }.to_h
67
+
68
+ if fields.present?
69
+ processed_fields = fields.to_unsafe_h.map do |name, value|
70
+ [name, avo_fields[name.to_sym].resolve_attribute(value)]
71
+ end
72
+
73
+ processed_fields = processed_fields.to_h
74
+ else
75
+ processed_fields = {}
76
+ end
77
+
78
+ result = self.handle models: models, fields: processed_fields
79
+
80
+ self
81
+ end
82
+
83
+ def param_id
84
+ self.class.to_s.demodulize.underscore.gsub '/', '_'
85
+ end
86
+
87
+ def succeed(text)
88
+ self.response[:message_type] = :notice
89
+ self.response[:message] = text
90
+
91
+ self
92
+ end
93
+
94
+ def fail(text)
95
+ self.response[:message_type] = :alert
96
+ self.response[:message] = text
97
+
98
+ self
99
+ end
100
+
101
+ def redirect_to(path = nil, &block)
102
+ self.response[:type] = :redirect
103
+ if block.present?
104
+ self.response[:path] = block
105
+ else
106
+ self.response[:path] = path
107
+ end
108
+
109
+ self
110
+ end
111
+
112
+ def reload
113
+ self.response[:type] = :reload
114
+
115
+ self
116
+ end
117
+
118
+ def download(path, filename)
119
+ self.response[:type] = :download
120
+ self.response[:path] = path
121
+ self.response[:filename] = filename
122
+
123
+ self
124
+ end
125
+ end
126
+ end