lesli 5.0.13 → 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 (469) 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 +16 -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/apps/show.html.erb +52 -0
  48. data/app/views/lesli/layouts/application-devise.html.erb +5 -7
  49. data/app/views/lesli/layouts/application-lesli.html.erb +18 -24
  50. data/app/views/lesli/partials/_application-analytics.html.erb +2 -2
  51. data/app/views/lesli/partials/_application-data.html.erb +3 -77
  52. data/app/views/lesli/partials/_application-head.html.erb +7 -4
  53. data/app/views/lesli/partials/_application-lesli-annoouncements.html.erb +49 -0
  54. data/app/views/lesli/partials/_application-lesli-header.html.erb +73 -49
  55. data/app/views/lesli/partials/_application-lesli-javascript.html.erb +3 -16
  56. data/app/views/lesli/partials/_application-lesli-navigation.html.erb +12 -9
  57. data/app/views/lesli/partials/{_application-lesli-notices.html.erb → _application-lesli-notifications.html.erb} +10 -8
  58. data/app/views/lesli/partials/_application-lesli-scss.html.erb +1 -1
  59. data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +1 -1
  60. data/app/views/lesli/partials/_application-public-javascript.html.erb +1 -4
  61. data/app/views/lesli/shared/dashboards/_show.html.erb +63 -0
  62. data/app/views/lesli/wrappers/_application-devise.html.erb +4 -6
  63. data/config/importmap.rb +14 -0
  64. data/config/initializers/lesli.rb +20 -12
  65. data/config/initializers/lesli_migration_helpers.rb +61 -0
  66. data/config/locales/translations.en.yml +1 -26
  67. data/config/locales/translations.es.yml +1 -26
  68. data/config/locales/translations.fr.yml +1 -26
  69. data/config/locales/translations.it.yml +1 -26
  70. data/config/locales/translations.pt.yml +1 -26
  71. data/config/routes.rb +3 -1
  72. data/db/migrate/v1/{0010000110_create_lesli_accounts.rb → 0000000110_create_lesli_accounts.rb} +13 -12
  73. data/db/migrate/v1/0000000210_create_lesli_roles.rb +65 -0
  74. data/db/migrate/v1/0000000310_create_lesli_users.rb +99 -0
  75. data/db/migrate/v1/{0010000610_create_lesli_system_controllers.rb → 0000100110_create_lesli_system_controllers.rb} +3 -3
  76. data/db/migrate/v1/{0010000710_create_lesli_system_controller_actions.rb → 0000100210_create_lesli_system_controller_actions.rb} +3 -4
  77. data/{lib/scss/layouts/application-content.scss → db/migrate/v1/0000110310_create_lesli_account_settings.rb} +8 -6
  78. data/{app/models/lesli/user/agent.rb → db/migrate/v1/0000110410_create_lesli_account_activities.rb} +3 -3
  79. data/db/migrate/v1/0000120210_create_lesli_role_actions.rb +45 -0
  80. data/db/migrate/v1/{0010001410_create_lesli_account_logs.rb → 0000120310_create_lesli_role_privileges.rb} +8 -8
  81. data/db/{tables/0010003810_create_user_shortcuts.rb → migrate/v1/0000130210_create_lesli_user_roles.rb} +9 -12
  82. data/db/migrate/v1/0000130310_create_lesli_user_sessions.rb +56 -0
  83. data/db/{seed/production.rb → migrate/v1/0000130410_create_lesli_user_activities.rb} +7 -4
  84. data/db/{tables/0010001110_create_account_locations.rb → migrate2/0000100510_create_lesli_account_locations.rb} +6 -6
  85. data/db/{tables/0010001510_create_account_currencies.rb → migrate2/0000100610_create_lesli_account_currencies.rb} +4 -4
  86. data/db/seed/{development/accounts.rb → accounts.rb} +6 -2
  87. data/db/seed/{production/users.rb → users.rb} +4 -10
  88. data/db/seed/{tools.rb → xyz.rb} +2 -7
  89. data/db/seeds.rb +3 -2
  90. data/db/structure/00000020_catalogs.json +0 -0
  91. data/lib/generators/{application_lesli_generator.rb → application_lesli_generator_base.rb} +4 -4
  92. data/lib/generators/lesli/spec/spec_generator.rb +2 -2
  93. data/lib/generators/lesli/view/USAGE +8 -0
  94. data/lib/generators/lesli/view/templates/spec-factory.template +17 -0
  95. data/lib/generators/lesli/view/templates/spec-model.template +70 -0
  96. data/lib/generators/lesli/view/view_generator.rb +25 -0
  97. data/lib/lesli/configuration.rb +7 -10
  98. data/lib/lesli/engine.rb +22 -3
  99. data/lib/lesli/r_spec.rb +5 -2
  100. data/lib/lesli/routing.rb +42 -9
  101. data/lib/lesli/version.rb +2 -2
  102. data/lib/lesli.rb +11 -0
  103. data/lib/migrate/common.rb +94 -0
  104. data/lib/migrate/items/action_structure.rb +51 -0
  105. data/{db/migrate/v1/0010001210_create_lesli_account_activities.rb → lib/migrate/items/activity_structure.rb} +18 -16
  106. data/lib/migrate/items/attachment_structure.rb +62 -0
  107. data/{app/views/lesli/partials/_application-lesli-engines.html.erb → lib/migrate/items/discussion_structure.rb} +19 -27
  108. data/lib/migrate/items/subscriber_structure.rb +49 -0
  109. data/lib/migrate/items/version_structure.rb +53 -0
  110. data/lib/migrate/shared/account_structure.rb +21 -0
  111. data/lib/migrate/shared/catalog_structure.rb +30 -0
  112. data/lib/migrate/shared/dashboard_structure.rb +54 -0
  113. data/lib/migrate/shared/setting_structure.rb +20 -0
  114. data/lib/rspec/config/spec_coverage.rb +95 -0
  115. data/{db/migrate/v1/0010001110_create_lesli_account_settings.rb → lib/rspec/factories/lesli_account.rb} +10 -7
  116. data/{db/seed/development.rb → lib/rspec/factories/lesli_role.rb} +30 -3
  117. data/{db/seed/test.rb → lib/rspec/factories/lesli_user.rb} +32 -3
  118. data/lib/rspec/fixtures/files/lesli-icon.png +0 -0
  119. data/lib/rspec/fixtures/files/test_file_1.docx +0 -0
  120. data/{db/tables/0010001610_create_account_currency_exchange_rates.rb → lib/rspec/helpers/lesli_helper.rb} +21 -21
  121. data/lib/rspec/helpers/rails_helper.rb +134 -0
  122. data/lib/rspec/helpers/response_request_helper.rb +214 -0
  123. data/lib/rspec/helpers/response_service_helper.rb +66 -0
  124. data/lib/rspec/helpers/spec_helper.rb +99 -0
  125. data/lib/rspec/lesli_api_tester.rb +133 -0
  126. data/lib/rspec/lesli_service_tester.rb +46 -0
  127. data/{db/tables/0010001410_create_account_files.rb → lib/rspec/testers/controller.rb} +31 -20
  128. data/lib/rspec/testers/model.rb +36 -0
  129. data/lib/rspec/testers/request.rb +84 -0
  130. data/lib/tasks/lesli/db.rake +5 -3
  131. data/lib/tasks/lesli/git.rake +28 -32
  132. data/lib/tasks/lesli/github.rake +89 -0
  133. data/lib/tasks/lesli_tasks.rake +3 -3
  134. data/readme.md +28 -17
  135. metadata +134 -394
  136. data/app/assets/fonts/lesli/Domine/Domine-Variable.ttf +0 -0
  137. data/app/assets/fonts/lesli/Domine/OFL.txt +0 -97
  138. data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
  139. data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
  140. data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
  141. data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
  142. data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +0 -1
  143. data/app/assets/fonts/lesli/Remix/remixicon.svg +0 -7633
  144. data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +0 -11
  145. data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
  146. data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
  147. data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
  148. data/app/assets/fonts/lesli/Roboto/LICENSE.txt +0 -202
  149. data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
  150. data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
  151. data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
  152. data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
  153. data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
  154. data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
  155. data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
  156. data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
  157. data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
  158. data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
  159. data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
  160. data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
  161. data/app/assets/icons/lesli/engine-admin.svg +0 -1
  162. data/app/assets/icons/lesli/engine-audit.svg +0 -1
  163. data/app/assets/icons/lesli/engine-babel.svg +0 -1
  164. data/app/assets/icons/lesli/engine-bell.svg +0 -1
  165. data/app/assets/icons/lesli/engine-books.svg +0 -1
  166. data/app/assets/icons/lesli/engine-calendar.svg +0 -1
  167. data/app/assets/icons/lesli/engine-dashboard.svg +0 -1
  168. data/app/assets/icons/lesli/engine-dispatcher.svg +0 -1
  169. data/app/assets/icons/lesli/engine-focus.svg +0 -1
  170. data/app/assets/icons/lesli/engine-kb.svg +0 -1
  171. data/app/assets/icons/lesli/engine-leaf.svg +0 -1
  172. data/app/assets/icons/lesli/engine-lesli.svg +0 -1
  173. data/app/assets/icons/lesli/engine-letter.svg +0 -1
  174. data/app/assets/icons/lesli/engine-mailer.svg +0 -1
  175. data/app/assets/icons/lesli/engine-one.svg +0 -1
  176. data/app/assets/icons/lesli/engine-profile.svg +0 -1
  177. data/app/assets/icons/lesli/engine-proposal.svg +0 -1
  178. data/app/assets/icons/lesli/engine-scraper.svg +0 -1
  179. data/app/assets/icons/lesli/engine-security.svg +0 -1
  180. data/app/assets/icons/lesli/engine-shared.svg +0 -1
  181. data/app/assets/icons/lesli/engine-shield.svg +0 -1
  182. data/app/assets/icons/lesli/engine-storage.svg +0 -1
  183. data/app/assets/icons/lesli/engine-support.svg +0 -1
  184. data/app/assets/icons/lesli/engine-talk.svg +0 -1
  185. data/app/assets/icons/lesli/engine-team.svg +0 -1
  186. data/app/assets/icons/lesli/engine-time.svg +0 -1
  187. data/app/assets/icons/lesli/locale-en.svg +0 -1
  188. data/app/assets/icons/lesli/locale-es.svg +0 -1
  189. data/app/assets/icons/lesli/locale-fr.svg +0 -1
  190. data/app/assets/icons/lesli/locale-it.svg +0 -1
  191. data/app/assets/icons/lesli/locale-pt.svg +0 -1
  192. data/app/assets/icons/readme.md +0 -10
  193. data/app/assets/javascripts/lesli/templates/application.js +0 -14
  194. data/app/assets/javascripts/lesli/templates/public.js +0 -14
  195. data/app/assets/stylesheets/lesli/templates/application.css +0 -2918
  196. data/app/assets/stylesheets/lesli/templates/public.css +0 -1
  197. data/app/controllers/lesli/interfaces/application/authorization.rb +0 -107
  198. data/app/controllers/lesli/interfaces/application/customization.rb +0 -46
  199. data/app/controllers/lesli/interfaces/application/logger.rb +0 -134
  200. data/app/controllers/lesli/interfaces/application/requester.rb +0 -84
  201. data/app/controllers/lesli/interfaces/application/responder.rb +0 -132
  202. data/app/controllers/lesli/interfaces/controllers/actions.rb +0 -250
  203. data/app/controllers/lesli/interfaces/controllers/activities.rb +0 -215
  204. data/app/controllers/lesli/interfaces/controllers/discussions.rb +0 -270
  205. data/app/controllers/lesli/interfaces/controllers/files.rb +0 -467
  206. data/app/controllers/lesli/interfaces/controllers/subscribers.rb +0 -234
  207. data/app/lib/lesli/system.rb +0 -110
  208. data/app/models/lesli/cloud_object/action.rb +0 -70
  209. data/app/models/lesli/cloud_object/activity.rb +0 -311
  210. data/app/models/lesli/cloud_object/custom_field.rb +0 -158
  211. data/app/models/lesli/cloud_object/discussion.rb +0 -219
  212. data/app/models/lesli/cloud_object/subscriber.rb +0 -186
  213. data/app/operators/lesli/descriptor_privilege_operator.rb +0 -75
  214. data/app/views/lesli/emails/devise_mailer/confirmation_instructions.html.erb +0 -23
  215. data/app/views/lesli/emails/devise_mailer/reset_password_instructions.html.erb +0 -23
  216. data/app/views/lesli/partials/_application-lesli-icons.html.erb +0 -1
  217. data/config/initializers/devise.rb +0 -336
  218. data/db/seed/development/users.rb +0 -52
  219. data/db/seed/production/accounts.rb +0 -50
  220. data/db/structure/00000000_people.json +0 -34
  221. data/db/structure/00000003_actions.json +0 -14
  222. data/db/structure/00000004_activities.json +0 -20
  223. data/db/structure/00000005_discussions.json +0 -8
  224. data/db/structure/00000006_files.json +0 -32
  225. data/db/structure/00000007_subscribers.json +0 -11
  226. data/db/structure/00000501_dashboards.json +0 -14
  227. data/db/structure/00000502_dashboard_components.json +0 -23
  228. data/db/tables/0010003410_create_user_activities.rb +0 -51
  229. data/db/tables/0010003710_create_user_codes.rb +0 -43
  230. data/db/tables/0010004110_create_user_tokens.rb +0 -45
  231. data/db/tables/0010005610_create_role_activities.rb +0 -50
  232. data/db/tables/0010009010_create_feedbacks.rb +0 -56
  233. data/lib/mailer_previews/devise_mailer_preview.rb +0 -49
  234. data/lib/scss/cloud-objects/discussion.scss +0 -80
  235. data/lib/scss/cloud-objects/file.scss +0 -138
  236. data/lib/scss/components/keypad.scss +0 -109
  237. data/lib/scss/elements/autocomplete.scss +0 -72
  238. data/lib/scss/elements/card.scss +0 -37
  239. data/lib/scss/elements/empty.scss +0 -43
  240. data/lib/scss/elements/file-uploader.scss +0 -74
  241. data/lib/scss/elements/gallery.scss +0 -98
  242. data/lib/scss/elements/input-tag.scss +0 -73
  243. data/lib/scss/elements/loading.scss +0 -63
  244. data/lib/scss/elements/map.scss +0 -107
  245. data/lib/scss/elements/navbar.scss +0 -115
  246. data/lib/scss/elements/table.scss +0 -118
  247. data/lib/scss/elements/toolbar.scss +0 -66
  248. data/lib/scss/fonts/families.scss +0 -47
  249. data/lib/scss/fonts/mdicons.scss +0 -82
  250. data/lib/scss/fonts/remixicons.scss +0 -2602
  251. data/lib/scss/helpers/display.scss +0 -44
  252. data/lib/scss/helpers/tooltip.scss +0 -91
  253. data/lib/scss/layouts/application-announcements.scss +0 -40
  254. data/lib/scss/layouts/application-component.scss +0 -39
  255. data/lib/scss/layouts/application-engines.scss +0 -125
  256. data/lib/scss/layouts/application-footer.scss +0 -102
  257. data/lib/scss/layouts/application-header.scss +0 -91
  258. data/lib/scss/layouts/application-navigation.scss +0 -79
  259. data/lib/scss/layouts/application-search.scss +0 -71
  260. data/lib/scss/layouts/application-sidebar.scss +0 -219
  261. data/lib/scss/overrides/notification.scss +0 -75
  262. data/lib/scss/overrides/sweetalert.scss +0 -106
  263. data/lib/scss/pages/devise-simple.scss +0 -89
  264. data/lib/scss/pages/devise.scss +0 -179
  265. data/lib/scss/pages/invites.scss +0 -81
  266. data/lib/scss/panels/panel-announcements.scss +0 -56
  267. data/lib/scss/panels/panel-notification.scss +0 -67
  268. data/lib/scss/panels/panel-profile.scss +0 -62
  269. data/lib/scss/panels/panel-support-ticket.scss +0 -56
  270. data/lib/scss/panels/panel-tasks.scss +0 -41
  271. data/lib/scss/settings/variables.scss +0 -148
  272. data/lib/scss/shared/workflow-status-progress.scss +0 -135
  273. data/lib/scss/templates/application.scss +0 -127
  274. data/lib/scss/templates/component.scss +0 -39
  275. data/lib/scss/templates/dashboards.scss +0 -53
  276. data/lib/scss/templates/empty.scss +0 -42
  277. data/lib/scss/templates/pdf.scss +0 -45
  278. data/lib/scss/templates/public.scss +0 -72
  279. data/lib/vue/application.js +0 -285
  280. data/lib/vue/cloudobjects/discussion/content.vue +0 -62
  281. data/lib/vue/cloudobjects/discussion/element.vue +0 -170
  282. data/lib/vue/cloudobjects/discussion/filters.vue +0 -108
  283. data/lib/vue/cloudobjects/discussion/new.vue +0 -134
  284. data/lib/vue/cloudobjects/discussion.vue +0 -99
  285. data/lib/vue/cloudobjects/stores/discussion.js +0 -212
  286. data/lib/vue/layouts/application-announcements.vue +0 -78
  287. data/lib/vue/layouts/application-component.vue +0 -38
  288. data/lib/vue/layouts/application-container.vue +0 -48
  289. data/lib/vue/layouts/application-engines.vue +0 -66
  290. data/lib/vue/layouts/application-footer.vue +0 -123
  291. data/lib/vue/layouts/application-header.vue +0 -252
  292. data/lib/vue/layouts/application-navbar.vue +0 -110
  293. data/lib/vue/layouts/application-search.vue +0 -86
  294. data/lib/vue/layouts/application-sidebar.vue +0 -63
  295. data/lib/vue/pages/errors/app.js +0 -32
  296. data/lib/vue/pages/invites/app.js +0 -76
  297. data/lib/vue/pages/mfas/application.js +0 -77
  298. data/lib/vue/pages/onboarding/application.js +0 -45
  299. data/lib/vue/pages/onboarding/components/address.vue +0 -120
  300. data/lib/vue/pages/onboarding/components/buttons.vue +0 -67
  301. data/lib/vue/pages/onboarding/components/contact.vue +0 -148
  302. data/lib/vue/pages/onboarding/components/date-time.vue +0 -265
  303. data/lib/vue/pages/onboarding/components/finish.vue +0 -62
  304. data/lib/vue/pages/onboarding/components/general-info.vue +0 -93
  305. data/lib/vue/pages/onboarding/components/indicators.vue +0 -78
  306. data/lib/vue/pages/onboarding/components/welcome.vue +0 -66
  307. data/lib/vue/pages/onboarding/show.vue +0 -67
  308. data/lib/vue/pages/onboarding/store.js +0 -165
  309. data/lib/vue/pages/otps/application.js +0 -90
  310. data/lib/vue/pages/passes/application.js +0 -80
  311. data/lib/vue/pages/websites/application.js +0 -34
  312. data/lib/vue/panels/panel-announcements.vue +0 -248
  313. data/lib/vue/panels/panel-bell-notifications.vue +0 -102
  314. data/lib/vue/panels/panel-files.vue +0 -281
  315. data/lib/vue/panels/panel-profile.vue +0 -76
  316. data/lib/vue/panels/panel-support-tickets.vue +0 -163
  317. data/lib/vue/panels/panel-tasks.vue +0 -124
  318. data/lib/vue/panels/stores/bell-notifications.js +0 -46
  319. data/lib/vue/panels/stores/support-tickets.js +0 -103
  320. data/lib/vue/public.js +0 -83
  321. data/lib/vue/refactor/shared/cloudobjects/action.vue +0 -193
  322. data/lib/vue/refactor/shared/cloudobjects/file/grid.vue +0 -215
  323. data/lib/vue/refactor/shared/cloudobjects/file/list.vue +0 -106
  324. data/lib/vue/refactor/shared/cloudobjects/file.vue +0 -145
  325. data/lib/vue/refactor/shared/workflows2/apps/actions/form.vue +0 -232
  326. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/chatroom-form.vue +0 -103
  327. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-clone-form.vue +0 -125
  328. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-file-form.vue +0 -102
  329. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/email-form.vue +0 -190
  330. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/notification-form.vue +0 -124
  331. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/send-cloud-object-file.vue +0 -170
  332. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/task-form.vue +0 -258
  333. data/lib/vue/refactor/shared/workflows2/apps/actions/index.vue +0 -146
  334. data/lib/vue/refactor/shared/workflows2/apps/checks/form.vue +0 -200
  335. data/lib/vue/refactor/shared/workflows2/apps/checks/index.vue +0 -160
  336. data/lib/vue/refactor/shared/workflows2/apps/index.vue +0 -177
  337. data/lib/vue/refactor/shared/workflows2/apps/new.vue +0 -97
  338. data/lib/vue/refactor/shared/workflows2/apps/show.vue +0 -146
  339. data/lib/vue/refactor/shared/workflows2/components/associations.vue +0 -215
  340. data/lib/vue/refactor/shared/workflows2/components/chart.vue +0 -91
  341. data/lib/vue/refactor/shared/workflows2/components/workflow-form.vue +0 -466
  342. data/lib/vue/refactor/shared/workflows2/components/workflow-status-dropdown.vue +0 -129
  343. data/lib/vue/refactor/stores/cloudobjects/action.js +0 -181
  344. data/lib/vue/refactor/stores/cloudobjects/file.js +0 -205
  345. data/lib/vue/refactor/stores/entities/announcements.js +0 -75
  346. data/lib/vue/refactor/stores/entities/dashboard.js +0 -251
  347. data/lib/vue/refactor/stores/entities/workflow.js +0 -185
  348. data/lib/vue/refactor/stores/panels/announcements.js +0 -153
  349. data/lib/vue/refactor/stores/panels/notification.js +0 -114
  350. data/lib/vue/refactor/stores/panels/task.js +0 -66
  351. data/lib/vue/refactor/stores/panels/tickets.js +0 -129
  352. data/lib/vue/refactor/stores/role.js +0 -243
  353. data/lib/vue/refactor/stores/translations.json +0 -60
  354. data/lib/vue/refactor/stores/users.js +0 -98
  355. data/lib/vue/shared/dashboards/apps/edit.vue +0 -215
  356. data/lib/vue/shared/dashboards/apps/index.vue +0 -112
  357. data/lib/vue/shared/dashboards/apps/new.vue +0 -89
  358. data/lib/vue/shared/dashboards/apps/show.vue +0 -88
  359. data/lib/vue/shared/dashboards/components/form.vue +0 -246
  360. data/lib/vue/shared/services/firebase.js +0 -163
  361. data/lib/vue/shared/services/translator.js +0 -87
  362. data/lib/vue/shared/stores/command.js +0 -154
  363. data/lib/vue/shared/stores/dashboard.js +0 -253
  364. data/lib/vue/shared/stores/layout.js +0 -61
  365. data/lib/vue/shared/stores/systemController.js +0 -67
  366. data/lib/vue/shared/stores/users.js +0 -57
  367. data/lib/vue/stores/translations.json +0 -177
  368. data/lib/vue/translation.js +0 -45
  369. data/lib/webpack/base.js +0 -191
  370. data/lib/webpack/core.js +0 -93
  371. data/lib/webpack/engines.js +0 -167
  372. data/lib/webpack/root.js +0 -105
  373. data/lib/webpack/version.js +0 -78
  374. data/vendor/bulma/LICENSE +0 -21
  375. data/vendor/bulma/bulma.sass +0 -10
  376. data/vendor/bulma/css/bulma-rtl.css +0 -11851
  377. data/vendor/bulma/css/bulma-rtl.min.css +0 -1
  378. data/vendor/bulma/css/bulma.css +0 -11851
  379. data/vendor/bulma/css/bulma.min.css +0 -1
  380. data/vendor/bulma/sass/base/_all.sass +0 -6
  381. data/vendor/bulma/sass/base/animations.sass +0 -5
  382. data/vendor/bulma/sass/base/generic.sass +0 -145
  383. data/vendor/bulma/sass/base/helpers.sass +0 -1
  384. data/vendor/bulma/sass/base/minireset.sass +0 -79
  385. data/vendor/bulma/sass/components/_all.sass +0 -15
  386. data/vendor/bulma/sass/components/breadcrumb.sass +0 -77
  387. data/vendor/bulma/sass/components/card.sass +0 -103
  388. data/vendor/bulma/sass/components/dropdown.sass +0 -83
  389. data/vendor/bulma/sass/components/level.sass +0 -79
  390. data/vendor/bulma/sass/components/media.sass +0 -59
  391. data/vendor/bulma/sass/components/menu.sass +0 -59
  392. data/vendor/bulma/sass/components/message.sass +0 -101
  393. data/vendor/bulma/sass/components/modal.sass +0 -117
  394. data/vendor/bulma/sass/components/navbar.sass +0 -446
  395. data/vendor/bulma/sass/components/pagination.sass +0 -167
  396. data/vendor/bulma/sass/components/panel.sass +0 -121
  397. data/vendor/bulma/sass/components/tabs.sass +0 -176
  398. data/vendor/bulma/sass/elements/_all.sass +0 -16
  399. data/vendor/bulma/sass/elements/box.sass +0 -26
  400. data/vendor/bulma/sass/elements/button.sass +0 -357
  401. data/vendor/bulma/sass/elements/container.sass +0 -29
  402. data/vendor/bulma/sass/elements/content.sass +0 -162
  403. data/vendor/bulma/sass/elements/form.sass +0 -1
  404. data/vendor/bulma/sass/elements/icon.sass +0 -46
  405. data/vendor/bulma/sass/elements/image.sass +0 -73
  406. data/vendor/bulma/sass/elements/notification.sass +0 -52
  407. data/vendor/bulma/sass/elements/other.sass +0 -31
  408. data/vendor/bulma/sass/elements/progress.sass +0 -73
  409. data/vendor/bulma/sass/elements/table.sass +0 -134
  410. data/vendor/bulma/sass/elements/tag.sass +0 -140
  411. data/vendor/bulma/sass/elements/title.sass +0 -70
  412. data/vendor/bulma/sass/form/_all.sass +0 -9
  413. data/vendor/bulma/sass/form/checkbox-radio.sass +0 -22
  414. data/vendor/bulma/sass/form/file.sass +0 -184
  415. data/vendor/bulma/sass/form/input-textarea.sass +0 -66
  416. data/vendor/bulma/sass/form/select.sass +0 -88
  417. data/vendor/bulma/sass/form/shared.sass +0 -60
  418. data/vendor/bulma/sass/form/tools.sass +0 -215
  419. data/vendor/bulma/sass/grid/_all.sass +0 -5
  420. data/vendor/bulma/sass/grid/columns.sass +0 -513
  421. data/vendor/bulma/sass/grid/tiles.sass +0 -36
  422. data/vendor/bulma/sass/helpers/_all.sass +0 -12
  423. data/vendor/bulma/sass/helpers/color.sass +0 -39
  424. data/vendor/bulma/sass/helpers/flexbox.sass +0 -35
  425. data/vendor/bulma/sass/helpers/float.sass +0 -10
  426. data/vendor/bulma/sass/helpers/other.sass +0 -14
  427. data/vendor/bulma/sass/helpers/overflow.sass +0 -2
  428. data/vendor/bulma/sass/helpers/position.sass +0 -7
  429. data/vendor/bulma/sass/helpers/spacing.sass +0 -31
  430. data/vendor/bulma/sass/helpers/typography.sass +0 -103
  431. data/vendor/bulma/sass/helpers/visibility.sass +0 -122
  432. data/vendor/bulma/sass/layout/_all.sass +0 -6
  433. data/vendor/bulma/sass/layout/footer.sass +0 -11
  434. data/vendor/bulma/sass/layout/hero.sass +0 -153
  435. data/vendor/bulma/sass/layout/section.sass +0 -17
  436. data/vendor/bulma/sass/utilities/_all.sass +0 -9
  437. data/vendor/bulma/sass/utilities/animations.sass +0 -1
  438. data/vendor/bulma/sass/utilities/controls.sass +0 -49
  439. data/vendor/bulma/sass/utilities/derived-variables.sass +0 -114
  440. data/vendor/bulma/sass/utilities/extends.sass +0 -25
  441. data/vendor/bulma/sass/utilities/functions.sass +0 -135
  442. data/vendor/bulma/sass/utilities/initial-variables.sass +0 -79
  443. data/vendor/bulma/sass/utilities/mixins.sass +0 -303
  444. data/vendor/lesli-css/_index.scss +0 -34
  445. data/vendor/lesli-css/lesli.scss +0 -51
  446. data/vendor/lesli-css/license +0 -28
  447. data/vendor/lesli-css/src/base/fonts.scss +0 -50
  448. data/vendor/lesli-css/src/base/normalize.scss +0 -118
  449. data/vendor/lesli-css/src/components/blockquote.scss +0 -61
  450. data/vendor/lesli-css/src/components/columns.scss +0 -92
  451. data/vendor/lesli-css/src/components/container.scss +0 -47
  452. data/vendor/lesli-css/src/components/navigation.scss +0 -59
  453. data/vendor/lesli-css/src/functions/colors.scss +0 -184
  454. data/vendor/lesli-css/src/helpers/units.scss +0 -44
  455. data/vendor/lesli-css/src/mixins/breakpoint.scss +0 -184
  456. data/vendor/lesli-css/src/mixins/flex.scss +0 -80
  457. data/vendor/lesli-css/src/mixins/scrollbar.scss +0 -46
  458. data/vendor/lesli-css/src/settings/variables.scss +0 -26
  459. data/vendor/lesli-css/tests/base/normalize.spec.scss +0 -125
  460. data/vendor/lesli-css/tests/functions/colors.spec.scss +0 -117
  461. data/vendor/lesli-css/tests/mixins/breakpoint.spec.scss +0 -429
  462. data/vendor/lesli-css/tests/mixins/scrollbar.spec.scss +0 -82
  463. data/vendor/lesli-css/vendor/normalize.scss +0 -351
  464. data/vendor/remixicon/License +0 -201
  465. data/vendor/remixicon/fonts/remixicon.css +0 -2583
  466. /data/{vendor/lesli-css/src/components/grid.scss → app/assets/stylesheets/lesli/application.css} +0 -0
  467. /data/db/migrate/v1/{0010001010_create_lesli_account_details.rb → 0000110210_create_lesli_account_details.rb} +0 -0
  468. /data/db/structure/{00000008_custom_fields.json → 00000300_custom_fields.json} +0 -0
  469. /data/lib/assets/javascripts/lesli/{i18n.js → i18n_js} +0 -0
