pg_rails 7.6.21.pre.10 → 7.6.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/pg_associable/app/helpers/pg_associable/form_builder_methods.rb +1 -0
  3. data/pg_engine/app/controllers/pg_engine/base_controller.rb +2 -0
  4. data/pg_engine/app/controllers/pg_engine/base_users_controller.rb +2 -0
  5. data/pg_engine/app/controllers/tenant/user_accounts_controller.rb +7 -16
  6. data/pg_engine/app/controllers/users/accounts_controller.rb +1 -1
  7. data/pg_engine/app/controllers/users/invitations_controller.rb +10 -4
  8. data/pg_engine/app/controllers/users/registrations_controller.rb +0 -2
  9. data/pg_engine/app/decorators/account_decorator.rb +3 -1
  10. data/pg_engine/app/decorators/pg_engine/base_record_decorator.rb +3 -2
  11. data/pg_engine/app/decorators/user_account_decorator.rb +4 -1
  12. data/pg_engine/app/helpers/pg_engine/flash_helper.rb +1 -1
  13. data/pg_engine/app/lib/pg_engine/default_url_options.rb +16 -12
  14. data/pg_engine/app/mailers/pg_engine/base_devise_mailer.rb +4 -0
  15. data/pg_engine/app/mailers/pg_engine/base_mailer.rb +16 -1
  16. data/pg_engine/app/models/account.rb +2 -6
  17. data/pg_engine/app/models/current.rb +1 -2
  18. data/pg_engine/app/models/email.rb +1 -1
  19. data/pg_engine/app/models/user.rb +10 -8
  20. data/pg_engine/app/models/user_account.rb +0 -4
  21. data/pg_engine/app/policies/account_policy.rb +9 -4
  22. data/pg_engine/app/policies/pg_engine/base_policy.rb +1 -1
  23. data/pg_engine/app/policies/user_account_policy.rb +1 -5
  24. data/pg_engine/app/views/layouts/_logo.html.slim +8 -0
  25. data/pg_engine/app/views/users/accounts/show.html.slim +4 -3
  26. data/pg_engine/config/locales/es.rb +2 -0
  27. data/pg_engine/config/locales/es.yml +8 -3
  28. data/pg_engine/lib/pg_engine/active_job_extensions.rb +15 -0
  29. data/pg_engine/lib/pg_engine/configuracion.rb +2 -0
  30. data/pg_engine/lib/pg_engine/engine.rb +0 -3
  31. data/pg_engine/lib/pg_engine/site_brand.rb +39 -0
  32. data/pg_engine/lib/pg_engine/test/dummy_brand.rb +81 -0
  33. data/pg_engine/lib/pg_engine.rb +11 -1
  34. data/pg_engine/spec/factories/users.rb +6 -3
  35. data/pg_engine/spec/mailers/pg_engine/base_mailer_spec.rb +53 -0
  36. data/pg_engine/spec/requests/devise/invitations_spec.rb +13 -4
  37. data/pg_engine/spec/requests/users/accounts_spec.rb +19 -10
  38. data/pg_engine/spec/requests/users/base_controller_spec.rb +13 -12
  39. data/pg_engine/spec/requests/users/registrations_spec.rb +19 -18
  40. data/pg_engine/spec/requests/users/user_accounts_spec.rb +37 -1
  41. data/pg_layout/app/views/devise/invitations/new.html.erb +2 -1
  42. data/pg_layout/app/views/devise/mailer/invitation_instructions.html.erb +1 -1
  43. data/pg_layout/app/views/devise/mailer/invitation_instructions.text.erb +1 -1
  44. data/pg_layout/app/views/layouts/pg_layout/base.html.slim +1 -1
  45. data/pg_layout/app/views/layouts/pg_layout/container_logo.html.slim +2 -3
  46. data/pg_layout/app/views/layouts/pg_layout/containerized.html.slim +2 -1
  47. data/pg_layout/app/views/layouts/pg_layout/devise_mailer.html.slim +3 -7
  48. data/pg_layout/app/views/layouts/pg_layout/devise_mailer.text.erb +2 -4
  49. data/pg_layout/app/views/layouts/pg_layout/mailer.html.slim +3 -7
  50. data/pg_layout/app/views/layouts/pg_layout/mailer.text.erb +2 -4
  51. data/pg_layout/app/views/pg_layout/_navbar.html.slim +7 -8
  52. data/pg_layout/app/views/pg_layout/_sidebar.html.slim +1 -1
  53. data/pg_layout/app/views/pg_layout/_sidebar_mobile.html.slim +1 -1
  54. data/pg_layout/app/views/pg_layout/_signed_in_links.html.slim +4 -4
  55. data/pg_rails/lib/version.rb +1 -1
  56. metadata +7 -2
