pg_rails 7.5.3 → 7.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/pg_associable/spec/pg_associable/helpers_spec.rb +14 -0
- data/pg_engine/app/controllers/concerns/pg_engine/require_tenant_set.rb +1 -1
- data/pg_engine/app/controllers/pg_engine/base_controller.rb +14 -5
- data/pg_engine/app/controllers/pg_engine/base_public_controller.rb +7 -1
- data/pg_engine/app/controllers/pg_engine/health_controller.rb +0 -1
- data/pg_engine/app/controllers/users/account_switcher_controller.rb +4 -2
- data/pg_engine/app/models/email.rb +0 -1
- data/pg_engine/app/models/user.rb +9 -0
- data/pg_engine/app/models/user_account.rb +6 -2
- data/pg_engine/app/views/users/account_switcher/list.html.slim +20 -16
- data/pg_engine/app/views/users/accounts/show.html.slim +2 -0
- data/pg_engine/config/initializers/acts_as_tenant.rb +3 -12
- data/pg_engine/db/seeds.rb +3 -4
- data/pg_engine/lib/pg_engine/utils/pg_logger.rb +5 -0
- data/pg_engine/spec/controllers/admin/accounts_controller_spec.rb +1 -1
- data/pg_engine/spec/controllers/admin/users_controller_spec.rb +1 -1
- data/pg_engine/spec/controllers/devise/sessions_controller_spec.rb +1 -0
- data/pg_engine/spec/controllers/users/registrations_controller_spec.rb +1 -1
- data/pg_engine/spec/factories/users.rb +5 -1
- data/pg_engine/spec/lib/pg_engine/mailgun/log_sync_spec.rb +4 -0
- data/pg_engine/spec/models/email_spec.rb +5 -0
- data/pg_engine/spec/requests/current_attributes_spec.rb +22 -0
- data/pg_engine/spec/requests/devise_spec.rb +24 -0
- data/pg_engine/spec/requests/users/switcher_spec.rb +11 -1
- data/pg_layout/app/views/devise/sessions/new.html.erb +1 -1
- data/pg_rails/lib/pg_rails/current_attributes_support.rb +6 -0
- data/pg_rails/lib/pg_rails/rspec_logger_matchers.rb +13 -1
- data/pg_rails/lib/version.rb +1 -1
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/edit_spec.rb +1 -1
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/index_spec.rb +1 -1
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/new_spec.rb +1 -1
- data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/show_spec.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6147cb183d30183dd5d8a80431d86acf783df0d94b0521a3cd68d25a71e75feb
|
4
|
+
data.tar.gz: 2a25529a08aa2883675013101c688ef2d2afd9e84294438e67aac9393fcfe3c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f3e802e2f8f75c265744ee30602c192a4e7ebbee6551295ef140e5d0af978ce5729bb9520cc98557518961bb0c2805252797de899fadafbdec183623822c8c1
|
7
|
+
data.tar.gz: 15ccca5fb52f689ce26402d75fcbf3b7794f8bf2b374c15e5d4ca385b012c17c4228bb45c475a5dc43ee449403eedaab4c95f17ebb1f9c1b8326124870b37af4
|
@@ -1,6 +1,20 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
3
|
describe PgAssociable::Helpers do
|
4
|
+
include ActiveSupport::CurrentAttributes::TestHelper
|
5
|
+
|
6
|
+
describe 'current attributes gets reset' do
|
7
|
+
it 'sets a current attribute' do
|
8
|
+
Current.user = 1
|
9
|
+
expect(Current.namespace).to be_nil
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'the attribute gets reset' do
|
13
|
+
Current.namespace = 2
|
14
|
+
expect(Current.user).to be_nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
4
18
|
# DEPRECATED
|
5
19
|
describe '#pg_respond_buscar with query scope' do
|
6
20
|
let(:ctrl) do
|
@@ -17,21 +17,30 @@ module PgEngine
|
|
17
17
|
# if ActsAsTenant.current_tenant.blank? && !global_domain?
|
18
18
|
# raise ActsAsTenant::Errors::NoTenantSet
|
19
19
|
# end
|
20
|
-
|
20
|
+
# FIXME: if current_tenant.present? check it's not discarded
|
21
|
+
# FIXME: if session['current_user_account'] present? check
|
22
|
+
# user belongs to it, and if not, cleanup
|
21
23
|
if Current.user.present?
|
24
|
+
user_accounts = Current.user.user_accounts.kept
|
22
25
|
if ActsAsTenant.current_tenant.present?
|
23
|
-
unless
|
26
|
+
unless user_accounts.exists?(account: ActsAsTenant.current_tenant)
|
27
|
+
pg_warn <<~WARN
|
28
|
+
#{Current.user.to_gid} not belongs to \
|
29
|
+
#{ActsAsTenant.current_tenant.to_gid}. Signed out
|
30
|
+
WARN
|
31
|
+
|
24
32
|
sign_out(Current.user)
|
25
33
|
throw :warden, scope: :user, message: :invalid
|
26
34
|
end
|
27
35
|
|
28
36
|
@current_tenant_set_by_domain_or_subdomain = true
|
29
37
|
else
|
30
|
-
account = if
|
31
|
-
|
38
|
+
account = if user_accounts.count == 1
|
39
|
+
user_accounts.first.account
|
32
40
|
elsif session['current_user_account'].present?
|
33
|
-
|
41
|
+
user_accounts.where(id: session['current_user_account']).first&.account
|
34
42
|
end
|
43
|
+
|
35
44
|
set_current_tenant(account)
|
36
45
|
end
|
37
46
|
end
|
@@ -1,13 +1,19 @@
|
|
1
1
|
module PgEngine
|
2
2
|
class BasePublicController < ApplicationController
|
3
|
+
before_action do
|
4
|
+
Current.namespace = :public
|
5
|
+
end
|
6
|
+
|
3
7
|
# :nocov:
|
4
8
|
def login_as
|
9
|
+
# FIXME: make a POST route
|
5
10
|
return head :bad_request unless dev_user_or_env?
|
6
11
|
|
7
12
|
usuario = User.find(params[:id])
|
8
13
|
if usuario.confirmed_at.present?
|
9
14
|
sign_in(:user, usuario)
|
10
|
-
redirect_to after_sign_in_path_for(usuario)
|
15
|
+
# redirect_to after_sign_in_path_for(usuario)
|
16
|
+
redirect_to users_root_path
|
11
17
|
else
|
12
18
|
go_back('No está confirmado')
|
13
19
|
end
|
@@ -10,11 +10,13 @@ module Users
|
|
10
10
|
layout 'pg_layout/centered'
|
11
11
|
|
12
12
|
def list
|
13
|
-
@user_accounts = Current.user.user_accounts
|
13
|
+
@user_accounts = Current.user.user_accounts.kept
|
14
14
|
end
|
15
15
|
|
16
16
|
def switch
|
17
|
-
|
17
|
+
# FIXME: handle not found
|
18
|
+
scope = Current.user.user_accounts.kept
|
19
|
+
user_account = scope.find(UserAccount.decode_id(params[:user_account_id]))
|
18
20
|
session['current_user_account'] = user_account.id
|
19
21
|
redirect_to root_path
|
20
22
|
end
|
@@ -71,6 +71,15 @@ class User < ApplicationRecord
|
|
71
71
|
|
72
72
|
attr_accessor :orphan
|
73
73
|
|
74
|
+
def active_for_authentication?
|
75
|
+
super && kept?
|
76
|
+
end
|
77
|
+
|
78
|
+
# TODO: test
|
79
|
+
def inactive_message
|
80
|
+
kept? ? super : :locked
|
81
|
+
end
|
82
|
+
|
74
83
|
after_create do
|
75
84
|
create_account unless orphan
|
76
85
|
end
|
@@ -32,8 +32,12 @@ class UserAccount < ApplicationRecord
|
|
32
32
|
belongs_to :creado_por, optional: true, class_name: 'User'
|
33
33
|
belongs_to :actualizado_por, optional: true, class_name: 'User'
|
34
34
|
|
35
|
+
# scope :kept, -> { undiscarded.joins(:account).merge(Account.kept) }
|
36
|
+
scope :kept, -> { joins(:account).merge(Account.kept) }
|
37
|
+
|
35
38
|
enumerize :profiles, in: {
|
36
|
-
|
37
|
-
|
39
|
+
administracion: 1,
|
40
|
+
operacion: 2,
|
41
|
+
lectura: 3
|
38
42
|
}, multiple: true
|
39
43
|
end
|
@@ -1,20 +1,24 @@
|
|
1
1
|
h1 Cambiar a otra cuenta
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
p
|
6
|
-
|
7
|
-
|
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
|
8
12
|
|
9
|
-
ul.m-auto.list-group style="max-width: 20em"
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
= user_account.account
|
14
|
-
- elsif user_account.account == ActsAsTenant.current_tenant
|
15
|
-
b
|
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
|
16
17
|
= user_account.account
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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,16 +1,7 @@
|
|
1
1
|
ActsAsTenant.configure do |config|
|
2
|
-
config.require_tenant =
|
3
|
-
|
4
|
-
|
5
|
-
# # # tal vez en algunos casos de devise sí requeriría el tenant?
|
6
|
-
# # # creería que no, el único lugar en donde se debería queriar
|
7
|
-
# # # User es en devise y es para obtener el current_user
|
8
|
-
# # # hay que ver luego qué pasa con invitable
|
9
|
-
# # false
|
10
|
-
# # else
|
11
|
-
# # true
|
12
|
-
# # end
|
13
|
-
# end
|
2
|
+
config.require_tenant = lambda do
|
3
|
+
Current.namespace == :users
|
4
|
+
end
|
14
5
|
|
15
6
|
# Customize the query for loading the tenant in background jobs
|
16
7
|
# config.job_scope = ->{ all }
|
data/pg_engine/db/seeds.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
DatabaseCleaner.clean_with(:truncation, except: %w(ar_internal_metadata))
|
2
2
|
|
3
|
-
|
4
3
|
bien = FactoryBot.create(:account, nombre: 'Bien', subdomain: 'bien')
|
5
4
|
rosso = FactoryBot.create(:user, email: 'mrosso10@gmail.com', nombre: 'Martín', apellido: 'Rosso', password: 'admin123',
|
6
5
|
confirmed_at: Time.now, developer: true, orphan: true)
|
7
6
|
|
8
|
-
bien.user_accounts.create(user: rosso, profiles: [:
|
7
|
+
bien.user_accounts.create(user: rosso, profiles: [:administracion])
|
9
8
|
|
10
9
|
racionalismo = FactoryBot.create(:account, nombre: 'Racionalismo', subdomain: 'racionalismo')
|
11
10
|
baruch = FactoryBot.create(:user, email: 'baruch@bien.com', nombre: 'Baruch', apellido: 'Spinoza', password: 'admin123',
|
@@ -13,5 +12,5 @@ baruch = FactoryBot.create(:user, email: 'baruch@bien.com', nombre: 'Baruch', ap
|
|
13
12
|
rené = FactoryBot.create(:user, email: 'rene@bien.com', nombre: 'René', apellido: 'Descartes', password: 'admin123',
|
14
13
|
confirmed_at: Time.now, orphan: true)
|
15
14
|
|
16
|
-
racionalismo.user_accounts.create(user: baruch, profiles: [:
|
17
|
-
racionalismo.user_accounts.create(user: rené, profiles: [:
|
15
|
+
racionalismo.user_accounts.create(user: baruch, profiles: [:administracion])
|
16
|
+
racionalismo.user_accounts.create(user: rené, profiles: [:operacion])
|
@@ -36,6 +36,11 @@ def pg_log(*)
|
|
36
36
|
PgEngine::PgLogger.log(*)
|
37
37
|
end
|
38
38
|
|
39
|
+
# To be called inside a method or block that is deprecated
|
40
|
+
def pg_deprecation(method, message = nil, deprecator:)
|
41
|
+
deprecator.warn(deprecator.deprecation_warning(method, message), caller_locations(3))
|
42
|
+
end
|
43
|
+
|
39
44
|
module PgEngine
|
40
45
|
class PgLogger
|
41
46
|
def self.test_logged_messages
|
@@ -5,6 +5,10 @@ describe PgEngine::Mailgun::LogSync, vcr: { cassette_name: 'mailgun/log_sync_dow
|
|
5
5
|
match_requests_on: %i[method host] } do
|
6
6
|
let(:instancia) { described_class }
|
7
7
|
|
8
|
+
before do
|
9
|
+
ActsAsTenant.current_tenant = nil
|
10
|
+
end
|
11
|
+
|
8
12
|
describe '#download' do
|
9
13
|
subject do
|
10
14
|
instancia.download
|
@@ -11,6 +11,11 @@ RSpec.describe Email do
|
|
11
11
|
expect(email).to be_persisted
|
12
12
|
end
|
13
13
|
|
14
|
+
it 'se persiste cuando no hay tenant' do
|
15
|
+
ActsAsTenant.current_tenant = nil
|
16
|
+
expect(email).to be_persisted
|
17
|
+
end
|
18
|
+
|
14
19
|
describe 'update_status!' do
|
15
20
|
context 'cuando hay accepted y delivered' do
|
16
21
|
subject do
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe 'current attributes' do
|
4
|
+
it 'Current gets reset between requests' do
|
5
|
+
allow(Current).to receive(:namespace=)
|
6
|
+
allow(Current.instance).to receive(:reset)
|
7
|
+
get '/contacto/new'
|
8
|
+
expect(Current).to have_received(:namespace=).with(:public)
|
9
|
+
expect(Current.instance).to have_received(:reset).at_least(:twice)
|
10
|
+
expect(Current.namespace).to be_nil
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'sets a current attribute' do
|
14
|
+
Current.user = 1
|
15
|
+
expect(Current.namespace).to be_nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'the attribute gets reset' do
|
19
|
+
Current.namespace = 2
|
20
|
+
expect(Current.user).to be_nil
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe 'devise flows' do
|
4
|
+
describe 'resend confirmation' do
|
5
|
+
subject do
|
6
|
+
post '/users/confirmation', params: { user: { email: user.email } }
|
7
|
+
end
|
8
|
+
|
9
|
+
let!(:user) { create :user, confirmed_at: nil }
|
10
|
+
|
11
|
+
it do
|
12
|
+
expect { subject }.to change(ActionMailer::Base.deliveries, :length).by(1)
|
13
|
+
end
|
14
|
+
|
15
|
+
it do
|
16
|
+
subject
|
17
|
+
expect(response).to redirect_to(new_user_session_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
it do
|
21
|
+
expect { subject }.not_to have_errored
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -26,6 +26,16 @@ describe 'redirection' do
|
|
26
26
|
expect(response).to have_http_status(:ok)
|
27
27
|
end
|
28
28
|
|
29
|
+
context 'when account is discarded' do
|
30
|
+
it do
|
31
|
+
get '/u/cosas'
|
32
|
+
expect(response.body).to include 'No hay cosos 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
|
+
|
29
39
|
context 'when has been removed from account' do
|
30
40
|
let!(:other_account) { create :account }
|
31
41
|
let!(:other_user_account) { logged_user.user_accounts.create(account: other_account) }
|
@@ -48,7 +58,7 @@ describe 'redirection' do
|
|
48
58
|
expect(response.body).to include other_account.to_s
|
49
59
|
expect(response.body).to include 'No hay cosos que mostrar'
|
50
60
|
other_user_account.destroy!
|
51
|
-
get '/'
|
61
|
+
get '/u/cosas'
|
52
62
|
expect(response).to redirect_to users_account_switcher_path
|
53
63
|
end
|
54
64
|
end
|
@@ -33,6 +33,18 @@ module PgEngine
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
def failure_message_when_negated
|
37
|
+
msg = "expected not to #{@level || log}"
|
38
|
+
msg << "with text: #{@text}" if @text.present?
|
39
|
+
return msg unless @new_messages.any?
|
40
|
+
|
41
|
+
msg << "\nLogged messages:"
|
42
|
+
@new_messages.each do |level, message|
|
43
|
+
msg << "\n #{level}: #{message[0..500]}"
|
44
|
+
end
|
45
|
+
msg
|
46
|
+
end
|
47
|
+
|
36
48
|
def failure_message
|
37
49
|
msg = "expected to #{@level || log}"
|
38
50
|
msg << "with text: #{@text}" if @text.present?
|
@@ -40,7 +52,7 @@ module PgEngine
|
|
40
52
|
|
41
53
|
msg << "\nLogged messages:"
|
42
54
|
@new_messages.each do |level, message|
|
43
|
-
msg << "\n #{level}: #{message[0..
|
55
|
+
msg << "\n #{level}: #{message[0..500]}"
|
44
56
|
end
|
45
57
|
msg
|
46
58
|
end
|
data/pg_rails/lib/version.rb
CHANGED
@@ -9,7 +9,7 @@ RSpec.describe "<%= ruta_vistas %>/edit", <%= type_metatag(:view) %> do
|
|
9
9
|
helper <%= mountable_engine? %>::Engine.routes.url_helpers
|
10
10
|
<% end -%>
|
11
11
|
|
12
|
-
let(:user) { create(:user, :
|
12
|
+
let(:user) { create(:user, :developer) }
|
13
13
|
|
14
14
|
before(:each) do
|
15
15
|
sign_in user
|
@@ -9,7 +9,7 @@ RSpec.describe "<%= ruta_vistas %>/index", <%= type_metatag(:view) %> do
|
|
9
9
|
helper <%= mountable_engine? %>::Engine.routes.url_helpers
|
10
10
|
<% end -%>
|
11
11
|
|
12
|
-
let(:user) { create(:user, :
|
12
|
+
let(:user) { create(:user, :developer) }
|
13
13
|
let!(:<%= plural_name %>) { create_list(:<%= nombre_tabla_completo_singular %>, rand(10..20))}
|
14
14
|
|
15
15
|
before(:each) do
|
@@ -9,7 +9,7 @@ RSpec.describe "<%= ruta_vistas %>/new", <%= type_metatag(:view) %> do
|
|
9
9
|
helper <%= mountable_engine? %>::Engine.routes.url_helpers
|
10
10
|
<% end -%>
|
11
11
|
|
12
|
-
let(:user) { create(:user, :
|
12
|
+
let(:user) { create(:user, :developer) }
|
13
13
|
|
14
14
|
before(:each) do
|
15
15
|
sign_in user
|
@@ -9,7 +9,7 @@ RSpec.describe "<%= ruta_vistas %>/show", <%= type_metatag(:view) %> do
|
|
9
9
|
helper <%= mountable_engine? %>::Engine.routes.url_helpers
|
10
10
|
<% end -%>
|
11
11
|
|
12
|
-
let(:user) { create(:user, :
|
12
|
+
let(:user) { create(:user, :developer) }
|
13
13
|
|
14
14
|
before(:each) do
|
15
15
|
sign_in user
|
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.5.
|
4
|
+
version: 7.5.5
|
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-09-
|
11
|
+
date: 2024-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -878,6 +878,8 @@ files:
|
|
878
878
|
- pg_engine/spec/pg_engine/pdf_preview_generator_spec.rb
|
879
879
|
- pg_engine/spec/requests/admin/eventos_spec.rb
|
880
880
|
- pg_engine/spec/requests/base_controller_requests_spec.rb
|
881
|
+
- pg_engine/spec/requests/current_attributes_spec.rb
|
882
|
+
- pg_engine/spec/requests/devise_spec.rb
|
881
883
|
- pg_engine/spec/requests/users/accounts_spec.rb
|
882
884
|
- pg_engine/spec/requests/users/base_controller_spec.rb
|
883
885
|
- pg_engine/spec/requests/users/date_jumper_spec.rb
|