lesli 5.0.12 → 5.0.14

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 (477) 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/images/lesli/brand/app-logo.png +0 -0
  5. data/app/assets/javascripts/lesli/application.js +1 -0
  6. data/app/controllers/lesli/abouts_controller.rb +16 -14
  7. data/app/controllers/lesli/application_controller.rb +14 -0
  8. data/app/controllers/lesli/application_devise_controller.rb +10 -12
  9. data/app/controllers/lesli/application_lesli_controller.rb +12 -11
  10. data/app/controllers/lesli/apps_controller.rb +6 -0
  11. data/app/controllers/lesli/roles_controller.rb +2 -2
  12. data/app/helpers/lesli/assets_helper.rb +24 -6
  13. data/app/helpers/lesli/general_helper.rb +18 -5
  14. data/app/helpers/lesli/html_helper.rb +8 -0
  15. data/app/helpers/lesli/navigation_helper.rb +43 -20
  16. data/app/helpers/lesli/system_helper.rb +2 -2
  17. data/app/helpers/lesli/turbo_helper.rb +58 -0
  18. data/app/interfaces/lesli/customization_interface.rb +42 -0
  19. data/app/interfaces/lesli/requester_interface.rb +103 -0
  20. data/app/interfaces/lesli/responder_interface.rb +127 -0
  21. data/app/lib/date2.rb +1 -191
  22. data/app/lib/lesli/courier.rb +54 -0
  23. data/app/mailers/lesli/application_lesli_mailer.rb +32 -59
  24. data/app/mailers/lesli/devise_mailer.rb +16 -8
  25. data/app/models/concerns/account_initializer.rb +27 -68
  26. data/app/models/concerns/lesli/has_activities.rb +29 -0
  27. data/app/models/concerns/user_extensions.rb +34 -13
  28. data/app/models/concerns/user_security.rb +4 -4
  29. data/app/models/lesli/account.rb +13 -20
  30. data/{lib/scss/layouts/application-container.scss → app/models/lesli/item/activity.rb} +11 -8
  31. data/app/models/lesli/role/{power.rb → action.rb} +6 -4
  32. data/app/models/lesli/role.rb +7 -15
  33. data/app/models/lesli/shared/catalog.rb +20 -0
  34. data/app/models/lesli/shared/dashboard.rb +1 -1
  35. data/app/models/lesli/user/activity.rb +5 -0
  36. data/app/models/lesli/user/detail.rb +5 -5
  37. data/app/models/lesli/user/{log.rb → journal.rb} +3 -3
  38. data/app/models/lesli/user/{power.rb → role.rb} +2 -3
  39. data/app/models/lesli/user/session.rb +3 -4
  40. data/app/models/lesli/user.rb +50 -46
  41. data/app/operators/lesli/controller_operator.rb +7 -2
  42. data/app/operators/lesli/{role_descriptor_operator.rb → role_operator.rb} +51 -28
  43. data/app/operators/lesli/user_registration_operator.rb +3 -2
  44. data/app/services/lesli/application_lesli_service.rb +8 -4
  45. data/app/services/lesli/role/action_service.rb +58 -0
  46. data/app/services/lesli/role_service.rb +232 -0
  47. data/app/services/lesli/{user_session_service.rb → user/session_service.rb} +23 -14
  48. data/app/services/lesli/user_service.rb +86 -2
  49. data/app/views/lesli/apps/show.html.erb +52 -0
  50. data/app/views/lesli/layouts/application-devise.html.erb +5 -7
  51. data/app/views/lesli/layouts/application-lesli.html.erb +18 -22
  52. data/app/views/lesli/partials/_application-analytics.html.erb +2 -2
  53. data/app/views/lesli/partials/_application-data.html.erb +5 -79
  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 +88 -39
  57. data/app/views/lesli/partials/_application-lesli-javascript.html.erb +5 -18
  58. data/app/views/lesli/partials/_application-lesli-navigation.html.erb +17 -7
  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 +3 -3
  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/shared/dashboards/_show.html.erb +63 -0
  64. data/app/views/lesli/wrappers/_application-devise-simple.erb +1 -1
  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 +27 -13
  68. data/config/initializers/lesli_migration_helpers.rb +61 -0
  69. data/config/locales/translations.en.yml +1 -24
  70. data/config/locales/translations.es.yml +1 -24
  71. data/config/locales/translations.fr.yml +1 -24
  72. data/config/locales/translations.it.yml +1 -24
  73. data/config/locales/translations.pt.yml +1 -24
  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/db/{seed/production.rb → migrate/v1/0000110310_create_lesli_account_settings.rb} +6 -3
  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/migrate/v1/0000130410_create_lesli_user_activities.rb +37 -0
  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_base.rb +164 -0
  95. data/lib/generators/lesli/spec/USAGE +8 -0
  96. data/lib/generators/lesli/spec/spec_generator.rb +25 -0
  97. data/lib/generators/lesli/spec/templates/spec-factory.template +17 -0
  98. data/lib/generators/lesli/spec/templates/spec-model.template +70 -0
  99. data/lib/generators/lesli/view/USAGE +8 -0
  100. data/lib/generators/lesli/view/templates/spec-factory.template +17 -0
  101. data/lib/generators/lesli/view/templates/spec-model.template +70 -0
  102. data/lib/generators/lesli/view/view_generator.rb +25 -0
  103. data/lib/lesli/configuration.rb +8 -11
  104. data/lib/lesli/engine.rb +24 -6
  105. data/lib/lesli/r_spec.rb +43 -0
  106. data/lib/lesli/routing.rb +90 -0
  107. data/lib/lesli/version.rb +2 -2
  108. data/lib/lesli.rb +13 -0
  109. data/lib/migrate/common.rb +94 -0
  110. data/lib/migrate/items/action_structure.rb +51 -0
  111. data/{db/migrate/v1/0010001210_create_lesli_account_activities.rb → lib/migrate/items/activity_structure.rb} +18 -16
  112. data/lib/migrate/items/attachment_structure.rb +62 -0
  113. data/{app/views/lesli/partials/_application-lesli-engines.html.erb → lib/migrate/items/discussion_structure.rb} +19 -27
  114. data/lib/migrate/items/subscriber_structure.rb +49 -0
  115. data/lib/migrate/items/version_structure.rb +53 -0
  116. data/lib/migrate/shared/account_structure.rb +21 -0
  117. data/lib/migrate/shared/catalog_structure.rb +30 -0
  118. data/lib/migrate/shared/dashboard_structure.rb +54 -0
  119. data/lib/migrate/shared/setting_structure.rb +20 -0
  120. data/lib/rspec/config/spec_coverage.rb +95 -0
  121. data/{db/migrate/v1/0010001110_create_lesli_account_settings.rb → lib/rspec/factories/lesli_account.rb} +10 -7
  122. data/{db/seed/development.rb → lib/rspec/factories/lesli_role.rb} +30 -3
  123. data/{db/seed/test.rb → lib/rspec/factories/lesli_user.rb} +32 -3
  124. data/lib/rspec/fixtures/files/lesli-icon.png +0 -0
  125. data/lib/rspec/fixtures/files/test_file_1.docx +0 -0
  126. data/{db/tables/0010001610_create_account_currency_exchange_rates.rb → lib/rspec/helpers/lesli_helper.rb} +21 -21
  127. data/lib/rspec/helpers/rails_helper.rb +134 -0
  128. data/lib/rspec/helpers/response_request_helper.rb +214 -0
  129. data/lib/rspec/helpers/response_service_helper.rb +66 -0
  130. data/lib/rspec/helpers/spec_helper.rb +99 -0
  131. data/lib/rspec/lesli_api_tester.rb +133 -0
  132. data/lib/rspec/lesli_service_tester.rb +46 -0
  133. data/{db/tables/0010001410_create_account_files.rb → lib/rspec/testers/controller.rb} +31 -20
  134. data/lib/rspec/testers/model.rb +36 -0
  135. data/lib/rspec/testers/request.rb +84 -0
  136. data/lib/tasks/lesli/db.rake +5 -3
  137. data/lib/tasks/lesli/git.rake +28 -32
  138. data/lib/tasks/lesli/github.rake +89 -0
  139. data/lib/tasks/lesli_tasks.rake +6 -6
  140. data/readme.md +28 -17
  141. metadata +132 -399
  142. data/app/assets/fonts/lesli/Domine/Domine-Variable.ttf +0 -0
  143. data/app/assets/fonts/lesli/Domine/OFL.txt +0 -97
  144. data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
  145. data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
  146. data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
  147. data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
  148. data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +0 -1
  149. data/app/assets/fonts/lesli/Remix/remixicon.svg +0 -7633
  150. data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +0 -11
  151. data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
  152. data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
  153. data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
  154. data/app/assets/fonts/lesli/Roboto/LICENSE.txt +0 -202
  155. data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
  156. data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
  157. data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
  158. data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
  159. data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
  160. data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
  161. data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
  162. data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
  163. data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
  164. data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
  165. data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
  166. data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
  167. data/app/assets/icons/lesli/engine-admin.svg +0 -1
  168. data/app/assets/icons/lesli/engine-audit.svg +0 -1
  169. data/app/assets/icons/lesli/engine-babel.svg +0 -1
  170. data/app/assets/icons/lesli/engine-bell.svg +0 -1
  171. data/app/assets/icons/lesli/engine-books.svg +0 -1
  172. data/app/assets/icons/lesli/engine-calendar.svg +0 -1
  173. data/app/assets/icons/lesli/engine-dashboard.svg +0 -1
  174. data/app/assets/icons/lesli/engine-dispatcher.svg +0 -1
  175. data/app/assets/icons/lesli/engine-focus.svg +0 -1
  176. data/app/assets/icons/lesli/engine-kb.svg +0 -1
  177. data/app/assets/icons/lesli/engine-leaf.svg +0 -1
  178. data/app/assets/icons/lesli/engine-lesli.svg +0 -1
  179. data/app/assets/icons/lesli/engine-letter.svg +0 -1
  180. data/app/assets/icons/lesli/engine-mailer.svg +0 -1
  181. data/app/assets/icons/lesli/engine-one.svg +0 -1
  182. data/app/assets/icons/lesli/engine-profile.svg +0 -1
  183. data/app/assets/icons/lesli/engine-proposal.svg +0 -1
  184. data/app/assets/icons/lesli/engine-scraper.svg +0 -1
  185. data/app/assets/icons/lesli/engine-security.svg +0 -1
  186. data/app/assets/icons/lesli/engine-shared.svg +0 -1
  187. data/app/assets/icons/lesli/engine-shield.svg +0 -1
  188. data/app/assets/icons/lesli/engine-storage.svg +0 -1
  189. data/app/assets/icons/lesli/engine-support.svg +0 -1
  190. data/app/assets/icons/lesli/engine-talk.svg +0 -1
  191. data/app/assets/icons/lesli/engine-team.svg +0 -1
  192. data/app/assets/icons/lesli/engine-time.svg +0 -1
  193. data/app/assets/icons/lesli/locale-en.svg +0 -1
  194. data/app/assets/icons/lesli/locale-es.svg +0 -1
  195. data/app/assets/icons/lesli/locale-fr.svg +0 -1
  196. data/app/assets/icons/lesli/locale-it.svg +0 -1
  197. data/app/assets/icons/lesli/locale-pt.svg +0 -1
  198. data/app/assets/icons/readme.md +0 -10
  199. data/app/assets/stylesheets/lesli/templates/application.css +0 -23499
  200. data/app/assets/stylesheets/lesli/templates/public.css +0 -19098
  201. data/app/assets/stylesheets/lesli/users/confirmations.css +0 -19219
  202. data/app/assets/stylesheets/lesli/users/passwords.css +0 -19202
  203. data/app/assets/stylesheets/lesli/users/registrations.css +0 -19594
  204. data/app/assets/stylesheets/lesli/users/sessions.css +0 -19594
  205. data/app/controllers/lesli/interfaces/application/authorization.rb +0 -107
  206. data/app/controllers/lesli/interfaces/application/customization.rb +0 -46
  207. data/app/controllers/lesli/interfaces/application/logger.rb +0 -134
  208. data/app/controllers/lesli/interfaces/application/requester.rb +0 -84
  209. data/app/controllers/lesli/interfaces/application/responder.rb +0 -132
  210. data/app/controllers/lesli/interfaces/controllers/actions.rb +0 -250
  211. data/app/controllers/lesli/interfaces/controllers/activities.rb +0 -215
  212. data/app/controllers/lesli/interfaces/controllers/discussions.rb +0 -270
  213. data/app/controllers/lesli/interfaces/controllers/files.rb +0 -467
  214. data/app/controllers/lesli/interfaces/controllers/subscribers.rb +0 -234
  215. data/app/lib/lesli/system.rb +0 -98
  216. data/app/models/lesli/cloud_object/action.rb +0 -70
  217. data/app/models/lesli/cloud_object/activity.rb +0 -311
  218. data/app/models/lesli/cloud_object/custom_field.rb +0 -158
  219. data/app/models/lesli/cloud_object/discussion.rb +0 -219
  220. data/app/models/lesli/cloud_object/subscriber.rb +0 -186
  221. data/app/operators/lesli/descriptor_privilege_operator.rb +0 -75
  222. data/app/views/lesli/emails/devise_mailer/confirmation_instructions.html.erb +0 -23
  223. data/app/views/lesli/emails/devise_mailer/reset_password_instructions.html.erb +0 -23
  224. data/app/views/lesli/partials/_application-lesli-icons.html.erb +0 -1
  225. data/config/initializers/devise.rb +0 -336
  226. data/db/seed/development/users.rb +0 -52
  227. data/db/seed/production/accounts.rb +0 -50
  228. data/db/structure/00000000_people.json +0 -34
  229. data/db/structure/00000003_actions.json +0 -14
  230. data/db/structure/00000004_activities.json +0 -20
  231. data/db/structure/00000005_discussions.json +0 -8
  232. data/db/structure/00000006_files.json +0 -32
  233. data/db/structure/00000007_subscribers.json +0 -11
  234. data/db/structure/00000501_dashboards.json +0 -14
  235. data/db/structure/00000502_dashboard_components.json +0 -23
  236. data/db/tables/0010003410_create_user_activities.rb +0 -51
  237. data/db/tables/0010003710_create_user_codes.rb +0 -43
  238. data/db/tables/0010004110_create_user_tokens.rb +0 -45
  239. data/db/tables/0010005610_create_role_activities.rb +0 -50
  240. data/db/tables/0010009010_create_feedbacks.rb +0 -56
  241. data/lib/mailer_previews/devise_mailer_preview.rb +0 -49
  242. data/lib/scss/bulma/loader.scss +0 -92
  243. data/lib/scss/cloud-objects/discussion.scss +0 -80
  244. data/lib/scss/cloud-objects/file.scss +0 -138
  245. data/lib/scss/components/keypad.scss +0 -109
  246. data/lib/scss/elements/autocomplete.scss +0 -72
  247. data/lib/scss/elements/card.scss +0 -37
  248. data/lib/scss/elements/empty.scss +0 -43
  249. data/lib/scss/elements/file-uploader.scss +0 -74
  250. data/lib/scss/elements/gallery.scss +0 -98
  251. data/lib/scss/elements/input-tag.scss +0 -73
  252. data/lib/scss/elements/loading.scss +0 -63
  253. data/lib/scss/elements/map.scss +0 -107
  254. data/lib/scss/elements/navbar.scss +0 -115
  255. data/lib/scss/elements/table.scss +0 -118
  256. data/lib/scss/elements/toolbar.scss +0 -66
  257. data/lib/scss/fonts/families.scss +0 -47
  258. data/lib/scss/fonts/mdicons.scss +0 -82
  259. data/lib/scss/fonts/remixicons.scss +0 -2602
  260. data/lib/scss/helpers/display.scss +0 -44
  261. data/lib/scss/helpers/tooltip.scss +0 -91
  262. data/lib/scss/layouts/application-announcements.scss +0 -40
  263. data/lib/scss/layouts/application-component.scss +0 -39
  264. data/lib/scss/layouts/application-engines.scss +0 -125
  265. data/lib/scss/layouts/application-footer.scss +0 -102
  266. data/lib/scss/layouts/application-header.scss +0 -163
  267. data/lib/scss/layouts/application-navbar.scss +0 -62
  268. data/lib/scss/layouts/application-search.scss +0 -71
  269. data/lib/scss/layouts/application-sidebar.scss +0 -219
  270. data/lib/scss/overrides/notification.scss +0 -75
  271. data/lib/scss/overrides/sweetalert.scss +0 -106
  272. data/lib/scss/pages/devise-simple.scss +0 -89
  273. data/lib/scss/pages/devise.scss +0 -179
  274. data/lib/scss/pages/invites.scss +0 -81
  275. data/lib/scss/panels/panel-announcements.scss +0 -56
  276. data/lib/scss/panels/panel-notification.scss +0 -67
  277. data/lib/scss/panels/panel-profile.scss +0 -62
  278. data/lib/scss/panels/panel-support-ticket.scss +0 -56
  279. data/lib/scss/panels/panel-tasks.scss +0 -41
  280. data/lib/scss/settings/variables.scss +0 -148
  281. data/lib/scss/shared/workflow-status-progress.scss +0 -135
  282. data/lib/scss/templates/application.scss +0 -156
  283. data/lib/scss/templates/component.scss +0 -39
  284. data/lib/scss/templates/dashboards.scss +0 -53
  285. data/lib/scss/templates/empty.scss +0 -42
  286. data/lib/scss/templates/pdf.scss +0 -45
  287. data/lib/scss/templates/public.scss +0 -70
  288. data/lib/vue/application.js +0 -283
  289. data/lib/vue/cloudobjects/discussion/content.vue +0 -62
  290. data/lib/vue/cloudobjects/discussion/element.vue +0 -170
  291. data/lib/vue/cloudobjects/discussion/filters.vue +0 -108
  292. data/lib/vue/cloudobjects/discussion/new.vue +0 -134
  293. data/lib/vue/cloudobjects/discussion.vue +0 -99
  294. data/lib/vue/cloudobjects/stores/discussion.js +0 -212
  295. data/lib/vue/layouts/application-announcements.vue +0 -78
  296. data/lib/vue/layouts/application-component.vue +0 -38
  297. data/lib/vue/layouts/application-container.vue +0 -48
  298. data/lib/vue/layouts/application-engines.vue +0 -66
  299. data/lib/vue/layouts/application-footer.vue +0 -123
  300. data/lib/vue/layouts/application-header.vue +0 -231
  301. data/lib/vue/layouts/application-navbar.vue +0 -110
  302. data/lib/vue/layouts/application-search.vue +0 -86
  303. data/lib/vue/layouts/application-sidebar.vue +0 -63
  304. data/lib/vue/pages/errors/app.js +0 -32
  305. data/lib/vue/pages/invites/app.js +0 -76
  306. data/lib/vue/pages/mfas/application.js +0 -77
  307. data/lib/vue/pages/onboarding/application.js +0 -45
  308. data/lib/vue/pages/onboarding/components/address.vue +0 -120
  309. data/lib/vue/pages/onboarding/components/buttons.vue +0 -67
  310. data/lib/vue/pages/onboarding/components/contact.vue +0 -148
  311. data/lib/vue/pages/onboarding/components/date-time.vue +0 -265
  312. data/lib/vue/pages/onboarding/components/finish.vue +0 -62
  313. data/lib/vue/pages/onboarding/components/general-info.vue +0 -93
  314. data/lib/vue/pages/onboarding/components/indicators.vue +0 -78
  315. data/lib/vue/pages/onboarding/components/welcome.vue +0 -66
  316. data/lib/vue/pages/onboarding/show.vue +0 -67
  317. data/lib/vue/pages/onboarding/store.js +0 -165
  318. data/lib/vue/pages/otps/application.js +0 -90
  319. data/lib/vue/pages/passes/application.js +0 -80
  320. data/lib/vue/pages/websites/application.js +0 -34
  321. data/lib/vue/panels/panel-announcements.vue +0 -248
  322. data/lib/vue/panels/panel-bell-notifications.vue +0 -102
  323. data/lib/vue/panels/panel-files.vue +0 -281
  324. data/lib/vue/panels/panel-profile.vue +0 -76
  325. data/lib/vue/panels/panel-support-tickets.vue +0 -161
  326. data/lib/vue/panels/panel-tasks.vue +0 -124
  327. data/lib/vue/panels/stores/bell-notifications.js +0 -46
  328. data/lib/vue/panels/stores/support-tickets.js +0 -103
  329. data/lib/vue/public.js +0 -83
  330. data/lib/vue/refactor/shared/cloudobjects/action.vue +0 -193
  331. data/lib/vue/refactor/shared/cloudobjects/file/grid.vue +0 -215
  332. data/lib/vue/refactor/shared/cloudobjects/file/list.vue +0 -106
  333. data/lib/vue/refactor/shared/cloudobjects/file.vue +0 -145
  334. data/lib/vue/refactor/shared/workflows2/apps/actions/form.vue +0 -232
  335. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/chatroom-form.vue +0 -103
  336. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-clone-form.vue +0 -125
  337. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-file-form.vue +0 -102
  338. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/email-form.vue +0 -190
  339. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/notification-form.vue +0 -124
  340. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/send-cloud-object-file.vue +0 -170
  341. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/task-form.vue +0 -258
  342. data/lib/vue/refactor/shared/workflows2/apps/actions/index.vue +0 -146
  343. data/lib/vue/refactor/shared/workflows2/apps/checks/form.vue +0 -200
  344. data/lib/vue/refactor/shared/workflows2/apps/checks/index.vue +0 -160
  345. data/lib/vue/refactor/shared/workflows2/apps/index.vue +0 -177
  346. data/lib/vue/refactor/shared/workflows2/apps/new.vue +0 -97
  347. data/lib/vue/refactor/shared/workflows2/apps/show.vue +0 -146
  348. data/lib/vue/refactor/shared/workflows2/components/associations.vue +0 -215
  349. data/lib/vue/refactor/shared/workflows2/components/chart.vue +0 -91
  350. data/lib/vue/refactor/shared/workflows2/components/workflow-form.vue +0 -466
  351. data/lib/vue/refactor/shared/workflows2/components/workflow-status-dropdown.vue +0 -129
  352. data/lib/vue/refactor/stores/cloudobjects/action.js +0 -181
  353. data/lib/vue/refactor/stores/cloudobjects/file.js +0 -205
  354. data/lib/vue/refactor/stores/entities/announcements.js +0 -75
  355. data/lib/vue/refactor/stores/entities/dashboard.js +0 -251
  356. data/lib/vue/refactor/stores/entities/workflow.js +0 -185
  357. data/lib/vue/refactor/stores/panels/announcements.js +0 -153
  358. data/lib/vue/refactor/stores/panels/notification.js +0 -114
  359. data/lib/vue/refactor/stores/panels/task.js +0 -66
  360. data/lib/vue/refactor/stores/panels/tickets.js +0 -129
  361. data/lib/vue/refactor/stores/role.js +0 -243
  362. data/lib/vue/refactor/stores/translations.json +0 -60
  363. data/lib/vue/refactor/stores/users.js +0 -98
  364. data/lib/vue/shared/dashboards/apps/edit.vue +0 -215
  365. data/lib/vue/shared/dashboards/apps/index.vue +0 -112
  366. data/lib/vue/shared/dashboards/apps/new.vue +0 -89
  367. data/lib/vue/shared/dashboards/apps/show.vue +0 -88
  368. data/lib/vue/shared/dashboards/components/form.vue +0 -246
  369. data/lib/vue/shared/services/firebase.js +0 -163
  370. data/lib/vue/shared/services/translator.js +0 -87
  371. data/lib/vue/shared/stores/command.js +0 -154
  372. data/lib/vue/shared/stores/dashboard.js +0 -253
  373. data/lib/vue/shared/stores/layout.js +0 -61
  374. data/lib/vue/shared/stores/systemController.js +0 -67
  375. data/lib/vue/shared/stores/users.js +0 -57
  376. data/lib/vue/stores/translations.json +0 -167
  377. data/lib/vue/translation.js +0 -45
  378. data/lib/webpack/base.js +0 -186
  379. data/lib/webpack/core.js +0 -91
  380. data/lib/webpack/engines.js +0 -165
  381. data/lib/webpack/version.js +0 -41
  382. data/vendor/bulma/LICENSE +0 -21
  383. data/vendor/bulma/bulma.sass +0 -10
  384. data/vendor/bulma/css/bulma-rtl.css +0 -11851
  385. data/vendor/bulma/css/bulma-rtl.min.css +0 -1
  386. data/vendor/bulma/css/bulma.css +0 -11851
  387. data/vendor/bulma/css/bulma.min.css +0 -1
  388. data/vendor/bulma/sass/base/_all.sass +0 -6
  389. data/vendor/bulma/sass/base/animations.sass +0 -5
  390. data/vendor/bulma/sass/base/generic.sass +0 -145
  391. data/vendor/bulma/sass/base/helpers.sass +0 -1
  392. data/vendor/bulma/sass/base/minireset.sass +0 -79
  393. data/vendor/bulma/sass/components/_all.sass +0 -15
  394. data/vendor/bulma/sass/components/breadcrumb.sass +0 -77
  395. data/vendor/bulma/sass/components/card.sass +0 -103
  396. data/vendor/bulma/sass/components/dropdown.sass +0 -83
  397. data/vendor/bulma/sass/components/level.sass +0 -79
  398. data/vendor/bulma/sass/components/media.sass +0 -59
  399. data/vendor/bulma/sass/components/menu.sass +0 -59
  400. data/vendor/bulma/sass/components/message.sass +0 -101
  401. data/vendor/bulma/sass/components/modal.sass +0 -117
  402. data/vendor/bulma/sass/components/navbar.sass +0 -446
  403. data/vendor/bulma/sass/components/pagination.sass +0 -167
  404. data/vendor/bulma/sass/components/panel.sass +0 -121
  405. data/vendor/bulma/sass/components/tabs.sass +0 -176
  406. data/vendor/bulma/sass/elements/_all.sass +0 -16
  407. data/vendor/bulma/sass/elements/box.sass +0 -26
  408. data/vendor/bulma/sass/elements/button.sass +0 -357
  409. data/vendor/bulma/sass/elements/container.sass +0 -29
  410. data/vendor/bulma/sass/elements/content.sass +0 -162
  411. data/vendor/bulma/sass/elements/form.sass +0 -1
  412. data/vendor/bulma/sass/elements/icon.sass +0 -46
  413. data/vendor/bulma/sass/elements/image.sass +0 -73
  414. data/vendor/bulma/sass/elements/notification.sass +0 -52
  415. data/vendor/bulma/sass/elements/other.sass +0 -31
  416. data/vendor/bulma/sass/elements/progress.sass +0 -73
  417. data/vendor/bulma/sass/elements/table.sass +0 -134
  418. data/vendor/bulma/sass/elements/tag.sass +0 -140
  419. data/vendor/bulma/sass/elements/title.sass +0 -70
  420. data/vendor/bulma/sass/form/_all.sass +0 -9
  421. data/vendor/bulma/sass/form/checkbox-radio.sass +0 -22
  422. data/vendor/bulma/sass/form/file.sass +0 -184
  423. data/vendor/bulma/sass/form/input-textarea.sass +0 -66
  424. data/vendor/bulma/sass/form/select.sass +0 -88
  425. data/vendor/bulma/sass/form/shared.sass +0 -60
  426. data/vendor/bulma/sass/form/tools.sass +0 -215
  427. data/vendor/bulma/sass/grid/_all.sass +0 -5
  428. data/vendor/bulma/sass/grid/columns.sass +0 -513
  429. data/vendor/bulma/sass/grid/tiles.sass +0 -36
  430. data/vendor/bulma/sass/helpers/_all.sass +0 -12
  431. data/vendor/bulma/sass/helpers/color.sass +0 -39
  432. data/vendor/bulma/sass/helpers/flexbox.sass +0 -35
  433. data/vendor/bulma/sass/helpers/float.sass +0 -10
  434. data/vendor/bulma/sass/helpers/other.sass +0 -14
  435. data/vendor/bulma/sass/helpers/overflow.sass +0 -2
  436. data/vendor/bulma/sass/helpers/position.sass +0 -7
  437. data/vendor/bulma/sass/helpers/spacing.sass +0 -31
  438. data/vendor/bulma/sass/helpers/typography.sass +0 -103
  439. data/vendor/bulma/sass/helpers/visibility.sass +0 -122
  440. data/vendor/bulma/sass/layout/_all.sass +0 -6
  441. data/vendor/bulma/sass/layout/footer.sass +0 -11
  442. data/vendor/bulma/sass/layout/hero.sass +0 -153
  443. data/vendor/bulma/sass/layout/section.sass +0 -17
  444. data/vendor/bulma/sass/utilities/_all.sass +0 -9
  445. data/vendor/bulma/sass/utilities/animations.sass +0 -1
  446. data/vendor/bulma/sass/utilities/controls.sass +0 -49
  447. data/vendor/bulma/sass/utilities/derived-variables.sass +0 -114
  448. data/vendor/bulma/sass/utilities/extends.sass +0 -25
  449. data/vendor/bulma/sass/utilities/functions.sass +0 -135
  450. data/vendor/bulma/sass/utilities/initial-variables.sass +0 -79
  451. data/vendor/bulma/sass/utilities/mixins.sass +0 -303
  452. data/vendor/lesli-css/_index.scss +0 -34
  453. data/vendor/lesli-css/lesli.scss +0 -51
  454. data/vendor/lesli-css/license +0 -28
  455. data/vendor/lesli-css/src/base/fonts.scss +0 -50
  456. data/vendor/lesli-css/src/base/normalize.scss +0 -118
  457. data/vendor/lesli-css/src/components/blockquote.scss +0 -61
  458. data/vendor/lesli-css/src/components/columns.scss +0 -92
  459. data/vendor/lesli-css/src/components/container.scss +0 -47
  460. data/vendor/lesli-css/src/components/navigation.scss +0 -59
  461. data/vendor/lesli-css/src/functions/colors.scss +0 -184
  462. data/vendor/lesli-css/src/helpers/units.scss +0 -44
  463. data/vendor/lesli-css/src/mixins/breakpoint.scss +0 -184
  464. data/vendor/lesli-css/src/mixins/flex.scss +0 -80
  465. data/vendor/lesli-css/src/mixins/scrollbar.scss +0 -46
  466. data/vendor/lesli-css/src/settings/variables.scss +0 -26
  467. data/vendor/lesli-css/tests/base/normalize.spec.scss +0 -125
  468. data/vendor/lesli-css/tests/functions/colors.spec.scss +0 -117
  469. data/vendor/lesli-css/tests/mixins/breakpoint.spec.scss +0 -429
  470. data/vendor/lesli-css/tests/mixins/scrollbar.spec.scss +0 -82
  471. data/vendor/lesli-css/vendor/normalize.scss +0 -351
  472. data/vendor/remixicon/License +0 -201
  473. data/vendor/remixicon/fonts/remixicon.css +0 -2583
  474. /data/{vendor/lesli-css/src/components/grid.scss → app/assets/stylesheets/lesli/application.css} +0 -0
  475. /data/db/migrate/v1/{0010001010_create_lesli_account_details.rb → 0000110210_create_lesli_account_details.rb} +0 -0
  476. /data/db/structure/{00000008_custom_fields.json → 00000300_custom_fields.json} +0 -0
  477. /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: 0ffa986140011977e37c2d47120156888428e22ec478039fce098538ebbdef39
