lesli 5.0.11 → 5.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (175) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/lesli_manifest.js +0 -13
  3. data/app/assets/icons/lesli/engine-security.svg +1 -0
  4. data/app/assets/icons/lesli/engine-shield.svg +1 -0
  5. data/app/assets/images/lesli/brand/app-logo.png +0 -0
  6. data/app/assets/images/lesli/lesli-logo.svg +4 -0
  7. data/app/assets/javascripts/lesli/templates/application.js +14 -0
  8. data/app/assets/javascripts/lesli/templates/public.js +14 -0
  9. data/app/assets/stylesheets/lesli/templates/application.css +1365 -293
  10. data/app/assets/stylesheets/lesli/templates/public.css +1 -1
  11. data/app/controllers/lesli/abouts_controller.rb +12 -18
  12. data/app/controllers/lesli/application_controller.rb +26 -25
  13. data/app/controllers/lesli/application_lesli_controller.rb +5 -6
  14. data/app/controllers/lesli/interfaces/application/authorization.rb +2 -2
  15. data/app/controllers/lesli/interfaces/application/customization.rb +1 -1
  16. data/app/controllers/lesli/interfaces/application/requester.rb +2 -2
  17. data/app/controllers/lesli/interfaces/application/responder.rb +8 -8
  18. data/app/controllers/lesli/interfaces/controllers/actions.rb +250 -0
  19. data/app/controllers/lesli/interfaces/controllers/activities.rb +215 -0
  20. data/app/controllers/lesli/interfaces/controllers/discussions.rb +270 -0
  21. data/app/controllers/lesli/interfaces/controllers/files.rb +467 -0
  22. data/app/controllers/lesli/interfaces/controllers/subscribers.rb +234 -0
  23. data/app/helpers/lesli/assets_helper.rb +26 -8
  24. data/app/helpers/lesli/navigation_helper.rb +53 -92
  25. data/app/lib/date2.rb +8 -0
  26. data/app/lib/lesli/system.rb +17 -4
  27. data/app/models/concerns/account_initializer.rb +46 -42
  28. data/app/models/concerns/user_extensions.rb +6 -0
  29. data/{lib/scss/devise/registrations.scss → app/models/lesli/account/detail.rb} +7 -3
  30. data/app/models/lesli/account.rb +12 -5
  31. data/app/models/lesli/cloud_object/action.rb +70 -0
  32. data/app/models/lesli/cloud_object/activity.rb +311 -0
  33. data/app/models/lesli/cloud_object/custom_field.rb +158 -0
  34. data/app/models/lesli/cloud_object/discussion.rb +219 -0
  35. data/app/models/lesli/cloud_object/subscriber.rb +186 -0
  36. data/app/models/lesli/shared/dashboard.rb +16 -5
  37. data/app/models/lesli/user/session.rb +0 -2
  38. data/app/models/lesli/user.rb +13 -13
  39. data/app/operators/lesli/controller_operator.rb +4 -1
  40. data/app/operators/lesli/user_registration_operator.rb +3 -3
  41. data/app/services/lesli/user_service.rb +1 -1
  42. data/app/views/lesli/layouts/application-devise.html.erb +6 -6
  43. data/app/views/lesli/layouts/application-lesli.html.erb +3 -1
  44. data/app/views/lesli/partials/_application-data.html.erb +5 -4
  45. data/app/views/lesli/partials/_application-lesli-engines.html.erb +14 -39
  46. data/app/views/lesli/partials/_application-lesli-header.html.erb +50 -25
  47. data/app/views/lesli/partials/_application-lesli-icons.html.erb +1 -1
  48. data/app/views/lesli/partials/_application-lesli-javascript.html.erb +2 -2
  49. data/app/views/lesli/partials/_application-lesli-navigation.html.erb +8 -1
  50. data/app/views/lesli/partials/_application-lesli-panels.html.erb +7 -7
  51. data/app/views/lesli/partials/_application-lesli-scss.html.erb +2 -2
  52. data/app/views/lesli/wrappers/_application-devise-simple.erb +1 -1
  53. data/app/views/lesli/wrappers/_application-devise.html.erb +5 -7
  54. data/config/initializers/devise.rb +335 -335
  55. data/config/initializers/lesli.rb +9 -2
  56. data/config/locales/translations.en.yml +9 -3
  57. data/config/locales/translations.es.yml +9 -3
  58. data/config/locales/translations.fr.yml +30 -0
  59. data/config/locales/translations.it.yml +30 -0
  60. data/config/locales/translations.pt.yml +30 -0
  61. data/config/routes.rb +1 -10
  62. data/db/migrate/{v1.0/0010003010_create_lesli_user_details.rb → v1/0010000110_create_lesli_accounts.rb} +19 -13
  63. data/db/migrate/{v1.0/0010000110_create_lesli_accounts.rb → v1/0010001010_create_lesli_account_details.rb} +5 -7
  64. data/db/migrate/{v1.0/0010001010_create_lesli_account_settings.rb → v1/0010001110_create_lesli_account_settings.rb} +2 -2
  65. data/db/seed/development/accounts.rb +10 -7
  66. data/db/seed/development/users.rb +20 -20
  67. data/db/seed/production/accounts.rb +10 -7
  68. data/lib/generators/application_lesli_generator.rb +164 -0
  69. data/lib/generators/lesli/spec/USAGE +8 -0
  70. data/lib/generators/lesli/spec/spec_generator.rb +25 -0
  71. data/lib/generators/lesli/spec/templates/spec-factory.template +17 -0
  72. data/lib/generators/lesli/spec/templates/spec-model.template +70 -0
  73. data/lib/lesli/configuration.rb +1 -1
  74. data/lib/lesli/engine.rb +3 -14
  75. data/lib/{scss/devise/passwords.scss → lesli/r_spec.rb} +12 -5
  76. data/lib/lesli/routing.rb +51 -20
  77. data/lib/lesli/version.rb +2 -2
  78. data/lib/lesli.rb +1 -0
  79. data/lib/scss/cloud-objects/discussion.scss +8 -5
  80. data/lib/scss/layouts/application-component.scss +1 -1
  81. data/lib/scss/{devise/sessions.scss → layouts/application-content.scss} +4 -4
  82. data/lib/scss/layouts/application-header.scss +38 -108
  83. data/lib/scss/layouts/{application-navbar.scss → application-navigation.scss} +23 -5
  84. data/lib/scss/layouts/application-search.scss +1 -1
  85. data/lib/scss/{elements/msg.scss → overrides/notification.scss} +16 -18
  86. data/lib/scss/pages/devise-simple.scss +4 -2
  87. data/lib/scss/pages/devise.scss +111 -107
  88. data/lib/scss/panels/panel-notification.scss +1 -1
  89. data/lib/scss/panels/{panel-ticket.scss → panel-support-ticket.scss} +3 -4
  90. data/lib/scss/settings/variables.scss +1 -1
  91. data/lib/scss/templates/application.scss +14 -41
  92. data/lib/scss/templates/public.scss +6 -4
  93. data/lib/tasks/lesli/controllers.rake +1 -1
  94. data/lib/tasks/lesli/db.rake +24 -12
  95. data/lib/tasks/lesli_tasks.rake +7 -7
  96. data/lib/vue/application.js +18 -15
  97. data/lib/vue/{refactor/shared/cloudobjects → cloudobjects}/discussion/content.vue +10 -8
  98. data/lib/vue/cloudobjects/discussion/element.vue +170 -0
  99. data/lib/vue/{refactor/shared/cloudobjects → cloudobjects}/discussion/filters.vue +1 -1
  100. data/lib/vue/{refactor/shared/cloudobjects → cloudobjects}/discussion/new.vue +20 -16
  101. data/lib/vue/{refactor/shared/cloudobjects → cloudobjects}/discussion.vue +25 -24
  102. data/lib/vue/{refactor/stores/cloudobjects → cloudobjects/stores}/discussion.js +7 -16
  103. data/lib/vue/layouts/application-component.vue +2 -2
  104. data/lib/vue/layouts/application-header.vue +109 -88
  105. data/lib/vue/panels/{panel-notifications.vue → panel-bell-notifications.vue} +15 -19
  106. data/lib/vue/panels/panel-support-tickets.vue +163 -0
  107. data/lib/vue/panels/stores/bell-notifications.js +46 -0
  108. data/lib/vue/panels/stores/support-tickets.js +103 -0
  109. data/lib/vue/shared/dashboards/apps/edit.vue +10 -10
  110. data/lib/vue/shared/dashboards/components/form.vue +31 -40
  111. data/lib/vue/shared/stores/dashboard.js +2 -0
  112. data/lib/vue/shared/stores/layout.js +2 -1
  113. data/lib/{scss/devise/confirmations.scss → vue/shared/stores/users.js} +22 -21
  114. data/lib/vue/stores/translations.json +119 -2
  115. data/lib/webpack/base.js +18 -12
  116. data/lib/webpack/core.js +16 -12
  117. data/lib/webpack/engines.js +3 -1
  118. data/lib/webpack/root.js +105 -0
  119. data/lib/webpack/version.js +37 -0
  120. data/readme.md +16 -15
  121. metadata +58 -92
  122. data/app/assets/icons/lesli/engine-guard.svg +0 -1
  123. data/app/assets/javascripts/lesli/users/sessions.js +0 -1
  124. data/app/assets/stylesheets/lesli/users/sessions.css +0 -1
  125. data/app/controllers/users/confirmations_controller.rb +0 -66
  126. data/app/controllers/users/omniauth_callbacks_controller.rb +0 -30
  127. data/app/controllers/users/passwords_controller.rb +0 -71
  128. data/app/controllers/users/registrations_controller.rb +0 -141
  129. data/app/controllers/users/sessions_controller.rb +0 -141
  130. data/app/controllers/users/unlocks_controller.rb +0 -30
  131. data/app/views/devise/confirmations/new.html.erb +0 -2
  132. data/app/views/devise/confirmations/show.html.erb +0 -63
  133. data/app/views/devise/mailer/confirmation_instructions.html.erb +0 -5
  134. data/app/views/devise/mailer/email_changed.html.erb +0 -7
  135. data/app/views/devise/mailer/password_change.html.erb +0 -3
  136. data/app/views/devise/mailer/reset_password_instructions.html.erb +0 -8
  137. data/app/views/devise/mailer/unlock_instructions.html.erb +0 -7
  138. data/app/views/devise/passwords/edit.html.erb +0 -79
  139. data/app/views/devise/passwords/new.html.erb +0 -75
  140. data/app/views/devise/registrations/edit.html.erb +0 -43
  141. data/app/views/devise/registrations/new.html.erb +0 -147
  142. data/app/views/devise/sessions/new.html.erb +0 -114
  143. data/app/views/devise/shared/_demo.html.erb +0 -7
  144. data/app/views/devise/shared/_error_messages.html.erb +0 -15
  145. data/app/views/devise/shared/_links.html.erb +0 -96
  146. data/app/views/devise/unlocks/new.html.erb +0 -16
  147. data/db/migrate/v1.0/0010000210_create_lesli_roles.rb +0 -59
  148. data/db/migrate/v1.0/0010000310_create_lesli_users.rb +0 -97
  149. data/db/migrate/v1.0/0010003110_create_lesli_user_settings.rb +0 -44
  150. data/db/migrate/v1.0/0010003210_create_lesli_user_sessions.rb +0 -55
  151. data/db/migrate/v1.0/0010003410_create_lesli_user_powers.rb +0 -43
  152. data/db/migrate/v1.0/0010004010_create_lesli_user_logs.rb +0 -45
  153. data/db/migrate/v1.0/0010005010_create_lesli_descriptors.rb +0 -44
  154. data/db/migrate/v1.0/0010005110_create_lesli_descriptor_privileges.rb +0 -45
  155. data/db/migrate/v1.0/0010005210_create_lesli_descriptor_activities.rb +0 -49
  156. data/db/migrate/v1.0/0010005510_create_lesli_role_powers.rb +0 -51
  157. data/db/migrate/v1.0/0010005710_create_lesli_role_privileges.rb +0 -45
  158. data/lib/scss/bulma/loader.scss +0 -92
  159. data/lib/scss/components/editor-richtext.scss +0 -88
  160. data/lib/scss/devise/oauth.scss +0 -34
  161. data/lib/scss/elements/avatar.scss +0 -48
  162. data/lib/scss/elements/calendar.scss +0 -47
  163. data/lib/scss/elements/toggle.scss +0 -102
  164. data/lib/vue/devise/confirmations.js +0 -33
  165. data/lib/vue/devise/passwords.js +0 -137
  166. data/lib/vue/devise/registrations.js +0 -157
  167. data/lib/vue/devise/sessions.js +0 -148
  168. data/lib/vue/panels/panel-tickets.vue +0 -181
  169. data/lib/vue/refactor/shared/cloudobjects/discussion/element.vue +0 -132
  170. data/lib/vue/shared/stores/account.js +0 -113
  171. /data/app/assets/icons/lesli/{engine-driver.svg → engine-calendar.svg} +0 -0
  172. /data/db/migrate/{v1.0 → v1}/0010000610_create_lesli_system_controllers.rb +0 -0
  173. /data/db/migrate/{v1.0 → v1}/0010000710_create_lesli_system_controller_actions.rb +0 -0
  174. /data/db/migrate/{v1.0 → v1}/0010001210_create_lesli_account_activities.rb +0 -0
  175. /data/db/migrate/{v1.0 → v1}/0010001410_create_lesli_account_logs.rb +0 -0
