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.
- checksums.yaml +4 -4
- data/app/assets/config/lesli_manifest.js +3 -6
- data/app/assets/images/lesli/brand/app-icon.svg +45 -39
- data/app/assets/images/lesli/brand/app-logo.png +0 -0
- data/app/assets/javascripts/lesli/application.js +1 -0
- data/app/controllers/lesli/abouts_controller.rb +16 -14
- data/app/controllers/lesli/application_controller.rb +14 -0
- data/app/controllers/lesli/application_devise_controller.rb +10 -12
- data/app/controllers/lesli/application_lesli_controller.rb +12 -11
- data/app/controllers/lesli/apps_controller.rb +6 -0
- data/app/controllers/lesli/roles_controller.rb +2 -2
- data/app/helpers/lesli/assets_helper.rb +24 -6
- data/app/helpers/lesli/general_helper.rb +18 -5
- data/app/helpers/lesli/html_helper.rb +8 -0
- data/app/helpers/lesli/navigation_helper.rb +43 -20
- data/app/helpers/lesli/system_helper.rb +2 -2
- data/app/helpers/lesli/turbo_helper.rb +58 -0
- data/app/interfaces/lesli/customization_interface.rb +42 -0
- data/app/interfaces/lesli/requester_interface.rb +103 -0
- data/app/interfaces/lesli/responder_interface.rb +127 -0
- data/app/lib/date2.rb +1 -191
- data/app/lib/lesli/courier.rb +54 -0
- data/app/mailers/lesli/application_lesli_mailer.rb +32 -59
- data/app/mailers/lesli/devise_mailer.rb +16 -8
- data/app/models/concerns/account_initializer.rb +27 -68
- data/app/models/concerns/lesli/has_activities.rb +29 -0
- data/app/models/concerns/user_extensions.rb +34 -13
- data/app/models/concerns/user_security.rb +4 -4
- data/app/models/lesli/account.rb +13 -20
- data/{lib/scss/layouts/application-container.scss → app/models/lesli/item/activity.rb} +11 -8
- data/app/models/lesli/role/{power.rb → action.rb} +6 -4
- data/app/models/lesli/role.rb +7 -15
- data/app/models/lesli/shared/catalog.rb +20 -0
- data/app/models/lesli/shared/dashboard.rb +1 -1
- data/app/models/lesli/user/activity.rb +5 -0
- data/app/models/lesli/user/detail.rb +5 -5
- data/app/models/lesli/user/{log.rb → journal.rb} +3 -3
- data/app/models/lesli/user/{power.rb → role.rb} +2 -3
- data/app/models/lesli/user/session.rb +3 -4
- data/app/models/lesli/user.rb +50 -46
- data/app/operators/lesli/controller_operator.rb +7 -2
- data/app/operators/lesli/{role_descriptor_operator.rb → role_operator.rb} +51 -28
- data/app/operators/lesli/user_registration_operator.rb +3 -2
- data/app/services/lesli/application_lesli_service.rb +8 -4
- data/app/services/lesli/role/action_service.rb +58 -0
- data/app/services/lesli/role_service.rb +232 -0
- data/app/services/lesli/{user_session_service.rb → user/session_service.rb} +23 -14
- data/app/services/lesli/user_service.rb +86 -2
- data/app/views/lesli/apps/show.html.erb +52 -0
- data/app/views/lesli/layouts/application-devise.html.erb +5 -7
- data/app/views/lesli/layouts/application-lesli.html.erb +18 -22
- data/app/views/lesli/partials/_application-analytics.html.erb +2 -2
- data/app/views/lesli/partials/_application-data.html.erb +5 -79
- data/app/views/lesli/partials/_application-head.html.erb +7 -4
- data/app/views/lesli/partials/_application-lesli-annoouncements.html.erb +49 -0
- data/app/views/lesli/partials/_application-lesli-header.html.erb +88 -39
- data/app/views/lesli/partials/_application-lesli-javascript.html.erb +5 -18
- data/app/views/lesli/partials/_application-lesli-navigation.html.erb +17 -7
- data/app/views/lesli/partials/{_application-lesli-notices.html.erb → _application-lesli-notifications.html.erb} +10 -8
- data/app/views/lesli/partials/_application-lesli-scss.html.erb +3 -3
- data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +1 -1
- data/app/views/lesli/partials/_application-public-javascript.html.erb +1 -4
- data/app/views/lesli/shared/dashboards/_show.html.erb +63 -0
- data/app/views/lesli/wrappers/_application-devise-simple.erb +1 -1
- data/app/views/lesli/wrappers/_application-devise.html.erb +4 -6
- data/config/importmap.rb +14 -0
- data/config/initializers/lesli.rb +27 -13
- data/config/initializers/lesli_migration_helpers.rb +61 -0
- data/config/locales/translations.en.yml +1 -24
- data/config/locales/translations.es.yml +1 -24
- data/config/locales/translations.fr.yml +1 -24
- data/config/locales/translations.it.yml +1 -24
- data/config/locales/translations.pt.yml +1 -24
- data/config/routes.rb +3 -1
- data/db/migrate/v1/{0010000110_create_lesli_accounts.rb → 0000000110_create_lesli_accounts.rb} +13 -12
- data/db/migrate/v1/0000000210_create_lesli_roles.rb +65 -0
- data/db/migrate/v1/0000000310_create_lesli_users.rb +99 -0
- data/db/migrate/v1/{0010000610_create_lesli_system_controllers.rb → 0000100110_create_lesli_system_controllers.rb} +3 -3
- data/db/migrate/v1/{0010000710_create_lesli_system_controller_actions.rb → 0000100210_create_lesli_system_controller_actions.rb} +3 -4
- data/db/{seed/production.rb → migrate/v1/0000110310_create_lesli_account_settings.rb} +6 -3
- data/{app/models/lesli/user/agent.rb → db/migrate/v1/0000110410_create_lesli_account_activities.rb} +3 -3
- data/db/migrate/v1/0000120210_create_lesli_role_actions.rb +45 -0
- data/db/migrate/v1/{0010001410_create_lesli_account_logs.rb → 0000120310_create_lesli_role_privileges.rb} +8 -8
- data/db/{tables/0010003810_create_user_shortcuts.rb → migrate/v1/0000130210_create_lesli_user_roles.rb} +9 -12
- data/db/migrate/v1/0000130310_create_lesli_user_sessions.rb +56 -0
- data/db/migrate/v1/0000130410_create_lesli_user_activities.rb +37 -0
- data/db/{tables/0010001110_create_account_locations.rb → migrate2/0000100510_create_lesli_account_locations.rb} +6 -6
- data/db/{tables/0010001510_create_account_currencies.rb → migrate2/0000100610_create_lesli_account_currencies.rb} +4 -4
- data/db/seed/{development/accounts.rb → accounts.rb} +6 -2
- data/db/seed/{production/users.rb → users.rb} +4 -10
- data/db/seed/{tools.rb → xyz.rb} +2 -7
- data/db/seeds.rb +3 -2
- data/db/structure/00000020_catalogs.json +0 -0
- data/lib/generators/application_lesli_generator_base.rb +164 -0
- data/lib/generators/lesli/spec/USAGE +8 -0
- data/lib/generators/lesli/spec/spec_generator.rb +25 -0
- data/lib/generators/lesli/spec/templates/spec-factory.template +17 -0
- data/lib/generators/lesli/spec/templates/spec-model.template +70 -0
- data/lib/generators/lesli/view/USAGE +8 -0
- data/lib/generators/lesli/view/templates/spec-factory.template +17 -0
- data/lib/generators/lesli/view/templates/spec-model.template +70 -0
- data/lib/generators/lesli/view/view_generator.rb +25 -0
- data/lib/lesli/configuration.rb +8 -11
- data/lib/lesli/engine.rb +24 -6
- data/lib/lesli/r_spec.rb +43 -0
- data/lib/lesli/routing.rb +90 -0
- data/lib/lesli/version.rb +2 -2
- data/lib/lesli.rb +13 -0
- data/lib/migrate/common.rb +94 -0
- data/lib/migrate/items/action_structure.rb +51 -0
- data/{db/migrate/v1/0010001210_create_lesli_account_activities.rb → lib/migrate/items/activity_structure.rb} +18 -16
- data/lib/migrate/items/attachment_structure.rb +62 -0
- data/{app/views/lesli/partials/_application-lesli-engines.html.erb → lib/migrate/items/discussion_structure.rb} +19 -27
- data/lib/migrate/items/subscriber_structure.rb +49 -0
- data/lib/migrate/items/version_structure.rb +53 -0
- data/lib/migrate/shared/account_structure.rb +21 -0
- data/lib/migrate/shared/catalog_structure.rb +30 -0
- data/lib/migrate/shared/dashboard_structure.rb +54 -0
- data/lib/migrate/shared/setting_structure.rb +20 -0
- data/lib/rspec/config/spec_coverage.rb +95 -0
- data/{db/migrate/v1/0010001110_create_lesli_account_settings.rb → lib/rspec/factories/lesli_account.rb} +10 -7
- data/{db/seed/development.rb → lib/rspec/factories/lesli_role.rb} +30 -3
- data/{db/seed/test.rb → lib/rspec/factories/lesli_user.rb} +32 -3
- data/lib/rspec/fixtures/files/lesli-icon.png +0 -0
- data/lib/rspec/fixtures/files/test_file_1.docx +0 -0
- data/{db/tables/0010001610_create_account_currency_exchange_rates.rb → lib/rspec/helpers/lesli_helper.rb} +21 -21
- data/lib/rspec/helpers/rails_helper.rb +134 -0
- data/lib/rspec/helpers/response_request_helper.rb +214 -0
- data/lib/rspec/helpers/response_service_helper.rb +66 -0
- data/lib/rspec/helpers/spec_helper.rb +99 -0
- data/lib/rspec/lesli_api_tester.rb +133 -0
- data/lib/rspec/lesli_service_tester.rb +46 -0
- data/{db/tables/0010001410_create_account_files.rb → lib/rspec/testers/controller.rb} +31 -20
- data/lib/rspec/testers/model.rb +36 -0
- data/lib/rspec/testers/request.rb +84 -0
- data/lib/tasks/lesli/db.rake +5 -3
- data/lib/tasks/lesli/git.rake +28 -32
- data/lib/tasks/lesli/github.rake +89 -0
- data/lib/tasks/lesli_tasks.rake +6 -6
- data/readme.md +28 -17
- metadata +132 -399
- data/app/assets/fonts/lesli/Domine/Domine-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/Domine/OFL.txt +0 -97
- data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
- data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +0 -1
- data/app/assets/fonts/lesli/Remix/remixicon.svg +0 -7633
- data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +0 -11
- data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
- data/app/assets/fonts/lesli/Roboto/LICENSE.txt +0 -202
- data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
- data/app/assets/icons/lesli/engine-admin.svg +0 -1
- data/app/assets/icons/lesli/engine-audit.svg +0 -1
- data/app/assets/icons/lesli/engine-babel.svg +0 -1
- data/app/assets/icons/lesli/engine-bell.svg +0 -1
- data/app/assets/icons/lesli/engine-books.svg +0 -1
- data/app/assets/icons/lesli/engine-calendar.svg +0 -1
- data/app/assets/icons/lesli/engine-dashboard.svg +0 -1
- data/app/assets/icons/lesli/engine-dispatcher.svg +0 -1
- data/app/assets/icons/lesli/engine-focus.svg +0 -1
- data/app/assets/icons/lesli/engine-kb.svg +0 -1
- data/app/assets/icons/lesli/engine-leaf.svg +0 -1
- data/app/assets/icons/lesli/engine-lesli.svg +0 -1
- data/app/assets/icons/lesli/engine-letter.svg +0 -1
- data/app/assets/icons/lesli/engine-mailer.svg +0 -1
- data/app/assets/icons/lesli/engine-one.svg +0 -1
- data/app/assets/icons/lesli/engine-profile.svg +0 -1
- data/app/assets/icons/lesli/engine-proposal.svg +0 -1
- data/app/assets/icons/lesli/engine-scraper.svg +0 -1
- data/app/assets/icons/lesli/engine-security.svg +0 -1
- data/app/assets/icons/lesli/engine-shared.svg +0 -1
- data/app/assets/icons/lesli/engine-shield.svg +0 -1
- data/app/assets/icons/lesli/engine-storage.svg +0 -1
- data/app/assets/icons/lesli/engine-support.svg +0 -1
- data/app/assets/icons/lesli/engine-talk.svg +0 -1
- data/app/assets/icons/lesli/engine-team.svg +0 -1
- data/app/assets/icons/lesli/engine-time.svg +0 -1
- data/app/assets/icons/lesli/locale-en.svg +0 -1
- data/app/assets/icons/lesli/locale-es.svg +0 -1
- data/app/assets/icons/lesli/locale-fr.svg +0 -1
- data/app/assets/icons/lesli/locale-it.svg +0 -1
- data/app/assets/icons/lesli/locale-pt.svg +0 -1
- data/app/assets/icons/readme.md +0 -10
- data/app/assets/stylesheets/lesli/templates/application.css +0 -23499
- data/app/assets/stylesheets/lesli/templates/public.css +0 -19098
- data/app/assets/stylesheets/lesli/users/confirmations.css +0 -19219
- data/app/assets/stylesheets/lesli/users/passwords.css +0 -19202
- data/app/assets/stylesheets/lesli/users/registrations.css +0 -19594
- data/app/assets/stylesheets/lesli/users/sessions.css +0 -19594
- data/app/controllers/lesli/interfaces/application/authorization.rb +0 -107
- data/app/controllers/lesli/interfaces/application/customization.rb +0 -46
- data/app/controllers/lesli/interfaces/application/logger.rb +0 -134
- data/app/controllers/lesli/interfaces/application/requester.rb +0 -84
- data/app/controllers/lesli/interfaces/application/responder.rb +0 -132
- data/app/controllers/lesli/interfaces/controllers/actions.rb +0 -250
- data/app/controllers/lesli/interfaces/controllers/activities.rb +0 -215
- data/app/controllers/lesli/interfaces/controllers/discussions.rb +0 -270
- data/app/controllers/lesli/interfaces/controllers/files.rb +0 -467
- data/app/controllers/lesli/interfaces/controllers/subscribers.rb +0 -234
- data/app/lib/lesli/system.rb +0 -98
- data/app/models/lesli/cloud_object/action.rb +0 -70
- data/app/models/lesli/cloud_object/activity.rb +0 -311
- data/app/models/lesli/cloud_object/custom_field.rb +0 -158
- data/app/models/lesli/cloud_object/discussion.rb +0 -219
- data/app/models/lesli/cloud_object/subscriber.rb +0 -186
- data/app/operators/lesli/descriptor_privilege_operator.rb +0 -75
- data/app/views/lesli/emails/devise_mailer/confirmation_instructions.html.erb +0 -23
- data/app/views/lesli/emails/devise_mailer/reset_password_instructions.html.erb +0 -23
- data/app/views/lesli/partials/_application-lesli-icons.html.erb +0 -1
- data/config/initializers/devise.rb +0 -336
- data/db/seed/development/users.rb +0 -52
- data/db/seed/production/accounts.rb +0 -50
- data/db/structure/00000000_people.json +0 -34
- data/db/structure/00000003_actions.json +0 -14
- data/db/structure/00000004_activities.json +0 -20
- data/db/structure/00000005_discussions.json +0 -8
- data/db/structure/00000006_files.json +0 -32
- data/db/structure/00000007_subscribers.json +0 -11
- data/db/structure/00000501_dashboards.json +0 -14
- data/db/structure/00000502_dashboard_components.json +0 -23
- data/db/tables/0010003410_create_user_activities.rb +0 -51
- data/db/tables/0010003710_create_user_codes.rb +0 -43
- data/db/tables/0010004110_create_user_tokens.rb +0 -45
- data/db/tables/0010005610_create_role_activities.rb +0 -50
- data/db/tables/0010009010_create_feedbacks.rb +0 -56
- data/lib/mailer_previews/devise_mailer_preview.rb +0 -49
- data/lib/scss/bulma/loader.scss +0 -92
- data/lib/scss/cloud-objects/discussion.scss +0 -80
- data/lib/scss/cloud-objects/file.scss +0 -138
- data/lib/scss/components/keypad.scss +0 -109
- data/lib/scss/elements/autocomplete.scss +0 -72
- data/lib/scss/elements/card.scss +0 -37
- data/lib/scss/elements/empty.scss +0 -43
- data/lib/scss/elements/file-uploader.scss +0 -74
- data/lib/scss/elements/gallery.scss +0 -98
- data/lib/scss/elements/input-tag.scss +0 -73
- data/lib/scss/elements/loading.scss +0 -63
- data/lib/scss/elements/map.scss +0 -107
- data/lib/scss/elements/navbar.scss +0 -115
- data/lib/scss/elements/table.scss +0 -118
- data/lib/scss/elements/toolbar.scss +0 -66
- data/lib/scss/fonts/families.scss +0 -47
- data/lib/scss/fonts/mdicons.scss +0 -82
- data/lib/scss/fonts/remixicons.scss +0 -2602
- data/lib/scss/helpers/display.scss +0 -44
- data/lib/scss/helpers/tooltip.scss +0 -91
- data/lib/scss/layouts/application-announcements.scss +0 -40
- data/lib/scss/layouts/application-component.scss +0 -39
- data/lib/scss/layouts/application-engines.scss +0 -125
- data/lib/scss/layouts/application-footer.scss +0 -102
- data/lib/scss/layouts/application-header.scss +0 -163
- data/lib/scss/layouts/application-navbar.scss +0 -62
- data/lib/scss/layouts/application-search.scss +0 -71
- data/lib/scss/layouts/application-sidebar.scss +0 -219
- data/lib/scss/overrides/notification.scss +0 -75
- data/lib/scss/overrides/sweetalert.scss +0 -106
- data/lib/scss/pages/devise-simple.scss +0 -89
- data/lib/scss/pages/devise.scss +0 -179
- data/lib/scss/pages/invites.scss +0 -81
- data/lib/scss/panels/panel-announcements.scss +0 -56
- data/lib/scss/panels/panel-notification.scss +0 -67
- data/lib/scss/panels/panel-profile.scss +0 -62
- data/lib/scss/panels/panel-support-ticket.scss +0 -56
- data/lib/scss/panels/panel-tasks.scss +0 -41
- data/lib/scss/settings/variables.scss +0 -148
- data/lib/scss/shared/workflow-status-progress.scss +0 -135
- data/lib/scss/templates/application.scss +0 -156
- data/lib/scss/templates/component.scss +0 -39
- data/lib/scss/templates/dashboards.scss +0 -53
- data/lib/scss/templates/empty.scss +0 -42
- data/lib/scss/templates/pdf.scss +0 -45
- data/lib/scss/templates/public.scss +0 -70
- data/lib/vue/application.js +0 -283
- data/lib/vue/cloudobjects/discussion/content.vue +0 -62
- data/lib/vue/cloudobjects/discussion/element.vue +0 -170
- data/lib/vue/cloudobjects/discussion/filters.vue +0 -108
- data/lib/vue/cloudobjects/discussion/new.vue +0 -134
- data/lib/vue/cloudobjects/discussion.vue +0 -99
- data/lib/vue/cloudobjects/stores/discussion.js +0 -212
- data/lib/vue/layouts/application-announcements.vue +0 -78
- data/lib/vue/layouts/application-component.vue +0 -38
- data/lib/vue/layouts/application-container.vue +0 -48
- data/lib/vue/layouts/application-engines.vue +0 -66
- data/lib/vue/layouts/application-footer.vue +0 -123
- data/lib/vue/layouts/application-header.vue +0 -231
- data/lib/vue/layouts/application-navbar.vue +0 -110
- data/lib/vue/layouts/application-search.vue +0 -86
- data/lib/vue/layouts/application-sidebar.vue +0 -63
- data/lib/vue/pages/errors/app.js +0 -32
- data/lib/vue/pages/invites/app.js +0 -76
- data/lib/vue/pages/mfas/application.js +0 -77
- data/lib/vue/pages/onboarding/application.js +0 -45
- data/lib/vue/pages/onboarding/components/address.vue +0 -120
- data/lib/vue/pages/onboarding/components/buttons.vue +0 -67
- data/lib/vue/pages/onboarding/components/contact.vue +0 -148
- data/lib/vue/pages/onboarding/components/date-time.vue +0 -265
- data/lib/vue/pages/onboarding/components/finish.vue +0 -62
- data/lib/vue/pages/onboarding/components/general-info.vue +0 -93
- data/lib/vue/pages/onboarding/components/indicators.vue +0 -78
- data/lib/vue/pages/onboarding/components/welcome.vue +0 -66
- data/lib/vue/pages/onboarding/show.vue +0 -67
- data/lib/vue/pages/onboarding/store.js +0 -165
- data/lib/vue/pages/otps/application.js +0 -90
- data/lib/vue/pages/passes/application.js +0 -80
- data/lib/vue/pages/websites/application.js +0 -34
- data/lib/vue/panels/panel-announcements.vue +0 -248
- data/lib/vue/panels/panel-bell-notifications.vue +0 -102
- data/lib/vue/panels/panel-files.vue +0 -281
- data/lib/vue/panels/panel-profile.vue +0 -76
- data/lib/vue/panels/panel-support-tickets.vue +0 -161
- data/lib/vue/panels/panel-tasks.vue +0 -124
- data/lib/vue/panels/stores/bell-notifications.js +0 -46
- data/lib/vue/panels/stores/support-tickets.js +0 -103
- data/lib/vue/public.js +0 -83
- data/lib/vue/refactor/shared/cloudobjects/action.vue +0 -193
- data/lib/vue/refactor/shared/cloudobjects/file/grid.vue +0 -215
- data/lib/vue/refactor/shared/cloudobjects/file/list.vue +0 -106
- data/lib/vue/refactor/shared/cloudobjects/file.vue +0 -145
- data/lib/vue/refactor/shared/workflows2/apps/actions/form.vue +0 -232
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/chatroom-form.vue +0 -103
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-clone-form.vue +0 -125
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-file-form.vue +0 -102
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/email-form.vue +0 -190
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/notification-form.vue +0 -124
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/send-cloud-object-file.vue +0 -170
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/task-form.vue +0 -258
- data/lib/vue/refactor/shared/workflows2/apps/actions/index.vue +0 -146
- data/lib/vue/refactor/shared/workflows2/apps/checks/form.vue +0 -200
- data/lib/vue/refactor/shared/workflows2/apps/checks/index.vue +0 -160
- data/lib/vue/refactor/shared/workflows2/apps/index.vue +0 -177
- data/lib/vue/refactor/shared/workflows2/apps/new.vue +0 -97
- data/lib/vue/refactor/shared/workflows2/apps/show.vue +0 -146
- data/lib/vue/refactor/shared/workflows2/components/associations.vue +0 -215
- data/lib/vue/refactor/shared/workflows2/components/chart.vue +0 -91
- data/lib/vue/refactor/shared/workflows2/components/workflow-form.vue +0 -466
- data/lib/vue/refactor/shared/workflows2/components/workflow-status-dropdown.vue +0 -129
- data/lib/vue/refactor/stores/cloudobjects/action.js +0 -181
- data/lib/vue/refactor/stores/cloudobjects/file.js +0 -205
- data/lib/vue/refactor/stores/entities/announcements.js +0 -75
- data/lib/vue/refactor/stores/entities/dashboard.js +0 -251
- data/lib/vue/refactor/stores/entities/workflow.js +0 -185
- data/lib/vue/refactor/stores/panels/announcements.js +0 -153
- data/lib/vue/refactor/stores/panels/notification.js +0 -114
- data/lib/vue/refactor/stores/panels/task.js +0 -66
- data/lib/vue/refactor/stores/panels/tickets.js +0 -129
- data/lib/vue/refactor/stores/role.js +0 -243
- data/lib/vue/refactor/stores/translations.json +0 -60
- data/lib/vue/refactor/stores/users.js +0 -98
- data/lib/vue/shared/dashboards/apps/edit.vue +0 -215
- data/lib/vue/shared/dashboards/apps/index.vue +0 -112
- data/lib/vue/shared/dashboards/apps/new.vue +0 -89
- data/lib/vue/shared/dashboards/apps/show.vue +0 -88
- data/lib/vue/shared/dashboards/components/form.vue +0 -246
- data/lib/vue/shared/services/firebase.js +0 -163
- data/lib/vue/shared/services/translator.js +0 -87
- data/lib/vue/shared/stores/command.js +0 -154
- data/lib/vue/shared/stores/dashboard.js +0 -253
- data/lib/vue/shared/stores/layout.js +0 -61
- data/lib/vue/shared/stores/systemController.js +0 -67
- data/lib/vue/shared/stores/users.js +0 -57
- data/lib/vue/stores/translations.json +0 -167
- data/lib/vue/translation.js +0 -45
- data/lib/webpack/base.js +0 -186
- data/lib/webpack/core.js +0 -91
- data/lib/webpack/engines.js +0 -165
- data/lib/webpack/version.js +0 -41
- data/vendor/bulma/LICENSE +0 -21
- data/vendor/bulma/bulma.sass +0 -10
- data/vendor/bulma/css/bulma-rtl.css +0 -11851
- data/vendor/bulma/css/bulma-rtl.min.css +0 -1
- data/vendor/bulma/css/bulma.css +0 -11851
- data/vendor/bulma/css/bulma.min.css +0 -1
- data/vendor/bulma/sass/base/_all.sass +0 -6
- data/vendor/bulma/sass/base/animations.sass +0 -5
- data/vendor/bulma/sass/base/generic.sass +0 -145
- data/vendor/bulma/sass/base/helpers.sass +0 -1
- data/vendor/bulma/sass/base/minireset.sass +0 -79
- data/vendor/bulma/sass/components/_all.sass +0 -15
- data/vendor/bulma/sass/components/breadcrumb.sass +0 -77
- data/vendor/bulma/sass/components/card.sass +0 -103
- data/vendor/bulma/sass/components/dropdown.sass +0 -83
- data/vendor/bulma/sass/components/level.sass +0 -79
- data/vendor/bulma/sass/components/media.sass +0 -59
- data/vendor/bulma/sass/components/menu.sass +0 -59
- data/vendor/bulma/sass/components/message.sass +0 -101
- data/vendor/bulma/sass/components/modal.sass +0 -117
- data/vendor/bulma/sass/components/navbar.sass +0 -446
- data/vendor/bulma/sass/components/pagination.sass +0 -167
- data/vendor/bulma/sass/components/panel.sass +0 -121
- data/vendor/bulma/sass/components/tabs.sass +0 -176
- data/vendor/bulma/sass/elements/_all.sass +0 -16
- data/vendor/bulma/sass/elements/box.sass +0 -26
- data/vendor/bulma/sass/elements/button.sass +0 -357
- data/vendor/bulma/sass/elements/container.sass +0 -29
- data/vendor/bulma/sass/elements/content.sass +0 -162
- data/vendor/bulma/sass/elements/form.sass +0 -1
- data/vendor/bulma/sass/elements/icon.sass +0 -46
- data/vendor/bulma/sass/elements/image.sass +0 -73
- data/vendor/bulma/sass/elements/notification.sass +0 -52
- data/vendor/bulma/sass/elements/other.sass +0 -31
- data/vendor/bulma/sass/elements/progress.sass +0 -73
- data/vendor/bulma/sass/elements/table.sass +0 -134
- data/vendor/bulma/sass/elements/tag.sass +0 -140
- data/vendor/bulma/sass/elements/title.sass +0 -70
- data/vendor/bulma/sass/form/_all.sass +0 -9
- data/vendor/bulma/sass/form/checkbox-radio.sass +0 -22
- data/vendor/bulma/sass/form/file.sass +0 -184
- data/vendor/bulma/sass/form/input-textarea.sass +0 -66
- data/vendor/bulma/sass/form/select.sass +0 -88
- data/vendor/bulma/sass/form/shared.sass +0 -60
- data/vendor/bulma/sass/form/tools.sass +0 -215
- data/vendor/bulma/sass/grid/_all.sass +0 -5
- data/vendor/bulma/sass/grid/columns.sass +0 -513
- data/vendor/bulma/sass/grid/tiles.sass +0 -36
- data/vendor/bulma/sass/helpers/_all.sass +0 -12
- data/vendor/bulma/sass/helpers/color.sass +0 -39
- data/vendor/bulma/sass/helpers/flexbox.sass +0 -35
- data/vendor/bulma/sass/helpers/float.sass +0 -10
- data/vendor/bulma/sass/helpers/other.sass +0 -14
- data/vendor/bulma/sass/helpers/overflow.sass +0 -2
- data/vendor/bulma/sass/helpers/position.sass +0 -7
- data/vendor/bulma/sass/helpers/spacing.sass +0 -31
- data/vendor/bulma/sass/helpers/typography.sass +0 -103
- data/vendor/bulma/sass/helpers/visibility.sass +0 -122
- data/vendor/bulma/sass/layout/_all.sass +0 -6
- data/vendor/bulma/sass/layout/footer.sass +0 -11
- data/vendor/bulma/sass/layout/hero.sass +0 -153
- data/vendor/bulma/sass/layout/section.sass +0 -17
- data/vendor/bulma/sass/utilities/_all.sass +0 -9
- data/vendor/bulma/sass/utilities/animations.sass +0 -1
- data/vendor/bulma/sass/utilities/controls.sass +0 -49
- data/vendor/bulma/sass/utilities/derived-variables.sass +0 -114
- data/vendor/bulma/sass/utilities/extends.sass +0 -25
- data/vendor/bulma/sass/utilities/functions.sass +0 -135
- data/vendor/bulma/sass/utilities/initial-variables.sass +0 -79
- data/vendor/bulma/sass/utilities/mixins.sass +0 -303
- data/vendor/lesli-css/_index.scss +0 -34
- data/vendor/lesli-css/lesli.scss +0 -51
- data/vendor/lesli-css/license +0 -28
- data/vendor/lesli-css/src/base/fonts.scss +0 -50
- data/vendor/lesli-css/src/base/normalize.scss +0 -118
- data/vendor/lesli-css/src/components/blockquote.scss +0 -61
- data/vendor/lesli-css/src/components/columns.scss +0 -92
- data/vendor/lesli-css/src/components/container.scss +0 -47
- data/vendor/lesli-css/src/components/navigation.scss +0 -59
- data/vendor/lesli-css/src/functions/colors.scss +0 -184
- data/vendor/lesli-css/src/helpers/units.scss +0 -44
- data/vendor/lesli-css/src/mixins/breakpoint.scss +0 -184
- data/vendor/lesli-css/src/mixins/flex.scss +0 -80
- data/vendor/lesli-css/src/mixins/scrollbar.scss +0 -46
- data/vendor/lesli-css/src/settings/variables.scss +0 -26
- data/vendor/lesli-css/tests/base/normalize.spec.scss +0 -125
- data/vendor/lesli-css/tests/functions/colors.spec.scss +0 -117
- data/vendor/lesli-css/tests/mixins/breakpoint.spec.scss +0 -429
- data/vendor/lesli-css/tests/mixins/scrollbar.spec.scss +0 -82
- data/vendor/lesli-css/vendor/normalize.scss +0 -351
- data/vendor/remixicon/License +0 -201
- data/vendor/remixicon/fonts/remixicon.css +0 -2583
- /data/{vendor/lesli-css/src/components/grid.scss → app/assets/stylesheets/lesli/application.css} +0 -0
- /data/db/migrate/v1/{0010001010_create_lesli_account_details.rb → 0000110210_create_lesli_account_details.rb} +0 -0
- /data/db/structure/{00000008_custom_fields.json → 00000300_custom_fields.json} +0 -0
- /data/lib/assets/javascripts/lesli/{i18n.js → i18n_js} +0 -0
@@ -29,9 +29,9 @@ Building a better future, one line of code at a time.
|
|
29
29
|
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
30
30
|
// ·
|
31
31
|
=end
|
32
|
-
class
|
32
|
+
class CreateLesliAccountCurrencies < ActiveRecord::Migration[6.1]
|
33
33
|
def change
|
34
|
-
create_table :
|
34
|
+
create_table :lesli_account_currencies do |t|
|
35
35
|
t.string :name
|
36
36
|
t.string :symbol
|
37
37
|
t.string :country_alpha_3
|
@@ -42,7 +42,7 @@ class CreateAccountCurrencies < ActiveRecord::Migration[6.1]
|
|
42
42
|
t.timestamps
|
43
43
|
end
|
44
44
|
|
45
|
-
add_reference(:
|
46
|
-
add_reference(:
|
45
|
+
add_reference(:lesli_account_currencies, :user, foreign_key: { to_table: :lesli_users })
|
46
|
+
add_reference(:lesli_account_currencies, :account, foreign_key: { to_table: :lesli_accounts })
|
47
47
|
end
|
48
48
|
end
|
@@ -36,8 +36,9 @@ company = Lesli.config.company
|
|
36
36
|
|
37
37
|
|
38
38
|
# create account
|
39
|
-
Lesli::Account.find_or_create_by(email: company[:email]) do |account|
|
39
|
+
account = Lesli::Account.find_or_create_by(email: company[:email]) do |account|
|
40
40
|
account.name = company[:name]
|
41
|
+
account.status = 'active'
|
41
42
|
account.save!
|
42
43
|
|
43
44
|
# account.detail.company_name = company[:name]
|
@@ -46,5 +47,8 @@ Lesli::Account.find_or_create_by(email: company[:email]) do |account|
|
|
46
47
|
# #account.registered!
|
47
48
|
# account.detail.save!
|
48
49
|
|
49
|
-
L2.msg("Account #{ account.name } <#{ account.email }> successfully created!")
|
50
50
|
end
|
51
|
+
|
52
|
+
# print some separators so will be easy to find these messages later
|
53
|
+
L2.br(5); L2.br; L2.line; L2.line; L2.line; L2.line;
|
54
|
+
L2.success("Account #{ account.name } <#{ account.email }> successfully created!")
|
@@ -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 =
|
66
|
-
useradmin =
|
67
|
-
userguest =
|
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
|
data/db/seed/{tools.rb → xyz.rb}
RENAMED
@@ -30,12 +30,7 @@ Building a better future, one line of code at a time.
|
|
30
30
|
// ·
|
31
31
|
=end
|
32
32
|
|
33
|
-
def
|
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.
|
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", "
|
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", "
|
42
|
+
load Lesli::Engine.root.join("db", "seed", "accounts.rb")
|
43
|
+
load Lesli::Engine.root.join("db", "seed", "users.rb")
|
File without changes
|
@@ -0,0 +1,164 @@
|
|
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
|
+
|
34
|
+
=begin
|
35
|
+
|
36
|
+
Information reference:
|
37
|
+
|
38
|
+
|
39
|
+
rails generate lesli:test CloudEngine/Things
|
40
|
+
|
41
|
+
@info = {
|
42
|
+
:engine=>"CloudEngine",
|
43
|
+
:engine_code=>"cloud_engine",
|
44
|
+
:engine_name=>"engine",
|
45
|
+
:resources=>"Things",
|
46
|
+
:resources_code=>"things",
|
47
|
+
:resources_camel=>"things",
|
48
|
+
:resource=>"Thing",
|
49
|
+
:resource_camel=>"thing"
|
50
|
+
}
|
51
|
+
|
52
|
+
@vue = {
|
53
|
+
:path_base=> "~/engines/cloud_engine/lib/vue",
|
54
|
+
:path_apps=> "~/engines/cloud_engine/lib/vue/apps/thing",
|
55
|
+
:path_store=> "~/engines/cloud_engine/lib/vue/stores/thing.js",
|
56
|
+
:path_components=> "~/engines/cloud_engine/lib/vue/apps/thing/components"
|
57
|
+
}
|
58
|
+
|
59
|
+
@services = {
|
60
|
+
:path=> "~/engines/cloud_engine/app/services/thing_services.rb"
|
61
|
+
}
|
62
|
+
|
63
|
+
@rspec = {
|
64
|
+
:path_request=> "~/engines/cloud_engine/spec/requests/thing"
|
65
|
+
}
|
66
|
+
=end
|
67
|
+
module Lesli
|
68
|
+
class ApplicationLesliGeneratorBase < Rails::Generators::NamedBase
|
69
|
+
|
70
|
+
@info;
|
71
|
+
@model;
|
72
|
+
@factory;
|
73
|
+
@services;
|
74
|
+
@rspec;
|
75
|
+
@vue;
|
76
|
+
|
77
|
+
def parse_info
|
78
|
+
|
79
|
+
engine, resource = name.split("/")
|
80
|
+
|
81
|
+
# engine information
|
82
|
+
engine_code = engine.underscore
|
83
|
+
|
84
|
+
# resource information
|
85
|
+
resource_code = resource.underscore
|
86
|
+
|
87
|
+
@info = {
|
88
|
+
:engine => engine,
|
89
|
+
:engine_code => engine_code,
|
90
|
+
|
91
|
+
:resource => resource,
|
92
|
+
:resource_code => resource_code,
|
93
|
+
|
94
|
+
:engine_resource => "#{engine}::#{resource}",
|
95
|
+
:engine_resource_code => "#{engine_code}_#{resource_code}"
|
96
|
+
}
|
97
|
+
end
|
98
|
+
|
99
|
+
def parse_model
|
100
|
+
|
101
|
+
tabla = "#{@info[:engine_resource]}".constantize
|
102
|
+
.columns.map do |column|
|
103
|
+
|
104
|
+
if column.type == :string
|
105
|
+
value = '""'
|
106
|
+
faker = "Faker::String.random"
|
107
|
+
end
|
108
|
+
|
109
|
+
if column.type == :integer
|
110
|
+
value = 1
|
111
|
+
faker = "Faker::Number.digit"
|
112
|
+
end
|
113
|
+
|
114
|
+
if column.type == :datetime
|
115
|
+
value = "'#{Time.now}'"
|
116
|
+
faker = 'Faker::Date.between(from: 2.days.ago, to: Date.today)'
|
117
|
+
end
|
118
|
+
|
119
|
+
{
|
120
|
+
:name => column.name,
|
121
|
+
:type => column.type,
|
122
|
+
:null => column.null,
|
123
|
+
:value => value,
|
124
|
+
:faker => faker
|
125
|
+
}
|
126
|
+
end
|
127
|
+
|
128
|
+
@model = {
|
129
|
+
:name => @info[:engine_resource],
|
130
|
+
:columns => tabla
|
131
|
+
}
|
132
|
+
end
|
133
|
+
|
134
|
+
# def parse_services
|
135
|
+
|
136
|
+
# path_base = Rails.root.join("engines", @info[:engine_code], "app", "services")
|
137
|
+
|
138
|
+
# @services = {
|
139
|
+
# :path => path_base.join(@info[:resource].downcase + "_services.rb")
|
140
|
+
# }
|
141
|
+
# end
|
142
|
+
|
143
|
+
# def parse_vue
|
144
|
+
|
145
|
+
# path_base = Rails.root.join("engines", @info[:engine_code], "lib", "vue")
|
146
|
+
|
147
|
+
# @vue = {
|
148
|
+
# :path_base => path_base,
|
149
|
+
# :path_apps => path_base.join("apps", @info[:resources_code]),
|
150
|
+
# :path_store => path_base.join("stores", "#{ @info[:resources_camel] }.js"),
|
151
|
+
# :path_components => path_base.join("apps", @info[:resources_code], "components")
|
152
|
+
# }
|
153
|
+
# end
|
154
|
+
|
155
|
+
# def parse_rspec
|
156
|
+
# path_base = Rails.root.join("engines", @info[:engine_code], "spec")
|
157
|
+
|
158
|
+
# @rspec = {
|
159
|
+
# :path_request => path_base.join("requests", @info[:resources_code]),
|
160
|
+
# :url => @info[:engine_name] + "/" + @info[:resources_code]
|
161
|
+
# }
|
162
|
+
# end
|
163
|
+
end
|
164
|
+
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 SpecGenerator < 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
|
@@ -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,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
|
data/lib/lesli/configuration.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Lesli
|
4
4
|
|
5
|
-
Copyright (c)
|
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
|
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,15 +31,12 @@ Building a better future, one line of code at a time.
|
|
31
31
|
=end
|
32
32
|
|
33
33
|
module Lesli
|
34
|
-
|
35
|
-
|
34
|
+
class Configuration
|
35
|
+
attr_accessor :demo, :company, :instance, :locales, :datetime, :security, :theme, :layout, :path_after_login, :mailer
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
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)
|
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,11 +19,11 @@ 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
|
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://www.lesli.
|
26
|
+
@website https://www.lesli.tech
|
27
27
|
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
28
28
|
|
29
29
|
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
@@ -36,15 +36,21 @@ require "kaminari"
|
|
36
36
|
|
37
37
|
# · Tools used to build the Lesli Framework
|
38
38
|
require "L2"
|
39
|
-
#require "devise"
|
40
39
|
require "ancestry"
|
41
40
|
require "useragent"
|
42
41
|
require "acts_as_paranoid"
|
43
42
|
|
43
|
+
require "turbo-rails"
|
44
|
+
require "importmap-rails"
|
45
|
+
|
44
46
|
module Lesli
|
45
47
|
class Engine < ::Rails::Engine
|
46
48
|
isolate_namespace Lesli
|
47
49
|
|
50
|
+
initializer "lesli.importmap", before: "importmap" do |app|
|
51
|
+
app.config.importmap.paths << Engine.root.join("config/importmap.rb")
|
52
|
+
end
|
53
|
+
|
48
54
|
initializer :lesli do |app|
|
49
55
|
|
50
56
|
|
@@ -61,6 +67,9 @@ module Lesli
|
|
61
67
|
end
|
62
68
|
end
|
63
69
|
|
70
|
+
|
71
|
+
#config.view_component.view_component_path = root.join("app","components")
|
72
|
+
|
64
73
|
|
65
74
|
# Lesli Framework configuration
|
66
75
|
|
@@ -82,18 +91,27 @@ module Lesli
|
|
82
91
|
config.action_mailer.delivery_method ||= :letter_opener
|
83
92
|
|
84
93
|
# Add the Lesli root folder for email development tempaltes
|
85
|
-
config.action_mailer.
|
94
|
+
config.action_mailer.preview_paths << root.join("lib", "mailer_previews")
|
86
95
|
|
96
|
+
#
|
87
97
|
config.action_mailer.default_options ||= {
|
88
98
|
|
89
99
|
# Use the main email in the lesli settings as email sender
|
90
|
-
from: config.company.dig(:email)
|
100
|
+
from: Lesli.config.company.dig(:email)
|
91
101
|
}
|
92
102
|
|
93
103
|
# Mailer url options for development
|
94
104
|
config.action_mailer.default_url_options ||= {
|
95
105
|
host: "http://0.0.0.0:3000"
|
96
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
|
97
115
|
end
|
98
116
|
end
|
99
117
|
end
|