4
- data.tar.gz: deeeb7ece2c81f257e1782a3486b6a813276c6196d589ec1c3ea09b0fa7a0762
3
+ metadata.gz: e263589d96d2eba1edcd75463c595ec8862626c6ca044f418bba462fe681e17f
4
+ data.tar.gz: 255ea3108a0a2c8102f89808aa9fd560becd962e85cdbcd3e938e8e9df50fd84
5
5
  SHA512:
6
- metadata.gz: c010b56cf8ab3646dd642cb27fd576bc1812fd7d44a51b0fd926164cfb55bce70d44174186d6390715f4ea648493dd412758986f673e9324a040647fb24f6c9f
7
- data.tar.gz: 1820e5d2a33d9fc8459535bfe5cae6535f6896aac65d7abe9bf24b33148364835c4610c14d02fb938b5eec7a7fd3dc4bfe95f7e6aaf07006878f014d0349efcc
6
+ metadata.gz: 0f63e07db9f952946a3c78833125b4c432d920ea0c6e5d0800ea93f2104463f31b843c052d47b7b8ae707e93348df7605d43cd4900b5ed0073cda37ed7575e2e
7
+ data.tar.gz: 802ab7f0cccd22808fd648c2f9468b9980db314ada31b4e2972047ea475be6257d63d67c521f0e3cb1533d1b9c73383a23e61bdd3ae515624abd95ef804c5559
@@ -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";
@@ -33,26 +33,28 @@ Building a better future, one line of code at a time.
33
33
  module Lesli
