pg_rails 7.6.17 → 7.6.18

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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/pg_associable/app/javascript/modal_controller.js +17 -1
  3. data/pg_engine/app/assets/stylesheets/pg_rails_b5.scss +8 -1
  4. data/pg_engine/app/components/inline_edit/inline_show_component.html.slim +2 -1
  5. data/pg_engine/app/components/search_bar_toggler_component.html.slim +5 -3
  6. data/pg_engine/app/controllers/admin/accounts_controller.rb +0 -4
  7. data/pg_engine/app/controllers/admin/email_logs_controller.rb +0 -4
  8. data/pg_engine/app/controllers/admin/emails_controller.rb +0 -4
  9. data/pg_engine/app/controllers/admin/simple_user_notifiers_controller.rb +0 -2
  10. data/pg_engine/app/controllers/admin/user_accounts_controller.rb +0 -4
  11. data/pg_engine/app/controllers/admin/users_controller.rb +0 -4
  12. data/pg_engine/app/controllers/concerns/pg_engine/resource.rb +121 -41
  13. data/pg_engine/app/controllers/public/mensaje_contactos_controller.rb +0 -4
  14. data/pg_engine/app/controllers/users/accounts_controller.rb +0 -4
  15. data/pg_engine/app/decorators/pg_engine/base_record_decorator.rb +39 -13
  16. data/pg_engine/app/helpers/pg_engine/index_helper.rb +17 -3
  17. data/pg_engine/app/helpers/pg_engine/route_helper.rb +4 -0
  18. data/pg_engine/app/lib/pg_engine/filtros_builder.rb +7 -9
  19. data/pg_engine/app/models/account.rb +2 -0
  20. data/pg_engine/app/models/concerns/pg_engine/naming.rb +5 -0
  21. data/pg_engine/app/models/pg_engine/base_record.rb +1 -4
  22. data/pg_engine/app/models/user.rb +1 -1
  23. data/pg_engine/app/policies/account_policy.rb +9 -9
  24. data/pg_engine/app/policies/pg_engine/base_policy.rb +15 -3
  25. data/pg_engine/app/views/admin/accounts/show.html.slim +0 -7
  26. data/pg_engine/app/views/admin/email_logs/show.html.slim +0 -7
  27. data/pg_engine/app/views/admin/emails/show.html.slim +0 -7
  28. data/pg_engine/app/views/admin/simple_user_notifiers/show.html.slim +0 -5
  29. data/pg_engine/app/views/admin/user_accounts/show.html.slim +0 -7
  30. data/pg_engine/app/views/admin/users/show.html.slim +1 -5
  31. data/pg_engine/app/views/pg_engine/base/index.html.slim +39 -14
  32. data/pg_engine/config/locales/es.rb +42 -0
  33. data/pg_engine/config/locales/es.yml +1 -6
  34. data/pg_engine/lib/pg_engine/route_helpers.rb +5 -0
  35. data/pg_engine/spec/controllers/admin/accounts_controller_spec.rb +4 -9
  36. data/pg_engine/spec/controllers/admin/email_logs_controller_spec.rb +4 -4
  37. data/pg_engine/spec/controllers/admin/emails_controller_spec.rb +4 -4
  38. data/pg_engine/spec/controllers/admin/user_accounts_controller_spec.rb +4 -4
  39. data/pg_engine/spec/controllers/admin/users_controller_spec.rb +4 -9
  40. data/pg_engine/spec/requests/resource_spec.rb +84 -0
  41. data/pg_engine/spec/requests/users/switcher_spec.rb +2 -2
  42. data/pg_engine/spec/system/breadcrumbs_spec.rb +9 -21
  43. data/pg_engine/spec/system/destroy_spec.rb +3 -3
  44. data/pg_engine/spec/system/login_spec.rb +1 -1
  45. data/pg_engine/spec/system/modal_windows_spec.rb +5 -5
  46. data/pg_engine/spec/system/tenants_spec.rb +2 -2
  47. data/pg_layout/app/javascript/application.js +4 -2
  48. data/pg_layout/app/javascript/controllers/embedded_frame_controller.js +4 -0
  49. data/pg_layout/app/views/layouts/pg_layout/base.html.slim +1 -0
  50. data/pg_layout/app/views/layouts/pg_layout/show.html.slim +10 -0
  51. data/pg_rails/lib/version.rb +1 -1
  52. data/pg_scaffold/lib/generators/pg_rspec/scaffold/templates/controller_spec.rb +4 -11
  53. data/pg_scaffold/lib/generators/pg_scaffold/templates/controller.rb +1 -5
  54. data/pg_scaffold/lib/generators/pg_slim/templates/show.html.slim +0 -7
  55. metadata +5 -3
  56. data/pg_engine/app/components/actions_component.rb +0 -14