@@ -31,8 +31,6 @@ Building a better future, one line of code at a time.
31
31
  =end
32
32
 
33
33
 
34
- L2.msg "Loading production users:"
35
-
36
34
 
37
35
  # get the account information
38
36
  account = Lesli::Account.first
@@ -54,7 +52,7 @@ passadmin = Devise.friendly_token(40)
54
52
  passguest = Devise.friendly_token(40)
55
53
 
56
54
 
57
- if Lesli.config.demo
55
+ if Rails.env.development? || Rails.env.test? || Lesli.config.demo
58
56
  passowner = Lesli.config.security.dig(:password)
59
57
  passadmin = passowner
60
58
  passguest = passowner
@@ -62,13 +60,9 @@ end
62
60
 
63
61
 
64
62
  # create the owner user for the account,
65
- userowner = create_development_user(emailowner, "owner", "Owner", account[:company_name], password:passowner)
66
- useradmin = create_development_user(emailadmin, "admin", "Admin", account[:company_name], password:passadmin)
67
- userguest = create_development_user(emailguest, "limited", "Guest", account[:company_name], password:passguest)
68
-
69
-
70
- # print some separators so will be easy to find these messages later
71
- L2.br(5); L2.br; L2.line; L2.line; L2.line; L2.line;
63
+ userowner = create_account_user(emailowner, "owner", "Owner", account[:company_name], passowner)
64
+ useradmin = create_account_user(emailadmin, "admin", "Admin", account[:company_name], passadmin)
65
+ userguest = create_account_user(emailguest, "limited", "Guest", account[:company_name], passguest)
72
66
 