34
34
  class AboutsController < ApplicationLesliController
35
35
 
36
+ # def status
37
+ # respond_with_successful({ :Lesli => "Ruby on Rails SaaS Development Framework." })
38
+ # end
39
+
36
40
  # GET /status
37
41
  def show
38
42
  respond_to do |format|
39
43
  format.html {}
40
44
  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
- }
45
+
46
+ # get installed engines
47
+ @lesli_engines = LesliSystem.engines.map { |engine, engine_info|
48
+ {
49
+ :name => engine_info[:name],
50
+ :code => engine_info[:code],
51
+ :path => engine_info[:path],
52
+ :build => engine_info[:build],
53
+ :version => engine_info[:version],
54
+ :description => engine_info[:description]
53
55
  }
54
- respond_with_successful(@lesli_engines)
55
- end
56
+ }
57
+ respond_with_successful(@lesli_engines)
56
58
  }
57
59
  end
58
60
  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,7 +44,19 @@ 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
59
+
46
60
  # check if param locale was sent by the user
47
61
  unless params[:locale].blank?
48
62
 
@@ -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
@@ -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
@@ -39,9 +39,18 @@ module Lesli
39
39
  # lesli_application_stylesheet_path(:engine) (TODO) -> stylesheet from engine current
40
40
  # lesli_application_stylesheet_path(:cloud_driver) -> stylesheet from engine specific
