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.
- checksums.yaml +4 -4
- data/pg_associable/app/javascript/modal_controller.js +8 -4
- data/pg_associable/spec/pg_associable/helpers_spec.rb +8 -13
- data/pg_engine/app/components/inline_edit/inline_edit_component.html.slim +1 -1
- data/pg_engine/app/components/inline_edit/inline_show_component.html.slim +2 -2
- data/pg_engine/app/components/notifications_bell_component.rb +1 -1
- data/pg_engine/app/controllers/admin/accounts_controller.rb +2 -2
- data/pg_engine/app/controllers/admin/user_accounts_controller.rb +3 -3
- data/pg_engine/app/controllers/admin/users_controller.rb +4 -1
- data/pg_engine/app/controllers/concerns/pg_engine/resource.rb +12 -7
- data/pg_engine/app/controllers/concerns/pg_engine/tenant_helper.rb +33 -0
- data/pg_engine/app/controllers/pg_engine/base_admin_controller.rb +0 -1
- data/pg_engine/app/controllers/pg_engine/base_controller.rb +18 -21
- data/pg_engine/app/controllers/pg_engine/base_public_controller.rb +1 -1
- data/pg_engine/app/controllers/pg_engine/base_users_controller.rb +5 -3
- data/pg_engine/app/controllers/pg_engine/devise_controller.rb +4 -1
- data/pg_engine/app/controllers/pg_engine/tenant_controller.rb +22 -0
- data/pg_engine/app/controllers/{users → tenant}/dashboard_controller.rb +2 -2
- data/pg_engine/app/controllers/tenant/inline_edit_controller.rb +22 -0
- data/pg_engine/app/controllers/tenant/user_accounts_controller.rb +56 -0
- data/pg_engine/app/controllers/users/accounts_controller.rb +46 -15
- data/pg_engine/app/controllers/users/invitations_controller.rb +78 -0
- data/pg_engine/app/controllers/users/notifications_controller.rb +1 -0
- data/pg_engine/app/controllers/users/registrations_controller.rb +3 -2
- data/pg_engine/app/decorators/account_decorator.rb +18 -0
- data/pg_engine/app/decorators/pg_engine/base_record_decorator.rb +9 -1
- data/pg_engine/app/decorators/user_account_decorator.rb +76 -11
- data/pg_engine/app/helpers/pg_engine/accounts_helper.rb +9 -0
- data/pg_engine/app/helpers/pg_engine/frame_helper.rb +12 -0
- data/pg_engine/app/lib/pg_engine/default_url_options.rb +21 -0
- data/pg_engine/app/lib/pg_engine/filtros_builder.rb +2 -0
- data/pg_engine/app/models/account.rb +28 -1
- data/pg_engine/app/models/concerns/pg_engine/child_record.rb +55 -0
- data/pg_engine/app/models/current.rb +29 -3
- data/pg_engine/app/models/pg_engine/base_record.rb +5 -0
- data/pg_engine/app/models/user.rb +56 -14
- data/pg_engine/app/models/user_account.rb +74 -9
- data/pg_engine/app/policies/account_policy.rb +35 -16
- data/pg_engine/app/policies/email_log_policy.rb +0 -4
- data/pg_engine/app/policies/email_policy.rb +0 -4
- data/pg_engine/app/policies/pg_engine/base_policy.rb +31 -10
- data/pg_engine/app/policies/user_account_policy.rb +59 -25
- data/pg_engine/app/policies/user_policy.rb +14 -1
- data/pg_engine/app/views/admin/user_accounts/_form.html.slim +1 -1
- data/pg_engine/app/views/admin/user_accounts/show.html.slim +15 -0
- data/pg_engine/app/views/admin/users/show.html.slim +0 -3
- data/pg_engine/app/views/pg_engine/base/index.html.slim +2 -2
- data/pg_engine/app/views/tenant/dashboard/dashboard.html.slim +2 -0
- data/pg_engine/app/views/tenant/user_accounts/_fields.html.slim +13 -0
- data/pg_engine/app/views/tenant/user_accounts/_form.html.slim +9 -0
- data/pg_engine/app/views/tenant/user_accounts/show.html.slim +20 -0
- data/pg_engine/app/views/users/accounts/_form.html.slim +7 -0
- data/pg_engine/app/views/users/accounts/show.html.slim +23 -15
- data/pg_engine/config/initializers/acts_as_tenant.rb +7 -2
- data/pg_engine/config/initializers/devise.rb +10 -0
- data/pg_engine/config/initializers/ransack.rb +2 -0
- data/pg_engine/config/locales/es.yml +60 -0
- data/pg_engine/config/routes.rb +21 -11
- data/pg_engine/config/simple_form/simple_form_bootstrap.rb +2 -2
- data/pg_engine/db/migrate/20241023203849_devise_invitable.rb +14 -0
- data/pg_engine/db/migrate/20241027225618_add_membership_status_to_user_accounts.rb +6 -0
- data/pg_engine/db/seeds.rb +6 -6
- data/pg_engine/lib/pg_engine/configuracion.rb +36 -1
- data/pg_engine/lib/pg_engine/navigator.rb +2 -25
- data/pg_engine/lib/pg_engine.rb +1 -0
- data/pg_engine/spec/controllers/admin/accounts_controller_spec.rb +3 -2
- data/pg_engine/spec/controllers/admin/user_accounts_controller_spec.rb +11 -9
- data/pg_engine/spec/factories/accounts.rb +8 -0
- data/pg_engine/spec/factories/user_accounts.rb +1 -1
- data/pg_engine/spec/factories/users.rb +6 -0
- data/pg_engine/spec/models/concerns/pg_engine/child_record_spec.rb +27 -0
- data/pg_engine/spec/models/user_account_spec.rb +5 -1
- data/pg_engine/spec/models/user_spec.rb +3 -25
- data/pg_engine/spec/policies/account_policy_spec.rb +19 -0
- data/pg_engine/spec/requests/devise/invitations_spec.rb +196 -0
- data/pg_engine/spec/requests/resource_spec.rb +14 -15
- data/pg_engine/spec/requests/users/accounts_spec.rb +117 -8
- data/pg_engine/spec/requests/users/base_controller_spec.rb +31 -0
- data/pg_engine/spec/requests/users/dashboard_spec.rb +4 -9
- data/pg_engine/spec/requests/users/date_jumper_spec.rb +2 -1
- data/pg_engine/spec/requests/users/inline_edit_spec.rb +6 -5
- data/pg_engine/spec/requests/users/registrations_spec.rb +2 -2
- data/pg_engine/spec/requests/users/user_accounts_spec.rb +54 -0
- data/pg_engine/spec/system/login_spec.rb +2 -2
- data/pg_engine/spec/system/noticed_spec.rb +0 -2
- data/pg_engine/spec/system/signup_spec.rb +4 -3
- data/pg_engine/spec/system/tenants_spec.rb +10 -9
- data/pg_layout/app/javascript/application.js +1 -1
- data/pg_layout/app/javascript/config/turbo_rails/index.js +1 -1
- data/pg_layout/app/lib/navbar.rb +15 -1
- data/pg_layout/app/views/devise/invitations/edit.html.erb +34 -0
- data/pg_layout/app/views/devise/invitations/new.html.erb +15 -0
- data/pg_layout/app/views/devise/mailer/invitation_instructions.html.erb +11 -0
- data/pg_layout/app/views/devise/mailer/invitation_instructions.text.erb +11 -0
- data/pg_layout/app/views/devise/registrations/edit.html.erb +1 -0
- data/pg_layout/app/views/layouts/pg_layout/base.html.slim +7 -5
- data/pg_layout/app/views/pg_layout/_navbar.html.erb +7 -6
- data/pg_layout/app/views/pg_layout/_sidebar.html.erb +2 -20
- data/pg_layout/app/views/pg_layout/_signed_in_links.html.slim +52 -0
- data/pg_layout/lib/pg_layout.rb +0 -5
- data/pg_rails/lib/pg_rails/pundit_matchers.rb +21 -0
- data/pg_rails/lib/pg_rails/tpath_support.rb +73 -0
- data/pg_rails/lib/pg_rails.rb +6 -0
- data/pg_rails/lib/version.rb +1 -1
- data/pg_rails/scss/pg_rails.scss +1 -1
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/controller_spec.rb +1 -1
- data/pg_scaffold/lib/generators/pg_slim/templates/index.html.slim +1 -1
- metadata +43 -9
- data/pg_engine/app/controllers/concerns/pg_engine/require_tenant_set.rb +0 -15
- data/pg_engine/app/controllers/users/account_switcher_controller.rb +0 -30
- data/pg_engine/app/controllers/users/inline_edit_controller.rb +0 -21
- data/pg_engine/app/views/users/account_switcher/list.html.slim +0 -24
- data/pg_engine/app/views/users/dashboard/dashboard.html.slim +0 -1
- 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'
|
data/pg_layout/lib/pg_layout.rb
CHANGED
@@ -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:
|
data/pg_rails/lib/pg_rails.rb
CHANGED
@@ -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?
|
data/pg_rails/lib/version.rb
CHANGED
data/pg_rails/scss/pg_rails.scss
CHANGED
@@ -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
|
-
//
|
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;
|
@@ -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
|
-
/
|
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.
|
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-
|
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/
|
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/
|
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/
|
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/
|
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
|