73
67
 
74
68
  # print the owner user credentials, so we can save those credentials
@@ -30,12 +30,7 @@ Building a better future, one line of code at a time.
30
30
  // ·
31
31
  =end
32
32
 
33
- def create_development_user email, rolename, firstname, lastname, password:nil
34
-
35
- # get password
36
- if password.blank?
37
- password = Lesli.config.security.dig(:password)
38
- end
33
+ def create_account_user email, rolename, firstname, lastname, password
39
34
 
40
35
  account = Lesli::Account.find_by(email: Lesli.config.company.dig(:email))
41
36
 
@@ -52,7 +47,7 @@ def create_development_user email, rolename, firstname, lastname, password:nil
52
47
  user.last_name = lastname
53
48
  user.save!
54
49
 
55
- user.powers.create!({ role: Lesli::Role.find_by(:name => rolename) })
50
+ user.roles.create!({ role: Lesli::Role.find_by(:name => rolename) })
56
51
 
57
52
  user
58
53
  end
data/db/seeds.rb CHANGED
@@ -35,8 +35,9 @@ L2.msg("Lesli", "Version: #{Lesli::VERSION}", "Build: #{Lesli::BUILD}")
35
35
 
36
36
 
37
37
  # including tools for seeders
38
- load Lesli::Engine.root.join("db", "seed", "tools.rb")
38
+ load Lesli::Engine.root.join("db", "seed", "xyz.rb")
39
39
 