41
41
  def lesli_application_stylesheet_path(engine = nil)
42
+
43
+ # Stylesheets from specific engine
42
44
  return "#{engine}/templates/application" if engine
43
45
 
44
- "#{lesli_engine(:code)}/application"
46
+ # Get current engine information
47
+ lesli_engine_code = lesli_engine(:code)
48
+
49
+ # Rails main host app stylesheets
50
+ return "application" if lesli_engine_code == "root"
51
+
52
+ # Rails engines stylesheets
53
+ "#{lesli_engine_code}/application"
45
54
  end
46
55
 
47
56
  # Return a string path to load the main engine stylesheet
@@ -57,12 +66,21 @@ module Lesli
57
66
  def lesli_application_javascript_path
58
67
  # get the namespace to load specific javascript file
59
68
  # for engine or specific javascript file for core controller
60
- path_segments = controller_path.split("/")
61
- lesli_engine = path_segments.shift
69
+ # path_segments = controller_path.split("/")
70
+ # lesli_engine = path_segments.shift
62
71
 
63
- return "onboardings/application" if is_lesli_onboarding?
72
+ # return "onboardings/application" if is_lesli_onboarding?
64
73
 
65
- "#{lesli_engine}/application"
74
+
75
+
76
+ # Get current engine information
77
+ lesli_engine_code = lesli_engine(:code)
78
+
79
+ # Rails main host app stylesheets
80
+ return "application" if lesli_engine_code == "root"
81
+
82
+ # Rails engines stylesheets
83
+ "#{lesli_engine_code}/application"
66
84
  end