@@ -45,7 +45,7 @@ Lesli.configure do |config|
45
45
  config.company = {
46
46
  name: "Lesli",
47
47
  email: "hello@lesli.tech",
48
- tagline: "Ruby on Rails SaaS Development Platform."
48
+ tagline: "The Open SaaS Development Platform."
49
49
  }
50
50
 
51
51
 
@@ -105,5 +105,12 @@ Lesli.configure do |config|
105
105
  color_sidebar_hover: "#dee7ec"
106
106
  }
107
107
 
108
- config.path_after_login = "/dashboard"
108
+
109
+ #
110
+ config.layout = {
111
+ locale: false
112
+ }
113
+
114
+ config.path_after_login = "/"
115
+ config.path_after_login = "/dashboard" if defined?(LesliDashboard)
109
116
  end
@@ -15,10 +15,16 @@
15
15
  view_status_inactive: Inactive
16
16
  button_settings: Settings
17
17
  button_show: Show
18
+ toolbar_search: Search...
19
+ message_operation_success: Operation completed successfully
20
+ message_operation_error: Operation failed. Please try again.
21
+ application:
22
+ navigation_logout: Logout
23
+ navigation_my_profile: My profile
18
24
  users/sessions:
19
25
  view_username: Username
20
26
  dashboards:
21
27
  title: Dashboards
22
- application:
23
- navigation_logout: Logout
24
- navigation_my_profile: My profile
28
+ column_name: Name
29
+ column_default: Default
30
+ view_add_component: Add component
@@ -15,10 +15,16 @@
15
15
  view_status_inactive: Inactivo
16
16
  button_settings: Configuración
17
17
  button_show: Ver
18
+ toolbar_search: Buscar...
19
+ message_operation_success: Operacion realizada satisfactoriamente
20
+ message_operation_error: Operación fallida. Por favor, inténtelo de nuevo.
21
+ application:
22
+ navigation_logout: Cerrar sesión
23
+ navigation_my_profile: Mi perfil
18
24
  users/sessions:
19
25
  view_username: Usuario
20
26
  dashboards:
21
27
  title: Dashboards
22
- application:
23
- navigation_logout: Cerrar sesión
24
- navigation_my_profile: Mi perfil
28
+ column_name: Nombre
29
+ column_default: Default
30
+ view_add_component: Agregar componente
@@ -0,0 +1,30 @@
1
+ ---
2
+ :fr:
3
+ lesli:
4
+ shared:
5
+ view_discussions: ":lesli.shared.view_discussions:"
6
+ button_add_new: ":lesli.shared.button_add_new:"
7
+ button_reload: ":lesli.shared.button_reload:"
8
+ view_files: ":lesli.shared.view_files:"
9
+ view_quick_actions: ":lesli.shared.view_quick_actions:"
10
+ button_list: ":lesli.shared.button_list:"
11
+ button_save: ":lesli.shared.button_save:"
12
+ button_delete: ":lesli.shared.button_delete:"
13
+ button_edit: ":lesli.shared.button_edit:"
14
+ view_status_active: ":lesli.shared.view_status_active:"
15
+ view_status_inactive: ":lesli.shared.view_status_inactive:"
16
+ button_settings: ":lesli.shared.button_settings:"
17
+ button_show: ":lesli.shared.button_show:"
18
+ toolbar_search: ":lesli.shared.toolbar_search:"
19
+ message_operation_success: ":lesli.shared.message_operation_success:"
20
+ message_operation_error: ":lesli.shared.message_operation_error:"
21
+ application:
22
+ navigation_logout: ":lesli.application.navigation_logout:"
23
+ navigation_my_profile: ":lesli.application.navigation_my_profile:"
24
+ users/sessions:
25
+ view_username: ":lesli.users/sessions.view_username:"
26
+ dashboards:
27
+ title: ":lesli.dashboards.title:"
28
+ column_name: ":lesli.dashboards.column_name:"
29
+ column_default: ":lesli.dashboards.column_default:"
30
+ view_add_component: ":lesli.dashboards.view_add_component:"
@@ -0,0 +1,30 @@
1
+ ---
2
+ :it:
3
+ lesli:
4
+ shared:
5
+ view_discussions: ":lesli.shared.view_discussions:"
6
+ button_add_new: ":lesli.shared.button_add_new:"
7
+ button_reload: ":lesli.shared.button_reload:"
8
+ view_files: ":lesli.shared.view_files:"
9
+ view_quick_actions: ":lesli.shared.view_quick_actions:"
10
+ button_list: ":lesli.shared.button_list:"
11
+ button_save: ":lesli.shared.button_save:"
12
+ button_delete: ":lesli.shared.button_delete:"
13
+ button_edit: ":lesli.shared.button_edit:"
14
+ view_status_active: ":lesli.shared.view_status_active:"
15
+ view_status_inactive: ":lesli.shared.view_status_inactive:"
16
+ button_settings: ":lesli.shared.button_settings:"
17
+ button_show: ":lesli.shared.button_show:"
18
+ toolbar_search: ":lesli.shared.toolbar_search:"
19
+ message_operation_success: ":lesli.shared.message_operation_success:"
20
+ message_operation_error: ":lesli.shared.message_operation_error:"
21
+ application:
22
+ navigation_logout: ":lesli.application.navigation_logout:"
23
+ navigation_my_profile: ":lesli.application.navigation_my_profile:"
24
+ users/sessions:
25
+ view_username: ":lesli.users/sessions.view_username:"
26
+ dashboards:
27
+ title: ":lesli.dashboards.title:"
28
+ column_name: ":lesli.dashboards.column_name:"
29
+ column_default: ":lesli.dashboards.column_default:"
30
+ view_add_component: ":lesli.dashboards.view_add_component:"
@@ -0,0 +1,30 @@
1
+ ---
2
+ :pt:
3
+ lesli:
4
+ shared:
5
+ view_discussions: ":lesli.shared.view_discussions:"
6
+ button_add_new: ":lesli.shared.button_add_new:"
7
+ button_reload: ":lesli.shared.button_reload:"
8
+ view_files: ":lesli.shared.view_files:"
9
+ view_quick_actions: ":lesli.shared.view_quick_actions:"
10
+ button_list: ":lesli.shared.button_list:"
11
+ button_save: ":lesli.shared.button_save:"
12
+ button_delete: ":lesli.shared.button_delete:"
13
+ button_edit: ":lesli.shared.button_edit:"
14
+ view_status_active: ":lesli.shared.view_status_active:"
15
+ view_status_inactive: ":lesli.shared.view_status_inactive:"
16
+ button_settings: ":lesli.shared.button_settings:"
17
+ button_show: ":lesli.shared.button_show:"
18
+ toolbar_search: ":lesli.shared.toolbar_search:"
19
+ message_operation_success: ":lesli.shared.message_operation_success:"
20
+ message_operation_error: ":lesli.shared.message_operation_error:"
21
+ application:
22
+ navigation_logout: ":lesli.application.navigation_logout:"
23
+ navigation_my_profile: ":lesli.application.navigation_my_profile:"
24
+ users/sessions:
25
+ view_username: ":lesli.users/sessions.view_username:"
26
+ dashboards:
27
+ title: ":lesli.dashboards.title:"
28
+ column_name: ":lesli.dashboards.column_name:"
29
+ column_default: ":lesli.dashboards.column_default:"
30
+ view_add_component: ":lesli.dashboards.view_add_component:"
data/config/routes.rb CHANGED
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
20
  Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