40
40
 
41
41
  # loading Lesli seeders
42
- load Lesli::Engine.root.join("db", "seed", "#{Rails.env.downcase}.rb")
42
+ load Lesli::Engine.root.join("db", "seed", "accounts.rb")
43
+ load Lesli::Engine.root.join("db", "seed", "users.rb")
File without changes
@@ -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,9 +17,9 @@ 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 · Ruby on Rails Development Platform.
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
@@ -65,7 +65,7 @@ rails generate lesli:test CloudEngine/Things
65
65
  }
66
66
  =end
67
67
  module Lesli
68
- class ApplicationLesliGenerator < Rails::Generators::NamedBase
68
+ class ApplicationLesliGeneratorBase < Rails::Generators::NamedBase
69
69
 
70
70
  @info;
71
71
  @model;
@@ -1,10 +1,10 @@
1
1
 
2
2
 
3
3
  # ·
4
- require "#{Lesli::Engine.root}/lib/generators/application_lesli_generator.rb"
4
+ require "#{Lesli::Engine.root}/lib/generators/application_lesli_generator_base.rb"
5
5
 
6
6
  module Lesli
7
- class SpecGenerator < ApplicationLesliGenerator
7
+ class SpecGenerator < ApplicationLesliGeneratorBase
8
8
  source_root File.expand_path("templates", __dir__)
