pg_rails 7.5.3 → 7.5.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|