@@ -31,15 +31,6 @@ Building a better future, one line of code at a time.
31
31
  =end
32
32
 
33
33
 
34
- # Mount the devise at the deefault path
35
- # TODO:
36
- # The user can define the mount path for the auth framework
37
- # using: "Lesli::Routing.mount_login_at('auth')" so, later
38
- # we will must to check if devise is already mounted before
39
- # to call this method.
40
- Lesli::Routing.mount_login
41
-
42
-
43
34
  # Mount the necessary resources Lesli needs to work properly
44
35
  Lesli::Engine.routes.draw do
45
36
 
@@ -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,20 +30,26 @@ Building a better future, one line of code at a time.
30
30
  // ·
31
31
  =end
32
32
 
33
- class CreateLesliUserDetails < ActiveRecord::Migration[6.0]
33
+ class CreateLesliAccounts < ActiveRecord::Migration[5.2]
34
34
  def change
35
- create_table :lesli_user_details do |t|
36
- t.string :title
37
- t.string :address
38
-
39
- t.bigint :work_city
40
- t.bigint :work_region
41
- t.bigint :work_address
42
-
43
- t.datetime :deleted_at, index: true
35
+ create_table :lesli_accounts do |t|
36
+ # account status
37
+ # 1. -> :registered
38
+ # 2. -> :onboarding
39
+ # 3. -> :active
40
+ # 4. -> :suspended
41
+ t.integer :status, default: 1, null: false
42
+
43
+ # unique email to identify the account
44
+ t.string :email
45
+
46
+ # name of the account
47
+ t.string :name
48
+
49
+ # Acts as paranoid
50
+ t.datetime :deleted_at, index: true
44
51
  t.timestamps