@@ -4,7 +4,9 @@ require_relative 'pg_engine/engine'
4
4
  require_relative 'pg_engine/core_ext'
5
5
  require_relative 'pg_engine/error'
6
6
  require_relative 'pg_engine/configuracion'
7
+ require_relative 'pg_engine/site_brand'
7
8
  require_relative 'pg_engine/navigator'
9
+ require_relative 'pg_engine/active_job_extensions'
8
10
  require_relative 'pg_engine/email_observer'
9
11
  require_relative 'pg_engine/mailgun/log_sync'
10
12
  require_relative 'pg_engine/route_helpers'
@@ -84,12 +86,16 @@ end
84
86
 
85
87
  module PgEngine
86
88
  class << self
87
- attr_writer :configuracion
89
+ attr_writer :configuracion, :site_brand
88
90
 
89
91
  def configuracion
90
92
  @configuracion ||= Configuracion.new
91
93
  end
92
94
 
95
+ def site_brand
96
+ @site_brand || (raise PgEngine::Error, 'no site brand manager')
97
+ end
98
+
93
99
  def config
94
100
  configuracion
95
101
  end
@@ -115,3 +121,7 @@ module PgEngine
115
121
  @deprecator ||= ActiveSupport::Deprecation.new('7.5', 'PgEngine')
116
122
  end
117
123
  end
124
+
125
+ ActiveSupport.on_load(:active_job) do |base|
126
+ base.prepend PgEngine::ActiveJobExtensions
127
+ end
@@ -72,9 +72,12 @@ FactoryBot.define do
72
72
  trait :owner do
73
73
  after(:create) do |model|
74
74
  model.user_accounts.create!(profiles: [:account__owner])
75
- # ActsAsTenant.with_tenant(create(:account)) do
76
- # model.user_accounts.create!(profiles: [:account__owner])
77
- # end
75
+ end
76
+ end
77
+
78
+ trait :guest do
79
+ after(:create) do |model|
80
+ model.user_accounts.create!(profiles: [])
78
81
  end
79
82
  end
80
83
  end
@@ -0,0 +1,53 @@
1
+ require 'rails_helper'
2
+
3
+ class DummyMailer < ApplicationMailer
4
+ def test_mail
5
+ mail(to: 'fake@mail.com') do |format|
6
+ format.html { render inline: erb_template } # rubocop:disable Rails/RenderInline
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def erb_template
13
+ <<-ERB
14
+ <%= root_url %>
15
+ ERB
16
+ end
17
+ end
18
+
19
+ describe PgEngine::BaseMailer do
20
+ describe 'default_url_options' do
21
+ subject do
22
+ mail.deliver
23
+ end
24
+
25
+ let(:mail) { DummyMailer.test_mail }
26
+
27
+ # rubocop:disable Style/GlobalVars
28
+ before do
29
+ $site_brand_before = PgEngine.site_brand
30
+ PgEngine.site_brand = PgEngine::Test::DummyBrand.new(include_all: true)
31
+ end
32
+
33
+ after do
34
+ PgEngine.site_brand = $site_brand_before
35
+ end
36
+ # rubocop:enable Style/GlobalVars
37
+
38
+ it 'cuando elige el default' do
39
+ expect { subject }.to have_warned('Default site brand chosen')
40
+ expect(mail.body.encoded).to include 'factura.localhost'
41
+ expect(mail.header_fields.get_field(:from).value).to include 'Factura Bien'
42
+ expect(mail.header_fields.get_field(:from).value).to include 'noreply@factura'
43
+ end
44
+
45
+ it 'cuando es un brand específico' do
46
+ Current.app_name = :procura
47
+ subject
48
+ expect(mail.body.encoded).to include 'procura.localhost'
49
+ expect(mail.header_fields.get_field(:from).value).to include 'Procura Bien'
50
+ expect(mail.header_fields.get_field(:from).value).to include 'noreply@procura'
51
+ end
52
+ end
53
+ end
@@ -2,7 +2,7 @@ require 'rails_helper'
2
2
 