@@ -8,34 +8,27 @@ require 'rails_helper'
8
8
  #
9
9
  # DRIVER=selenium rspec
10
10
  describe 'Breadcrumbs' do
11
- subject(:visitar) do
12
- visit path
13
- end
14
-
15
- let(:path) { "/a/cosas/#{cosa.id}" }
16
11
  let(:cosa) { create :cosa }
17
- let(:logged_user) { create :user, :developer }
18
12
 
19
13
  before do
20
- login_as logged_user
14
+ login_as create :user, :developer
15
+
16
+ # just to sort a circumvent a capybara issue
17
+ create_list :cosa, 1, categoria_de_cosa: cosa.categoria_de_cosa
21
18
  end
22
19
 
23
20
  describe 'some case' do
24
21
  it do
25
- visitar
22
+ visit "/a/cosas/#{cosa.id}"
26
23
 
27
24
  expect(page).to have_css('nav ol.breadcrumb li').exactly(3)
28
25
  expect(page).to have_css('nav ol.breadcrumb li a').exactly(1)
29
26
  end
30
27
 
31
28
  context 'cuando es con nested' do
32
- let(:path) do
33
- hashid = cosa.categoria_de_cosa.hashid
34
- "/a/categoria_de_cosas/#{hashid}/cosas/#{cosa.id}"
35
- end
36
-
37
29
  it do
38
- visitar
30
+ hashid = cosa.categoria_de_cosa.hashid
31
+ visit "/a/categoria_de_cosas/#{hashid}/cosas/#{cosa.id}"
39
32
 
40
33
  expect(page).to have_css('nav ol.breadcrumb li').exactly(4)
41
34
  expect(page).to have_css('nav ol.breadcrumb li a').exactly(1)
@@ -43,14 +36,9 @@ describe 'Breadcrumbs' do
43
36
  end
44
37
 
45
38
  context 'cuando es con nested y modal' do
46
- let(:path) do
47
- hashid = cosa.categoria_de_cosa.hashid
48
- "/a/categoria_de_cosas/#{hashid}"
49
- end
50
-
51
39
  it do
52
- visitar
53
- find('td span[title=Ver] a').click
40
+ visit "/a/categoria_de_cosas/#{cosa.categoria_de_cosa.hashid}"
41
+ find_all('td span[title=Ver] a').first.click
54
42
 
55
43
  expect(page).to have_css('.modal nav ol.breadcrumb li').exactly(4)
56
44
  expect(page).to have_no_css('.modal nav ol.breadcrumb li a')
@@ -8,7 +8,7 @@ describe 'Sign in' do
8
8
  shared_examples 'destroy from index' do
9
9
  subject do
10
10
  accept_confirm do
11
- find("##{dom_id(cosa)} span[title=Eliminar] a").click
11
+ find("##{dom_id(cosa)} span[title=\"Eliminar definitivamente\"] a").click
12
12
  end
13
13
  sleep 1
14
14
  end
@@ -30,7 +30,7 @@ describe 'Sign in' do
30
30
  shared_examples 'destroy from show' do
31
31
  subject do
32
32
  accept_confirm do
33
- find('.btn-toolbar span[title=Eliminar] a').click
33
+ find('.btn-toolbar span[title="Eliminar definitivamente"] a').click
34
34
  end
35
35
  sleep 1
36
36
  end
@@ -46,7 +46,7 @@ describe 'Sign in' do
46
46
  it 'muestra el flash' do
47
47
  subject
48
48
  expect(page).to have_current_path('/a/cosas')
49
- expect(page).to have_text('Coso borrado')
49
+ expect(page).to have_text('Se eliminó el coso')
50
50
  end
51
51
  end
52
52
 
@@ -16,7 +16,7 @@ describe 'Sign in' do
16
16
 
17
17
  it do
18
18
  subject
19
- expect(page).to have_text :all, 'No hay categorías de cosas que mostrar'
19
+ expect(page).to have_text :all, 'No hay ninguna categoría de cosa que mostrar'
20
20
  end
21
21
  end
22
22
 
@@ -66,23 +66,23 @@ describe 'Modal windows' do
66
66
  visit '/a/cosas'
67
67
  find('span[title=Ver] a').click
68
68
  accept_confirm do
69
- find('.modal span[title=Eliminar] a').click
69
+ find('.modal span[title="Eliminar definitivamente"] a').click
70
70
  end
71
- expect(page).to have_text 'No hay cosos que mostrar'
71
+ expect(page).to have_text 'No hay ningún coso que mostrar'
72
72
  end
73
73
 
74
74
  context 'cuando da error' do
75
75
  before do