45
52
  end
46
- add_reference(:lesli_user_details, :user, foreign_key: { to_table: :lesli_users })
47
- #add_reference(:lesli_user_details, :account_location, foreign_key: { to_table: :account_locations })
53
+ add_index(:lesli_accounts, :email, unique: true)
48
54
  end
49
55
  end
@@ -17,7 +17,7 @@ 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 SaaS development platform.
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
22
  Made with ♥ by https://www.lesli.tech
23
23
  Building a better future, one line of code at a time.
@@ -27,15 +27,12 @@ Building a better future, one line of code at a time.
27
27
  @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
28
 
29
29
  // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
- // ·
30
+ // ·
31
31
  =end
32
32
 
33
- class CreateLesliAccounts < ActiveRecord::Migration[5.2]
33
+ class CreateLesliAccountDetails < ActiveRecord::Migration[6.0]
34
34
  def change
35
- create_table :lesli_accounts do |t|
36
- # account status
37
- t.integer :status
38
- t.string :email
35
+ create_table :lesli_account_details do |t|
39
36
 
40
37
  # company information
41
38
  t.string :company_name
@@ -68,5 +65,6 @@ class CreateLesliAccounts < ActiveRecord::Migration[5.2]
68
65
  t.datetime :deleted_at, index: true
69
66
  t.timestamps