3
3
  RSpec::Matchers.define_negated_matcher :not_change, :change
4
4
 
5
- describe 'invite users to the platform and to an account' do
5
+ describe 'invite users to the platform and to an account #' do
6
6
  let(:account) { ActsAsTenant.current_tenant }
7
7
 
8
8
  describe 'send an invitation to the platform', :tpath_req do
@@ -108,7 +108,7 @@ describe 'invite users to the platform and to an account' do
108
108
  end
109
109
  end
110
110
 
111
- describe 'update an invitation' do
111
+ describe 'when updating an invitation' do
112
112
  let(:logged_user) { create :user, account: }
113
113
  let(:user_account) do
114
114
  logged_user.user_accounts.first
@@ -119,7 +119,7 @@ describe 'invite users to the platform and to an account' do
119
119
  user_account.update(membership_status:, invitation_status: :ist_invited)
120
120
  end
121
121
 
122
- context 'when accepting an invite' do
122
+ context 'accepting an invite' do
123
123
  subject do
124
124
  put "/u/espacios/#{account.to_param}/update_invitation", params: { accept: 1 }
125
125
  end
@@ -130,7 +130,16 @@ describe 'invite users to the platform and to an account' do
130
130
  expect { subject }.to change { user_account.reload.invitation_status }.to('ist_accepted')
131
131
  end
132
132
 
133
- pending 'and doesnt belong to the account'
133
+ context 'and doesnt belong to the account' do
134
+ before do
135
+ user_account.destroy
136
+ end
137
+
138
+ it 'returns unauthorized' do
139
+ subject
140
+ expect(response).to have_http_status(:unauthorized)
141
+ end
142
+ end
134
143
  end
135
144
 
136
145
  context 'when rejecting an invite' do
@@ -9,7 +9,7 @@ describe 'Users::AccountsController' do
9
9
  create_list :user, 2
10
10
  end
11
11
 
12
- describe 'show' do
12
+ describe '#show' do
13
13
  it 'shows the owned account' do
14
14
  get "/u/espacios/#{account.to_param}"
15
15
  expect(response).to have_http_status(:ok)
@@ -21,7 +21,7 @@ describe 'Users::AccountsController' do
21
21
  expect(response).to have_http_status(:unauthorized)
22
22
  end
23
23
 
24
- context 'when not the owner' do
24
+ context 'when is guest user' do
25
25
  subject do
26
26
  get "/u/espacios/#{other_account.to_param}"
27
27
  end
@@ -38,23 +38,21 @@ describe 'Users::AccountsController' do
38
38
  end
39
39
  end
40
40
 
41
- context 'when its active' do
41
+ context 'and has access to user list' do
42
42
  let(:profiles) { [:user_accounts__read] }
43
43
 
44
- pending 'See the users'
45
-
46
44
  it do
47
45
  subject
48
- # expect(response.body).to have_text('Lista de usuarios')
49
- expect(response.body).to have_text('Dejar la cuenta')
46
+ expect(response.body).to include('embedded__user_accounts')
47
+ expect(response.body).to have_text('Dejar el espacio')
50
48
  end
51
49
  end
52
50
 
53
51
  context 'when its active and dont have user_accounts__read access' do
54
52
  it do
55
53
  subject
56
- expect(response.body).to have_no_text('Lista de usuarios')
57
- expect(response.body).to have_text('Dejar la cuenta')
54
+ expect(response.body).not_to include('embedded__user_accounts')
55
+ expect(response.body).to have_text('Dejar el espacio')
58
56
  end
59
57
  end
60
58
 
@@ -64,7 +62,7 @@ describe 'Users::AccountsController' do
64
62
  it do
65
63
  subject
66
64
  expect(response.body).to have_text('Deshabilitado')
67
- expect(response.body).to have_text('Dejar la cuenta')
65
+ expect(response.body).to have_text('Dejar el espacio')
68
66
  end
69
67
  end
70
68
 
@@ -79,6 +77,17 @@ describe 'Users::AccountsController' do
79
77
  end
80
78
  end
81
79
 