9
9
 
10
10
  def generator
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ bin/rails generate lesli:spec Lesli/Account
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -0,0 +1,17 @@
1
+ =begin
2
+ <%# TODO: Use the license file if no lesli.txt file found %>
3
+ <%= File.read(Lesli::Engine.root.join("lesli.txt")).to_s.force_encoding("ASCII-8BIT") %>=end
4
+
5
+ FactoryBot.define do
6
+ factory :<%= @info[:engine_resource_code] %>, class: <%= @info[:engine_resource] %> do
7
+ name { Faker::Company.name }
8
+
9
+ <% @model[:columns].each do |column| %>
10
+ <%= column[:name] %> { <%= column[:faker] %> }<% end %>
11
+
12
+ after(:create) do |account, evaluator|
13
+ account.user = FactoryBot.create(:user, account_id: account.id)
14
+ account.save
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,70 @@
1
+ =begin
2
+ <%# TODO: Use the license file if no lesli.txt file found %>
3
+ <%= File.read(Lesli::Engine.root.join("lesli.txt")).to_s.force_encoding("ASCII-8BIT") %>=end
4
+
5
+ require "rails_helper"
6
+ require Lesli::Engine.root.join("spec/support/testers/model")
7
+
8
+ RSpec.describe <%= @model[:name]%>, type: :model do
9
+
10
+ # Setup runs before each test
11
+ let(:<%= @info[:engine_resource_code] %>) { FactoryBot.create(:<%= @info[:engine_resource_code] %>) }
12
+
13
+ it "is valid with valid attributes" do
14
+ expect(<%= @info[:engine_resource_code] %>).to be_valid
15
+ end
16
+
17
+ <% @model[:columns].each do |column| %>
18
+ <% next if ["id", "created_at", "updated_at"].include?(column[:name]) %>
19
+ <% if !column[:null] %>
20
+ it "is valid with valid attributes" do
21
+ <%= @info[:engine_resource_code] %>.<%= column[:name]%> = nil
22
+ expect(<%= @info[:engine_resource_code] %>).not_to be_valid
23
+ end
24
+ <% end %>
25
+ <% end %>
26
+
27
+ =begin
28
+
29
+
30
+ it "is invalid without a name" do
31
+ account.name = nil
32
+ expect(account).not_to be_valid
33
+ end
34
+
35
+ it "is invalid without an email" do
36
+ account.email = nil
37
+ expect(account).not_to be_valid
38
+ end
39
+
40
+ it "is invalid with a duplicate email" do
41
+ account.save
42
+ duplicate_account = Account.new(name: "Test Account 2", email: "test@example.com", balance: 50.0)
43
+ expect(duplicate_account).not_to be_valid
44
+ end
45
+
46
+ it "is invalid without a balance" do
47
+ account.balance = nil
48
+ expect(account).not_to be_valid
49
+ end
50
+
51
+ it "is invalid with a negative balance" do
52
+ account.balance = -1
53
+ expect(account).not_to be_valid
54
+ end
55
+
56
+ # Test associations
57
+ it "has many transactions" do
58
+ expect(account).to respond_to(:transactions)
59
+ end
60
+
61
+ # Test custom methods
62
+ describe "#update_balance" do
63
+ it "updates the balance correctly" do
64
+ account.save
65
+ account.update_balance(50.0)
66
+ expect(account.reload.balance).to eq(150.0)
67
+ end
68
+ end
69
+ =end
70
+ end
@@ -0,0 +1,25 @@
1
+
2
+
3
+ # ·
4
+ require "#{Lesli::Engine.root}/lib/generators/application_lesli_generator_base.rb"
5
+
6
+ module Lesli
7
+ class ViewGenerator < ApplicationLesliGeneratorBase
8
+ source_root File.expand_path("templates", __dir__)
9
+
10
+ def generator
11
+ L2.msg "Generating Lesli Model spec"
12
+
13
+ pp @info;
14
+ pp "--- --- --- --- --- ---"
15
+ pp @model;
16
+ pp "--- --- --- --- --- ---"
17
+ pp @services;
18
+ pp "--- --- --- --- --- ---"
19
+ pp @rspec;
20
+
21
+ #template("spec-factory.template", "#{(@info[:engine].constantize)::Engine.root.join('spec', 'factories', @info[:engine_resource_code])}.rb")
22
+ template("spec-model.template", "#{(@info[:engine].constantize)::Engine.root.join('spec', 'models', @info[:engine_resource_code])}_spec.rb")
23
+ end
24
+ end
25
+ 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
@@ -31,15 +31,12 @@ Building a better future, one line of code at a time.
31
31
  =end