70
67
  end
68
+ add_reference(:lesli_account_details, :account, foreign_key: { to_table: :lesli_accounts })
71
69
  end
72
70
  end
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
20
  Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
@@ -30,7 +30,7 @@ Building a better future, one line of code at a time.
30
30
  // ·
31
31
  =end
32
32
 
33
- class CreateLesliAccountSettings < ActiveRecord::Migration[6.0]
33
+ class CreateLesliAccountSettings < ActiveRecord::Migration[5.2]
34
34
  def change
35
35
  create_table :lesli_account_settings do |t|
36
36
  t.string :name
@@ -36,12 +36,15 @@ company = Lesli.config.company
36
36
 
37
37
 
38
38
  # create account
39
- Lesli::Account.find_or_create_by(company_name: company[:name]) do |account|
40
- account.email = company[:email]
41
- account.company_name = company[:name]
42
- account.public_email = company[:email]
43
- account.company_tagline = company[:tag_line] || ""
44
- #account.registered!
39
+ Lesli::Account.find_or_create_by(email: company[:email]) do |account|
40
+ account.name = company[:name]
45
41
  account.save!
46
- L2.msg("Account #{ account.company_name } <#{ account.email }> successfully created!")
42
+
43
+ # account.detail.company_name = company[:name]
44
+ # account.detail.public_email = company[:email]
45
+ # account.detail.company_tagline = company[:tag_line] || ""
46
+ # #account.registered!
47
+ # account.detail.save!
48
+
49
+ L2.msg("Account #{ account.name } <#{ account.email }> successfully created!")
47
50
  end