67
85
 
68
86
  def javascript_googlemaps_sdk
@@ -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,9 +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, { class: "navbar-item"}) do
46
+ navigation_link(path, label, icon, reload:reload)
47
+ end
48
+ end
49
+
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)
45
66
  # default vue router links for single page applications
46
67
  html_element = "router-link"
47
- html_options = { to: path }
68
+ html_options = { to: path, 'active-class': "navigation-link-active" }
48
69
 
49
70
  # if reload is nedeed, we use a standard "a" tag
50
71
  if reload
@@ -52,16 +73,14 @@ module Lesli
52
73
  html_options = { href: path }
53
74
  end
54
75
 
55
- content_tag(:li) do
56
- content_tag(html_element, html_options) do
57
- # print a simple menu item (without icon)
58
- concat content_tag(:span, label, class: "text iconless") unless icon
59
-
60
- # print a full menu item if icon was requested
61
- if icon
62
- concat content_tag("span", nil, class: [icon, "icono"])
63
- concat content_tag(:span, label, class: "text")
64
- end
76
+ content_tag(html_element, html_options) do
77
+ # print a simple menu item (without icon)
78
+ concat content_tag(:span, label, class: "text iconless") unless icon
79
+
80
+ # print a full menu item if icon was requested
81
+ if icon
82
+ concat content_tag(:span, nil, class: icon)
83
+ concat content_tag(:span, label, class: "text")
65
84
  end
