lesli 5.0.13 → 5.0.15

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 (472) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/lesli_manifest.js +3 -6
  3. data/app/assets/images/lesli/brand/app-icon.svg +45 -39
  4. data/app/assets/javascripts/lesli/application.js +1 -0
  5. data/app/controllers/lesli/abouts_controller.rb +20 -14
  6. data/app/controllers/lesli/application_controller.rb +13 -0
  7. data/app/controllers/lesli/application_devise_controller.rb +10 -12
  8. data/app/controllers/lesli/application_lesli_controller.rb +12 -11
  9. data/app/controllers/lesli/apps_controller.rb +6 -0
  10. data/app/controllers/lesli/roles_controller.rb +2 -2
  11. data/app/helpers/lesli/general_helper.rb +18 -5
  12. data/app/helpers/lesli/html_helper.rb +8 -0
  13. data/app/helpers/lesli/navigation_helper.rb +30 -11
  14. data/app/helpers/lesli/system_helper.rb +2 -2
  15. data/app/helpers/lesli/turbo_helper.rb +58 -0
  16. data/app/interfaces/lesli/customization_interface.rb +42 -0
  17. data/app/interfaces/lesli/requester_interface.rb +103 -0
  18. data/app/interfaces/lesli/responder_interface.rb +127 -0
  19. data/app/lib/date2.rb +1 -199
  20. data/app/lib/lesli/courier.rb +54 -0
  21. data/app/mailers/lesli/application_lesli_mailer.rb +32 -59
  22. data/app/mailers/lesli/devise_mailer.rb +16 -8
  23. data/app/models/concerns/account_initializer.rb +27 -68
  24. data/app/models/concerns/lesli/has_activities.rb +29 -0
  25. data/app/models/concerns/user_extensions.rb +34 -19
  26. data/app/models/concerns/user_security.rb +4 -4
  27. data/app/models/lesli/account.rb +13 -20
  28. data/{lib/scss/layouts/application-container.scss → app/models/lesli/item/activity.rb} +11 -8
  29. data/app/models/lesli/role/{power.rb → action.rb} +6 -4
  30. data/app/models/lesli/role.rb +7 -15
  31. data/app/models/lesli/shared/catalog.rb +20 -0
  32. data/app/models/lesli/shared/dashboard.rb +1 -1
  33. data/app/models/lesli/user/activity.rb +5 -0
  34. data/app/models/lesli/user/detail.rb +5 -5
  35. data/app/models/lesli/user/{log.rb → journal.rb} +3 -3
  36. data/app/models/lesli/user/{power.rb → role.rb} +2 -3
  37. data/app/models/lesli/user/session.rb +3 -4
  38. data/app/models/lesli/user.rb +50 -46
  39. data/app/operators/lesli/controller_operator.rb +3 -1
  40. data/app/operators/lesli/{role_descriptor_operator.rb → role_operator.rb} +51 -28
  41. data/app/operators/lesli/user_registration_operator.rb +3 -2
  42. data/app/services/lesli/application_lesli_service.rb +8 -4
  43. data/app/services/lesli/role/action_service.rb +58 -0
  44. data/app/services/lesli/role_service.rb +232 -0
  45. data/app/services/lesli/{user_session_service.rb → user/session_service.rb} +23 -14
  46. data/app/services/lesli/user_service.rb +85 -1
  47. data/app/views/lesli/abouts/welcome.html.erb +144 -0
  48. data/app/views/lesli/apps/show.html.erb +52 -0
  49. data/app/views/lesli/layouts/application-devise.html.erb +5 -7
  50. data/app/views/lesli/layouts/application-lesli.html.erb +18 -24
  51. data/app/views/lesli/layouts/application-public.html.erb +1 -2
  52. data/app/views/lesli/partials/_application-analytics.html.erb +2 -2
  53. data/app/views/lesli/partials/_application-data.html.erb +3 -77
  54. data/app/views/lesli/partials/_application-head.html.erb +7 -4
  55. data/app/views/lesli/partials/_application-lesli-annoouncements.html.erb +49 -0
  56. data/app/views/lesli/partials/_application-lesli-header.html.erb +73 -49
  57. data/app/views/lesli/partials/_application-lesli-javascript.html.erb +3 -16
  58. data/app/views/lesli/partials/_application-lesli-navigation.html.erb +12 -9
  59. data/app/views/lesli/partials/{_application-lesli-notices.html.erb → _application-lesli-notifications.html.erb} +10 -8
  60. data/app/views/lesli/partials/_application-lesli-scss.html.erb +1 -1
  61. data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +1 -1
  62. data/app/views/lesli/partials/_application-public-javascript.html.erb +1 -4
  63. data/app/views/lesli/partials/_application-public-scss.html.erb +1 -1
  64. data/app/views/lesli/shared/dashboards/_show.html.erb +63 -0
  65. data/app/views/lesli/wrappers/_application-devise.html.erb +4 -6
  66. data/config/importmap.rb +14 -0
  67. data/config/initializers/lesli.rb +20 -12
  68. data/config/initializers/lesli_migration_helpers.rb +61 -0
  69. data/config/locales/translations.en.yml +1 -26
  70. data/config/locales/translations.es.yml +1 -26
  71. data/config/locales/translations.fr.yml +1 -26
  72. data/config/locales/translations.it.yml +1 -26
  73. data/config/locales/translations.pt.yml +1 -26
  74. data/config/routes.rb +3 -1
  75. data/db/migrate/v1/{0010000110_create_lesli_accounts.rb → 0000000110_create_lesli_accounts.rb} +13 -12
  76. data/db/migrate/v1/0000000210_create_lesli_roles.rb +65 -0
  77. data/db/migrate/v1/0000000310_create_lesli_users.rb +99 -0
  78. data/db/migrate/v1/{0010000610_create_lesli_system_controllers.rb → 0000100110_create_lesli_system_controllers.rb} +3 -3
  79. data/db/migrate/v1/{0010000710_create_lesli_system_controller_actions.rb → 0000100210_create_lesli_system_controller_actions.rb} +3 -4
  80. data/{lib/scss/layouts/application-content.scss → db/migrate/v1/0000110310_create_lesli_account_settings.rb} +8 -6
  81. data/{app/models/lesli/user/agent.rb → db/migrate/v1/0000110410_create_lesli_account_activities.rb} +3 -3
  82. data/db/migrate/v1/0000120210_create_lesli_role_actions.rb +45 -0
  83. data/db/migrate/v1/{0010001410_create_lesli_account_logs.rb → 0000120310_create_lesli_role_privileges.rb} +8 -8
  84. data/db/{tables/0010003810_create_user_shortcuts.rb → migrate/v1/0000130210_create_lesli_user_roles.rb} +9 -12
  85. data/db/migrate/v1/0000130310_create_lesli_user_sessions.rb +56 -0
  86. data/db/{seed/production.rb → migrate/v1/0000130410_create_lesli_user_activities.rb} +7 -4
  87. data/db/{tables/0010001110_create_account_locations.rb → migrate2/0000100510_create_lesli_account_locations.rb} +6 -6
  88. data/db/{tables/0010001510_create_account_currencies.rb → migrate2/0000100610_create_lesli_account_currencies.rb} +4 -4
  89. data/db/seed/{development/accounts.rb → accounts.rb} +6 -2
  90. data/db/seed/{production/users.rb → users.rb} +4 -10
  91. data/db/seed/{tools.rb → xyz.rb} +2 -7
  92. data/db/seeds.rb +3 -2
  93. data/db/structure/00000020_catalogs.json +0 -0
  94. data/lib/generators/{application_lesli_generator.rb → application_lesli_generator_base.rb} +4 -4
  95. data/lib/generators/lesli/spec/spec_generator.rb +2 -2
  96. data/lib/generators/lesli/view/USAGE +8 -0
  97. data/lib/generators/lesli/view/templates/spec-factory.template +17 -0
  98. data/lib/generators/lesli/view/templates/spec-model.template +70 -0
  99. data/lib/generators/lesli/view/view_generator.rb +25 -0
  100. data/lib/lesli/configuration.rb +7 -10
  101. data/lib/lesli/engine.rb +27 -3
  102. data/lib/lesli/r_spec.rb +5 -2
  103. data/lib/lesli/routing.rb +42 -9
  104. data/lib/lesli/version.rb +2 -2
  105. data/lib/lesli.rb +11 -0
  106. data/lib/migrate/common.rb +94 -0
  107. data/lib/migrate/items/action_structure.rb +51 -0
  108. data/{db/migrate/v1/0010001210_create_lesli_account_activities.rb → lib/migrate/items/activity_structure.rb} +18 -16
  109. data/lib/migrate/items/attachment_structure.rb +62 -0
  110. data/{app/views/lesli/partials/_application-lesli-engines.html.erb → lib/migrate/items/discussion_structure.rb} +19 -27
  111. data/lib/migrate/items/subscriber_structure.rb +49 -0
  112. data/lib/migrate/items/version_structure.rb +53 -0
  113. data/lib/migrate/shared/account_structure.rb +21 -0
  114. data/lib/migrate/shared/catalog_structure.rb +30 -0
  115. data/lib/migrate/shared/dashboard_structure.rb +54 -0
  116. data/lib/migrate/shared/setting_structure.rb +20 -0
  117. data/lib/rspec/config/spec_coverage.rb +95 -0
  118. data/{db/migrate/v1/0010001110_create_lesli_account_settings.rb → lib/rspec/factories/lesli_account.rb} +10 -7
  119. data/{db/seed/development.rb → lib/rspec/factories/lesli_role.rb} +30 -3
  120. data/{db/seed/test.rb → lib/rspec/factories/lesli_user.rb} +32 -3
  121. data/lib/rspec/fixtures/files/lesli-icon.png +0 -0
  122. data/lib/rspec/fixtures/files/test_file_1.docx +0 -0
  123. data/{db/tables/0010001610_create_account_currency_exchange_rates.rb → lib/rspec/helpers/lesli_helper.rb} +21 -21
  124. data/lib/rspec/helpers/rails_helper.rb +134 -0
  125. data/lib/rspec/helpers/response_request_helper.rb +214 -0
  126. data/lib/rspec/helpers/response_service_helper.rb +66 -0
  127. data/lib/rspec/helpers/spec_helper.rb +99 -0
  128. data/lib/rspec/lesli_api_tester.rb +133 -0
  129. data/lib/rspec/lesli_service_tester.rb +46 -0
  130. data/{db/tables/0010001410_create_account_files.rb → lib/rspec/testers/controller.rb} +31 -20
  131. data/lib/rspec/testers/model.rb +36 -0
  132. data/lib/rspec/testers/request.rb +84 -0
  133. data/lib/tasks/lesli/db.rake +5 -3
  134. data/lib/tasks/lesli/git.rake +28 -32
  135. data/lib/tasks/lesli/github.rake +89 -0
  136. data/lib/tasks/lesli_tasks.rake +3 -3
  137. data/readme.md +28 -17
  138. metadata +148 -393
  139. data/app/assets/fonts/lesli/Domine/Domine-Variable.ttf +0 -0
  140. data/app/assets/fonts/lesli/Domine/OFL.txt +0 -97
  141. data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
  142. data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
  143. data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
  144. data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
  145. data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +0 -1
  146. data/app/assets/fonts/lesli/Remix/remixicon.svg +0 -7633
  147. data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +0 -11
  148. data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
  149. data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
  150. data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
  151. data/app/assets/fonts/lesli/Roboto/LICENSE.txt +0 -202
  152. data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
  153. data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
  154. data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
  155. data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
  156. data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
  157. data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
  158. data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
  159. data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
  160. data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
  161. data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
  162. data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
  163. data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
  164. data/app/assets/icons/lesli/engine-admin.svg +0 -1
  165. data/app/assets/icons/lesli/engine-audit.svg +0 -1
  166. data/app/assets/icons/lesli/engine-babel.svg +0 -1
  167. data/app/assets/icons/lesli/engine-bell.svg +0 -1
  168. data/app/assets/icons/lesli/engine-books.svg +0 -1
  169. data/app/assets/icons/lesli/engine-calendar.svg +0 -1
  170. data/app/assets/icons/lesli/engine-dashboard.svg +0 -1
  171. data/app/assets/icons/lesli/engine-dispatcher.svg +0 -1
  172. data/app/assets/icons/lesli/engine-focus.svg +0 -1
  173. data/app/assets/icons/lesli/engine-kb.svg +0 -1
  174. data/app/assets/icons/lesli/engine-leaf.svg +0 -1
  175. data/app/assets/icons/lesli/engine-lesli.svg +0 -1
  176. data/app/assets/icons/lesli/engine-letter.svg +0 -1
  177. data/app/assets/icons/lesli/engine-mailer.svg +0 -1
  178. data/app/assets/icons/lesli/engine-one.svg +0 -1
  179. data/app/assets/icons/lesli/engine-profile.svg +0 -1
  180. data/app/assets/icons/lesli/engine-proposal.svg +0 -1
  181. data/app/assets/icons/lesli/engine-scraper.svg +0 -1
  182. data/app/assets/icons/lesli/engine-security.svg +0 -1
  183. data/app/assets/icons/lesli/engine-shared.svg +0 -1
  184. data/app/assets/icons/lesli/engine-shield.svg +0 -1
  185. data/app/assets/icons/lesli/engine-storage.svg +0 -1
  186. data/app/assets/icons/lesli/engine-support.svg +0 -1
  187. data/app/assets/icons/lesli/engine-talk.svg +0 -1
  188. data/app/assets/icons/lesli/engine-team.svg +0 -1
  189. data/app/assets/icons/lesli/engine-time.svg +0 -1
  190. data/app/assets/icons/lesli/locale-en.svg +0 -1
  191. data/app/assets/icons/lesli/locale-es.svg +0 -1
  192. data/app/assets/icons/lesli/locale-fr.svg +0 -1
  193. data/app/assets/icons/lesli/locale-it.svg +0 -1
  194. data/app/assets/icons/lesli/locale-pt.svg +0 -1
  195. data/app/assets/icons/readme.md +0 -10
  196. data/app/assets/javascripts/lesli/templates/application.js +0 -14
  197. data/app/assets/javascripts/lesli/templates/public.js +0 -14
  198. data/app/assets/stylesheets/lesli/templates/application.css +0 -2918
  199. data/app/assets/stylesheets/lesli/templates/public.css +0 -1
  200. data/app/controllers/lesli/interfaces/application/authorization.rb +0 -107
  201. data/app/controllers/lesli/interfaces/application/customization.rb +0 -46
  202. data/app/controllers/lesli/interfaces/application/logger.rb +0 -134
  203. data/app/controllers/lesli/interfaces/application/requester.rb +0 -84
  204. data/app/controllers/lesli/interfaces/application/responder.rb +0 -132
  205. data/app/controllers/lesli/interfaces/controllers/actions.rb +0 -250
  206. data/app/controllers/lesli/interfaces/controllers/activities.rb +0 -215
  207. data/app/controllers/lesli/interfaces/controllers/discussions.rb +0 -270
  208. data/app/controllers/lesli/interfaces/controllers/files.rb +0 -467
  209. data/app/controllers/lesli/interfaces/controllers/subscribers.rb +0 -234
  210. data/app/lib/lesli/system.rb +0 -110
  211. data/app/models/lesli/cloud_object/action.rb +0 -70
  212. data/app/models/lesli/cloud_object/activity.rb +0 -311
  213. data/app/models/lesli/cloud_object/custom_field.rb +0 -158
  214. data/app/models/lesli/cloud_object/discussion.rb +0 -219
  215. data/app/models/lesli/cloud_object/subscriber.rb +0 -186
  216. data/app/operators/lesli/descriptor_privilege_operator.rb +0 -75
  217. data/app/views/lesli/emails/devise_mailer/confirmation_instructions.html.erb +0 -23
  218. data/app/views/lesli/emails/devise_mailer/reset_password_instructions.html.erb +0 -23
  219. data/app/views/lesli/partials/_application-lesli-icons.html.erb +0 -1
  220. data/config/initializers/devise.rb +0 -336
  221. data/db/seed/development/users.rb +0 -52
  222. data/db/seed/production/accounts.rb +0 -50
  223. data/db/structure/00000000_people.json +0 -34
  224. data/db/structure/00000003_actions.json +0 -14
  225. data/db/structure/00000004_activities.json +0 -20
  226. data/db/structure/00000005_discussions.json +0 -8
  227. data/db/structure/00000006_files.json +0 -32
  228. data/db/structure/00000007_subscribers.json +0 -11
  229. data/db/structure/00000501_dashboards.json +0 -14
  230. data/db/structure/00000502_dashboard_components.json +0 -23
  231. data/db/tables/0010003410_create_user_activities.rb +0 -51
  232. data/db/tables/0010003710_create_user_codes.rb +0 -43
  233. data/db/tables/0010004110_create_user_tokens.rb +0 -45
  234. data/db/tables/0010005610_create_role_activities.rb +0 -50
  235. data/db/tables/0010009010_create_feedbacks.rb +0 -56
  236. data/lib/mailer_previews/devise_mailer_preview.rb +0 -49
  237. data/lib/scss/cloud-objects/discussion.scss +0 -80
  238. data/lib/scss/cloud-objects/file.scss +0 -138
  239. data/lib/scss/components/keypad.scss +0 -109
  240. data/lib/scss/elements/autocomplete.scss +0 -72
  241. data/lib/scss/elements/card.scss +0 -37
  242. data/lib/scss/elements/empty.scss +0 -43
  243. data/lib/scss/elements/file-uploader.scss +0 -74
  244. data/lib/scss/elements/gallery.scss +0 -98
  245. data/lib/scss/elements/input-tag.scss +0 -73
  246. data/lib/scss/elements/loading.scss +0 -63
  247. data/lib/scss/elements/map.scss +0 -107
  248. data/lib/scss/elements/navbar.scss +0 -115
  249. data/lib/scss/elements/table.scss +0 -118
  250. data/lib/scss/elements/toolbar.scss +0 -66
  251. data/lib/scss/fonts/families.scss +0 -47
  252. data/lib/scss/fonts/mdicons.scss +0 -82
  253. data/lib/scss/fonts/remixicons.scss +0 -2602
  254. data/lib/scss/helpers/display.scss +0 -44
  255. data/lib/scss/helpers/tooltip.scss +0 -91
  256. data/lib/scss/layouts/application-announcements.scss +0 -40
  257. data/lib/scss/layouts/application-component.scss +0 -39
  258. data/lib/scss/layouts/application-engines.scss +0 -125
  259. data/lib/scss/layouts/application-footer.scss +0 -102
  260. data/lib/scss/layouts/application-header.scss +0 -91
  261. data/lib/scss/layouts/application-navigation.scss +0 -79
  262. data/lib/scss/layouts/application-search.scss +0 -71
  263. data/lib/scss/layouts/application-sidebar.scss +0 -219
  264. data/lib/scss/overrides/notification.scss +0 -75
  265. data/lib/scss/overrides/sweetalert.scss +0 -106
  266. data/lib/scss/pages/devise-simple.scss +0 -89
  267. data/lib/scss/pages/devise.scss +0 -179
  268. data/lib/scss/pages/invites.scss +0 -81
  269. data/lib/scss/panels/panel-announcements.scss +0 -56
  270. data/lib/scss/panels/panel-notification.scss +0 -67
  271. data/lib/scss/panels/panel-profile.scss +0 -62
  272. data/lib/scss/panels/panel-support-ticket.scss +0 -56
  273. data/lib/scss/panels/panel-tasks.scss +0 -41
  274. data/lib/scss/settings/variables.scss +0 -148
  275. data/lib/scss/shared/workflow-status-progress.scss +0 -135
  276. data/lib/scss/templates/application.scss +0 -127
  277. data/lib/scss/templates/component.scss +0 -39
  278. data/lib/scss/templates/dashboards.scss +0 -53
  279. data/lib/scss/templates/empty.scss +0 -42
  280. data/lib/scss/templates/pdf.scss +0 -45
  281. data/lib/scss/templates/public.scss +0 -72
  282. data/lib/vue/application.js +0 -285
  283. data/lib/vue/cloudobjects/discussion/content.vue +0 -62
  284. data/lib/vue/cloudobjects/discussion/element.vue +0 -170
  285. data/lib/vue/cloudobjects/discussion/filters.vue +0 -108
  286. data/lib/vue/cloudobjects/discussion/new.vue +0 -134
  287. data/lib/vue/cloudobjects/discussion.vue +0 -99
  288. data/lib/vue/cloudobjects/stores/discussion.js +0 -212
  289. data/lib/vue/layouts/application-announcements.vue +0 -78
  290. data/lib/vue/layouts/application-component.vue +0 -38
  291. data/lib/vue/layouts/application-container.vue +0 -48
  292. data/lib/vue/layouts/application-engines.vue +0 -66
  293. data/lib/vue/layouts/application-footer.vue +0 -123
  294. data/lib/vue/layouts/application-header.vue +0 -252
  295. data/lib/vue/layouts/application-navbar.vue +0 -110
  296. data/lib/vue/layouts/application-search.vue +0 -86
  297. data/lib/vue/layouts/application-sidebar.vue +0 -63
  298. data/lib/vue/pages/errors/app.js +0 -32
  299. data/lib/vue/pages/invites/app.js +0 -76
  300. data/lib/vue/pages/mfas/application.js +0 -77
  301. data/lib/vue/pages/onboarding/application.js +0 -45
  302. data/lib/vue/pages/onboarding/components/address.vue +0 -120
  303. data/lib/vue/pages/onboarding/components/buttons.vue +0 -67
  304. data/lib/vue/pages/onboarding/components/contact.vue +0 -148
  305. data/lib/vue/pages/onboarding/components/date-time.vue +0 -265
  306. data/lib/vue/pages/onboarding/components/finish.vue +0 -62
  307. data/lib/vue/pages/onboarding/components/general-info.vue +0 -93
  308. data/lib/vue/pages/onboarding/components/indicators.vue +0 -78
  309. data/lib/vue/pages/onboarding/components/welcome.vue +0 -66
  310. data/lib/vue/pages/onboarding/show.vue +0 -67
  311. data/lib/vue/pages/onboarding/store.js +0 -165
  312. data/lib/vue/pages/otps/application.js +0 -90
  313. data/lib/vue/pages/passes/application.js +0 -80
  314. data/lib/vue/pages/websites/application.js +0 -34
  315. data/lib/vue/panels/panel-announcements.vue +0 -248
  316. data/lib/vue/panels/panel-bell-notifications.vue +0 -102
  317. data/lib/vue/panels/panel-files.vue +0 -281
  318. data/lib/vue/panels/panel-profile.vue +0 -76
  319. data/lib/vue/panels/panel-support-tickets.vue +0 -163
  320. data/lib/vue/panels/panel-tasks.vue +0 -124
  321. data/lib/vue/panels/stores/bell-notifications.js +0 -46
  322. data/lib/vue/panels/stores/support-tickets.js +0 -103
  323. data/lib/vue/public.js +0 -83
  324. data/lib/vue/refactor/shared/cloudobjects/action.vue +0 -193
  325. data/lib/vue/refactor/shared/cloudobjects/file/grid.vue +0 -215
  326. data/lib/vue/refactor/shared/cloudobjects/file/list.vue +0 -106
  327. data/lib/vue/refactor/shared/cloudobjects/file.vue +0 -145
  328. data/lib/vue/refactor/shared/workflows2/apps/actions/form.vue +0 -232
  329. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/chatroom-form.vue +0 -103
  330. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-clone-form.vue +0 -125
  331. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-file-form.vue +0 -102
  332. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/email-form.vue +0 -190
  333. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/notification-form.vue +0 -124
  334. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/send-cloud-object-file.vue +0 -170
  335. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/task-form.vue +0 -258
  336. data/lib/vue/refactor/shared/workflows2/apps/actions/index.vue +0 -146
  337. data/lib/vue/refactor/shared/workflows2/apps/checks/form.vue +0 -200
  338. data/lib/vue/refactor/shared/workflows2/apps/checks/index.vue +0 -160
  339. data/lib/vue/refactor/shared/workflows2/apps/index.vue +0 -177
  340. data/lib/vue/refactor/shared/workflows2/apps/new.vue +0 -97
  341. data/lib/vue/refactor/shared/workflows2/apps/show.vue +0 -146
  342. data/lib/vue/refactor/shared/workflows2/components/associations.vue +0 -215
  343. data/lib/vue/refactor/shared/workflows2/components/chart.vue +0 -91
  344. data/lib/vue/refactor/shared/workflows2/components/workflow-form.vue +0 -466
  345. data/lib/vue/refactor/shared/workflows2/components/workflow-status-dropdown.vue +0 -129
  346. data/lib/vue/refactor/stores/cloudobjects/action.js +0 -181
  347. data/lib/vue/refactor/stores/cloudobjects/file.js +0 -205
  348. data/lib/vue/refactor/stores/entities/announcements.js +0 -75
  349. data/lib/vue/refactor/stores/entities/dashboard.js +0 -251
  350. data/lib/vue/refactor/stores/entities/workflow.js +0 -185
  351. data/lib/vue/refactor/stores/panels/announcements.js +0 -153
  352. data/lib/vue/refactor/stores/panels/notification.js +0 -114
  353. data/lib/vue/refactor/stores/panels/task.js +0 -66
  354. data/lib/vue/refactor/stores/panels/tickets.js +0 -129
  355. data/lib/vue/refactor/stores/role.js +0 -243
  356. data/lib/vue/refactor/stores/translations.json +0 -60
  357. data/lib/vue/refactor/stores/users.js +0 -98
  358. data/lib/vue/shared/dashboards/apps/edit.vue +0 -215
  359. data/lib/vue/shared/dashboards/apps/index.vue +0 -112
  360. data/lib/vue/shared/dashboards/apps/new.vue +0 -89
  361. data/lib/vue/shared/dashboards/apps/show.vue +0 -88
  362. data/lib/vue/shared/dashboards/components/form.vue +0 -246
  363. data/lib/vue/shared/services/firebase.js +0 -163
  364. data/lib/vue/shared/services/translator.js +0 -87
  365. data/lib/vue/shared/stores/command.js +0 -154
  366. data/lib/vue/shared/stores/dashboard.js +0 -253
  367. data/lib/vue/shared/stores/layout.js +0 -61
  368. data/lib/vue/shared/stores/systemController.js +0 -67
  369. data/lib/vue/shared/stores/users.js +0 -57
  370. data/lib/vue/stores/translations.json +0 -177
  371. data/lib/vue/translation.js +0 -45
  372. data/lib/webpack/base.js +0 -191
  373. data/lib/webpack/core.js +0 -93
  374. data/lib/webpack/engines.js +0 -167
  375. data/lib/webpack/root.js +0 -105
  376. data/lib/webpack/version.js +0 -78
  377. data/vendor/bulma/LICENSE +0 -21
  378. data/vendor/bulma/bulma.sass +0 -10
  379. data/vendor/bulma/css/bulma-rtl.css +0 -11851
  380. data/vendor/bulma/css/bulma-rtl.min.css +0 -1
  381. data/vendor/bulma/css/bulma.css +0 -11851
  382. data/vendor/bulma/css/bulma.min.css +0 -1
  383. data/vendor/bulma/sass/base/_all.sass +0 -6
  384. data/vendor/bulma/sass/base/animations.sass +0 -5
  385. data/vendor/bulma/sass/base/generic.sass +0 -145
  386. data/vendor/bulma/sass/base/helpers.sass +0 -1
  387. data/vendor/bulma/sass/base/minireset.sass +0 -79
  388. data/vendor/bulma/sass/components/_all.sass +0 -15
  389. data/vendor/bulma/sass/components/breadcrumb.sass +0 -77
  390. data/vendor/bulma/sass/components/card.sass +0 -103
  391. data/vendor/bulma/sass/components/dropdown.sass +0 -83
  392. data/vendor/bulma/sass/components/level.sass +0 -79
  393. data/vendor/bulma/sass/components/media.sass +0 -59
  394. data/vendor/bulma/sass/components/menu.sass +0 -59
  395. data/vendor/bulma/sass/components/message.sass +0 -101
  396. data/vendor/bulma/sass/components/modal.sass +0 -117
  397. data/vendor/bulma/sass/components/navbar.sass +0 -446
  398. data/vendor/bulma/sass/components/pagination.sass +0 -167
  399. data/vendor/bulma/sass/components/panel.sass +0 -121
  400. data/vendor/bulma/sass/components/tabs.sass +0 -176
  401. data/vendor/bulma/sass/elements/_all.sass +0 -16
  402. data/vendor/bulma/sass/elements/box.sass +0 -26
  403. data/vendor/bulma/sass/elements/button.sass +0 -357
  404. data/vendor/bulma/sass/elements/container.sass +0 -29
  405. data/vendor/bulma/sass/elements/content.sass +0 -162
  406. data/vendor/bulma/sass/elements/form.sass +0 -1
  407. data/vendor/bulma/sass/elements/icon.sass +0 -46
  408. data/vendor/bulma/sass/elements/image.sass +0 -73
  409. data/vendor/bulma/sass/elements/notification.sass +0 -52
  410. data/vendor/bulma/sass/elements/other.sass +0 -31
  411. data/vendor/bulma/sass/elements/progress.sass +0 -73
  412. data/vendor/bulma/sass/elements/table.sass +0 -134
  413. data/vendor/bulma/sass/elements/tag.sass +0 -140
  414. data/vendor/bulma/sass/elements/title.sass +0 -70
  415. data/vendor/bulma/sass/form/_all.sass +0 -9
  416. data/vendor/bulma/sass/form/checkbox-radio.sass +0 -22
  417. data/vendor/bulma/sass/form/file.sass +0 -184
  418. data/vendor/bulma/sass/form/input-textarea.sass +0 -66
  419. data/vendor/bulma/sass/form/select.sass +0 -88
  420. data/vendor/bulma/sass/form/shared.sass +0 -60
  421. data/vendor/bulma/sass/form/tools.sass +0 -215
  422. data/vendor/bulma/sass/grid/_all.sass +0 -5
  423. data/vendor/bulma/sass/grid/columns.sass +0 -513
  424. data/vendor/bulma/sass/grid/tiles.sass +0 -36
  425. data/vendor/bulma/sass/helpers/_all.sass +0 -12
  426. data/vendor/bulma/sass/helpers/color.sass +0 -39
  427. data/vendor/bulma/sass/helpers/flexbox.sass +0 -35
  428. data/vendor/bulma/sass/helpers/float.sass +0 -10
  429. data/vendor/bulma/sass/helpers/other.sass +0 -14
  430. data/vendor/bulma/sass/helpers/overflow.sass +0 -2
  431. data/vendor/bulma/sass/helpers/position.sass +0 -7
  432. data/vendor/bulma/sass/helpers/spacing.sass +0 -31
  433. data/vendor/bulma/sass/helpers/typography.sass +0 -103
  434. data/vendor/bulma/sass/helpers/visibility.sass +0 -122
  435. data/vendor/bulma/sass/layout/_all.sass +0 -6
  436. data/vendor/bulma/sass/layout/footer.sass +0 -11
  437. data/vendor/bulma/sass/layout/hero.sass +0 -153
  438. data/vendor/bulma/sass/layout/section.sass +0 -17
  439. data/vendor/bulma/sass/utilities/_all.sass +0 -9
  440. data/vendor/bulma/sass/utilities/animations.sass +0 -1
  441. data/vendor/bulma/sass/utilities/controls.sass +0 -49
  442. data/vendor/bulma/sass/utilities/derived-variables.sass +0 -114
  443. data/vendor/bulma/sass/utilities/extends.sass +0 -25
  444. data/vendor/bulma/sass/utilities/functions.sass +0 -135
  445. data/vendor/bulma/sass/utilities/initial-variables.sass +0 -79
  446. data/vendor/bulma/sass/utilities/mixins.sass +0 -303
  447. data/vendor/lesli-css/_index.scss +0 -34
  448. data/vendor/lesli-css/lesli.scss +0 -51
  449. data/vendor/lesli-css/license +0 -28
  450. data/vendor/lesli-css/src/base/fonts.scss +0 -50
  451. data/vendor/lesli-css/src/base/normalize.scss +0 -118
  452. data/vendor/lesli-css/src/components/blockquote.scss +0 -61
  453. data/vendor/lesli-css/src/components/columns.scss +0 -92
  454. data/vendor/lesli-css/src/components/container.scss +0 -47
  455. data/vendor/lesli-css/src/components/navigation.scss +0 -59
  456. data/vendor/lesli-css/src/functions/colors.scss +0 -184
  457. data/vendor/lesli-css/src/helpers/units.scss +0 -44
  458. data/vendor/lesli-css/src/mixins/breakpoint.scss +0 -184
  459. data/vendor/lesli-css/src/mixins/flex.scss +0 -80
  460. data/vendor/lesli-css/src/mixins/scrollbar.scss +0 -46
  461. data/vendor/lesli-css/src/settings/variables.scss +0 -26
  462. data/vendor/lesli-css/tests/base/normalize.spec.scss +0 -125
  463. data/vendor/lesli-css/tests/functions/colors.spec.scss +0 -117
  464. data/vendor/lesli-css/tests/mixins/breakpoint.spec.scss +0 -429
  465. data/vendor/lesli-css/tests/mixins/scrollbar.spec.scss +0 -82
  466. data/vendor/lesli-css/vendor/normalize.scss +0 -351
  467. data/vendor/remixicon/License +0 -201
  468. data/vendor/remixicon/fonts/remixicon.css +0 -2583
  469. /data/{vendor/lesli-css/src/components/grid.scss → app/assets/stylesheets/lesli/application.css} +0 -0
  470. /data/db/migrate/v1/{0010001010_create_lesli_account_details.rb → 0000110210_create_lesli_account_details.rb} +0 -0
  471. /data/db/structure/{00000008_custom_fields.json → 00000300_custom_fields.json} +0 -0
  472. /data/lib/assets/javascripts/lesli/{i18n.js → i18n_js} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e09c65f2654f5b1bf015bea9a64aa911d8037503c10af1972bb91ca9511db8e1