80
+ describe '#edit' do
81
+ let(:nombre) { Faker::Lorem.sentence }
82
+
83
+ it do
84
+ get "/u/espacios/#{account.to_param}/edit"
85
+ expect(response).to have_http_status(:ok)
86
+ patch "/u/espacios/#{account.to_param}", params: { account: { nombre: } }
87
+ expect(account.reload.nombre).to eq nombre
88
+ end
89
+ end
90
+
82
91
  describe 'index' do
83
92
  subject do
84
93
  get '/u/espacios'
@@ -30,17 +30,18 @@ describe 'redirection' do
30
30
  end
31
31
  end
32
32
 
33
- context 'when belongs to other account', pending: 'subdomains not ready' do
34
- before do
35
- create :account, subdomain: 'other'
36
- host! 'other.example.com'
37
- end
38
-
39
- it do
40
- get '/u/t/cosas'
41
-
42
- expect(response).to redirect_to new_user_session_path, tpath: false
43
- end
44
- end
33
+ # TODO: activar subdomains
34
+ # context 'when belongs to other account', pending: 'subdomains not ready' do
35
+ # before do
36
+ # create :account, subdomain: 'other'
37
+ # host! 'other.example.com'
38
+ # end
39
+
40
+ # it do
41
+ # get '/u/t/cosas'
42
+
43
+ # expect(response).to redirect_to new_user_session_path, tpath: false
44
+ # end
45
+ # end
45
46
  end
46
47
  end
@@ -70,24 +70,25 @@ describe 'registrations controller' do
70
70
  end
71
71
  end
72
72
 
73
- context 'cuando hay tenant' do
74
- before do
75
- host! 'bien.localhost.com'
76
- create :account, subdomain: 'bien'
77
- end
78
-
79
- it do
80
- expect { subject }.to change(User, :count).by(1)
81
- end
82
-
83
- it 'creates the user account', pending: 'subdomains not working' do
84
- expect { subject }.to change(UserAccount, :count).by(1)
85
- end
86
-
87
- it do
88
- expect { subject }.not_to change(Account, :count)
89
- end
90
- end
73
+ # TODO: activar subdomains
74
+ # context 'cuando hay tenant' do
75
+ # before do
76
+ # host! 'bien.localhost.com'
77
+ # create :account, subdomain: 'bien'
78
+ # end
79
+
80
+ # it do
81
+ # expect { subject }.to change(User, :count).by(1)
82
+ # end
83
+
84
+ # it 'creates the user account', pending: 'subdomains not working' do
85
+ # expect { subject }.to change(UserAccount, :count).by(1)
86
+ # end
87
+
88
+ # it do
89
+ # expect { subject }.not_to change(Account, :count)
90
+ # end
91
+ # end
91
92
  end
92
93
 
93
94
  describe '#edit' do
@@ -10,7 +10,43 @@ describe 'user accounts', :tpath_req do
10
10
  sign_in logged_user
11
11
  end
12
12
 
13
- pending 'index'
13
+ describe '#index' do
14
+ subject do
15
+ get '/u/t/user_accounts'
16
+ end
17
+
18
+ it do
19
+ subject
20
+ expect(response).to have_http_status(:ok)
21
+ end
22
+
23
+ context 'when user is owner' do
24
+ it 'shows the permissions' do
25
+ subject
26
+ expect(response.body).to have_text('Permisos')
27
+ end
28
+ end
29
+
30
+ context 'when user is guest' do
31
+ before do
32
+ create :user, :owner
33
+ end
34
+
35
+ let!(:logged_user) { create :user, :guest }
36
+
37
+ it 'when cant see the user list returns unauthorized' do
38
+ subject
39
+ expect(response).to have_http_status(:unauthorized)
40
+ end
41
+
42
+ it 'when can see user list dont shows the permissions' do
43
+ logged_user.user_account_for(account).update(profiles: [:user_accounts__read])
44
+ subject
45
+ expect(response).to have_http_status(:ok)
46
+ expect(response.body).to have_no_text('Permisos')
47
+ end
48
+ end
49
+ end
14
50
 
15
51
  describe 'show' do
16
52
  it do
@@ -1,4 +1,5 @@
1
- <h2><%= t "devise.invitations.new.header" %></h2>
1
+ <h2><%= UserAccount.new.decorate.submit_default_value %></h2>
2
+
2
3
  <div style="max-width: 40em" data-controller="pg_form">
3
4
  <%= pg_form_for(resource, as: resource_name, url: invitation_path(resource_name), html: { method: :post }) do |f| %>
4
5
  <div class="form-inputs">