66
85
  end
67
86
  end
@@ -90,8 +109,8 @@ module Lesli
90
109
 
91
110
  # 02.05 Mailer engine
92
111
  def navigation_engine_mailer(title: "Mailer", subtitle: "Email automation system")
93
- return unless defined? CloudMailer
94
- 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"))
95
114
  end
96
115
 
97
116
  # 02.08 Proposal engine
@@ -156,6 +175,12 @@ module Lesli
156
175
  navigation_engine_item(title,subtitle,"storage",cloud_storage.root_path,controller_path.include?("cloud_storage"))
157
176
  end
158
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
+
159
184
  # FINANCE
160
185
 
161
186
  # 04.01 Books engine
@@ -213,9 +238,7 @@ module Lesli
213
238
  # 07.02 Help engine
214
239
  def navigation_engine_support(title: "Support", subtitle: "Support Ticket System")
215
240
  return unless defined? LesliSupport
216
-
217
- navigation_engine_item(title, subtitle, "support", lesli_support.root_path,
218
- controller_path.include?("lesli_support"))
241
+ navigation_engine_item(title, subtitle, "support", lesli_support.root_path, controller_path.include?("lesli_support"))
219
242
  end
220
243
 
221
244
  # 07.03 Portal engine
@@ -237,13 +260,13 @@ module Lesli
237
260
  # SECURITY & PRIVACY