32
32
 
33
33
  module Lesli
34
- def self.configure(&block)
35
- @config ||= Lesli::Engine::Configuration.new
34
+ class Configuration
35
+ attr_accessor :demo, :company, :instance, :locales, :datetime, :security, :theme, :layout, :path_after_login, :mailer
36
36
 
37
- yield @config if block
38
-
39
- @config
40
- end
41
-
42
- def self.config
43
- Rails.application.config
37
+ def initialize
38
+ @demo = false
39
+ @company = {}
40
+ end
44
41
  end
45
42
  end
data/lib/lesli/engine.rb CHANGED
@@ -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
@@ -40,10 +40,17 @@ require "ancestry"
40
40
  require "useragent"
41
41
  require "acts_as_paranoid"
42
42
 
43
+ require "turbo-rails"
44
+ require "importmap-rails"
45
+
43
46
  module Lesli
44
47
  class Engine < ::Rails::Engine
45
48
  isolate_namespace Lesli
46
49
 
50
+ initializer "lesli.importmap", before: "importmap" do |app|
51
+ app.config.importmap.paths << Engine.root.join("config/importmap.rb")
52
+ end
53
+
47
54
  initializer :lesli do |app|
48
55
 
49
56
 
@@ -60,6 +67,9 @@ module Lesli
60
67
  end