@@ -1,4 +1,4 @@
1
- <p><%= t("devise.mailer.invitation_instructions.someone_invited_you", inviter: @resource.invited_by, app_name: I18n.t(@resource.invited_to_app, scope: 'app_name')) %></p>
1
+ <p><%= t("devise.mailer.invitation_instructions.someone_invited_you", inviter: @resource.invited_by, app_name: PgEngine.site_brand.name) %></p>
2
2
 
3
3
  <p><%= t("devise.mailer.invitation_instructions.follow_link") %></p>
4
4
 
@@ -1,4 +1,4 @@
1
- <%= t("devise.mailer.invitation_instructions.someone_invited_you", inviter: @resource.invited_by, app_name: I18n.t(@resource.invited_to_app, scope: 'app_name')) %>
1
+ <%= t("devise.mailer.invitation_instructions.someone_invited_you", inviter: @resource.invited_by, app_name: PgEngine.site_brand.name) %>
2
2
 
3
3
  <%= t("devise.mailer.invitation_instructions.follow_link") %>
4
4
 
@@ -9,7 +9,7 @@ html
9
9
  meta name="turbo-visit-control" content="reload"
10
10
 
11
11
  - cache :title_icon
12
- title = t(Current.app_name, scope: 'app_name')
12
+ title = PgEngine.site_brand.name
13
13
  - begin
14
14
  = render partial: 'layouts/favicon'
15
15
  - rescue ActionView::MissingTemplate => e
@@ -1,9 +1,8 @@
1
1
  - content_for :content do
2
2
  .container-fluid.pt-4
3
3
  .text-center
4
- - if @navbar.logo_xl_url.present?
5
- .mb-4
6
- = image_tag @navbar.logo_xl_url, class: 'img-fluid', style: 'max-height: 4em'
4
+ .mb-4
5
+ = image_tag PgEngine.site_brand.logo_xl_url, class: 'img-fluid', style: 'max-height: 4em'
7
6
 
8
7
  = content_for?(:container_logo_content) ? yield(:container_logo_content) : yield
9
8
 
@@ -1,5 +1,6 @@
1
1
  - content_for :content do
2
- div class="pt-3 #{modal_targeted? ? '' : @container_class || 'container-fluid'}" style=@container_style
2
+ - klass = modal_targeted? ? '' : (@container_class || 'container-fluid')
3
+ div class="pt-3 #{klass}" style=@container_style
3
4
  = content_for?(:containerized_content) ? yield(:containerized_content) : yield
4
5
 
5
6
  = render template: 'layouts/pg_layout/base'
@@ -3,10 +3,6 @@ html
3
3
  center
4
4
  = yield
5
5
 
6
- - if @footer_href.present?
7
- footer style="margin-top: 2em;"
8
- = link_to @footer_href, rel: 'noreferrer', target: :_blank do
9
- - if @footer_image_src.present?
10
- = image_tag @footer_image_src, alt: @footer_image_alt
11
- - else
12
- = @footer_image_alt
6
+ footer style="margin-top: 2em;"
7
+ = link_to PgEngine.site_brand.landing_site_url, rel: 'noreferrer', target: :_blank do
8
+ = image_tag @footer_image_src, alt: PgEngine.site_brand.name
@@ -1,7 +1,5 @@
1
1
  <%= yield %>
2
2
 
3
- <% if @footer_href.present? %>
4
3
  ----------------------
5
- <%= @footer_image_alt %>
6
- <%= @footer_href %>
7
- <% end %>
4
+ <%= PgEngine.site_brand.name %>
5
+ <%= PgEngine.site_brand.landing_site_url %>
@@ -2,10 +2,6 @@ html
2
2
  body style="font-family: sans-serif"
3
3
  = yield
4
4
 
5
- - if @footer_href.present?
6
- footer style="margin-top: 2em;"
7
- = link_to @footer_href, rel: 'noreferrer', target: :_blank do
8
- - if @footer_image_src.present?
9
- = image_tag @footer_image_src, alt: @footer_image_alt
10
- - else
11
- = @footer_image_alt
5
+ footer style="margin-top: 2em;"
6
+ = link_to PgEngine.site_brand.landing_site_url, rel: 'noreferrer', target: :_blank do
7
+ = image_tag @footer_image_src, alt: PgEngine.site_brand.name
@@ -1,7 +1,5 @@
1
1
  <%= yield %>