238
261
 
239
262
  # 08.01 Shield engine
240
- def navigation_engine_shield(title: "Shield", subtitle: "Authentication & Authorization.")
263
+ def navigation_engine_shield(title: "Shield", subtitle: "Authentication & Authorization")
241
264
  return unless defined? LesliShield
242
265
  navigation_engine_item(title, subtitle, "shield", lesli_shield.root_path, controller_path.include?("lesli_shield"))
243
266
  end
244
267
 
245
268
  # 08.02 Security engine
246
- def navigation_engine_security(title: "Security", subtitle: "Users, Privileges & Access Management.")
269
+ def navigation_engine_security(title: "Security", subtitle: "Users Authorization Management.")
247
270
  return unless defined? LesliSecurity
248
271
  navigation_engine_item(title, subtitle, "security", lesli_security.root_path, controller_path.include?("lesli_security"))
249
272
  end
@@ -252,7 +275,7 @@ module Lesli
252
275
  # INTEGRATIONS
253
276
 
254
277
  # 09.01 Babel engine
255
- def navigation_engine_babel(title: "Babel", subtitle: "Translations")
278
+ def navigation_engine_babel(title: "Babel", subtitle: "Translation Management System")
256
279
  return unless defined? LesliBabel
257
280
 
258
281
  navigation_engine_item(title, subtitle, "babel", lesli_babel.root_path,
@@ -302,7 +325,7 @@ module Lesli
302
325
  return nil if modules_hidden.include?(path)
303
326
 
304
327
  # render module navigation item :)
305
- 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
306
329
  lesli_svg("engine-#{icon}") << content_tag(:div) do
307
330
  content_tag(:span, title) << content_tag(:p, subtitle)
308
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