61
68
  end
62
69
 
70
+
71
+ #config.view_component.view_component_path = root.join("app","components")
72
+
63
73
 
64
74
  # Lesli Framework configuration
65
75
 
@@ -81,18 +91,27 @@ module Lesli
81
91
  config.action_mailer.delivery_method ||= :letter_opener
82
92
 
83
93
  # Add the Lesli root folder for email development tempaltes
84
- config.action_mailer.preview_path = root.join("lib", "mailer_previews")
94
+ config.action_mailer.preview_paths << root.join("lib", "mailer_previews")
85
95
 
96
+ #
86
97
  config.action_mailer.default_options ||= {
87
98
 
88
99
  # Use the main email in the lesli settings as email sender
89
- from: config.company.dig(:email)
100
+ from: Lesli.config.company.dig(:email)
90
101
  }
91
102
 
92
103
  # Mailer url options for development
93
104
  config.action_mailer.default_url_options ||= {
94
105
  host: "http://0.0.0.0:3000"
95
106
  }
107
+
108
+ # Does not work too well
109
+ # if Lesli.config.security.dig(:enable_debug)
110
+ # config.cache_classes = false
111
+ # config.eager_load = false
112
+ # config.consider_all_requests_local = true
113
+ # config.action_controller.perform_caching = false
114
+ # end
96
115
  end
97
116
  end
98
117
  end
data/lib/lesli/r_spec.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Lesli
4
4
 
5
- Copyright (c) 2023, Lesli Technologies, S. A.
5
+ Copyright (c) 2024, 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
@@ -34,7 +34,10 @@ Building a better future, one line of code at a time.
34
34
  module Lesli
35
35
  module RSpec
36
36
  def self.testers_request
37
- Lesli::Engine.root.join("spec/support/testers/request")
37
+ Lesli::Engine.root.join("lib/rspec/testers/request")
38
+ end
39
+ def self.testers_model
40
+ Lesli::Engine.root.join("lib/rspec/testers/model")
38
41
  end
39
42
  end
40
43
  end
data/lib/lesli/routing.rb CHANGED
@@ -33,6 +33,39 @@ Building a better future, one line of code at a time.
33
33
  # ·
34
34
  module Lesli
35
35
  module Routing
36
+
37
+ def self.login path=""
38
+
39
+ # Load dedicated mounting routes for devise from the LesliShield engine
40
+ LesliShield::Routing.mount_login_at(path) if defined?(LesliShield);
41
+
42
+ # Load generic yet standard routes if LesliShield is not installed
43
+ unless defined?(LesliShield);
44
+ Rails.application.routes.draw do
45
+ devise_for(:users, class_name: "Lesli::User", module: :devise)
46
+ end
47
+ end
48
+ end
49
+
50
+ def self.mount
51
+ self.login
52
+ Rails.application.routes.draw do
53
+ mount Lesli::Engine => "/lesli" if defined?(Lesli)
54
+ mount LesliBell::Engine => "/bell" if defined?(LesliBell)
55
+ mount LesliAdmin::Engine => "/admin" if defined?(LesliAdmin)
56
+ mount LesliAudit::Engine => "/audit" if defined?(LesliAudit)
57
+ mount LesliBabel::Engine => "/babel" if defined?(LesliBabel)
58
+ mount LesliMailer::Engine => "/mailer" if defined?(LesliMailer)
59
+ mount LesliShield::Engine => "/shield" if defined?(LesliShield)
60
+ mount LesliPapers::Engine => "/papers" if defined?(LesliPapers)
61
+ mount LesliSupport::Engine => "/support" if defined?(LesliSupport)
62
+ mount LesliSecurity::Engine => "/security" if defined?(LesliSecurity)
63
+ mount LesliCalendar::Engine => "/calendar" if defined?(LesliCalendar)
64
+ mount LesliDashboard::Engine => "/dashboard" if defined?(LesliDashboard)
65
+
66
+ end
67
+ end
68
+
36
69
  def self.mount_dashboard_for lesli_engine