4
- data.tar.gz: 508e55c468892569ee3825e65a9d4da6116b986f1ce0d70ab30715b2f0b63861
3
+ metadata.gz: f6139b8579dcd823c2ace74c59a1abb6bf0fa698e49ac12677dc722d7644418d
4
+ data.tar.gz: 44d42590285bd4c34280023c8d2a10a35bc6f7dedada68e763d373273ac34a37
5
5
  SHA512:
6
- metadata.gz: 8cf347004a6045dd488511449336e4bac0ce379136892ef2a6865adccee50e3bf8d1223ee281eb06fc7af1ec6e451c86c9333f81dd23b18d61ee643108b44449
7
- data.tar.gz: ac613f038fb2957e10d1858baf0e0f7304905b34267ce5d18ca2d46428def63025f10de797a0ea096708e989f8488709db8912184a8c35c6b518f092d9a8c4b2
6
+ metadata.gz: 24631fe19eff97530bfb697e64b4b108c652d678fab327455523b225ce1cfaa226e98d871219bfc7e5b9e17a3025883b249afdb28f896d094f1f32c7e210841c
7
+ data.tar.gz: 8542f06c8685005965e492ec85ee0e220ecee747f7c257e24fe4c339f91499a2872761509c3f7bd3c59c4dca6ab93a4b610c48182fdd146e36aea2949fb0a73e
@@ -36,10 +36,7 @@ Building a better future, one line of code at a time.
36
36
  //= link_tree ../images/lesli .jpg
