pg_rails 7.6.20 → 7.6.21.pre.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/pg_associable/app/javascript/modal_controller.js +8 -4
  3. data/pg_associable/spec/pg_associable/helpers_spec.rb +8 -13
  4. data/pg_engine/app/components/inline_edit/inline_edit_component.html.slim +1 -1
  5. data/pg_engine/app/components/inline_edit/inline_show_component.html.slim +2 -2
  6. data/pg_engine/app/components/notifications_bell_component.rb +1 -1
  7. data/pg_engine/app/controllers/admin/accounts_controller.rb +2 -2
  8. data/pg_engine/app/controllers/admin/user_accounts_controller.rb +3 -3
  9. data/pg_engine/app/controllers/admin/users_controller.rb +4 -1
  10. data/pg_engine/app/controllers/concerns/pg_engine/resource.rb +12 -7
  11. data/pg_engine/app/controllers/concerns/pg_engine/tenant_helper.rb +33 -0
  12. data/pg_engine/app/controllers/pg_engine/base_admin_controller.rb +0 -1
  13. data/pg_engine/app/controllers/pg_engine/base_controller.rb +18 -21
  14. data/pg_engine/app/controllers/pg_engine/base_public_controller.rb +1 -1
  15. data/pg_engine/app/controllers/pg_engine/base_users_controller.rb +5 -3
  16. data/pg_engine/app/controllers/pg_engine/devise_controller.rb +4 -1
  17. data/pg_engine/app/controllers/pg_engine/tenant_controller.rb +22 -0
  18. data/pg_engine/app/controllers/{users → tenant}/dashboard_controller.rb +2 -2
  19. data/pg_engine/app/controllers/tenant/inline_edit_controller.rb +22 -0
  20. data/pg_engine/app/controllers/tenant/user_accounts_controller.rb +56 -0
  21. data/pg_engine/app/controllers/users/accounts_controller.rb +46 -15
  22. data/pg_engine/app/controllers/users/invitations_controller.rb +78 -0
  23. data/pg_engine/app/controllers/users/notifications_controller.rb +1 -0
  24. data/pg_engine/app/controllers/users/registrations_controller.rb +3 -2
  25. data/pg_engine/app/decorators/account_decorator.rb +18 -0
  26. data/pg_engine/app/decorators/pg_engine/base_record_decorator.rb +9 -1
  27. data/pg_engine/app/decorators/user_account_decorator.rb +76 -11
  28. data/pg_engine/app/helpers/pg_engine/accounts_helper.rb +9 -0
  29. data/pg_engine/app/helpers/pg_engine/frame_helper.rb +12 -0
  30. data/pg_engine/app/lib/pg_engine/default_url_options.rb +21 -0
  31. data/pg_engine/app/lib/pg_engine/filtros_builder.rb +2 -0
  32. data/pg_engine/app/models/account.rb +28 -1
  33. data/pg_engine/app/models/concerns/pg_engine/child_record.rb +55 -0
  34. data/pg_engine/app/models/current.rb +29 -3
  35. data/pg_engine/app/models/pg_engine/base_record.rb +5 -0
  36. data/pg_engine/app/models/user.rb +56 -14
  37. data/pg_engine/app/models/user_account.rb +74 -9
  38. data/pg_engine/app/policies/account_policy.rb +35 -16
  39. data/pg_engine/app/policies/email_log_policy.rb +0 -4
  40. data/pg_engine/app/policies/email_policy.rb +0 -4
  41. data/pg_engine/app/policies/pg_engine/base_policy.rb +31 -10
  42. data/pg_engine/app/policies/user_account_policy.rb +59 -25
  43. data/pg_engine/app/policies/user_policy.rb +14 -1
  44. data/pg_engine/app/views/admin/user_accounts/_form.html.slim +1 -1
  45. data/pg_engine/app/views/admin/user_accounts/show.html.slim +15 -0
  46. data/pg_engine/app/views/admin/users/show.html.slim +0 -3
  47. data/pg_engine/app/views/pg_engine/base/index.html.slim +2 -2
  48. data/pg_engine/app/views/tenant/dashboard/dashboard.html.slim +2 -0
  49. data/pg_engine/app/views/tenant/user_accounts/_fields.html.slim +13 -0
  50. data/pg_engine/app/views/tenant/user_accounts/_form.html.slim +9 -0
  51. data/pg_engine/app/views/tenant/user_accounts/show.html.slim +20 -0
  52. data/pg_engine/app/views/users/accounts/_form.html.slim +7 -0
  53. data/pg_engine/app/views/users/accounts/show.html.slim +23 -15
  54. data/pg_engine/config/initializers/acts_as_tenant.rb +7 -2
  55. data/pg_engine/config/initializers/devise.rb +10 -0
  56. data/pg_engine/config/initializers/ransack.rb +2 -0
  57. data/pg_engine/config/locales/es.yml +60 -0
  58. data/pg_engine/config/routes.rb +21 -11
  59. data/pg_engine/config/simple_form/simple_form_bootstrap.rb +2 -2
  60. data/pg_engine/db/migrate/20241023203849_devise_invitable.rb +14 -0
  61. data/pg_engine/db/migrate/20241027225618_add_membership_status_to_user_accounts.rb +6 -0
  62. data/pg_engine/db/seeds.rb +6 -6
  63. data/pg_engine/lib/pg_engine/configuracion.rb +36 -1
  64. data/pg_engine/lib/pg_engine/navigator.rb +2 -25
  65. data/pg_engine/lib/pg_engine.rb +1 -0
  66. data/pg_engine/spec/controllers/admin/accounts_controller_spec.rb +3 -2
  67. data/pg_engine/spec/controllers/admin/user_accounts_controller_spec.rb +11 -9
  68. data/pg_engine/spec/factories/accounts.rb +8 -0
  69. data/pg_engine/spec/factories/user_accounts.rb +1 -1
  70. data/pg_engine/spec/factories/users.rb +6 -0
  71. data/pg_engine/spec/models/concerns/pg_engine/child_record_spec.rb +27 -0
  72. data/pg_engine/spec/models/user_account_spec.rb +5 -1
  73. data/pg_engine/spec/models/user_spec.rb +3 -25
  74. data/pg_engine/spec/policies/account_policy_spec.rb +19 -0
  75. data/pg_engine/spec/requests/devise/invitations_spec.rb +196 -0
  76. data/pg_engine/spec/requests/resource_spec.rb +14 -15
  77. data/pg_engine/spec/requests/users/accounts_spec.rb +117 -8
  78. data/pg_engine/spec/requests/users/base_controller_spec.rb +31 -0
  79. data/pg_engine/spec/requests/users/dashboard_spec.rb +4 -9
  80. data/pg_engine/spec/requests/users/date_jumper_spec.rb +2 -1
  81. data/pg_engine/spec/requests/users/inline_edit_spec.rb +6 -5
  82. data/pg_engine/spec/requests/users/registrations_spec.rb +2 -2
  83. data/pg_engine/spec/requests/users/user_accounts_spec.rb +54 -0
  84. data/pg_engine/spec/system/login_spec.rb +2 -2
  85. data/pg_engine/spec/system/noticed_spec.rb +0 -2
  86. data/pg_engine/spec/system/signup_spec.rb +4 -3
  87. data/pg_engine/spec/system/tenants_spec.rb +10 -9
  88. data/pg_layout/app/javascript/application.js +1 -1
  89. data/pg_layout/app/javascript/config/turbo_rails/index.js +1 -1
  90. data/pg_layout/app/lib/navbar.rb +15 -1
  91. data/pg_layout/app/views/devise/invitations/edit.html.erb +34 -0
  92. data/pg_layout/app/views/devise/invitations/new.html.erb +15 -0
  93. data/pg_layout/app/views/devise/mailer/invitation_instructions.html.erb +11 -0
  94. data/pg_layout/app/views/devise/mailer/invitation_instructions.text.erb +11 -0
  95. data/pg_layout/app/views/devise/registrations/edit.html.erb +1 -0
  96. data/pg_layout/app/views/layouts/pg_layout/base.html.slim +7 -5
  97. data/pg_layout/app/views/pg_layout/_navbar.html.erb +7 -6
  98. data/pg_layout/app/views/pg_layout/_sidebar.html.erb +2 -20
  99. data/pg_layout/app/views/pg_layout/_signed_in_links.html.slim +52 -0
  100. data/pg_layout/lib/pg_layout.rb +0 -5
  101. data/pg_rails/lib/pg_rails/pundit_matchers.rb +21 -0
  102. data/pg_rails/lib/pg_rails/tpath_support.rb +73 -0
  103. data/pg_rails/lib/pg_rails.rb +6 -0
  104. data/pg_rails/lib/version.rb +1 -1
  105. data/pg_rails/scss/pg_rails.scss +1 -1
  106. data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/controller_spec.rb +1 -1
  107. data/pg_scaffold/lib/generators/pg_slim/templates/index.html.slim +1 -1
  108. metadata +43 -9
  109. data/pg_engine/app/controllers/concerns/pg_engine/require_tenant_set.rb +0 -15
  110. data/pg_engine/app/controllers/users/account_switcher_controller.rb +0 -30
  111. data/pg_engine/app/controllers/users/inline_edit_controller.rb +0 -21
  112. data/pg_engine/app/views/users/account_switcher/list.html.slim +0 -24
  113. data/pg_engine/app/views/users/dashboard/dashboard.html.slim +0 -1
  114. data/pg_engine/spec/requests/users/switcher_spec.rb +0 -84