@@ -30,23 +30,23 @@ Building a better future, one line of code at a time.
30
30
  // ·
31
31
  =end
32
32
 
33
-
34
- # get settings
35
- company = Lesli.config.company
36
-
37
-
38
- # Create company user
39
- user = create_development_user(company[:email], "owner", company[:name], "")
40
- user.account.user = user
41
- user.account.save!
42
-
43
-
44
- # core development users
45
- [
46
- ["ldonis@lesli.tech", "owner", "Luis", "Donis"],
47
- ["admin@lesli.tech", "admin","Admin","Lesli"],
48
- ["guest@lesli.tech", "limited", "Guest","Lesli"],
49
- ["test@lesli.tech", "admin", "Test", "Lesli"],
50
- ].each do |user|
51
- create_development_user(user[0], user[1], user[2], user[3])
52
- end
33
+ if defined? LesliSecurity
34
+
35
+ # get settings
36
+ company = Lesli.config.company
37
+
38
+ # Create company user
39
+ user = create_development_user(company[:email], "owner", company[:name], "")
40
+ user.account.user = user
41
+ user.account.save!
42
+
43
+ # core development users
44
+ [
45
+ ["ldonis@lesli.tech", "owner", "Luis", "Donis"],
46
+ ["admin@lesli.tech", "admin","Admin","Lesli"],
47
+ ["guest@lesli.tech", "limited", "Guest","Lesli"],
48
+ ["test@lesli.tech", "admin", "Test", "Lesli"],
49
+ ].each do |user|
50
+ create_development_user(user[0], user[1], user[2], user[3])
51
+ end
52
+ end
@@ -36,12 +36,15 @@ company = Lesli.config.company
36
36
 
37
37
 
38
38
  # create account
39
- Lesli::Account.find_or_create_by(company_name: company[:name]) do |account|
40
- account.email = company[:email]
41
- account.company_name = company[:name]
42
- account.public_email = company[:email]
43
- account.company_tagline = company[:tag_line] || ""
44
- #account.registered!
39
+ Lesli::Account.find_or_create_by(email: company[:email]) do |account|
40
+ account.name = company[:name]
45
41
  account.save!
46
- L2.msg("Account #{ account.company_name } <#{ account.email }> successfully created!")
42
+
43
+ # account.detail.company_name = company[:name]
44
+ # account.detail.public_email = company[:email]
45
+ # account.detail.company_tagline = company[:tag_line] || ""
46
+ # #account.registered!
47
+ # account.detail.save!
48
+
49
+ L2.msg("Account #{ account.name } <#{ account.email }> successfully created!")
47
50
  end
@@ -0,0 +1,164 @@
1
+ =begin
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Ruby on Rails Development Platform.
21
+
22
+ Made with ♥ by https://www.lesli.tech
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 ApplicationLesliGenerator < 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,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,25 @@
1
+
2
+
3
+ # ·
4
+ require "#{Lesli::Engine.root}/lib/generators/application_lesli_generator.rb"
5
+
6
+ module Lesli
7
+ class SpecGenerator < ApplicationLesliGenerator
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