37
37
  //= link_tree ../images/lesli .svg
38
38
 
39
-
40
- // · Framework asssets
39
+ // ·
41
40
  // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
42
- //= link lesli/templates/public.css
43
- //= link lesli/templates/application.css
44
-
45
- //= link lesli/i18n.js
41
+ //= link lesli/application.css
42
+ //= link lesli/application.js
@@ -1,42 +1,48 @@
1
1
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
2
  <svg
3
- xmlns:dc="http://purl.org/dc/elements/1.1/"
4
- xmlns:cc="http://creativecommons.org/ns#"
5
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
- xmlns:svg="http://www.w3.org/2000/svg"
7
- xmlns="http://www.w3.org/2000/svg"
8
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
9
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
10
- inkscape:version="1.0 (4035a4f, 2020-05-01)"
11
- height="792.88586"
12
- width="913.88531"
13
- sodipodi:docname="lesli-icon.svg"
14
- version="1.1"
15
- viewBox="0 0 913.88531 792.88586"
16
- data-name="Layer 1"
17
- id="Layer_1">
18
- <sodipodi:namedview
19
- inkscape:current-layer="Layer_1"
20
- inkscape:window-maximized="1"
21
- inkscape:window-y="23"
22
- inkscape:window-x="0"
23
- inkscape:cy="396.44301"
24
- inkscape:cx="456.948"
25
- inkscape:zoom="0.85703125"
26
- showgrid="false"
27
- id="namedview19"
28
- inkscape:window-height="940"
29
- inkscape:window-width="1680"
30
- inkscape:pageshadow="2"
31
- inkscape:pageopacity="0"
32
- guidetolerance="10"
33
- gridtolerance="10"
34
- objecttolerance="10"
35
- borderopacity="1"
36
- bordercolor="#666666"
37
- pagecolor="#ffffff" />
38
- <defs id="defs12">
39
- <style id="style10">.cls-1{fill:#214FBD;}</style>
40
- </defs>
41
- <path style="stroke-width:1.6285" id="path16" d="M 913.8853,396.44306 A 179.92038,169.79974 0 0 0 765.26202,229.31696 179.85333,169.73645 0 0 0 456.44871,63.772899 179.80304,169.68899 0 0 0 147.68569,229.44353 a 179.85333,169.73645 0 0 0 0,333.99906 179.85333,169.73645 0 0 0 308.76302,165.67063 179.80304,169.68899 0 0 0 308.81331,-165.54406 179.92038,169.79974 0 0 0 148.62328,-167.1261 z m -446.00404,135.169 v 29.47331 H 412.56241 V 448.15975 A 32.654887,30.818028 0 0 0 379.84048,417.34173 H 260.18412 V 365.1346 h 119.65636 a 32.67165,30.833847 0 0 0 32.65488,-30.83385 V 221.32768 h 55.31885 v 112.9098 a 32.688413,30.849668 0 0 0 32.72194,30.83384 h 119.6396 v 52.20713 h -119.6396 a 32.67165,30.833847 0 0 0 -32.67165,30.81803 v 83.4523 z" class="cls-1" />
3
+ inkscape:version="1.4 (e7c3feb1, 2024-10-09)"
4
+ height="792.88586"
5
+ width="913.88531"
6
+ sodipodi:docname="app-icon.svg"
7
+ version="1.1"
8
+ viewBox="0 0 913.88531 792.88586"
9
+ data-name="Layer 1"
10
+ id="Layer_1"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ xmlns:svg="http://www.w3.org/2000/svg">
15
+ <sodipodi:namedview
16
+ inkscape:current-layer="Layer_1"
17
+ inkscape:window-maximized="0"
18
+ inkscape:window-y="25"
19
+ inkscape:window-x="0"
20
+ inkscape:cy="396.13491"
21
+ inkscape:cx="457.9763"
22
+ inkscape:zoom="0.85703125"
23
+ showgrid="false"
24
+ id="namedview19"
25
+ inkscape:window-height="996"
26
+ inkscape:window-width="1792"
27
+ inkscape:pageshadow="2"
28
+ inkscape:pageopacity="0"
29
+ guidetolerance="10"
30
+ gridtolerance="10"
31
+ objecttolerance="10"
32
+ borderopacity="1"
33
+ bordercolor="#666666"
34
+ pagecolor="#ffffff"
35
+ inkscape:showpageshadow="2"
36
+ inkscape:pagecheckerboard="0"
37
+ inkscape:deskcolor="#d1d1d1" />
38
+ <defs
39
+ id="defs12">
40
+ <style
41
+ id="style10">.cls-1{fill:#214FBD;}</style>
42
+ </defs>
43
+ <path
44
+ style="stroke-width:1.32288"
45
+ id="path16"
46
+ d="M 820.53981,396.44304 A 143.16576,140.81379 0 0 0 702.2777,257.84649 143.1124,140.76129 0 0 0 456.54962,120.56192 143.07239,140.72194 0 0 0 210.86154,257.95145 a 143.1124,140.76129 0 0 0 0,276.98318 A 143.1124,140.76129 0 0 0 456.54962,672.32416 143.07239,140.72194 0 0 0 702.2777,535.03958 143.16576,140.81379 0 0 0 820.53981,396.44304 Z M 465.64669,508.53778 v 24.44202 h -44.01816 v -93.64846 a 25.984058,25.557183 0 0 0 -26.03741,-25.55718 h -95.21263 v -43.29502 h 95.21263 a 25.997396,25.570302 0 0 0 25.98405,-25.5703 v -93.6878 h 44.01816 v 93.63533 a 26.010735,25.583422 0 0 0 26.03742,25.5703 h 95.1993 v 43.29502 h -95.1993 a 25.997396,25.570302 0 0 0 -25.9974,25.55718 v 69.20644 z"
47
+ class="cls-1" />
42
48
  </svg>
@@ -0,0 +1 @@
1
+ import "@hotwired/turbo-rails";
@@ -32,27 +32,33 @@ Building a better future, one line of code at a time.
32
32
 
33
33
  module Lesli
34
34
  class AboutsController < ApplicationLesliController
35
+ layout "lesli/layouts/application-public", only: [:welcome]
36
+
37
+ # def status
38
+ # respond_with_successful({ :Lesli => "Ruby on Rails SaaS Development Framework." })
39
+ # end
40
+
41
+ def welcome
42
+ end
35
43
 
36
44
  # GET /status
37
45
  def show
38
46
  respond_to do |format|
39
47
  format.html {}
40
48
  format.json {
41
- if Rails.env.production?
42
- respond_with_successful({ :Lesli => "Ruby on Rails SaaS Development Framework." })
43
- else
44
- # get installed engines
45
- @lesli_engines = Lesli::System.engines.map { |engine, engine_info|
46
- {
47
- :name => engine_info[:name],
48
- :code => engine_info[:code],
49
- :path => engine_info[:path],
50
- :build => engine_info[:build],
51
- :version => engine_info[:version]
52
- }
49
+
50
+ # get installed engines
51
+ @lesli_engines = LesliSystem.engines.map { |engine, engine_info|
52
+ {
53
+ :name => engine_info[:name],
54
+ :code => engine_info[:code],
55
+ :path => engine_info[:path],
56
+ :build => engine_info[:build],
57
+ :version => engine_info[:version],
58
+ :description => engine_info[:description]
53
59
  }
54
- respond_with_successful(@lesli_engines)
55
- end
60
+ }
61
+ respond_with_successful(@lesli_engines)
56
62
  }
57
63
  end
58
64
  end
@@ -34,6 +34,8 @@ module Lesli
34
34
  class ApplicationController < ActionController::Base
35
35
  layout "lesli/layouts/application-public"
36
36
 
37
+ add_flash_types(:info, :danger, :success, :warning)
38
+
37
39
  attr_reader :query
38
40
  attr_reader :engine_path
39
41
 
@@ -42,6 +44,17 @@ module Lesli
42
44
  @lesli = {}
43
45
  end
44
46
 
47
+ # Meta-programming to define flash setter methods dynamically
48
+ # success("Everything worked!")
49
+ # danger("Oops, there was an error.")
50
+ # info("Just an informational message.")
51
+ # warning("This is a warning.")
52
+ [:success, :danger, :warning, :info].each do |flash_type|
53
+ define_method(flash_type) do |message|
54
+ flash[flash_type] = message
55
+ end
56
+ end
57
+
45
58
  def language
46
59
 
47
60
  # check if param locale was sent by the user
@@ -2,7 +2,7 @@
2
2
 
3
3
  Lesli
4
4
 
5
- Copyright (c) 2023, Lesli Technologies, S. A.
5
+ Copyright (c) 2025, Lesli Technologies, S. A.
6
6
 
7
7
  This program is free software: you can redistribute it and/or modify
8
8
  it under the terms of the GNU General Public License as published by
@@ -17,25 +17,24 @@ GNU General Public License for more details.
17
17
  You should have received a copy of the GNU General Public License
18
18
  along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
- Lesli · Your Smart Business Assistant.
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
26
- @website https://lesli.tech
26
+ @website https://www.lesli.tech
27
27
  @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
28
 
29
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
- // ·
31
-
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
32
31
  =end
33
32
 
34
33
  module Lesli
35
- class ApplicationDeviseController < ActionController::Base
36
- include Interfaces::Application::Responder
37
- include Interfaces::Application::Requester
38
- include Interfaces::Application::Logger
34
+ class ApplicationDeviseController < ApplicationController
35
+ include Lesli::ResponderInterface
36
+ include Lesli::RequesterInterface
37
+ include LesliAudit::LoggerInterface if defined?(LesliAudit)
39
38
 
40
39
  layout "lesli/layouts/application-devise"
41
40
 
@@ -49,6 +48,5 @@ module Lesli
49
48
  }
50
49
  super
51
50
  end
52
-
53
51
  end
54
52
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Lesli
4
4
 
5
- Copyright (c) 2023, Lesli Technologies, S. A.
5
+ Copyright (c) 2025, Lesli Technologies, S. A.
6
6
 
7
7
  This program is free software: you can redistribute it and/or modify
8
8
  it under the terms of the GNU General Public License as published by
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
20
  Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
@@ -31,27 +31,28 @@ Building a better future, one line of code at a time.
31
31
  =end
32
32
 
33
33
  module Lesli
34
- class ApplicationLesliController < ApplicationController
35
- include Interfaces::Application::Authorization
36
- include Interfaces::Application::Customization
37
- include Interfaces::Application::Responder
38
- include Interfaces::Application::Requester
39
- include Interfaces::Application::Logger
34
+ class ApplicationLesliController < ApplicationController
35
+
36
+ include Lesli::ResponderInterface
37
+ include Lesli::RequesterInterface
38
+ include Lesli::CustomizationInterface
39
+ include LesliAudit::LoggerInterface if defined?(LesliAudit)
40
+ include LesliShield::AuthenticationInterface if defined?(LesliShield)
41
+ include LesliShield::AuthorizationInterface if defined?(LesliShield)
40
42
 
41
43
  protect_from_forgery with: :exception
42
44
 
43
45
  before_action :set_path
44
46
  before_action :set_locale
47
+ before_action :authenticate_request if defined?(LesliShield)
45
48
  before_action :authorize_request if defined?(LesliShield)
46
- before_action :authorize_privilege if defined?(LesliSecurity)
47
49
  before_action :set_customizer
48
50
  before_action :set_requester
49
51
  after_action :log_requests if defined?(LesliAudit)
50
52
 
51
53
  layout "lesli/layouts/application-lesli"
52
54
 
53
- # Rescue from "ParameterMissing" when using required params
54
- # in controllers
55
+ # Rescue from "ParameterMissing" when using required params in controllers
55
56
  rescue_from ActionController::ParameterMissing do |_e|
56
57
  respond_with_error("Missing params")
57
58
  end
@@ -0,0 +1,6 @@
1
+ module Lesli
2
+ class AppsController < ApplicationLesliController
3
+ def show
4
+ end
5
+ end
6
+ end
@@ -32,12 +32,12 @@ Building a better future, one line of code at a time.
32
32
 
33
33
  module Lesli
34
34
  class RolesController < ApplicationLesliController
35
- before_action :set_role, only: [:show, :update, :destroy]
35
+ before_action :set_role, only: []
36
36
 
37
37
  def list
38
38
  respond_to do |format|
39
39
  format.json {
40
- respond_with_successful(Role.list(current_user, query, params))
40
+ respond_with_successful(RoleService.new(current_user, query).list(params))
41
41
  }
42
42
  end
43
43
  end
@@ -59,17 +59,22 @@ module Lesli
59
59
  # return a string with a css class to identify the body
60
60
  # example: builder engine-controller action
61
61
  def application_body_class
62
- [lesli_instance_code, controller_path.gsub("/", "-"), action_name].join(" ")
62
+ [lesli_instance_code, controller_path.sub("_","-").split("/"), action_name].join(" ")
63
63
  end
64
64
 
65
65
  # build the text for the html document title
66
66
  # this helper works only for rails pages, for vue apps the title must be handled with JS
67
67
  def website_title
68
- return @application_html_title if @application_html_title
68
+ # Use instance variable if set, otherwise construct a dynamic title
69
+ title = @application_html_title || controller_path.delete_prefix("lesli_")
69
70
 
70
- title = controller_path.gsub("cloud", "").gsub("_", "")
71
- name = @account.dig(:company, :name)
72
- "#{title} - #{name}"
71
+ # Append action name unless it's "index"
72
+ title += "/#{action_name}" unless action_name == "index"
73
+
74
+ # Append company name if present
75
+ title += " · #{Lesli.config.company.dig(:name)}"
76
+
77
+ title
73
78
  end
74
79
 
75
80
  # build description using custom data from controller or engine gem description
@@ -79,5 +84,13 @@ module Lesli
79
84
  # Gem::Specification.find_by_name(engine_name).summary
80
85
  @application_html_description || ""
81
86
  end
87
+
88
+ def dd object
89
+ content_tag(:pre) do
90
+ content_tag(:code) do
91
+ h JSON.pretty_generate(object.as_json)
92
+ end
93
+ end
94
+ end
82
95
  end
83
96
  end
@@ -0,0 +1,8 @@
1
+
2
+ module Lesli
3
+ module HtmlHelper
4
+ def turbo_link_to body, url, html_options = {}
5
+ link_to(body, url, class: "link", data: { turbo_frame: '_top' })
6
+ end
7
+ end
8
+ end
@@ -42,15 +42,30 @@ module Lesli
42
42
 
43
43
  # Prints a html link inside a list item
44
44
  def navigation_item(path, label, icon = nil, reload: false)
45
- content_tag(:li) do
45
+ content_tag(:li, { class: "navbar-item"}) do
46
46
  navigation_link(path, label, icon, reload:reload)
47
47
  end
48
48
  end
49
49
 
50
50
  def navigation_link(path, label, icon = nil, reload: false)
51
+
52
+ #content_tag(html_element, html_options) do
53
+ link_to path, data: { turbo_frame: '_top' } do
54
+ # print a simple menu item (without icon)
55
+ concat content_tag(:span, label, class: "text iconless") unless icon
56
+
57
+ # print a full menu item if icon was requested
58
+ if icon
59
+ concat content_tag(:span, nil, class: icon)
60
+ concat content_tag(:span, label, class: "text")
61
+ end
62
+ end
63
+ end
64
+
65
+ def navigation_link_vue(path, label, icon = nil, reload: false)
51
66
  # default vue router links for single page applications
52
67
  html_element = "router-link"
53
- html_options = { to: path, class: "navbar-item", 'active-class': "navigation-link-active" }
68
+ html_options = { to: path, 'active-class': "navigation-link-active" }
54
69
 
55
70
  # if reload is nedeed, we use a standard "a" tag
56
71
  if reload
@@ -94,8 +109,8 @@ module Lesli
94
109
 
95
110
  # 02.05 Mailer engine
96
111
  def navigation_engine_mailer(title: "Mailer", subtitle: "Email automation system")
97
- return unless defined? CloudMailer
98
- navigation_engine_item(title,subtitle,"mailer",cloud_mailer.root_path,controller_path.include?("cloud_mailer"))
112
+ return unless defined? LesliMailer
113
+ navigation_engine_item(title,subtitle,"mailer", lesli_mailer.root_path,controller_path.include?("lesli_mailer"))
99
114
  end
100
115
 
101
116
  # 02.08 Proposal engine
@@ -160,6 +175,12 @@ module Lesli
160
175
  navigation_engine_item(title,subtitle,"storage",cloud_storage.root_path,controller_path.include?("cloud_storage"))
161
176
  end
162
177
 
178
+ # 03.12 Papers engine
179
+ def navigation_engine_papers(title: "Papers", subtitle: "Smart Document Management")
180
+ return unless defined? LesliPapers
181
+ navigation_engine_item(title,subtitle,"papers",lesli_papers.root_path,controller_path.include?("lesli_papers"))
182
+ end
183
+
163
184
  # FINANCE
164
185
 
165
186
  # 04.01 Books engine
@@ -217,9 +238,7 @@ module Lesli
217
238
  # 07.02 Help engine
218
239
  def navigation_engine_support(title: "Support", subtitle: "Support Ticket System")
219
240
  return unless defined? LesliSupport
220
-
221
- navigation_engine_item(title, subtitle, "support", lesli_support.root_path,
222
- controller_path.include?("lesli_support"))
241
+ navigation_engine_item(title, subtitle, "support", lesli_support.root_path, controller_path.include?("lesli_support"))
223
242
  end
224
243
 
225
244
  # 07.03 Portal engine
@@ -241,13 +260,13 @@ module Lesli
241
260
  # SECURITY & PRIVACY
242
261
 
243
262
  # 08.01 Shield engine
244
- def navigation_engine_shield(title: "Shield", subtitle: "Authentication & Authorization.")
263
+ def navigation_engine_shield(title: "Shield", subtitle: "Authentication & Authorization")
245
264
  return unless defined? LesliShield
246
265
  navigation_engine_item(title, subtitle, "shield", lesli_shield.root_path, controller_path.include?("lesli_shield"))
247
266
  end
248
267
 
249
268
  # 08.02 Security engine
250
- def navigation_engine_security(title: "Security", subtitle: "Users, Privileges & Access Management.")
269
+ def navigation_engine_security(title: "Security", subtitle: "Users Authorization Management.")
251
270
  return unless defined? LesliSecurity
252
271
  navigation_engine_item(title, subtitle, "security", lesli_security.root_path, controller_path.include?("lesli_security"))
253
272
  end
@@ -256,7 +275,7 @@ module Lesli
256
275
  # INTEGRATIONS
257
276
 
258
277
  # 09.01 Babel engine
259
- def navigation_engine_babel(title: "Babel", subtitle: "Translations")
278
+ def navigation_engine_babel(title: "Babel", subtitle: "Translation Management System")
260
279
  return unless defined? LesliBabel
261
280
 
262
281
  navigation_engine_item(title, subtitle, "babel", lesli_babel.root_path,
@@ -306,7 +325,7 @@ module Lesli
306
325
  return nil if modules_hidden.include?(path)
307
326
 
308
327
  # render module navigation item :)
309
- content_tag(:a, href: path, class: is_active ? "is-active" : nil) do
328
+ content_tag(:a, id: path.gsub("/",""), href: path, class: is_active ? "is-active" : nil, data: { turbo: false }) do
310
329
  lesli_svg("engine-#{icon}") << content_tag(:div) do
311
330
  content_tag(:span, title) << content_tag(:p, subtitle)
312
331
  end
@@ -41,12 +41,12 @@ module Lesli
41
41
  # example: lesli_cloud, deutsche_leibrenten, mitwerken_cloud
42
42
  def lesli_instance_code
43
43
  return "lesli"
44
- Lesli::System.instance[:code]
44
+ #LesliSystem.instance[:code]
45
45
  end
46
46
 
47
47
  # return the information about the current engine
48
48
  def lesli_engine(property = nil)
49
- Lesli::System.engine(lesli_controller, property)
49
+ LesliSystem.engine(lesli_controller, property)
50
50
  end
51
51
 
52
52
  # return true if the controller requested belongs to the administration area
@@ -0,0 +1,58 @@
1
+ =begin
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
+
22
+ Made with ♥ by LesliTech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ =end
32
+
33
+ module Lesli
34
+ module TurboHelper
35
+ def render_notifications_stream
36
+ turbo_stream.replace("application-lesli-notifications") do
37
+ render("lesli/partials/application-lesli-notifications")
38
+ end
39
+ end
40
+
41
+ def render_form_stream(partial_path, locals = {})
42
+
43
+ # Detect the current engine's namespace
44
+ engine_name = controller.class.module_parent_name.underscore
45
+
46
+ # Ensure the correct namespace is applied (only if not already present)
47
+ partial_path = "#{engine_name}/#{partial_path}"
48
+
49
+ # Convert the partial path to a valid DOM ID
50
+ partial_id = partial_path.tr("/", "-").tr("_", "-")
51
+
52
+ # Renders the stream to update the partial
53
+ turbo_stream.replace(partial_id) do
54
+ render(partial_path, locals)
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,42 @@
1
+ module Lesli
2
+ module CustomizationInterface
3
+
4
+ # set customization only for lesli_cloud instance
5
+ def set_customizer
6
+ =begin
7
+ # @account is only for html and pdf requests
8
+ return unless request.format.html? || request.format.pdf?
9
+
10
+ # return unless Lesli.instance[:code] == "lesli_cloud"
11
+
12
+ @lesli[:customization] = {}
13
+
14
+ logos = {}
15
+ # logo_identifiers = Account::File.file_types.keys
16
+ # custom_logos = current_user.account.files.where("file_type in (?)", logo_identifiers).order(id: :desc).all
17
+ # logo_identifiers.each do |logo_identifier|
18
+ # custom_logo = custom_logos.find { |logo| logo.file_type == logo_identifier}
19
+ # next unless custom_logo
20
+
21
+ # custom_logo_url = "/administration/account/files/#{custom_logo.id}"
22
+ # custo_logo_url = custom_logo.attachment_url if custom_logo.attachment_identifier
23
+ # custom_logo_url = custom_logo.attachment_public_url if custom_logo.attachment_public_identifier
24
+
25
+ # logos[logo_identifier.to_sym] = custom_logo_url
26
+ # end
27
+ @lesli[:customization][:logos] = logos
28
+
29
+ colors = {}
30
+ # color_identifiers = ::Account::Setting.theme_settings_keys
31
+ # custom_colors = current_user.account.settings.where("name in (?)", color_identifiers).all
32
+ # color_identifiers.each do |color_identifier|
33
+ # custom_color = custom_colors.find { |color| color.name == color_identifier}
34
+ # next unless custom_color
35
+
36
+ # colors[color_identifier.to_sym] = custom_color.value
37
+ # end
38
+ @lesli[:customization][:colors] = colors
39
+ =end
40
+ end
41
+ end
42
+ end