@@ -0,0 +1,52 @@
1
+ - if user_signed_in?
2
+ .xcollapse.xnavbar-collapse.justify-content-end
3
+ ul.navbar-nav.flex-row
4
+ - if Current.account.present?
5
+ li.nav-item.dropdown
6
+ = link_to '#', class: 'nav-link dropdown-toggle py-0 d-flex align-items-center',
7
+ role: :button, 'data-bs-toggle': :dropdown, 'aria-expanded': 'false' do
8
+ - if Current.account.logo.present?
9
+ = image_tag Current.account.logo.variant(:thumb), class: 'rounded-circle border border-2 me-2', width: 40, height: 40
10
+ - else
11
+ i.bi.bi-bag-fill.me-2 style="font-size: 1.7em"
12
+ = Current.account
13
+ ul.dropdown-menu
14
+ - if @other_active_accounts&.any?
15
+ h6.dropdown-header Cambiar a:
16
+ - @other_active_accounts.each do |ua|
17
+ li = link_to ua.account, tenant_root_path(tid: ua.to_param), class: 'dropdown-item'
18
+ li
19
+ hr.dropdown-divider
20
+ li = link_to "Administrar #{Account.model_name.human(count: 2)}", users_accounts_path(tid: nil), class: 'dropdown-item'
21
+ - elsif @other_active_accounts&.any?
22
+ li.nav-item.dropdown.d-flex
23
+ = link_to '#', class: 'nav-link dropdown-toggle py-0 d-flex align-items-center',
24
+ role: :button, 'data-bs-toggle': :dropdown, 'aria-expanded': 'false' do
25
+ i.bi.bi-bag-fill.me-2 style="font-size: 1.7em"
26
+ = Account.model_name.human(count: 2)
27
+ ul.dropdown-menu
28
+ - @other_active_accounts.each do |ua|
29
+ li = link_to ua.account, tenant_root_path(tid: ua.to_param), class: 'dropdown-item'
30
+ li
31
+ hr.dropdown-divider
32
+ li = link_to "Administrar #{Account.model_name.human(count: 2).downcase}", users_accounts_path(tid: nil), class: 'dropdown-item'
33
+
34
+ .vr.bg-white.mx-3
35
+ - if Current.user.present? && @notifications_bell.present?
36
+ = render @notifications_bell
37
+ .vr.bg-white.mx-3
38
+ li.nav-item.dropdown.me-3
39
+ = link_to '#', class: 'nav-link dropdown-toggle py-0 d-flex align-items-center',
40
+ role: :button, 'data-bs-toggle': :dropdown, 'aria-expanded': 'false' do
41
+ - if Current.user.avatar.present?
42
+ = image_tag Current.user.avatar.variant(:thumb), class: 'rounded-circle border border-2 me-2', width: 40, height: 40
43
+ - else
44
+ i.bi.bi-person-circle.me-2 style="font-size: 1.7em"
45
+ = Current.user
46
+ ul.dropdown-menu
47
+ li = link_to 'Perfil', edit_user_registration_path(tid: nil), class: 'dropdown-item'
48
+ li = link_to Account.model_name.human(count: 2), users_accounts_path(tid: nil), class: 'dropdown-item'
49
+ - if Current.user.developer?
50
+ li = link_to 'Admin', admin_users_path, class: 'dropdown-item'
51
+ li = link_to 'Cerrar sesión', destroy_user_session_path(tid: nil),
52
+ 'data-turbo-method': :delete, class: 'dropdown-item'
@@ -1,8 +1,3 @@
1
- # Para que la viewpath de pg_layout tenga precedencia sobre las de kaminari y devise
2
- require 'kaminari'
3
- require 'devise'
4
- require 'devise-i18n'
5
-
6
1
  require_relative 'pg_layout/engine'