76
- allow_any_instance_of(Cosa).to receive(:discard).and_return(false)
76
+ allow_any_instance_of(Cosa).to receive(:destroy).and_return(false)
77
77
  end
78
78
 
79
79
  it do
80
80
  visit '/a/cosas'
81
81
  find('span[title=Ver] a').click
82
82
  accept_confirm do
83
- find('.modal span[title=Eliminar] a').click
83
+ find('.modal span[title="Eliminar definitivamente"] a').click
84
84
  end
85
- expect(page).to have_text 'No se pudo eliminar el registro'
85
+ expect(page).to have_text 'Hubo un error al intentar eliminar el coso'
86
86
  end
87
87
  end
88
88
  end
@@ -22,7 +22,7 @@ describe 'Tenants' do
22
22
  it do
23
23
  visitar
24
24
 
25
- expect(page).to have_text 'No hay cosos que mostrar'
25
+ expect(page).to have_text 'No hay ningún coso que mostrar'
26
26
  end
27
27
 
28
28
  context 'when belongs to multiple accounts' do
@@ -45,7 +45,7 @@ describe 'Tenants' do
45
45
 
46
46
  click_on other_account.to_s
47
47
  visit '/u/categoria_de_cosas'
48
- expect(page).to have_text 'No hay categorías de cosas que mostrar'
48
+ expect(page).to have_text 'No hay ninguna categoría de cosa que mostrar'
49
49
  end
50
50
 
51
51
  it 'shows the profile form' do