37
70
 
38
71
  lesli_engine::Engine.routes.draw do
@@ -42,15 +75,15 @@ module Lesli
42
75
 
43
76
  # Dashboard management
44
77
  resource :dashboard, only: [:show]
45
- resources :dashboards do
46
- collection do
47
- post "list" => :index
48
- get :options
49
- end
50
- scope module: :dashboard do
51
- resources :components
52
- end
53
- end
78
+ # resources :dashboards do
79
+ # collection do
80
+ # post "list" => :index
81
+ # get :options
82
+ # end
83
+ # scope module: :dashboard do
84
+ # resources :components
85
+ # end
86
+ # end
54
87
  end
55
88
  end
56
89
  end
data/lib/lesli/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Lesli
2
- VERSION = "5.0.13"
3
- BUILD = "1728877698"
2
+ VERSION = "5.0.14"
3
+ BUILD = "1751166982"
4
4
  end
data/lib/lesli.rb CHANGED
@@ -5,4 +5,15 @@ require "lesli/engine"
5
5
  require "lesli/r_spec"
6
6
 
7
7
  module Lesli
8
+ class << self
9
+ attr_writer :config
10
+
11
+ def config
12
+ @config ||= Configuration.new
13
+ end
14
+
15
+ def configure
16
+ yield(config)
17
+ end
18
+ end
8
19
  end
@@ -0,0 +1,94 @@
1
+ =begin
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2025, 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 MigrationHelpers
34
+ module Common
35
+
36
+ def table_name_for_shared(engine, table_name)
37
+ table_name = "#{engine}_#{table_name}".to_sym
38
+ table_name_account = "#{engine}_accounts".to_sym
39
+
40
+ return [table_name, table_name_account]
41
+ end
42
+
43
+ def table_name_for_item(resources, item)
44
+
45
+ engine = infer_engine_from_namespace
46
+
47
+ resource = resources.to_s.singularize
48
+ table_name = "#{resource}_#{item}".to_sym
49
+ foreign_key = resource.sub("#{engine}_","")
50
+
51
+ return [table_name, foreign_key]
52
+ end
53
+
54
+ def infer_engine_from_namespace
55
+
56
+ caller_locations(3, 10).each do |loc|
57
+ path = loc.absolute_path || loc.path
58
+
59
+ # Try matching standard gem folder path (e.g., gems/lesli_shield-0.1.0)
60
+ if path =~ %r{/gems/(lesli_[^/-]+)}
61
+ return $1
62
+ end
63
+
64
+ # Try matching from engines folder in dev
65
+ if path =~ %r{/engines/(lesli_[^/]+)}
66
+ return $1
67
+ end
68
+
69
+ # Local installed engines
70
+ if path =~ %r{/engines/(Lesli[^/]+)}
71
+ return $1.underscore
72
+ end
73
+
74
+ # workaround to let Lesli core use items
75
+
76
+ # Try matching standard gem folder path (e.g., gems/lesli_shield-0.1.0)
77
+ if path =~ %r{/gems/(lesli)}
78
+ return $1
79
+ end
80
+
81
+ # Try matching from engines folder in dev
82
+ if path =~ %r{/engines/(lesli)}
83
+ return $1
84
+ end
85
+
86
+ # Local installed engines
87
+ if path =~ %r{/engines/(Lesli)}
88
+ return $1.underscore
89
+ end
90
+ end
91
+ nil
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,51 @@
1
+ =begin
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2025, 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 MigrationHelpers
34
+ module Items
35
+ module ActionStructure
36
+ def create_table_lesli_item_actions_10(resources)
37
+
38
+ table_name, foreign_key = table_name_for_item(resources, :actions)
39
+
40
+ create_table table_name do |t|
41
+ t.string :title
42
+ t.datetime :deleted_at, index: true
43
+ t.timestamps
44
+ end
45
+
46
+ add_reference(table_name, :user, foreign_key: { to_table: :lesli_users })
47
+ add_reference(table_name, foreign_key, foreign_key: { to_table: resources })
48
+ end
49
+ end
50
+ end
51
+ 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
@@ -30,21 +30,23 @@ Building a better future, one line of code at a time.
30
30
  // ·
31
31
  =end
32
32
 
33
- class CreateLesliAccountActivities < ActiveRecord::Migration[6.0]
34
- def change
35
-
36
- gem_path = Lesli::System.engine("Lesli", "dir")
37
- table_base_structure = JSON.parse(File.read(File.join(gem_path, "db", "structure", "00000004_activities.json")))
38
-
39
- create_table :lesli_account_activities do |t|
40
- table_base_structure.each do |column|
41
- t.send(
42
- column["type"].parameterize.underscore.to_sym,
43
- column["name"].parameterize.underscore.to_sym
44
- )
33
+ module MigrationHelpers
34
+ module Items
35
+ module ActivityStructure
36
+ def create_table_lesli_item_activities_10(resources)
37
+
38
+ table_name, foreign_key = table_name_for_item(resources, :activities)
39
+
40
+ create_table table_name do |t|
41
+ t.string :title
42
+ t.string :description
43
+ t.string :session_id
44
+ t.timestamps
45
+ end
46
+
47
+ add_reference(table_name, :user, foreign_key: { to_table: :lesli_users }) unless resources == :lesli_users
48
+ add_reference(table_name, foreign_key, foreign_key: { to_table: resources })
45
49
  end
46
- t.timestamps
47
50
  end
48
- add_reference(:lesli_account_activities, :account, foreign_key: { to_table: :lesli_accounts })
49
51
  end
50
52
  end