2
2
 
3
- <% if @footer_href.present? %>
4
3
  ----------------------
5
- <%= @footer_image_alt %>
6
- <%= @footer_href %>
7
- <% end %>
4
+ <%= PgEngine.site_brand.name %>
5
+ <%= PgEngine.site_brand.landing_site_url %>
@@ -1,21 +1,20 @@
1
1
  nav class="navbar navbar-expand-#{@breakpoint_navbar_expand}" data-bs-theme="dark"
2
- .container-fluid.xgap-2
2
+ .container-fluid.gap-2
3
3
  div
4
4
  - unless @sidebar == false
5
5
  button data-controller="navbar" data-action="navbar#expandNavbar" class="btn btn-outline-light me-2 d-none d-#{@breakpoint_navbar_expand}-inline-block"
6
6
  i class="bi #{@navbar_chevron_class}"
7
- - if @navbar.logo.present?
8
- span.ms-3
9
- = render @navbar.logo
7
+ span.ms-3
8
+ = render partial: 'layouts/logo'
10
9
  - if user_signed_in? && @notifications_bell.present?
11
10
  div class="d-#{@breakpoint_navbar_expand}-none"
12
11
  = render @notifications_bell
13
- div
12
+ .d-flex
13
+ - @navbar.extensiones.each do |extension|
14
+ = extension
14
15
  - if user_signed_in?
15
16
  .collapse.navbar-collapse.justify-content-end
16
17
  = render partial: 'pg_layout/signed_in_links'
17
- - @navbar.extensiones.each do |extension|
18
- = extension
19
18
  div class="d-#{@breakpoint_navbar_expand}-none"
20
19
  - if user_signed_in?
21
20
  a.d-flex.align-items-center.gap-2 href="#" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample" aria-controls="offcanvasExample"
@@ -38,7 +37,7 @@ nav class="navbar navbar-expand-#{@breakpoint_navbar_expand}" data-bs-theme="dar
38
37
  = render NotificationComponent.with_collection(@notifications) if @notifications&.any?
39
38
  - else
40
39
  span.text-light.text-center
41
- | No hay notificaciones
40
+ | No hay notificaciones
42
41
  .text-center
43
42
  button.btn.btn-link.text-light.btn-sm[type="button" data-bs-toggle="collapse" data-bs-target="#notifications-collapse"]
44
43
  i.bi-chevron-up.fs-3
@@ -1,7 +1,7 @@
1
1
  div id="sidebar" class="#{@navbar_opened_class} flex-shrink-0 d-none d-#{@breakpoint_navbar_expand}-block"
2
2
  .mt-1
3
3
  .m-3
4
- = render @navbar.logo if @navbar.logo.present?
4
+ = render partial: 'layouts/logo'
5
5
  ul.list-unstyled.ps-0.mt-5
6
6
  - @navbar.sidebar.each do |entry|
7
7
  - next if @navbar.hide_entry?(entry)
@@ -14,4 +14,4 @@
14
14
  = entry[:title]
15
15
  css:
16
16
  .offcanvas a { text-decoration: none; }
17
- .offcanvas li { xmargin-top: 0.75em; }
17
+ .offcanvas li { xmargin-top: 0.75em; }
@@ -18,19 +18,19 @@ ul.navbar-nav.gap-3.align-items-center class="gap-#{@breakpoint_navbar_expand}-0
18
18
  li = link_to ua.account, tenant_root_path(tid: ua.to_param), class: 'dropdown-item'
19
19
  li
20
20
  hr.dropdown-divider
21
- li = link_to "Administrar #{Account.model_name.human(count: 2).downcase}", users_accounts_path(tid: nil), class: 'dropdown-item'
21
+ li = link_to "Administrar #{Account.nombre_plural.downcase}", users_accounts_path(tid: nil), class: 'dropdown-item'
22
22
  - elsif @other_active_accounts&.any?
23
23
  li.nav-item.dropdown.d-flex
24
24
  = link_to '#', class: 'nav-link dropdown-toggle py-0 d-flex align-items-center',
25
25
  role: :button, 'data-bs-toggle': :dropdown, 'aria-expanded': 'false' do
26
26
  i.bi.bi-bag-fill.me-2 style="font-size: 1.7em"
27
- = Account.model_name.human(count: 2)
27
+ = Account.nombre_plural
28
28
  ul.dropdown-menu