@@ -65,10 +65,12 @@ document.addEventListener('pg:record-destroyed', (ev) => {
65
65
 
66
66
  document.addEventListener('turbo:before-fetch-request', (ev) => {
67
67
  // Si es POST, quito la opción text/vnd.turbo-stream.html para que
68
- // on successful redirect no haya posibilidad de que se abra un modal
68
+ // on successful redirect no haya posibilidad de que se abra un modal.
69
+ // Si el link o form tiene data-turbo-stream entonces no se pisa el header.
69
70
  // FIXME: buscar una manera mejor de hacerlo porque es para problemas
70
71
  // quizás, con la movida de abrir modales desde JS
71
- if (ev.detail.fetchOptions.method.toLowerCase() === 'post') {
72
+ if (ev.detail.fetchOptions.method.toLowerCase() === 'post' &&
73
+ ev.target.dataset.turboStream === undefined) {
72
74
  ev.detail.fetchOptions.headers.Accept = 'text/html, application/xhtml+xml'
73
75
  }
74
76
 
@@ -6,5 +6,9 @@ export default class extends Controller {
6
6
  this.element.querySelector('turbo-frame').reload()
7
7
  ev.stopPropagation()
8
8
  })
9
+ this.element.addEventListener('pg:record-updated', (ev) => {
10
+ this.element.querySelector('turbo-frame').reload()
11
+ ev.stopPropagation()
12
+ })
9
13
  }
10
14
  }
@@ -74,6 +74,7 @@ html
74
74
 
75
75
  .btn-toolbar.gap-1
76
76
  = yield(:actions)
77
+ = yield(:extra_actions)
77
78
  - if using_modal?
78
79
  .px-2.d-flex.align-items-center.border.border-start-0
79
80
  = button_tag type: :button, class: 'btn btn-sm btn-link',
@@ -0,0 +1,10 @@
1
+ - content_for(:actions) do
2
+ = instancia_modelo.edit_link
3
+ = instancia_modelo.archive_link
4
+ = instancia_modelo.restore_link
5
+ = instancia_modelo.destroy_link_redirect
6
+
7
+ - content_for :content do
8
+ = yield
9
+
10
+ = render template: 'layouts/pg_layout/base'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PgRails
4
- VERSION = '7.6.17'
4
+ VERSION = '7.6.18'
5
5
  end
@@ -243,11 +243,11 @@ RSpec.describe <%= controller_class_name %>Controller do
243
243
  describe 'DELETE #destroy' do
244
244
  subject do
245
245
  request.headers['Accept'] = 'text/vnd.turbo-stream.html,text/html'
246
- delete :destroy, params: { id: <%= file_name %>.to_param, redirect_to: redirect_url }
246
+ delete :destroy, params: { id: <%= file_name %>.to_param, land_on: }
247
247
  end
248
248
 
249
249
  let!(:<%= nombre_tabla_completo_singular %>) { create :<%= nombre_tabla_completo_singular %> }
250
- let(:redirect_url) { nil }
250
+ let(:land_on) { nil }
251
251
 
252
252
  it 'destroys the requested <%= nombre_tabla_completo_singular %>' do
253
253
  <% if options[:discard] -%>
@@ -259,20 +259,13 @@ RSpec.describe <%= controller_class_name %>Controller do
259
259
  <% end -%>
260
260
  end
261
261
 
262
- <% if options[:discard] -%>
263
- it 'setea el discarded_at' do
264
- subject
265
- expect(<%= nombre_tabla_completo_singular %>.reload.discarded_at).to be_present
266
- end
267
-
268
- <% end -%>
269
262
  it 'envía el pg-event' do
270
263
  subject
271
264
  expect(response.body).to include('<pg-event data-event-name="pg:record-destroyed"')
272
265
  end
273
266
 
274
- context 'si hay redirect_to' do
275
- let(:redirect_url) { <%= index_helper %>_url }
267
+ context 'si hay land_on' do
268
+ let(:land_on) { :index }
276
269
 
277
270
  it 'redirects to the <%= table_name %> list' do
278
271
  subject
@@ -9,13 +9,9 @@ require_dependency "<%= namespaced_path %>/application_controller"
9
9
  <% module_namespacing do -%>
10
10
  <% module_namespacing_2 do -%>
11
11
  class <%= controller_class_name.split('::').last %>Controller < <%= parent_controller %>
12
- before_action { @clase_modelo = <%= class_name.split('::').last %> }
13
-
14
12
  include PgEngine::Resource
15
13
 
16
- before_action(only: :index) { authorize <%= class_name.split('::').last %> }
17
-
18
- before_action :set_instancia_modelo, only: %i[new create show edit update destroy]
14
+ self.clase_modelo = <%= class_name.split('::').last %>
19
15
 
20
16
  private
21
17
 
@@ -1,10 +1,3 @@
1
- - content_for :title do
2
- = @<%= singular_name %>.to_s
3
- - content_for :actions do
4
- = @<%= singular_name %>.destroy_link_redirect
5
- .ms-1
6
- = @<%= singular_name %>.edit_link
7
-
8
1
  table.table.table-borderless.table-sm.w-auto.mb-0
9
2
  - atributos_para_mostrar.each do |att|
10
3
  tr
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.17
4
+ version: 7.6.18
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-14 00:00:00.000000000 Z
11
+ date: 2024-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -663,7 +663,6 @@ files:
663
663
  - pg_engine/app/assets/stylesheets/active_admin.scss
664
664
  - pg_engine/app/assets/stylesheets/notifications.scss
665
665
  - pg_engine/app/assets/stylesheets/pg_rails_b5.scss
666
- - pg_engine/app/components/actions_component.rb
667
666
  - pg_engine/app/components/alert_component.html.slim
668
667
  - pg_engine/app/components/alert_component.rb
669
668
  - pg_engine/app/components/asociable_modal_component.html.slim
@@ -816,6 +815,7 @@ files:
816
815
  - pg_engine/config/initializers/view_component.rb
817
816
  - pg_engine/config/initializers/zeitwerk.rb
818
817
  - pg_engine/config/locales/devise.en.yml
818
+ - pg_engine/config/locales/es.rb
819
819
  - pg_engine/config/locales/es.yml
820
820
  - pg_engine/config/routes.rb
821
821
  - pg_engine/config/simple_form/simple_form.rb
@@ -904,6 +904,7 @@ files:
904
904
  - pg_engine/spec/requests/current_attributes_spec.rb
905
905
  - pg_engine/spec/requests/devise_spec.rb
906
906
  - pg_engine/spec/requests/public/webhooks_spec.rb
907
+ - pg_engine/spec/requests/resource_spec.rb
907
908
  - pg_engine/spec/requests/users/accounts_spec.rb
908
909
  - pg_engine/spec/requests/users/base_controller_spec.rb
909
910
  - pg_engine/spec/requests/users/dashboard_spec.rb
@@ -987,6 +988,7 @@ files:
987
988
  - pg_layout/app/views/layouts/pg_layout/devise.html.slim
988
989
  - pg_layout/app/views/layouts/pg_layout/mailer.html.slim
989
990
  - pg_layout/app/views/layouts/pg_layout/mailer.text.erb
991
+ - pg_layout/app/views/layouts/pg_layout/show.html.slim
990
992
  - pg_layout/app/views/pg_layout/_flash.html.slim
991
993
  - pg_layout/app/views/pg_layout/_navbar.html.erb
992
994
  - pg_layout/app/views/pg_layout/_sidebar.html.erb
@@ -1,14 +0,0 @@
1
- class ActionsComponent < ViewComponent::Base
2
- def initialize(record)
3
- @record = record.decorate
4
-
5
- super
6
- end
7
-
8
- erb_template <<~ERB
9
- <div>
10
- <%= @record.edit_link %>
11
- <%= @record.destroy_link_redirect %>
12
- </div>
13
- ERB
14
- end