7
2
 
8
3
  module PgLayout
@@ -0,0 +1,21 @@
1
+ # :nocov:
2
+ RSpec::Matchers.define :permit do |action|
3
+ match do |policy|
4
+ policy.public_send("#{action}?")
5
+ end
6
+
7
+ failure_message do |policy|
8
+ <<~STRING
9
+ #{policy.class} does not permit #{action}
10
+ on #{policy.record} for #{policy.user.inspect}.
11
+ STRING
12
+ end
13
+
14
+ failure_message_when_negated do |policy|
15
+ <<~STRING
16
+ #{policy.class} does not forbid #{action} on
17
+ #{policy.record} for #{policy.user.inspect}.
18
+ STRING
19
+ end
20
+ end
21
+ # :nocov:
@@ -0,0 +1,73 @@
1
+ # :nocov:
2
+ module PgEngine
3
+ module TpathSupport
4
+ module RequestsPatch
5
+ def get(url, **)
6
+ super(tpath(url), **)
7
+ end
8
+
9
+ def post(url, **)
10
+ super(tpath(url), **)
11
+ end
12
+
13
+ def put(url, **)
14
+ super(tpath(url), **)
15
+ end
16
+
17
+ def patch(url, **)
18
+ super(tpath(url), **)
19
+ end
20
+
21
+ def delete(url, **)
22
+ super(tpath(url), **)
23
+ end
24
+
25
+ def redirect_to(arg, tpath: true)
26
+ if tpath
27
+ super(tpath(arg, query_string: false))
28
+ else
29
+ super(arg)
30
+ end
31
+ end
32
+ end
33
+
34
+ module ControllersPatch
35
+ def redirect_to(arg, tpath: true)
36
+ if tpath
37
+ super(tpath(arg, query_string: false))
38
+ else
39
+ super(arg)
40
+ end
41
+ end
42
+ end
43
+
44
+ def _tpath_ua
45
+ usr = if respond_to?(:logged_user)
46
+ logged_user
47
+ elsif respond_to?(:user)
48
+ user
49
+ else
50
+ raise 'no user available'
51
+ end
52
+
53
+ raise 'user is null' if usr.nil?
54
+
55
+ usr.active_user_account_for(ActsAsTenant.current_tenant)
56
+ end
57
+
58
+ def tpath(arg, query_string: true)
59
+ ua = _tpath_ua
60
+ return arg.push(tid: ua.to_param) if arg.is_a? Array
61
+
62
+ path = arg
63
+
64
+ if query_string
65
+ "#{path}?tid=#{ua.to_param}"
66
+ else
67
+ # "/u/t/#{ua.to_param}#{path}"
68
+ path.sub('/u/t/', "/u/t/#{ua.to_param}/")
69
+ end
70
+ end
71
+ end
72
+ end
73
+ # :nocov:
@@ -1,3 +1,9 @@
1
+ # Para que la viewpath y localepath de pg_rails tengan precedencia sobre las de kaminari y devise
2
+ require 'kaminari'
3
+ require 'devise'
4
+ require 'devise-i18n'
5
+ require 'devise_invitable'
6
+
1
7
  require "#{__dir__}/../../pg_engine/lib/pg_engine"