29
29
  - @other_active_accounts.each do |ua|
30
30
  li = link_to ua.account, tenant_root_path(tid: ua.to_param), class: 'dropdown-item'
31
31
  li
32
32
  hr.dropdown-divider
33
- li = link_to "Administrar #{Account.model_name.human(count: 2).downcase}", users_accounts_path(tid: nil), class: 'dropdown-item'
33
+ li = link_to "Administrar #{Account.nombre_plural.downcase}", users_accounts_path(tid: nil), class: 'dropdown-item'
34
34
 
35
35
  .vr.bg-white.mx-3.d-none class="d-#{@breakpoint_navbar_expand}-inline-block"
36
36
  - if Current.user.present? && @notifications_bell.present?
@@ -47,7 +47,7 @@ ul.navbar-nav.gap-3.align-items-center class="gap-#{@breakpoint_navbar_expand}-0
47
47
  = Current.user
48
48
  ul.dropdown-menu
49
49
  li = link_to 'Mi cuenta', edit_user_registration_path(tid: nil), class: 'dropdown-item'
50
- li = link_to Account.model_name.human(count: 2), users_accounts_path(tid: nil), class: 'dropdown-item'
50
+ li = link_to Account.nombre_plural, users_accounts_path(tid: nil), class: 'dropdown-item'
51
51
  - if Current.user.developer?
52
52
  li = link_to 'Admin', admin_users_path, class: 'dropdown-item'
53
53
  li = link_to 'Cerrar sesión', destroy_user_session_path(tid: nil),
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PgRails
4
- VERSION = '7.6.21-10'
4
+ VERSION = '7.6.21'
5
5
  end
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.21.pre.10
4
+ version: 7.6.21
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-05 00:00:00.000000000 Z
11
+ date: 2024-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -807,6 +807,7 @@ files:
807
807
  - pg_engine/app/views/admin/users/edit.html.slim
808
808
  - pg_engine/app/views/admin/users/new.html.slim
809
809
  - pg_engine/app/views/admin/users/show.html.slim
810
+ - pg_engine/app/views/layouts/_logo.html.slim
810
811
  - pg_engine/app/views/layouts/action_text/contents/_content.html.erb
811
812
  - pg_engine/app/views/pg_engine/admin_mailer/admin_mail.html.slim
812
813
  - pg_engine/app/views/pg_engine/base/download.xlsx.axlsx
@@ -864,6 +865,7 @@ files:
864
865
  - pg_engine/db/migrate/20241027225618_add_membership_status_to_user_accounts.rb
865
866
  - pg_engine/db/seeds.rb
866
867
  - pg_engine/lib/pg_engine.rb
868
+ - pg_engine/lib/pg_engine/active_job_extensions.rb
867
869
  - pg_engine/lib/pg_engine/configuracion.rb
868
870
  - pg_engine/lib/pg_engine/core_ext.rb
869
871
  - pg_engine/lib/pg_engine/email_observer.rb
@@ -872,6 +874,8 @@ files:
872
874
  - pg_engine/lib/pg_engine/mailgun/log_sync.rb
873
875
  - pg_engine/lib/pg_engine/navigator.rb
874
876
  - pg_engine/lib/pg_engine/route_helpers.rb
877
+ - pg_engine/lib/pg_engine/site_brand.rb
878
+ - pg_engine/lib/pg_engine/test/dummy_brand.rb
875
879
  - pg_engine/lib/pg_engine/utils/pdf_preview_generator.rb
876
880
  - pg_engine/lib/pg_engine/utils/pg_logger.rb
877
881
  - pg_engine/lib/pg_engine/utils/resource_reports.rb
@@ -913,6 +917,7 @@ files:
913
917
  - pg_engine/spec/lib/pg_engine/mailgun/log_sync_spec.rb
914
918
  - pg_engine/spec/lib/pg_engine/utils/pg_engine/pg_logger_spec.rb
915
919
  - pg_engine/spec/lib/pg_form_builder_spec.rb
920
+ - pg_engine/spec/mailers/pg_engine/base_mailer_spec.rb
916
921
  - pg_engine/spec/mailers/previews/devise_preview.rb
917
922
  - pg_engine/spec/models/account_spec.rb
918
923
  - pg_engine/spec/models/concerns/pg_engine/child_record_spec.rb