2
8
  require "#{__dir__}/../../pg_associable/lib/pg_associable"
3
9
  require "#{__dir__}/../../pg_scaffold/lib/pg_scaffold" if Rails.env.local?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PgRails
4
- VERSION = '7.6.20'
4
+ VERSION = '7.6.21.pre.2'
5
5
  end
@@ -77,7 +77,7 @@ $values: 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100;
77
77
  white-space: nowrap;
78
78
  min-width: 30em * $value * 0.01;
79
79
 
80
- // FIXME: con css grid esto se debería poder hacer mejor
80
+ // TODO: con css grid esto se debería poder hacer mejor
81
81
  // además, el pg_asociable directamente se rompe
82
82
  &:has(form) {
83
83
  min-width: 28em;
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # FIXME: reemplazar por requests spec
3
+ # TODO: reemplazar por requests spec
4
4
  # generado con pg_rails
5
5
 
6
6
  require 'rails_helper'
@@ -9,7 +9,7 @@
9
9
  = @clase_modelo.new.decorate.new_link
10
10
  .ms-1
11
11
  = @clase_modelo.new.decorate.export_link(request.url)
12
- / FIXME: update
12
+ / TODO: update
13
13
  .collapse.p-2.border-bottom#filtros class="#{ 'show' if show_filters? }"
14
14
  .d-flex.align-items-center
15
15
  .px-2.d-none.d-sm-inline-block
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.6.20
4
+ version: 7.6.21.pre.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martín Rosso
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-22 00:00:00.000000000 Z
11
+ date: 2024-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -206,6 +206,20 @@ dependencies:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
208
  version: 1.12.0
209
+ - !ruby/object:Gem::Dependency
210
+ name: devise_invitable
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: 2.0.9
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: 2.0.9
209
223
  - !ruby/object:Gem::Dependency
210
224
  name: rails-i18n
211
225
  requirement: !ruby/object:Gem::Requirement
@@ -695,8 +709,8 @@ files:
695
709
  - pg_engine/app/controllers/admin/simple_user_notifiers_controller.rb
696
710
  - pg_engine/app/controllers/admin/user_accounts_controller.rb
697
711
  - pg_engine/app/controllers/admin/users_controller.rb
698
- - pg_engine/app/controllers/concerns/pg_engine/require_tenant_set.rb
699
712
  - pg_engine/app/controllers/concerns/pg_engine/resource.rb
713
+ - pg_engine/app/controllers/concerns/pg_engine/tenant_helper.rb
700
714
  - pg_engine/app/controllers/pg_engine/base_admin_controller.rb
701
715
  - pg_engine/app/controllers/pg_engine/base_controller.rb
702
716
  - pg_engine/app/controllers/pg_engine/base_public_controller.rb
@@ -704,14 +718,16 @@ files:
704
718
  - pg_engine/app/controllers/pg_engine/devise_controller.rb
705
719
  - pg_engine/app/controllers/pg_engine/health_controller.rb
706
720
  - pg_engine/app/controllers/pg_engine/require_sign_in.rb
721
+ - pg_engine/app/controllers/pg_engine/tenant_controller.rb
707
722
  - pg_engine/app/controllers/public/mensaje_contactos_controller.rb
708
723
  - pg_engine/app/controllers/public/webhooks_controller.rb
709
- - pg_engine/app/controllers/users/account_switcher_controller.rb
724
+ - pg_engine/app/controllers/tenant/dashboard_controller.rb
725
+ - pg_engine/app/controllers/tenant/inline_edit_controller.rb
726
+ - pg_engine/app/controllers/tenant/user_accounts_controller.rb
710
727
  - pg_engine/app/controllers/users/accounts_controller.rb
711
728
  - pg_engine/app/controllers/users/confirmations_controller.rb
712
- - pg_engine/app/controllers/users/dashboard_controller.rb
713
729
  - pg_engine/app/controllers/users/date_jumper_controller.rb
714
- - pg_engine/app/controllers/users/inline_edit_controller.rb
730
+ - pg_engine/app/controllers/users/invitations_controller.rb
715
731
  - pg_engine/app/controllers/users/notifications_controller.rb
716
732
  - pg_engine/app/controllers/users/registrations_controller.rb
717
733
  - pg_engine/app/decorators/account_decorator.rb
@@ -722,6 +738,7 @@ files:
722
738
  - pg_engine/app/decorators/pg_engine/base_record_decorator.rb
723
739
  - pg_engine/app/decorators/user_account_decorator.rb
724
740
  - pg_engine/app/decorators/user_decorator.rb
741
+ - pg_engine/app/helpers/pg_engine/accounts_helper.rb
725
742
  - pg_engine/app/helpers/pg_engine/flash_helper.rb
726
743
  - pg_engine/app/helpers/pg_engine/form_helper.rb
727
744
  - pg_engine/app/helpers/pg_engine/frame_helper.rb
@@ -734,6 +751,7 @@ files:
734
751
  - pg_engine/app/inputs/pg_engine/fecha_input.rb
735
752
  - pg_engine/app/lib/pg_engine/bootstrap5_breadcrumbs_builder.rb
736
753
  - pg_engine/app/lib/pg_engine/date_jumper.rb
754
+ - pg_engine/app/lib/pg_engine/default_url_options.rb
737
755
  - pg_engine/app/lib/pg_engine/devise_failure_app.rb
738
756
  - pg_engine/app/lib/pg_engine/error_helper.rb
739
757
  - pg_engine/app/lib/pg_engine/filtros_builder.rb
@@ -742,6 +760,7 @@ files:
742
760
  - pg_engine/app/mailers/pg_engine/base_mailer.rb
743
761
  - pg_engine/app/mailers/pg_engine/user_mailer.rb
744
762
  - pg_engine/app/models/account.rb
763
+ - pg_engine/app/models/concerns/pg_engine/child_record.rb
745
764
  - pg_engine/app/models/concerns/pg_engine/naming.rb
746
765
  - pg_engine/app/models/current.rb
747
766
  - pg_engine/app/models/email.rb
@@ -797,9 +816,12 @@ files:
797
816
  - pg_engine/app/views/pg_engine/user_mailer/notification.text.slim
798
817
  - pg_engine/app/views/public/mensaje_contactos/_gracias.html.slim
799
818
  - pg_engine/app/views/public/mensaje_contactos/new.html.slim
800
- - pg_engine/app/views/users/account_switcher/list.html.slim
819
+ - pg_engine/app/views/tenant/dashboard/dashboard.html.slim
820
+ - pg_engine/app/views/tenant/user_accounts/_fields.html.slim
821
+ - pg_engine/app/views/tenant/user_accounts/_form.html.slim
822
+ - pg_engine/app/views/tenant/user_accounts/show.html.slim
823
+ - pg_engine/app/views/users/accounts/_form.html.slim
801
824
  - pg_engine/app/views/users/accounts/show.html.slim
802
- - pg_engine/app/views/users/dashboard/dashboard.html.slim
803
825
  - pg_engine/config/initializers/action_controller.rb
804
826
  - pg_engine/config/initializers/action_mailer.rb
805
827
  - pg_engine/config/initializers/active_admin.rb
@@ -837,6 +859,8 @@ files:
837
859
  - pg_engine/db/migrate/20240611000220_add_notifications_count_to_noticed_event.noticed.rb
838
860
  - pg_engine/db/migrate/20240614130246_create_action_text_tables.action_text.rb
839
861
  - pg_engine/db/migrate/20240905154330_account_tenant_columns.rb
862
+ - pg_engine/db/migrate/20241023203849_devise_invitable.rb
863
+ - pg_engine/db/migrate/20241027225618_add_membership_status_to_user_accounts.rb
840
864
  - pg_engine/db/seeds.rb
841
865
  - pg_engine/lib/pg_engine.rb
842
866
  - pg_engine/lib/pg_engine/configuracion.rb
@@ -890,6 +914,7 @@ files:
890
914
  - pg_engine/spec/lib/pg_form_builder_spec.rb
891
915
  - pg_engine/spec/mailers/previews/devise_preview.rb
892
916
  - pg_engine/spec/models/account_spec.rb
917
+ - pg_engine/spec/models/concerns/pg_engine/child_record_spec.rb
893
918
  - pg_engine/spec/models/email_log_spec.rb
894
919
  - pg_engine/spec/models/email_spec.rb
895
920
  - pg_engine/spec/models/mensaje_contacto_spec.rb
@@ -898,10 +923,12 @@ files:
898
923
  - pg_engine/spec/models/user_spec.rb
899
924
  - pg_engine/spec/overrides/audited_audit_spec.rb
900
925
  - pg_engine/spec/pg_engine/pdf_preview_generator_spec.rb
926
+ - pg_engine/spec/policies/account_policy_spec.rb
901
927
  - pg_engine/spec/requests/active_storage_spec.rb
902
928
  - pg_engine/spec/requests/admin/eventos_spec.rb
903
929
  - pg_engine/spec/requests/base_controller_requests_spec.rb
904
930
  - pg_engine/spec/requests/current_attributes_spec.rb
931
+ - pg_engine/spec/requests/devise/invitations_spec.rb
905
932
  - pg_engine/spec/requests/devise_spec.rb
906
933
  - pg_engine/spec/requests/public/webhooks_spec.rb
907
934
  - pg_engine/spec/requests/resource_spec.rb
@@ -911,7 +938,7 @@ files:
911
938
  - pg_engine/spec/requests/users/date_jumper_spec.rb
912
939
  - pg_engine/spec/requests/users/inline_edit_spec.rb
913
940
  - pg_engine/spec/requests/users/registrations_spec.rb
914
- - pg_engine/spec/requests/users/switcher_spec.rb
941
+ - pg_engine/spec/requests/users/user_accounts_spec.rb
915
942
  - pg_engine/spec/system/alerts_spec.rb
916
943
  - pg_engine/spec/system/breadcrumbs_spec.rb
917
944
  - pg_engine/spec/system/date_selector_spec.rb
@@ -960,8 +987,12 @@ files:
960
987
  - pg_layout/app/javascript/utils/utils.ts
961
988
  - pg_layout/app/lib/navbar.rb
962
989
  - pg_layout/app/views/devise/confirmations/new.html.erb
990
+ - pg_layout/app/views/devise/invitations/edit.html.erb
991
+ - pg_layout/app/views/devise/invitations/new.html.erb
963
992
  - pg_layout/app/views/devise/mailer/confirmation_instructions.html.erb
964
993
  - pg_layout/app/views/devise/mailer/email_changed.html.erb
994
+ - pg_layout/app/views/devise/mailer/invitation_instructions.html.erb
995
+ - pg_layout/app/views/devise/mailer/invitation_instructions.text.erb
965
996
  - pg_layout/app/views/devise/mailer/password_change.html.erb
966
997
  - pg_layout/app/views/devise/mailer/reset_password_instructions.html.erb
967
998
  - pg_layout/app/views/devise/mailer/unlock_instructions.html.erb
@@ -993,6 +1024,7 @@ files:
993
1024
  - pg_layout/app/views/pg_layout/_navbar.html.erb
994
1025
  - pg_layout/app/views/pg_layout/_sidebar.html.erb
995
1026
  - pg_layout/app/views/pg_layout/_sidebar_mobile.html.erb
1027
+ - pg_layout/app/views/pg_layout/_signed_in_links.html.slim
996
1028
  - pg_layout/lib/pg_layout.rb
997
1029
  - pg_layout/lib/pg_layout/engine.rb
998
1030
  - pg_layout/spec/lib/navbar_spec.rb
@@ -1001,9 +1033,11 @@ files:
1001
1033
  - pg_rails/lib/pg_rails/capybara_support.rb
1002
1034
  - pg_rails/lib/pg_rails/current_attributes_support.rb
1003
1035
  - pg_rails/lib/pg_rails/dotenv_support.rb
1036
+ - pg_rails/lib/pg_rails/pundit_matchers.rb
1004
1037
  - pg_rails/lib/pg_rails/redis_support.rb
1005
1038
  - pg_rails/lib/pg_rails/rspec_logger_matchers.rb
1006
1039
  - pg_rails/lib/pg_rails/tom_select_helpers.rb
1040
+ - pg_rails/lib/pg_rails/tpath_support.rb
1007
1041
  - pg_rails/lib/pg_rails/vcr_support.rb
1008
1042
  - pg_rails/lib/version.rb
1009
1043
  - pg_rails/scss/bootstrap_overrides.scss
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PgEngine
4
- module RequireTenantSet
5
- def self.included(klass)
6
- klass.before_action :require_tenant_set
7
- end
8
-
9
- def require_tenant_set
10
- return if ActsAsTenant.current_tenant.present?
11
-
12
- raise ActsAsTenant::Errors::NoTenantSet
13
- end
14
- end
15
- end
@@ -1,30 +0,0 @@
1
- module Users
2
- class AccountSwitcherController < PgEngine.config.users_controller
3
- rescue_from ActsAsTenant::Errors::NoTenantSet, with: :internal_error
4
- skip_before_action :require_tenant_set
5
-
6
- before_action do
7
- @no_main_frame = true
8
- end
9
-
10
- layout 'pg_layout/centered'
11
-
12
- around_action :set_without_tenant
13
-
14
- def set_without_tenant(&)
15
- ActsAsTenant.without_tenant(&)
16
- end
17
-
18
- def list
19
- @user_accounts = Current.user.user_accounts.kept
20
- end
21
-
22
- def switch
23
- # FIXME: handle not found
24
- scope = Current.user.user_accounts.kept
25
- user_account = scope.find(UserAccount.decode_id(params[:user_account_id]))
26
- session['current_user_account'] = user_account.id
27
- redirect_to root_path
28
- end
29
- end
30
- end
@@ -1,21 +0,0 @@
1
- module Users
2
- class InlineEditController < PgEngine.config.users_controller
3
- before_action do
4
- if current_turbo_frame.blank?
5
- render_my_component(BadRequestComponent.new, :bad_request)
6
- end
7
- end
8
-
9
- def edit
10
- model = GlobalID::Locator.locate params[:model]
11
- attribute = params[:attribute]
12
- render InlineEditComponent.new(model, attribute), layout: false
13
- end
14
-
15
- def show
16
- model = GlobalID::Locator.locate params[:model]
17
- attribute = params[:attribute]
18
- render InlineShowComponent.new(model, attribute), layout: false
19
- end
20
- end
21
- end
@@ -1,24 +0,0 @@
1
- h1 ¿Qué cuenta te gustaría utilizar?
2
-
3
- / FIXME!: user_accounts add active column
4
- - if @user_accounts.empty?
5
- p No tenés ninguna cuenta disponible
6
- - else
7
- - if @current_tenant_set_by_domain_or_subdomain
8
- p Estás en el dominio de #{ActsAsTenant.current_tenant} (#{request.host})
9
- p
10
- | Para cambiar de cuenta vas a tener que iniciar sesión en el dominio
11
- |< de Bien o de la cuenta específica a la que quieras cambiar
12
-
13
- ul.m-auto.list-group style="max-width: 20em"
14
- - @user_accounts.each do |user_account|
15
- li.list-group-item
16
- - if @current_tenant_set_by_domain_or_subdomain
17
- = user_account.account
18
- - elsif user_account.account == ActsAsTenant.current_tenant
19
- b
20
- = user_account.account
21
- | (Actual)
22
- - else
23
- = link_to user_account.account, users_account_switch_path(user_account),
24
- 'data-turbo-method': :post
@@ -1 +0,0 @@
1
- h1 Dashboard
@@ -1,84 +0,0 @@
1
- require 'rails_helper'
2
-
3
- describe 'redirection' do
4
- let(:logged_user) { create :user }
5
-
6
- before do
7
- sign_in logged_user
8
- end
9
-
10
- context 'when switcher controller raises no tenant set' do
11
- # This is to prevent a redirect loop
12
- before do
13
- allow_any_instance_of(User).to receive(:user_accounts).and_raise(ActsAsTenant::Errors::NoTenantSet)
14
- end
15
-
16
- it 'shows the error' do
17
- get '/u/switcher'
18
-
19
- expect(response).to have_http_status(:internal_server_error)
20
- end
21
- end
22
-
23
- it do
24
- get '/u/cosas'
25
-
26
- expect(response).to have_http_status(:ok)
27
- end
28
-
29
- context 'when account is discarded' do
30
- it do
31
- get '/u/cosas'
32
- expect(response.body).to include 'No hay ningún coso que mostrar'
33
- logged_user.user_accounts.first.account.discard!
34
- get '/u/cosas'
35
- expect(response).to redirect_to users_account_switcher_path
36
- end
37
- end
38
-
39
- context 'when has been removed from account' do
40
- let!(:other_account) { create :account }
41
- let!(:other_user_account) do
42
- ActsAsTenant.with_tenant(other_account) do
43
- logged_user.user_accounts.create!
44
- end
45
- end
46
-
47
- before do
48
- third_account = create :account
49
- ActsAsTenant.with_tenant(third_account) do
50
- logged_user.user_accounts.create!
51
- end
52
- end
53
-
54
- it 'redirects to switcher' do
55
- get '/u/cosas'
56
- expect(response).to redirect_to users_account_switcher_path
57
- follow_redirect!
58
- expect(response.body).to include '¿Qué cuenta te gustaría utilizar?'
59
- post "/u/switcher/#{other_user_account.to_param}"
60
- expect(response).to redirect_to(root_path)
61
- follow_redirect!
62
- get '/u/cosas'
63
- expect(response).to have_http_status(:ok)
64
- expect(response.body).to include other_account.to_s
65
- expect(response.body).to include 'No hay ningún coso que mostrar'
66
- other_user_account.destroy!
67
- get '/u/cosas'
68
- expect(response).to redirect_to users_account_switcher_path
69
- end
70
- end
71
-
72
- context 'when belongs to other account' do
73
- before do
74
- create :account, subdomain: 'other'
75
- host! 'other.example.com'
76
- end
77
-
78
- it do
79
- get '/u/cosas'
80
-
81
- expect(response).to redirect_to new_user_session_path
82
- end
83
- end
84
- end